文章目录
- 1. 项目已完成的部分
- 数据集的构建
- 代码的基本运行和训练
- 增加数据集
- 利用Mosaic数据增强
- 增加yaml文件
- 提高图片的输入shape
- 使用自制数据集替换部分数据
- 添加YOLOv4 Tiny轻量化模型
- 增加注意力机制
- 2. 部分尝试结果
- 使用Mosaic结果较差
- 数据集标注问题
- 优化器选择
- Tiny模型速度提升
- 3. 项目整体框架
- 3.1. 数据集构建
- 3.2. 模型选择
- 3.3. 代码实现
- 4. 实验结果详情
- 训练数据集及结果
- 4. 数据集概况
- 5. 环境配置
- 6. 快速运行代码
基于计算机视觉手势识别控制系统YoLoGesture (利用YOLO实现)
1. 项目已完成的部分
数据集的构建
本项目的数据集构建主要针对手势识别进行了设计和实施。通过手动标注和数据增强等方法,为训练模型提供了丰富的手势数据。
代码的基本运行和训练
代码的实现方面,模型采用YOLOv4进行了初步的训练和测试,取得了一定的效果。之后,通过增加数据集的数量和采用不同的数据增强方法,进一步优化了模型的性能。
增加数据集
在原始的800张数据集的基础上,增加了800张图片,总数据量达到1600张。通过扩充数据集,提升了模型对不同手势的识别能力。
利用Mosaic数据增强
采用了Mosaic数据增强技术,在训练过程中增强了数据的多样性。然而,由于数据集数量不足,Mosaic的效果并不理想,因此在后续的训练中决定不再采用这一技术,除非数据集量足够大。
增加yaml文件
在项目中,增加了yaml配置文件,使得所有的参数配置变得更加灵活,用户只需要修改配置文件中的参数,即可快速调整训练过程中的各种设置。
提高图片的输入shape
为提高模型的精度和泛化能力,将图片输入的尺寸由256x256增加到416x416,能够更好地适应不同大小和复杂度的手势图像。
使用自制数据集替换部分数据
由于数据集标注存在一些错误,部分数据集被替换为自制数据集。尽管替换后的数据集与原始数据集数量相同,但通过更准确的标注和多样化的手势图像,提高了模型的识别效果。
添加YOLOv4 Tiny轻量化模型
在项目中引入了YOLOv4 Tiny轻量化模型。这一模型相较于标准的YOLOv4具有更小的参数量和更快的推理速度,虽然精度有所下降,但在一些对速度要求较高的应用中仍具有较好的表现。
增加注意力机制
为进一步提高识别精度,引入了注意力机制。通过引入SE(Squeeze-and-Excitation)、CBAM(Convolutional Block Attention Module)和ECA(Efficient Channel Attention)三种不同类型的注意力机制,模型的表现得到了显著提升。
2. 部分尝试结果
使用Mosaic结果较差
在训练过程中,使用Mosaic数据增强技术并没有达到预期的效果。实验结果表明,Mosaic增加了数据的多样性,但由于数据集本身存在一定的标注问题,Mosaic的效果并不理想。
数据集标注问题
在实验过程中,发现Gesture v1数据集的标注出现了问题,导致模型训练效果差。为了改善模型的表现,重新修改了数据集标注,并通过更精确的标注提升了模型的准确性。
优化器选择
在实验中,使用了不同的优化器进行训练。通过比较发现,SGD(随机梯度下降)优化器的效果不如Adam优化器,因此在后续的训练中优先采用Adam优化器。
Tiny模型速度提升
使用YOLOv4 Tiny模型时,虽然模型的精度略有下降,但推理速度大大提升,适合在对速度有较高要求的实际应用中使用。
3. 项目整体框架
背景与创新点
项目通过结合计算机视觉中的YOLO目标检测模型和手势识别技术,实现了通过手势控制的应用。创新点主要在于使用YOLOv4模型进行高效的目标检测,并通过深度学习技术优化了手势识别的精度和速度。
代码编写与工程实现
项目使用Python语言编写,采用YOLOv4作为基础模型。代码结构清晰,涵盖了数据预处理、模型训练、测试和评估等环节。同时,通过使用深度学习中的一些小技巧(如Mosaic数据增强、Label Smoothing平滑等)进一步提升了模型的性能。
深度学习算法的学习
深入学习了卷积神经网络(CNN)的基本原理,理解了YOLO算法的架构及其在目标检测中的应用。尤其是在YOLOv4的基础上,结合了SE、CBAM、ECA等注意力机制,进一步优化了模型性能。
数据集设计与预处理
设计了针对手势控制的专用数据集,并使用数据增广技术扩充了数据集。在数据预处理阶段,采用了图像处理技术,如中值滤波和阈值分割等,对图像进行了预处理,提高了数据的质量。
模型训练与性能测试
在训练过程中,对模型的准确性和速度进行了多次测试,并通过控制变量法对不同训练配置进行对比实验。最终,选定了最佳的模型配置,并通过验证集对其精度和速度进行了评估。
项目总结与展望
总结了本项目的研究成果,并提出了未来的改进方向。特别是在无人机手势识别方面,提出了利用更大数据集和更多类别的手势识别任务的设想,以推动该领域的进一步发展。
3.1. 数据集构建
在项目的初期,设计了针对手势控制的专用数据集,并通过Labelimg工具进行标注。数据集包含了多种手势类型,并且通过数据增强技术扩充了数据量,从而提高了模型的泛化能力。
在这里插入图片描述
3.2. 模型选择
在项目初期,选择了YOLOv4模型进行训练。YOLOv4是一种非常高效的目标检测模型,结合了CSPDarknet53主干网络、SPP(空间金字塔池化)和PANet(路径聚合网络)等多个模块,能够在保证精度的同时大幅提高推理速度。
img
3.3. 代码实现
主干特征提取网络:从YOLOv4的CSPDarkNet53升级为CSPDarkNet53,以提升特征提取的效果。
特征金字塔:引入了SPP和PAN两个模块,以提升模型在不同尺度下的检测能力。
训练技巧:使用Mosaic数据增强、Label Smoothing平滑、CIOU损失函数、学习率余弦退火等技巧,提升了训练效果。
激活函数:采用了Mish激活函数,相较于ReLU激活函数,Mish能够更好地处理梯度消失问题。
yaml配置文件:为了提高代码的灵活性,使用yaml文件配置训练的所有超参数。
半自动标注:利用detect.py工具,简化了手势数据集的标注过程,提升了标注效率。
Streamlit部署:通过Streamlit部署了一个在线Demo,方便用户快速体验手势识别的功能。
4. 实验结果详情
训练数据集及结果
| 训练数据集 | 权重文件名称 | 迭代次数 | Batch-size | 图片shape | 平均准确率 | mAP 0.5 | fps |
|---|---|---|---|---|---|---|---|
| Gesture v1 | yolo4_gesture_weights.pth | 150 | 4->8 | 256x256 | 61.65 | 51.66 | |
| Gesture v2 | yolo4tiny_gesture_SE.pth | 100 | 64->32 | 416x416 | 83.6 | 95.18 | 76.08 |
| Gesture v2 | yolo4tiny_gesture_CBAM.pth | 100 | 64->32 | 416x416 | 89.35 | 98.85 | 70.01 |
| Gesture v3 | yolov4_weights_ep150_416.pth | 150 | 64->32 | 416x416 | 95.145 | 98.35 |
4. 数据集概况
数据集包括1600张图片,涵盖8个手势类别:up、down、left、right、front、back、clockwise、anticlockwise。该数据集已经放在Release中,可以下载使用。
5. 环境配置
本项目使用了torch1.8.1和torchvision0.9.1的版本。你可以使用以下命令安装相关依赖:
pipinstall-rrequirements.txt-ihttps://pypi.tuna.tsinghua.edu.cn/simple/6. 快速运行代码
你可以通过以下步骤快速运行项目代码:
cdYoloGesture pipinstall-rrequirements.txt运行训练代码时,利用python train.py命令可以自定义训练的配置,并进行模型训练。
项目结语:该项目结合了YOLOv11目标检测和手势识别技术,为手势控制提供了一个高效的解决方案。通过不断优化数据集和模型架构,提升了手势识别的准确性和实时性,并为未来在无人机、机器人等领域的应用提供了良好的基础。