基于Yolov5目标检测的物体分类识别及定位 -- 全过程总结

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

 系列文章:

基于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张图片

       修改配置文件:

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标签文件,这样在背景增强时就会被视为同一张图的背景。

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

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

你可能感兴趣的:(CV-计算机视觉,项目,深度学习,人工智能,python)