YOLOv5训练自己的数据集实现视频的识别

YOLOv5训练自己的数据集实现视频的识别 电子狂热者 2024-02-20 13:54:59 322

文章目录

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

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 点赞 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
电子狂热者
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区