欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于yolov5的深度学习物体识别系统 -- 全过程总结

程序员文章站 2022-07-14 18:49:46
...

给自己做一个从零基础到训练测试改进熟练工的总结,其实感觉最大的作用就是修改数据集。。。

 系列文章:

基于yolov5的深度学习物体识别系统(一) -- 数据集原图获取与标注

基于yolov5的深度学习物体识别系统(二) -- yolov5运行环境搭建及label文件格式转换

基于yolov5的深度学习物体识别系统(三) -- 训练、测试

基于yolov5的深度学习物体识别系统 -- 全过程总结

目录

数据集

原始图片数据获取

数据集基本要求及数量级

数据筛选

数据标注

标签数据格式转换

数据集划分

项目部署

YOLOv5项目源码

数据集配置

源码改动思路

训练及验证

训练原理

训练参数设置

验证结果分析

测试

大型测试集效果

分析原因

改进


数据集

原始图片数据获取

       从各搜索引擎如百度、谷歌等,搜索飞机和船的名称关键字,并下载相关图片,为每一类图片命名好关键字和编号,便于标注。

       可以编写python脚本批量采集图片。

数据集基本要求及数量级

       从训练的角度出发,数据集中的图片应该要做到几点:

1、多角度。飞机和船都要有多种角度的拍摄照片,比如俯视、仰视、正视、后视以及其他角度的各种侧视。

2、多背景。背景复杂的训练集,才能让模型更具有泛化能力,能降低误检率。

3、多目标物体。一张图中有多个不同的目标物体,并且都标注出来,这样模型学到的知识就更加细化。

4、大小物体都有。在一张图中相对小的物体也要标注并且这种数据尽可能多,才能弥补yolo在小物体检测的不足。

5、关于数量级,一般每类有300到500张图片做训练集就可以有很好的效果,当然,这是在数据有限的情况下得出的结论。

数据筛选

       对爬取的图片进行人工筛选,去掉不相关的图、下载错误导致损坏的图。

数据标注

       使用labelme来进行标注,Ubuntu和Windows都可以安装,安装后启动程序选择目录开始标注。

       在每张正样本图片中,用矩形框标出飞机或者船(对角的两个点的坐标即可),然后打好名称标签如f16,矩形起点终点在左上还是右下都无所谓,后面可以处理。

标签数据格式转换

       用labelme标注的标签格式是json,而yolov5需要的格式是txt,而且数据形式也有差别。

       转换原理:labelme标注的数据是两个对角的点的xy坐标,需要转换为相对于图片高度和宽度的坐标,具体操作只需要从文件中读取之后,将xy坐标与w、h一起计算,公式如下:(x、y、w、h为写入txt的坐标)

1、x = ((x2+x1)/2)/weight

2、y = ((y2+y1)/2)/height

3、w = (x2-x1)/weight

4、h = (y2-y1)/height

数据集划分

       随机在整个数据集中挑选五分之一,作为训练过程中的验证集。

项目部署

YOLOv5项目源码

       在github下载即可。地址:https://github.com/ultralytics/yolov5

数据集配置

       数据集放在项目文件夹的 data 文件夹中,具体位置如图:

基于yolov5的深度学习物体识别系统 -- 全过程总结

       修改配置文件:

1、在项目的data目录下新建cv01.yaml文件,内容示例如下:

train: ./data/mydatas01/images/train2021/ 
val: ./data/mydatas01/images/val2021/ 
nc: 6
names: [ 'cat', 'dog', 'miaomiao', 'wangwang', 'lipu', 'buzhidao']

       需要修改的是 train:  val:  nc: 、 names: [ 'a', 'b', 'c'] 四行,分别对应训练图片的路径,验证图片的路径,以及数据集的类别的数量,和那些类别的名字

2、项目的models目录下的yolov5s.yaml(也可选择其他的模型方法)文件修改:

       这个文件只需要修改 nc: 那行,跟上一个文件对应就可以。

源码改动思路

       检测时只保存有目标的图片(方便查看):修改detect.py文件,在检测之前新建变量flag,初始化0,检测到目标时将之赋1,在保存每个文件时判断。

       目标框太大,导致文字彩条超出图片,看不到判断结果:修改plots.py文件,将绘制的检测结果彩条坐标下移到框内。

训练及验证

训练原理

       特点:采用马赛克技术,每个batch中,每次训练随机选择四张图片,以增强背景知识,并在训练前对图片进行翻转、旋转、调亮度等操作。

训练参数设置

       主要是配置文件和预训练模型的设置,以及batch和epoch的大小。

验证结果分析

       P:准确率

       R:召回率

      mAP(mean average precision):多个类别物体检测中,每一个类别都可以根据recall和precision绘制一条曲线,AP就是该曲线下的面积,mAP是多个类别AP的平均值

测试

大型测试集效果

       误检率很高,小物体检测有时漏标,尤其是多个小物体的情况。

分析原因

       因为模型没有学习负样本知识,目标检测的背景不够复杂。

改进

       训练集增加大量负样本,即图片中没有飞机和船,而且没有对应的txt标签文件,这样在背景增强时就会被视为同一张图的背景。

       重新检查训练集和验证集,有没有标注错误的情况。

       经过改进,在保证召回率的情况下,误检率显著下降。