竞赛 深度学习人体跌倒检测 -yolo 机器视觉 opencv python
0 前言
🔥 优质竞赛项目系列,今天要分享的是
🚩 **基于深度学习的人体跌倒检测算法研究与实现 **
该项目较为新颖,适合作为竞赛课题方向,学长非常推荐!
🥇学长这里给一个题目综合评分(每项满分5分)
- 难度系数:3分
- 工作量:3分
- 创新点:5分
🧿 更多资料, 项目分享:
https://gitee.com/dancheng-senior/postgraduate
1.前言
人体跌倒是人们日常生活中常见姿态之一,且跌倒的发生具有随机、难以预测的特点;其次,跌倒会给人体造成不同程度的伤害,很多人跌倒后由于得不到及时的救助而加重受到的伤害,甚至出现残疾或者死亡的情况;同时随着人口老龄化问题的日渐加剧,跌倒已经成为了我国65周岁以上老人受伤致死的主要原因。因此,跌倒事件严重影响着人们的身体健康,跌倒检测具有十分重要的研究意义。
2.实现效果
跌倒效果
站立、蹲坐效果
3.相关技术原理
3.1卷积神经网络
简介
CNN 是目前机器用来识别物体的图像处理器。CNN
已成为当今自动驾驶汽车、石油勘探和聚变能研究领域的眼睛。在医学成像方面,它们可以帮助更快速发现疾病并挽救生命。得益于 CNN 和递归神经网络
(RNN),各种 AI 驱动型机器都具备了像我们眼睛一样的能力。经过在深度神经网络领域数十年的发展以及在处理海量数据的 GPU
高性能计算方面的长足进步,大部分 AI 应用都已成为可能。
原理
人工神经网络是一个硬件和/或软件系统,模仿神经元在人类大脑中的运转方式。卷积神经网络 (CNN)
通常会在多个全连接或池化的卷积层中应用多层感知器(对视觉输入内容进行分类的算法)的变体。
CNN
的学习方式与人类相同。人类出生时并不知道猫或鸟长什么样。随着我们长大成熟,我们学到了某些形状和颜色对应某些元素,而这些元素共同构成了一种元素。学习了爪子和喙的样子后,我们就能更好地区分猫和鸟。
神经网络的工作原理基本也是这样。通过处理标记图像的训练集,机器能够学习识别元素,即图像中对象的特征。
CNN
是颇受欢迎的深度学习算法类型之一。卷积是将滤波器应用于输入内容的简单过程,会带来以数值形式表示的激活。通过对图像反复应用同一滤波器,会生成名为特征图的激活图。这表示检测到的特征的位置和强度。
卷积是一种线性运算,需要将一组权重与输入相乘,以生成称为滤波器的二维权重数组。如果调整滤波器以检测输入中的特定特征类型,则在整个输入图像中重复使用该滤波器可以发现图像中任意位置的特征。
关键代码
基于tensorflow的代码实现
import tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_datamnist = input_data.read_data_sets('MNIST_data_bak/', one_hot=True)sess = tf.InteractiveSession()# 截断的正太分布噪声,标准差设为0.1def weight_variable(shape):initial = tf.truncated_normal(shape, stddev=0.1)return tf.Variable(initial)def bias_variable(shape):initial = tf.constant(0.1, shape=shape)return tf.Variable(initial)# 卷积层和池化层也是接下来要重复使用的,因此也为它们定义创建函数# tf.nn.conv2d是TensorFlow中的2维卷积函数,参数中x是输入,W是卷积的参数,比如[5, 5, 1, 32]# 前面两个数字代表卷积核的尺寸,第三个数字代表有多少个channel,因为我们只有灰度单色,所以是1,如果是彩色的RGB图片,这里是3# 最后代表核的数量,也就是这个卷积层会提取多少类的特征# Strides代表卷积模板移动的步长,都是1代表会不遗漏地划过图片的每一个点!Padding代表边界的处理方式,这里的SAME代表给# 边界加上Padding让卷积的输出和输入保持同样SAME的尺寸def conv2d(x, W):return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')# tf.nn.max_pool是TensorFlow中的最大池化函数,我们这里使用2*2的最大池化,即将2*2的像素块降为1*1的像素# 最大池化会保留原始像素块中灰度值最高的那一个像素,即保留最显著的特征,因为希望整体上缩小图片尺寸,因此池化层# strides也设为横竖两个方向以2为步长。如果步长还是1,那么我们会得到一个尺寸不变的图片def max_pool_2x2(x):return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')# 因为卷积神经网络会利用到空间结构信息,因此需要将1D的输入向量转为2D的图片结构,即从1*784的形式转为原始的28*28的结构
# 同时因为只有一个颜色通道,故最终尺寸为[-1, 28, 28, 1],前面的-1代表样本数量不固定,最后的1代表颜色通道数量
x = tf.placeholder(tf.float32, [None, 784])
y_ = tf.placeholder(tf.float32, [None, 10])
x_image = tf.reshape(x, [-1, 28, 28, 1])# 定义我的第一个卷积层,我们先使用前面写好的函数进行参数初始化,包括weights和bias,这里的[5, 5, 1, 32]代表卷积
# 核尺寸为5*5,1个颜色通道,32个不同的卷积核,然后使用conv2d函数进行卷积操作,并加上偏置项,接着再使用ReLU激活函数进行
# 非线性处理,最后,使用最大池化函数max_pool_2*2对卷积的输出结果进行池化操作
W_conv1 = weight_variable([5, 5, 1, 32])
b_conv1 = bias_variable([32])
h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
h_pool1 = max_pool_2x2(h_conv1)# 第二层和第一个一样,但是卷积核变成了64
W_conv2 = weight_variable([5, 5, 32, 64])
b_conv2 = bias_variable([64])
h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)
h_pool2 = max_pool_2x2(h_conv2)# 因为前面经历了两次步长为2*2的最大池化,所以边长已经只有1/4了,图片尺寸由28*28变成了7*7
# 而第二个卷积层的卷积核数量为64,其输出的tensor尺寸即为7*7*64
# 我们使用tf.reshape函数对第二个卷积层的输出tensor进行变形,将其转成1D的向量
# 然后连接一个全连接层,隐含节点为1024,并使用ReLU激活函数
W_fc1 = weight_variable([7 * 7 * 64, 1024])
b_fc1 = bias_variable([1024])
h_pool2_flat = tf.reshape(h_pool2, [-1, 7 * 7 * 64])
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)# 防止过拟合,使用Dropout层
keep_prob = tf.placeholder(tf.float32)
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)# 接 Softmax分类
W_fc2 = weight_variable([1024, 10])
b_fc2 = bias_variable([10])
y_conv = tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)# 定义损失函数
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y_conv),reduction_indices=[1]))
train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)correct_prediction = tf.equal(tf.argmax(y_conv, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
3.1YOLOV5简介
基于卷积神经网络(convolutional neural network, CNN)的目标检测模型研究可按检测阶段分为两类,一 类 是 基 于 候 选 框
的 两 阶 段 检 测 , R-CNN 、 Fast R-CNN、Faster R-CNN、Mask R-CNN都是基于
目标候选框的两阶段检测方法;另一类是基于免候选框的单阶段检测,SSD、YOLO系列都是典型的基于回归思想的单阶段检测方法。
YOLOv5 目标检测模型 2020年由Ultralytics发布的YOLOv5在网络轻量化 上贡献明显,检测速度更快也更加易于部署。与之前
版本不同,YOLOv5 实现了网络架构的系列化,分别 是YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、
YOLOv5x。这5种模型的结构相似,通过改变宽度倍 数(Depth multiple)来改变卷积过程中卷积核的数量, 通 过 改 变 深 度 倍 数
(Width multiple) 来 改 变 BottleneckC3(带3个CBS模块的BottleneckCSP结构)中
C3的数量,从而实现不同网络深度和不同网络宽度之 间的组合,达到精度与效率的平衡。YOLOv5各版本性能如图所示:
模型结构图如下:
3.2 YOLOv5s 模型算法流程和原理
YOLOv5s模型主要算法工作流程原理:
(1) 原始图像输入部分加入了图像填充、自适应 锚框计算、Mosaic数据增强来对数据进行处理增加了 检测的辨识度和准确度。
(2) 主干网络中采用Focus结构和CSP1_X (X个残差结构) 结构进行特征提取。在特征生成部分, 使用基于SPP优化后的SPPF结构来完成。
(3) 颈部层应用路径聚合网络[22](path-aggregation network, PANet)和CSP2_X进行特征融合。
(4) 使用GIOU_Loss作为损失函数。
关键代码:
4.数据集处理
获取摔倒数据集准备训练,如果没有准备好的数据集,可自己标注,但过程会相对繁琐
深度学习图像标注软件众多,按照不同分类标准有多中类型,本文使用LabelImg单机标注软件进行标注。LabelImg是基于角点的标注方式产生边界框,对图片进行标注得到xml格式的标注文件,由于边界框对检测精度的影响较大因此采用手动标注,并没有使用自动标注软件。
考虑到有的朋友时间不足,博主提供了标注好的数据集和训练好的模型,需要请联系。
3.1 数据标注简介
通过pip指令即可安装
pip install labelimg
在命令行中输入labelimg即可打开
打开你所需要进行标注的文件夹,点击红色框区域进行标注格式切换,我们需要yolo格式,因此切换到yolo
点击Create RectBo -> 拖拽鼠标框选目标 -> 给上标签 -> 点击ok
3.2 数据保存
点击save,保存txt。
5.模型训练
配置超参数
主要是配置data文件夹下的yaml中的数据集位置和种类:
配置模型
这里主要是配置models目录下的模型yaml文件,主要是进去后修改nc这个参数来进行类别的修改。
目前支持的模型种类如下所示:
训练
如果上面的数据集和两个yaml文件的参数都修改好了的话,就可以开始yolov5的训练了。首先我们找到train.py这个py文件。
然后找到主函数的入口,这里面有模型的主要参数。修改train.py中的weights、cfg、data、epochs、batch_size、imgsz、device、workers等参数
至此,就可以运行train.py函数训练自己的模型了。
训练代码成功执行之后会在命令行中输出下列信息,接下来就是安心等待模型训练结束即可。
6 最后
🧿 更多资料, 项目分享:
https://gitee.com/dancheng-senior/postgraduate
相关文章:

竞赛 深度学习人体跌倒检测 -yolo 机器视觉 opencv python
0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的人体跌倒检测算法研究与实现 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满…...

Springboot创建多数据源
yml文件 spring:datasource:dynamic:# 设置默认的数据源或者数据源组,默认值即为 masterprimary: masterdatasource:# 主库数据源master:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://xxx.xxx.xxx.xxx:3306/test?useUnicodetrue&characterEncodingutf8…...

【Hello Algorithm】滑动窗口内最大值最小值
滑动窗口介绍 滑动窗口是一种我们想象中的数据结构 它是用来解决算法问题的 我们可以想象出一个数组 然后再在这个数组的起始位置想象出两个指针 L 和 R 我们对于这两个指针做出以下规定 L 和 R指针只能往右移动L指针不能走到R指针的右边我们只能看到L指针和R指针中间的数字 …...

HTML,CSS实现鼠标划过头像,头像突出变大(附源码)
话不多说,先上代码 先看原图: 再看 鼠标放上去后的图: 是不是明显感觉到 人物头像突出了一些,而且还增加了阴影部分的效果呢? 直接上代码!!! <!--由于我的 img 标签放的是循环后…...

“爱知道”,你知道吗?
拥抱时代浪潮,加速科技变革。数字经济时代,杭州重点贯彻市委市政府数字经济创新提质“一号发展工程”,加快发展数字经济,推动全市数字经济往高攀升、向新进军、以融提效。基于政府对数字经济新活力的赋能、优化数字社会环节、构建…...

基于SpringBoot+Vue的服装销售系统
基于SpringBootVue的服装销售平台的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringBootMyBatisVue工具:IDEA/Ecilpse、Navicat、Maven 系统展示 主页 我的订单 登录界面 管理员界面 摘要 基于SpringBoot和Vue的服装销售系统…...

针对多分类问题,使用深度学习--Keras进行微调提升性能
前面的文章对二分类问题用Keras进行了Fine-tune,使得模型的准确率进一步提升,此处对于多分类问题,尝试使用Fine-tune来提升性能。 1. 准备数据集 为了演示,本次选用了博文keras系列︱图像多分类训练与利用bottleneck features进行微调(三)中提到的数据集,原始的数据集…...

一、【Photoshop如何根据不同类型图像抠图】
文章目录 前言图形结构1、规则图形2、不规则图形 图形颜色1、轮廓清晰2、颜色分明 前言 当我们有抠图需求的时候,不要一开始就想着我怎么去把它抠出来,首先应该分析图形的特点,然后再去选取合适的工具,这样才可以做到事半功倍&am…...

rust - 理解borrow trait
简介 borrow trait 是处理借用(即其它语言中的引用)的 trait,变量的所有权不会转移.泛型定义如下: pub trait Borrow<Borrowed: ?Sized> {/// Immutably borrows from an owned value.fn borrow(&self) -> &Borrowed; }其中包含一个 borrow(&self)的方…...

review-java-basis
Path环境变量用于记住程序路径,方便在命令行窗口的任意目录启动程序 \n代表换行的意思,/t代表一个tab前进一格 强转可能导致数据的丢失(溢出) 浮点型转换为整型,直接丢掉小数部分,保留整数部分返回 数据类…...

Go 语言访问 Redis 笔记
文章目录 Mac 下载 RedisMac Redix 数据库打开服务端客户端 导包连接数据库操作字符串操作 Hash设置过期时间队列操作连接池并发操作管道化操作事务操作 Mac 下载 Redis Mac安装Redis,原来就是这么简单 Mac Redix 数据库打开 brew services start redis 服务端 …...

【MySQL数据库重点】第二节:MySQL基础知识(基本操作)
目录 一:数据库的操作 1.显示数据库 2.创建数据库 3.使用数据库 4.删除数据库 二:常用数据类型 1.数值类型:整型和浮点型 2.字符串类型 3.日期类型 三:表的操作 1.查看表结构 2.创建表 3.删除表 一:数据库…...

计算机网络--第一次作业
1、比较电路交换、报文交换和分组报文交换优缺点 电路交换 电路交换是以电路连接为目的的交换方式,通信之前要在通信双方之间建立一条被双方独占的物理通道(由通信双方之间的交换设备和链路逐段连接而成)。 优点: ①由于通信线路为…...

网络协议--TCP的成块数据流
20.1 引言 在第15章我们看到TFTP使用了停止等待协议。数据发送方在发送下一个数据块之前需要等待接收对已发送数据的确认。本章我们将介绍TCP所使用的被称为滑动窗口协议的另一种形式的流量控制方法。该协议允许发送方在停止并等待确认前可以连续发送多个分组。由于发送方不必…...

鼎鑫鸿鄴引入“能源互联网+”理念 打造共赢
近年来,随着全球能源消耗的不断增长和环境问题的日益突出,清洁能源转型成为全球共同关注的话题。中国作为全球最大的能源消费国,也在积极推动能源结构的优化和清洁能源的发展。鼎鑫鸿鄴新能源科技有限公司在推动清洁能源转型方面制定了一系列…...

Qt下实现支持多线程的单例模式
Qt下实现支持多线程的单例模式 Chapter1 Qt下实现支持多线程的单例模式($$$)1. 代码介绍2. 代码之路3. 详细分析3.1 什么是单例3.2 如何让类无法实例化3.3 如何调用这个唯一实例3.4 如何支持多线程3.5 如何解决内存泄漏 4. 结束语 Chapter2 Qt 全局单例类Chapter3 Qt实用技巧&a…...

基于Java的宠物商店管理系统设计与实现(源码+lw+部署文档+讲解等)
文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…...

ArcGIS中批量mxd高版本转低版本
我们经常在给别人发ArcGIS的工程文件mxd,结果到别人那发现mxd工程文件打不开,原因是我们的arcgis版本高于别人,此时工程文件又很多,一个个转存成低版本又嫌麻烦,于是我们做了个批量mxd高版本转低版本的小工具ÿ…...

三篇论文:速览GPT在网络安全最新论文中的应用案例
GPT在网络安全领域的应用案例 写在最前面论文1:Chatgpt/CodeX引入会话式 APR 范例利用验证反馈LLM 的长期上下文窗口:更智能的反馈机制、更有效的信息合并策略、更复杂的模型结构、鼓励生成多样性和GPT类似的步骤:Conversational APR 对话式A…...

美术如何创建 skybox 贴图资源?
文章目录 目的PS手绘Panorama To CubemapPS手绘Pano2VRSkybox & Cubemap Tutorial (Maya & Photoshop)Unity 中使用 ReflectionProbe 生成 Cubemap 然后再 PS 调整PS直接手绘 cubemapBlender 导入 Panorama,然后烘焙到 cubemap,再导入unity中使用…...

【Linux 用户,用户组管理】
文章目录 什么是Linux用户和用户组用户(User)用户组(User Group) Linux用户和用户组管理命令1. 创建用户2. 删除用户3. 修改用户信息4. 创建用户组5. 将用户添加到用户组6. 用户和用户组的查询 用户和用户组管理实战 什么是Linux用…...

VS2022 C# 读取 excel 2023年
今天是2023年6月26日,我有一个excel表要读数据,然后放到winform程序来处理,网上的资料太旧,很多用不起来,试了一个可以使用,记录一下: 一、excel文件后缀需要小写。 二、用VS2022建一个winform…...

C# | Chaikin算法 —— 计算折线对应的平滑曲线坐标点
Chaikin算法——计算折线对应的平滑曲线坐标点 本文将介绍一种计算折线对应的平滑曲线坐标点的算法。该算法使用Chaikin曲线平滑处理的方法,通过控制张力因子和迭代次数来调整曲线的平滑程度和精度。通过对原始点集合进行切割和插值操作,得到平滑的曲线坐…...

day44
什么是前端 前端是所有跟用户直接打交道的都可以称之为是前端 比如:pc页面、手机页面、平板页面、汽车显示屏等等显示出来的都是前端内容 什么是后端? 就是一堆代码,用户不能够直接看到,不直接与用户打交道的都是后端 常见的后端…...

python常用操作汇总
python创建二维数组 python创建三行三列的二维数组,下面方法是错误的,因为是浅拷贝: lst1 [0] * 3 lst2 [lst1] * 3 lst2[1][1] 2 print(lst2) # [[0, 2, 0], [0, 2, 0], [0, 2, 0]]正确姿势 lst [[0 for j in range(3)] for i in ran…...

赴日IT培训 日本IT行业为啥吃香?
确实现在有许多小伙伴尝到了赴日IT的甜头,可是去日本从事IT行业真的很简单吗?为什么日本的IT行业这么缺人呢?那今天小编就跟大家聊一聊日本的IT行业。 咱们先来说说日本的IT行业为什么缺人?其实不只是IT行业,可以说日…...

2016年亚太杯APMCM数学建模大赛A题基于光学信息数据的温度及关键元素含量预测求解全过程文档及程序
2016年亚太杯APMCM数学建模大赛 A题 基于光学信息数据的温度及关键元素含量预测 原题再现 光含有能量,在一定条件下可以转化为热。燃烧是一种常见的现象,既能发光又能发热。光和热通常是同时存在的,一般来说,光强度越高…...

一文讲明:企业知识库的作用和搭建方法
在现代商务环境中,企业面临着大量的信息和知识流动。这些信息和知识散落在各个部门、团队甚至个人之间,难以进行有效的整合和利用。而企业知识库的出现解决了这一问题。它提供了一个统一的平台,将分散的信息汇聚到一个集中的数据库中…...

技术的新浪潮:从SOCKS5代理到跨界电商的未来
在当今这个日新月异的技术时代,各种创新技术如雨后春笋般涌现。从SOCKS5代理到跨界电商,再到爬虫技术、出海战略和游戏产业的飞速发展,我们正处于一个技术变革的黄金时代。 SOCKS5代理:安全的网络通道 SOCKS5代理是一种网络协议…...

Android intent的一些小使用
目录: 1. Test5.java2. activity_main5.xml3. Empty.java (这个是用来带参数打开Activity按钮用的)4. activity_empty.xml5. 总结 一些基本的问题就不进行说明了,直接上代码!!! // 最后的隐形intent和带返回值没有解决…...