用YOLOv5模型识别出表情!

本文利用YOLOV5对手势进行训练识别,并识别显示出对应的emoji,如同下图:

本教程所用环境:YOLOV5版本是V3.1。

通过gitclone将源码下载到本地,通过pipinstall-rrequirements.txt安装依赖包(其中官方要求python>=3.8andtorch>=1.6)。

我的环境是:系统环境Ubuntu16.04;cuda版本10.2;cudnn版本7.6.5;torch版本1.6.0;python版本3.8

其中手势数据集已上传至开源数据平台Graviti,包含了完整代码。

2.1数据集的采集以及标注

手势数据采集的代码:

importcv2defmain():total_pics=1000cap=cv2.VideoCapture(0)pic_no=0flag_start_capturing=Falseframes=0whileTrue:ret,frame=cap.read()frame=cv2.flip(frame,1)cv2.imwrite("hand_images/"+str(pic_no)+".jpg",frame)cv2.imshow("Capturinggesture",frame)cv2.waitKey(10)pic_no+=1ifpic_no==total_pics:breakmain()在yolov5目录下创建VOC2012文件夹(名字自己定义的),目录结构就是VOC数据集的,对应如下:

示例:

VOC2012文件夹下内容:

Annotations文件中是xml文件(labelimg标注的):

images为VOC数据集格式中的JPRGImages:

ImageSets文件中Main子文件夹主要存放训练,测试验证集的划分txt。这个划分通过以下脚本代码生成:

2.2生成yolo训练格式labels

把xml标注信息转换成yolo的txt格式。其中yolo的txt标签格式信息:每个图像对应一个txt文件,文件每一行为一个目标信息,包括classx_center,y_center,width,height格式。如下图所示:

创建voc_label.py文件,将训练集,验证集以及测试集生成txt标签,代码如下:

三个txt文件内容:

2.3配置文件

1)数据集的配置

在yolov5目录的data文件夹新建一个Emoji.yaml文件(自己定义)。用来存放训练集验证集的划分文件train.txt和val.txt(其中这两个文件是voc_label.py生成的)。具体内容如下:

2)模型的配置文件

一般训练yolo模型的时候,是可以聚类自己标注的框作为先验框(这样可以保证标注样本最大化的利用)。我们这里就直接采用默认值了。

到这里我们的自定义数据集以及配置文件创建完毕,下面就是训练模型了。

3.1、下载预训练模型

在源码yolov5目录下的weights文件夹下提供了下载smlx模型的脚本--download_weights.sh,执行这个脚本就可以下载这四个模型的预训练模型了。

3.2、训练模型

以上参数解释如下:epochs:指的就是训练过程中整个数据集将被迭代多少次,显卡不行你就调小点。batch-size:一次看完多少张图片才进行权重更新,梯度下降的mini-batch,显卡不行你就调小点。cfg:存储模型结构的配置文件。data:存储训练、测试数据的文件。img-size:输入图片宽高,显卡不行你就……。rect:进行矩形训练。resume:恢复最近保存的模型开始训练。nosave:仅保存最终checkpoint。notest:仅测试最后的epoch。evolve:进化超参数。bucket:gsutilbucket。cache-images:缓存图像以加快训练速度。weights:权重文件路径。name:重命名results.txttoresults_name.txt。device:cudadevice,i.e.0or0,1,2,3orcpu。adam:使用adam优化。multi-scale:多尺度训练,img-size+/-50%。single-cls:单类别的训练集

训练只需要运行训练命令就可以了,如下:

$pythontrain.py--dataEmoji.yaml--cfgyolov5s.yaml--weightsweights/yolov5s.pt--batch-size64--device"0,1,2,3"--epochs200--img-size640其中devicebatch-size等需要根据自己机器进行设置。

4.模型测试

评估模型好坏就是在有标注的测试集或验证集上进行模型效果的评估,在目标检测中最常使用的评估指标为mAP。yolov5文件下的test.py文件中指定了数据集的配置文件和训练结果模型如下:

通过以下命令进行模型测试:

pythontest.py--datadata/Emoji.yaml--weightsruns/train/exp2/weights/best.pt--augment模型测试效果:

测试结果图:

1.安装依赖库

pipinstallonnxcoremltoolsonnx-simplifier2.导出ONNX模型

此时在best.pt同级目录下生成了best.mlmodelbest.onnxbest.torchscript.pt三个文件,我们只需best.onnx,这个文件可以直接用netron打开查看模型结构。

3.用onnx-simplifer简化模型

为什么要简化?

在训练完深度学习的pytorch或者tensorflow模型后,有时候需要把模型转成onnx,但是很多时候,很多节点比如cast节点,Identity这些节点可能都不需要,我们需要进行简化,这样会方便我们把模型转成ncnn或者mnn等这些端侧部署的模型格式或者通过tensorRT进行部署。

完成后就生成了简化版本的模型yolov5-best-sim.onnx。

由上述生成了yolov5-best-sim.onnx这个模型,我们利用ncnn自带的工具onnx2ncnn.exe(这个工具是自己编译生成的,我这里是在windows下编译生成的,可以用linux下的可执行文件)生成yolov5s.paramyolov5s.bin两个文件。

在windows平台下ctrl+rcmd命令行窗口输入:

去掉不支持的网络层,打开转换得到的yolov5s.param文件,前面几行需要删除的是标红部分。(注意我们训练yoloV5的版本是V3.1,这里不同的版本可能会不同。)

修改结果如下绿色框和红色框中的。因为去掉了10层所以变成191228。并用YoloV5Focus网络层代替去掉的10层,而YoloV5Focus网络层中的images代表该层的输入,207代表的输出名,这个是根据下边一层的卷积层输入层数写的。

修改网路的输出shape:

当基于修改后的网路使用ncnn/examples/yolov5测试时会发现出现图片中一堆乱框,这种情况需要修改网路的输出部分。在保证输出名一致的情况下,修改Reshape中的0=-1,使的最终的输出shape不固定。具体的修改地方以及修改之前和之后见下图。

以下是用C++实现的完整代码。建议一划到底,先看最后的整体思路

THE END
1.Yolov5网络架构分析以及训练图解本次主要分享yolov5的模型架构,以及训练结果的分析 1. YOLOV5模型架构 ? 相信很多人最初接触到的都是/models/yolov5s.yaml中的参数: # Parametersnc:80# number of classesdepth_multiple:0.33# model depth multiple(将BottleneckCSP模块的Bottlenecknumber乘以深度倍数,得到模块的最终循环次数)width_multiple:0.50https://blog.csdn.net/w15136756855/article/details/143368710
2.2023届电子信息与计算机工程系优秀毕业设计作品毕业设计在研究中,主要采用了YOLOv5算法进行口罩检测。首先根据YOLOv5算法的原理和结构,设计了一个口罩检测网络,并使用训练集对其进行了训练。然后,对测试集进行了测试,并对算法的性能进行了评估和分析。最后又选择了两种当前流行的轻量级网络作为模型的主干网络,利用对比实验选出较优主干网络,并作为最终模型。实验结果表明,该https://www.cdutetc.cn/c/4c068411-751b-4f12-b725-f69e34c010a3.html
3.Yolov5+图像分割+百度AI接口——车牌实时检测识别系统在这个过程中我对Yolov5有了更深刻的理解,在原有的Yolov5框架上增加了图像分割功能,这样在原有的识别基础上可以将目标切割出来,再进行更为精确的识别,调用百度AI的接口,将图片上传再接受返回值,这难道不香吗?所以本篇文章以Yolov5+图像分割+调用百度AI的接口实现车牌实时监测识别的效果,识别效果非常优秀。接下来就http://zhangshiyu.com/post/49159.html
4.YOLOv5u,YOLOv7u,YOLOv6Lite,RTMDetandsoon.PaddleYOLO代码库协议为GPL 3.0,YOLOv5、YOLOv6、YOLOv7和YOLOv8这几类模型代码不合入PaddleDetection,其余YOLO模型推荐在PaddleDetection中使用,会最先发布PP-YOLO系列特色检测模型的最新进展; PaddleYOLO代码库推荐使用paddlepaddle-2.4.2以上的版本,请参考官网下载对应适合版本,Windows平台请安装paddle develop版本; https://github.com/PaddlePaddle/PaddleYOLO
5.objectdetectionforUAVimagesbasedonimprovedYOLOv5s所有模型训练使用双卡分布式混合精度训练,并使用单卡单批次方式进行测试。实验代码基于ultralytics的YOLOv5工程第四个版本和yolov3-archive工程融合改进,同时支持yaml模型文件和cfg模型文件,所有算法皆为官方模型在本工程的迁移实现。训练轮次(epoch)初始为200,批大小为16;采用SGD梯度下降优化器,初始学习率0.01,动量为0.949https://www.oejournal.org/article/doi/10.12086/oee.2022.210372
6.YOLOv5YOLOv5 Lite在YOLOv5的基础上进行一系列消融实验,使其更轻(Flops更小,内存占用更低,参数更少),更快(加入shuffle channel,yolov5 head进行通道裁剪,在320的input_size至少能在树莓派4B上的推理速度可以达到10+FPS),更易部署(摘除Focus层和4次slice操作,让模型量化精度下降在可接受范围内)。 https://cloud.tencent.com/developer/article/1973947
7.YOLOv5入门实践(5)——从零开始,手把手教你训练自己的目标检测简介: YOLOv5入门实践(5)——从零开始,手把手教你训练自己的目标检测模型(包含pyqt5界面) 前言 通过前几篇文章,相信大家已经学会训练自己的数据集了。本篇是YOLOv5入门实践系列的最后一篇,也是一篇总结,我们再来一起按着配置环境-->标注数据集-->划分数据集-->训练模型-->测试模型-->推理模型的步骤,从零开始https://developer.aliyun.com/article/1309818
8.yolov8训练用了共享gpuyolov5多gpu并行训练yolov8训练 用了共享gpu yolov5多gpu并行训练 笔者在前面几篇文章中详细介绍了用于YOLO模型训练所需要的资源准备、标签标注等工作。现在笔者就来向大家介绍依托yoloV8使用相关的标签素材做训练的具体方法和步骤。 为了开展训练,我们需要使用GPU资源,在python环境中提前安装好英伟达显卡对应版本的CUDA和用于开展模型训练的https://blog.51cto.com/u_87634/11688347
9.中国研究生创新实践系列大赛管理平台一等奖水陆空一体化防护系统西安科技大学一等奖基于智能视觉和智能导航的番茄采摘机器人浙江理工大学一等奖面向纱线生产过程的智能监测平台浙江理工大学一等奖基于卫星与机载图像的数字化龙江建设哈尔滨工程大学一等奖面向渐进式掩码修复的织物表面缺陷实时检测设备西安科技大学一等奖数模协同下的旋转机械在线监测与诊断系统重庆大学https://cpipc.acge.org.cn/cw/hp/2c9088a5696cbf370169a3f8101510bd
10.YOLOv5在COCO数据集上预训练的物体检测架构和模型系列YOLOv5 是一个在COCO数据集上预训练的物体检测架构和模型系列,它代表了Ultralytics对未来视觉AI方法的公开研究,其中包含了在数千小时的研究和开发中所获得的经验和最佳实践。 文件 请参阅YOLOv5 Docs,了解有关训练、测试和部署的完整文件。 快速开始案例 https://www.jishuya.cn/1339.html
11.怎么使用YOLOV5训练我们自己的数据集YOLO v5是YOLO系列中比较好用的一个。在前面的笔记中我们介绍了YOLO v3和YOLO v4的原理,并且从零开始使用pytorch框架重现了YOLO v3的代码。 然而,YOLO v5的算法每天都有在更新,所以我们不再分析YOLO v5的代码。这里我们一起讨论一下YOLO v5的官方代码如何使用,用来训练我们的数据,达到期望的精度和性能。并且掌握其https://www.jianshu.com/p/a300ef9631cb
12.基于YOLOv5s的河道漂浮垃圾检测研究与应用(3)基于训练好的改进YOLOv5s检测算法,使用node.js平台中的Koa框架建立河道污染程度可视化系统。其中,系统的统计分析模块通过利用小孔成像原理与UTM投影确定正射影像所覆盖的河道范围,采用层次分析法量化各区段污染程度,并将统计分析结果以Geo JSON格式进行存储;系统前端采用Cesium地图引擎框架,通过解析统计分析模块生成的http://cnki.nbsti.net/KCMS/detail/detail.aspx?filename=1021775340.nh&dbcode=CMFD
13.yolov5web图片在线识别巧遇人生前期实验室已对生猪脸部进行图像识别训练,效果良好,现需要一个在线程序用来上传图片,识别出猪脸的位置,并将猪脸框出来。于是本文档就是用来实现这个功能的。 准备工作: 本次项目打算使用 web 端的方式来实现,技术栈:python+flask+vue+docker,程序主要使用开源程序https://github.com/qiaoyukeji/Yolov5-Flask-VUE修https://www.cnblogs.com/qiaoyurensheng/articles/16482246.html