写在前面

我本来是使用这个模型进行手写签名的定位,但是因为比赛的主办方原因,数据不允许公开,所以我使用动物世界的一段开头视屏来制作我的数据集。这整个模型跑通的过程中,我参考了很多不错的博客,写这篇博客的原因是记录一下我的所见所感。我的模型是在移动九天的平台上跑的。本文参考的博客如下:
YOLOv5训练自己的数据集(超详细完整版)
目标检测—教你利用yolov5训练自己的目标检测模型

写这篇文章的目的是为了能给大家一些建议,也是为了记录一下自己的成长。

1.环境

识别模型有很多,但是目前比较实用的是YOLOV5,是一个国外的公司做的,比较好用。这是github的链接

万事开头难,我认为一个模型只要环境搭好了,模型就成功了90%。但是好在YOLOv5所需要的各种库都是比较热门的,没有各种坑,(此文主要给大家增加信心)所以我觉得环境是很好配的。
这里还是先建议大家创建虚拟环境,我是在服务器上跑的就没有创建。创建虚拟环境的教程,然后激活自己的虚拟环境就可以了。这里就不得不说服务器是真香。
YOLOv5的项目里面已经写好我们需要的环境,在requirements.txt中,所以我们只需要将github的代码拉到本地,然后一条命令就可以安装好:

pip install -r requirements.txt

我在服务器上跑的给大家演示:

出现上面的东西就大致OK了

接下来可以直接运行train.py检验自己的环境有没有配好,我认为这一步是很重要的,当我看到模型可以跑通的时候,给了我极大的信心。


如果直接运行,使用的数据集是默认的coco128第一次需要从官网上下载,然后就可以使用了,如果出现了epoch如上图所示,就说明模型已经开始训练了,环境已经配好了。也就是说以后都不用为这个模型的环境担忧了,恭喜迈出了一大步。

如果告诉你缺少包,缺啥就pip install 啥就行了,一般不会报错。

在运行成功后就可以制作自己的数据集准备训练了。

2.制作自己的数据集

2.1 视频转图片

在这一小节,我们需要把视频进行逐帧处理,转化为图片,便于我们最终制作的数据集。这里我使用的是vedio_to_pictures这个代码,程序会放到下面的附录里面。程序的主要作用就是将图片逐帧处理成一张一张的图片,并保存到当前目录下的allimages文件夹下。
我视频的基本信息是:

我是使用QQ自带的录屏录制的b站上一段视频(或者是其他网站上的,具体记不清了),得到的帧率是19.58帧每秒,总时长是69秒。所以得到图片数大约是19.58*69=1351张,最终我使用图片处理得到的图片是1357张,如下,大致符合。

大家可以根据得到的图片挑选一些图片制作自己的数据集,因为我最终使用了45张图片来制作我自己的数据集,所以我是手动挑选的。大家可以写一个随机函数自动挑选。

2.2 标注图片制作标准数据集

这一节是将上面得到的45张图片进行标注,制作成YOLO能够训练的数据集的标准样式。

标准数据集的样子

首先看一下YOLO数据集的格式是物体的类别编号,x,y,w,h.

拿第一条数据来举例,比如:

0 0.21584984358706988 0.5041743970315399 0.11678832116788321 0.10296846011131726

第一个0是指此类对象的编码,这个当你标注完对象之后,就会自动的进行编号。后面的坐标分别表示目标的中心坐标和目标的宽和高,这里的宽和高是归一化之后的宽和高。

用labelImg标注自己的数据集

任何一款图像标注软件都是可以进行标注的,这里我选择的时候LabelImg(以上附有安装教程).标注的格式我这里选择的是voc格式(下图左边所示),后期会用代码将voc格式转化成YOLO格式,没有直接选择YOLO格式的原因是,我的labelImgYOLO格式标出来不是标准的,可能是我安装的版本太老的原因,也有同学是直接使用YOLO格式标注的,大家也可以进行尝试。


这里标注的时候有一些小技巧,比如提前更改要标注的类别、自动保存,一些快捷键,w键可以快速起框,d键切换下一张等等,记得要设置保存的文件夹。大家可以搜一下。

标注完成之后,voc得到的是xml文件。我这里是这样的

在这里进行一个格式的转化。
首先在YOLOv5文件夹下面新建一个data文件夹,我这里命名是hanzi_data:


然后在hanzi_data文件夹下面分别创建images文件夹(名字不可以更改)和Annotations文件夹,一个存放你要训练的图片,也就是我们标注的图片,一个存放我们的xml文件。 如下所示:


划分训练集、测试集和验证集

接下来进行划分训练集、测试集合验证集。这里是运行代码split_train_val.py得到的,后面会给出连接,如果你的文件夹有改动,代码相应的修改

如果运行结果的文件夹没有修改的话,运行完成之后就会出现一个新的文件夹ImageSets。这里我们运行结果如下:


打开文件夹里面有个main文件夹,然后里面有test、train、trainval和val四个txt文件,里面都是图片的名称,没有后缀。我这里有个不速之客,是我的代码存放的问题,一般不会有,我这里直接删除即可。

XML格式转yolo_txt格式

这里是运行text_to_yolo.py,然后就可以得到dataSet_path文件夹和labels文件夹,如下所示:


dataSet_path文件夹里面的三个txt分别存放的是你自己训练集、验证集、测试集的路径。


此时的label文件夹下的txt数据也是标准的YOLO模式,如下所示:


至此数据集制作完成,接下来准备训练啦。

建立自己的配置文件

在 yolov5 目录下的 data 文件夹下 新建一个 myvoc.yaml文件(可以自定义命名),用记事本打开。
内容是:
训练集以及验证集(train.txt和val.txt)的路径(可以改为相对路径
以及目标的类别数目和类别名称。

3.模型的训练

更改模型配置

选择一个模型,在yolov5目录下的model文件夹下是模型的配置文件,有n、s、m、l、x版本,模型依次复杂,权重依次增多,训练的时间的也依次增加。
这里我选择的是yolov5s,然后进行更改,如下所示:

开始训练

python train.py --weights weights/yolov5s.pt  --cfg models/yolov5s.yaml  --data data/myvoc.yaml --epoch 200 --batch-size 8

–weights 自己权重的路径,看自己的yolov5s.pt所在的位置,你也许需要更改。
–cfg 模型配置的路径,也就是上一步更改的那个模型配置。
–data 是制作自己的数据集的时候建立自己配置文件的路径。
–epoch 训练的轮数
–batch-size 一次训练喂进去的照片数量,电脑配置不好就改小一点。

训练过程

在训练的过程中会打印训练结果存储的位置,一般保存在runs/train/下最新的exp文件夹里面


我的训练好的模型存放在了runs/train/exp22下面

除此之外训练的exp下面还有你训练过程的图片:

里面还有一些其他的训练过程的图片:
R_curve 召回率Recall和置信度confidence之间的关系。
PR_curve PR曲线中的P代表的是Precision(精准率),R代表的是Recall(召回率),其代表的是精准率与召回率的关系.一般情况下,将recall设置为横坐标,precision设置为纵坐标。PR曲线下围成的面积即AP,所有类别AP平均值即map。AP值是衡量目标检测模型分类器性能优劣的重要评估指标,AP值越大则分类器性能越好,越小则分类器性能越差。
P_curve 精确率Precision和置信度confidence的关系图.
F1_curve 数学定义为 F1分数,又称为平衡F分数,它被定义为正确率和召回率的调和平均数.
confusion_matrix 指的是混淆矩阵.

模型检测

模型检测的代码如下:

python detect.py --weights runs/train/exp/weights/best.pt --source ../data/video/animal.mp4

–weights 权重存放的位置
–source 你要检测的东西。支持图片,文件夹,视频和摄像头

这里我测试的是test_data下面的Animal.mp4


可以看到在跑视频的时候,他是一帧一帧的图像处理的,这就体现出他快的特性。
最后会保存到runs/detect/exp里面,如下所示

最终我的结果如下所示:

YOLO演示

模型到这里基本就结束了,遇到问题不要着急,机器是不会坏的,多尝试几次总是可以的。

4 相关问题

训练缓存

在训练的时候也会生成数据缓存,在你的hanzi_data/dataSet_path文件夹下面,如果后面需要再次训练,可能需要删除一下。(我不删也没事)

训练时间

我的数据是45张图片,使用了GPU,200个epochs大概训练了25分钟。

代码附录

vedio_to_pictures
split_train_val.py
text_to_yolo.py

YOLOv5训练自己的数据集实现视频的识别相关推荐

  1. 手把手教你使用YOLOV5训练自己的数据集并用TensorRT加速

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 前言 本文主要介绍目标检测YOLOV5算法来训练自己的数据集,并且使用TensorRT来对训练好的模型 ...

  2. Yolov5训练自己的数据集+TensorRT加速+Qt部署

    本人由于项目要求,需要利用Yolov5网络训练自己的目标检测与分类模型,并利用TensorRT加速将其部署到Qt界面上.目前已经实现了整个流程,写下这篇博客供需要的各位参考.(本文描述的重点主要是在后 ...

  3. Windows10+YOLOv5训练自己的数据集

    Windows10+YOLOv5训练自己的数据集 一.环境和配置 1.1 安装anaconda 1.2 在anaconda中安装pytorch虚拟环境 1.3 安装CUDA和cudnn 1.4 安装p ...

  4. Yolov5训练自己的数据集(windows10)

    Yolov5训练自己的数据集(windows10) 环境配置+训练数据集 一.Anaconda 的安装教程(图文) Anaconda下载 下载地址:https://www.anaconda.com/d ...

  5. 深度学习目标检测---使用yolov5训练自己的数据集模型(Windows系统)

    目录 0    前言 1.从githab上克隆yolov5代码 1.1 yolov5网络project克隆 1.2 项目代码结构的整体介绍 1.3 深度学习环境的配置和安装yolov5所需要的库 2. ...

  6. 使用YOLOV5训练自己的数据集(以王者荣耀为例)

    注:本文只是记录笔者使用yolov5训练自己的数据集的实现过程,不讲原理,如果想学原理请移步点击量比较高的大佬博客,笔者只是大二本科生,如有问题还请多多指教! 一,什么是yolov5? "Y ...

  7. Yolov5训练自己的数据集(详细完整版)

    最近在网上看到有与本博客一模一样的,连图片都一样. 特此声明:这是原版,转载请附原文链接,谢谢. 这次我将大部分图片添加了水印 文章目录 一. 环境(不能含有中文路径) 二. 准备工作(文件夹及视频转 ...

  8. yolov5训练自己的数据集

    How to Train YOLOv5 On a Custom Dataset   根据这篇文章下的数据集 YOLOv5训练自己的数据集   根据这篇文章,输入训练命令行 Hyperparameter ...

  9. yolov5训练自己的数据集,OpenCV DNN推理

    学更好的别人, 做更好的自己. --<微卡智享> 本文长度为4238字,预计阅读9分钟 前言 上一篇<OpenCV--自学笔记>搭建好了yolov5的环境,作为目标检测在应用中 ...

最新文章

  1. vue富文本编辑,编辑自动预览,单个图片上传不能预览的问题解决:
  2. linux top交叉编译_ARM Linux交叉编译工具链的制作
  3. 云服务器下行_腾讯云轻量应用服务器简单测评
  4. McGill微软将卷积操作加入到ViT中,捕获更详细的局部信息!准确率达87.7%!代码已开源!...
  5. 转:谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词
  6. java 泛型参数_[基础]-Java泛型
  7. 向maven中添加Oracle数据库的驱动,有效!
  8. python编程入门 pdf-PYTHON游戏编程入门 PDF 下载
  9. NGN学习笔记6——NGN的业务提供技术
  10. javascript 日期时间函数(经典+完善+实用)
  11. 孙子兵法全文(原文)
  12. vscode react 代码格式化
  13. 一度智信:拼多多商家上架商品指南分享
  14. 用Python判断手机号码的运营商
  15. javax,java
  16. 魔术克篮网实现反超 开拓者卡位战加时胜灰熊
  17. 技术分享 | EdgeX应用落地——零售、能源行业创新业务
  18. 进程管理:ps top nice
  19. matlab step函数跟踪斜坡信号及阶跃响应绘图
  20. 排序——[USACO07DEC]Bookshelf B

热门文章

  1. 人生之路 — 开启智慧之脑
  2. 江苏大学正版Windows和Office全家桶--UJS微软正版化服务平台
  3. 基于搜狗微信爬取微信公众号的文章
  4. python2 assert判断字典的包含关系
  5. CALayer的简单使用
  6. linux查找不到kde桌面,观点|KDE Plasma 5 —— 给尚未确定桌面环境的 Linux 用户指明道路...
  7. super是不是java中的标识符_java关键字super和this是什么?有什么区别?
  8. 阿里云服务器ECS windows server已开放端口但连不上的问题
  9. 5.3.2 jmeter组件-线程组:setUp线程组和tearDown线程组
  10. 微信的原创保护机制到底是如何实现的?