0


【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法

前言

   📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。

    🚀**对毕设有任何疑问都可以问学长哦!**

     选题指导:

    最新最全计算机专业毕设选题精选推荐汇总

    大家好,这里是海浪学长毕设专题,本次分享的课题是

    🎯基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统

设计思路

一、课题背景与意义

   在体能测试中,人们需要肉眼计算健身动作的数量,并依靠主观感受判断健身动作是否标准。此外,如果没有适当健身知识去盲目健身,可能会导致肌肉拉伤,从而对居民的身心健康产生不利影响。为解决这些问题,可以将健身体育行业与智能技术融合在一起,帮助完善健身动作的相关工作,例如识别健身动作的名称、评估健身动作的标准以及计算健身动作的数量等。

二、算法理论原理

2.1 YOLOv5s模型及改进

   YOLOv5网络模型有5种不同的架构,分别是n、s、m、l、x,不同架构对应的子模块采用不同模型深度和卷积层通道数,主要的区别在于yaml配置文件中的两个参数,分别为depth_multiple和width_multiple。

【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法

   YOLOv5s网络模型的输入端主要有以下步骤,包括Mosaic图像增强、图像自适应缩放以及自适应锚框计算。YOLOv5s架构作为网络模型,因为网络模型深度最小且特征图宽度合适。

【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法

   Mosaic图像增强继承自YOLOv4网络模型,基于CutMix方式改进。Mosaic图像增强在一个Batch数据集中随机抽取4张图像数据,并在每张图像数据中随机裁剪以及缩放,最后拼接成一张图像。这种图像增强的方式不仅可以丰富数据集的多样性,增加小目标数据集的数量,而且归一化计算若干图像数据可以减少内存存储的需求。

【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法

   图像自适应缩放会根据数据集中不同的图像尺寸,采用一种方法进行缩放,从而适应网络模型。在传统方式是在网络模型的输入端直接缩放尺寸,但这会导致图像失真。为了提高网络模型的推理速度,YOLOv5s网络模型在输入端中采用图像自适应缩放,这种方法通过长宽比的最短比例进行缩放,并按照固定的推理要求在最短边中填充黑色像素,调整到网络模型所需要的图像尺寸。填充过多的黑色像素会导致信息冗余,影响相关特征的识别,因此,图像自适应缩放解决了这种问题,从而加快推理速度。

【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法

   传统的锚框设定方式根据数据集来指定长宽矮胖,但这种方法可能会导致特征信息偏离锚框,从而使得网络模型的训练不够稳定。为了解决这个问题,YOLOv5s网络模型使用欧氏距离对图像特征进行聚类,得到相应特征信息的锚框值,然后采用超参数的遗传算法进行强化,从而迭代出更好的锚框值。

【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法

   YOLOv5s网络模型中的Backbone层由Focus结构、CSP结构以及SPPF结构构成,主要对输入端的数据特征进行提取。Focus结构放置在网络模型的第一层,用于将图像数据进行切片操作,以此降低图片数据的宽度和高度,并将切片后的信息特征补充在通道空间中,待通道空间扩充4倍后,再将其拼接在一起形成一张图片数据,最终获得的结果是对应位置进行卷积。

【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法

   注意力机制的引入,源于人类处理图像数据的时注重色彩鲜明的全局特征,从而忽视局部特征。然而,学习每一个局部特征必然耗费时间和精力。为避免该问题出现,引入注意力机制可以强化局部特征与全局特征之间的联系。尤其卷积神经网络融合注意力机制,可以加速计算数据特征,从而简化模型。通过输入端获取图像特征,经过通道注意力模块进行加权,加权后的结果再次经过空间注意力模块进行加权。

【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法

   解耦头模块不仅可以加快网络模型的训练速度,还可以加速其收敛速度。解耦头模块则将其定位和分类拆分成两个任务,定位任务偏向目标检测的纹理细节,分类任务偏向目标检测的边缘信息。解耦头模块的改进思路来源于YOLOX中Decoupled Head模块[43,53,54],将该模块用来替换Head模块。通过采用两个不同的解耦头进行输出,以此加快收敛速度。将其中一个特征尺度依次经过2个3×3的卷积核进行卷积,最后根据锚框值来检测对应预测框。

【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法

    def forward(self, x):
        loc = self.localization_conv(x)
        cls = self.classification_conv(x)
        return loc, cls

# 使用解耦头模块替换原始的头部模块
in_channels = 256  
num_anchors = 9  
num_classes = 80 
decoupled_head = DecoupledHead(in_channels, num_anchors, num_classes)
   解耦头模块的参数配置的第一种方式在配置中有一个额外的参数值为True,并且在代码中设置为Decoupled模块;第二种方式将其直接设置为Decoupled模块。其中,From的[17,20,23]表示从第17层、第20层以及第23层的拼接,Arguments参数包括类别个数、三个锚框的检测值以及输出层的缩放比例。

【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法

    HardSwish激活函数在性能上比Swish激活函数优异,这主要有两方面,首先它减少近似Sigmoid数值引起的精度损失,通过采用HardSigmoid函数来拟合非线性函数,从而降低计算量。其次,它减少指数函数的复杂计算,从而提高运行速度。通过选用ReLU6函数来逼近Swish函数,以保持原有的平滑。在软件和硬件方面上,ReLU6函数都比较兼容。值得注意的是,ReLU6函数的值域是ReLU函数值域的6倍,这可以防止网络模型的输出值过大。

【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法

   设置Swish函数中的β参数等于1时,Sigmoid函数比HardSigmoid函数更平滑。然而,Swish函数与HardSwish函数的平滑几乎一致,两者的曲线几乎重合。因此,在模型中,最终选用Hard-Swish激活函数作为改进模块。

【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法

   SPPF(Spatial Pyramid Pooling, SPP-Fast)结构在SPP结构基础上进行改进,它将其最大池化层通过串联来分块计算,从而加快运算速度和提高精确度,这表明SPPF结构比SPP结构要好。SPP内部结构中的卷积核CBL分别由卷积、标准归一化以及Leaky relu激活函数组成。而SPPF结构被应用在YOLOv5s项目代码6.0之后的版本,其内部结构中的卷积核CBS由卷积、标准归一化以及SiLU激活函数组成。

【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法

   结合YOLOv7网络模型中的SPPCSPC结构,通过引入SPP结构来适应不同的输入尺寸,从而增大感受视野,以便检测数据集中的不同目标。类似于YOLOv5s模型中的CSP结构,SPPCSPC结构将输入特征图分为两个分支进行操作,一个分支以常规卷积的形式,另一个分支以SPP或者SPPF结构的形式,最后将两个分支合并在一起,这种结构不仅可以缩小模型的计算量,还可以提高模型精确度。

【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法

   为了将SPPCSPC结构进行优化,将SPPCSPC结构中的SPP结构更改为SPPF结构,这来源于SPPF结构有更好的精确度和速度,对应的CBL模块也更改为CBS模块。

【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法

2.2 健身动作技术算法

   目标检测的任务是从图像或者视频中检测和定位物体,将检测到的人体信息通过姿态估计模型识别出人体骨骼关键点和姿态信息,根据不同健身动作观察骨骼关键点的变化,利用计数算法为其计数。

【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法

   通过POSENET姿态估计确定人体骨骼关键点,再根据不同健身动作确定其计数算法。

   人体骨骼关键点指的是人体的头、肩、膝盖和踝等特定位置,不同数据集训练出的关键点个数会有所不同。数据集包含16个人体骨骼关键点,适用相对比较简单的静态数据集;COCO数据集包含17个人体骨骼关键点,比MPII数据集多一个鼻子关键点,适用在不同的场景和环境;而MUCO数据集包含21个人体骨骼关键点,比COCO数据集少一个鼻子关键点,但在躯干部位多了手指和脚趾等关键点,适用于不同的场景和环境。为了确保拍摄环境的多样化以及训练数据的多样性,最终选择MUCO数据集进行训练,以涵盖更多场景和姿态角度。

【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法

   POSENET模型主要由三个模块组成,分别是DetectNet、RootNet和PoseNet。通过DetectNet模块检测人体信息,并将各个信息进行裁剪,再经过RootNet模块预测根节点,最后经过PoseNet模块预测相对根节点。其中,RootNet模块输出的关键点位为(Rx, Ry, RZ),(Rx, Ry)表示绝对根节点的像素坐标,RZ是绝对深度值;而PoseNet模块输出的关键点位为(jx, jy, reljZ),(jx, jy)表示裁剪后的图像像素坐标,reljZ是相对深度值。

【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法

   RootNet模块的输出为绝对根节点像素坐标(Rx, Ry, RZ),其中绝对深度值RZ是通过距离度量k来预测的。距离度量k值通过imgxrealxxl, imgyrealxyl,以及imgxrealxxl, imgyrealxyl两者相乘,对应的imgxrealxxl, imgyrealxyl,以及imgxrealxxl, imgyrealxyl是相机与目标之间的深度距离d。

【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法

   RootNet模块由Backbone层、2D图像估计以及图像深度估计组成。Backbone层用于提取全局特征,2D part用于提取Rx和Ry节点,它将Backbone层提取的特征图进行上采样,上采样模块由3个连续的反卷积层、批量归一化和ReLU激活函数构成,再经过1×1的卷积来生成根结点的2D热图,使用Softargmax对2D热图中提取Rx和Ry节点。Depth part用于提取RZ节点,将Backbone层提取的特征图经过全局平均池化处理,再经过1×1的卷积输出标量值γ,通过与k值相乘得到最终的绝对深度值RZ。

【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法

   不同的健身动作有不同的健身计数算法,区别在于人体骨骼关键点的联动变化,通过观察某个关键点的角度变化。假设给定三个骨骼关键点的坐标分别为(1, yx A),(2, yx B)和(3, yx C),求出各个角对应的边长分别为a、b和c,再通过反余弦公式判断∠B是否在可选择的角度范围内。

【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法

   俯卧撑计数算法:定义俯卧撑健身动作计数的规则,需要严格遵守俯卧撑健身动作的要求,即保证上躯干以及下躯干均呈现直线状态,两手臂支撑地面时,两手肘角度在特定范围内且手臂状态发生改变时才进行计数。

【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法

   高位下拉计数算法:定义高位下拉健身动作计数的规则,需要严格遵守高位下拉健身动作的要求,即保证上躯干呈现直线状态,下拉过程中两手肘的特定角度范围内且手臂状态发生改变时才进行计数。

【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法

   健身运动的视频作为输入源,使用不同的计数算法来统计各种健身动作的数量。

【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法

   图中只截取视频的部分帧,左上角的Count为实时计数,红色框表示目标检测的候选框,该候选框中的精度范围在87%到93%之间,在实际应用具有很好的前景。为了验证计数算法的可行性,通过实地拍摄以及爬虫爬取健身动作的视频片段,共收集到30个俯卧撑以及30个高位下拉的健身动作视频片段。具体计数的准确率高位下拉的准确率为93.3%,两个健身动作的总准确率为96.7%。因此,将计数算法中的误差角度范围调整在5°之内。

【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法

三、健身动作检测的实现

3.1 数据处理

   为了保证数据的真实性,学长采用实地拍摄和网络爬虫相结合的方式来收集健身图像数据,主要包括俯卧撑、单杠、卧推等健身动作。由于实地拍摄的图像数量不足,因此还需要网络爬虫来收集更多图像数据。同时,还可以通过健身视频中截取不连续帧的方式,也能进一步丰富健身动作的图像数据。对于YOLOv5s网络模型而言,输入端不需要对图像分辨率进行过多限制,因此不必过多关注图像大小。

【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法

# 逐个递增命名并复制图像文件和对应的标签文件
counter = 1
for image_file in image_files:
    # 生成新的文件名
    new_filename = f"{counter:06}.jpg"  # 生成6位数字命名

    # 复制图像文件
    new_image_path = os.path.join(output_dir, new_filename)
    shutil.copy(image_file, new_image_path)

    # 对应的标签文件名(根据实际情况进行修改)
    label_file = os.path.join(label_dir, os.path.splitext(os.path.basename(image_file))[0] + ".txt")

    # 复制标签文件
    new_label_path = os.path.join(output_dir, f"{counter:06}.txt")
    shutil.copy(label_file, new_label_path)

    # 增加计数器
    counter += 1

3.2 实验环境搭建

   YOLOv5s网络模型的训练硬件使用Ubuntu 20.04.4版本的操作系统,内部GPU显卡为Quadro RTX 4000,显存大小为16G。为了运行YOLOv5s所需要的软件包,通过配置Anconda虚拟环境,并安装下载Pytorch 1.7版本、CUDA 10.1版本、torchvison 0.8.14等版本以及编程语言为Python3.7等安装包。

   在模型训练前,需配置好环境并调整好参数,这些参数包括模型参数和超参数这两部分。
  • (1)模型参数包括卷积核以及池化层的层数,这类参数已经固定,但后期可以针对目标任务进行优化。
  • (2)超参数包括学习率lr、epoch以及损失函数等。其中,超参数Batchsize的大小应该与GPU最大化相互匹配,此处设置为32;Momentum主要用于计算梯度指数加权平均数,此处设置为0.937;Epoch应根据损失函数以及mAP精确度的收敛情况,此处设置为300;Mosaic图像增强可以使用4load_mosaic或者9load_mosaic来提高精度和防止过拟合,此处设置为1,代表将图像增强模式开启。

【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法

部分代码如下:

# 训练循环
for epoch in range(num_epochs):
    for batch_data, batch_labels in train_loader:
        # 正向传播和反向传播
        outputs = model(batch_data)
        loss = calculate_loss(outputs, batch_labels)
        
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

    # 在每个epoch结束后进行mAP精确度的评估和其他操作

    # 如果开启了Mosaic图像增强,进行相应的处理
    if mosaic_enabled:
        if (epoch + 1) % 10 == 0:  # 每隔一定的epoch进行Mosaic图像增强
            train_dataset.enable_mosaic_augmentation()
        else:
            train_dataset.disable_mosaic_augmentation()

3.2 实验及结果分析

   在目标检测中,针对健身动作的数据集,评价网络模型的好坏通过分类精度、定位精度以及运行精度来评价。常用的分类精度以及运行速度评估指标分别如下:精确度、召回率、平均精度AP、平均精度均值mAP、参数量、运算力GFLOPs。其定位精度通过边界框的正确度量,以评价IOU为基准,表示目标预测框与真实预测框的交并比。

【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法

   其中A与B分别表示正样本与负样本,TN(True Negative)、FN(False Negative)、TP(True Positive)、FP(False Positive),将其制作成分类混淆矩阵,如果模型预测值与真实值一致,结果为True,不一致则为False。

【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法

   SPPCSPC结构来源于YOLOv7网络模型,它融合CSP和SPP两种思路。该结构应用到YOLOv5网络模型时,其中SPP结构被替换为SPPF结构,并参照SPP与SPPF的改进思路,将CBL模块替换为CBS模块,改进后的结构称为SPPFCSPC,这有利于减少数据量来简化计算。

【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法

   在验证集中,三个模型的损失函数都趋近稳定收敛,但YOLOv5s-SPPCSPC和YOLOv5s-SPPFCSPC模型的损失都要比YOLOv5s-SPPF原型低一些。

【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法

   YOLOv5s-SPPFCSPC模型的各项精度指标比其余两者高。在大图中,YOLOv5s-SPPF与YOLOv5s-SPPCSPC各项精度几乎重合,但在放大的小图中,YOLOv5s-SPPCSPC在各项精度中稍微高于YOLOv5s-SPPF原型模型,并且Precision和Recall精度中有部分曲线比较震荡。

【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法

部分代码如下:

pushup_threshold = 0.5
pushup_counter = 0

def detect_pushups(image_path):
    global pushup_counter

    # 打开图像
    image = Image.open(image_path)

    # 使用YOLOv5检测俯卧撑动作
    results = model(image)

    # 处理检测结果
    for detection in results.xyxy[0]:
        if detection[5] == 0:  # 类别索引为0表示俯卧撑
            confidence = detection[4].item()
            if confidence >= pushup_threshold:
                pushup_counter += 1

    # 返回最终的俯卧撑动作计数结果
    return pushup_counter

# 调用检测函数
image_path = 'path/to/image.jpg'
pushup_count = detect_pushups(image_path)
print("俯卧撑计数:", pushup_count)

创作不易,欢迎点赞、关注、收藏。

毕设帮助,疑难解答,欢迎打扰!

最后


本文转载自: https://blog.csdn.net/qq_37340229/article/details/135118595
版权归原作者 HaiLang_IT 所有, 如有侵权,请联系我们删除。

“【毕业设计选题】基于深度学习的健身动作(俯卧撑 深蹲 仰卧起坐)识别计数系统 YOLO 人工智能 算法”的评论:

还没有评论