目标检测-Yolov5的理论与实践

网友投稿 1637 2022-05-29

一、概念介绍

目标检测是计算机视觉项目中非常重要的一部分,而YOLO系列是常用的目标检测算法,经常受到关注和使用。目前使用较多的是Yolov3,Yolov4和Yolov5算法,是在Yolov3比较经典的one-stage网络结构的各个部分不断整合创新发展起来的。Yolov5的官方代码中,给出的目标检测网络中一共有四个版本,分别是Yolov5s、Yolov5m、Yolov5l、Yolov5x四个模型。

二、网络结构

Yolov5s网络是Yolov5系列中深度最小,特征图宽度最小的网络,后面三种网络都是在其基础上不断加深,不断加宽得到的。可以通过学习Yolov5s整体的网络结构图,从而对Yolov5系列的网络结构图有比较清晰的认识。

yolov5的网络结构图可以用红框分为输入端、Backbone、Neck、Prediction四个部分,其中用蓝框标出了CBL、Res unit、CSP1_X、CSP2_X、Focus、SPP六个基本组件。下面先对其做一个简单的介绍,后面再进行具体的分析。

网络结构

输入端:Mosaic数据增强、自适应锚框计算、自适应图片缩放

Backbone:Focus结构,CSP结构

Neck:FPN+PAN结构

Prediction:GIOU_Loss

2. 基本组件

CBL:由Conv+Bn+Leaky_relu激活函数三者组成

Res unit:借鉴Resnet网络中的残差结构,让网络可以构建的更深

CSP_X:借鉴CSPNet网络结构,由卷积层和X个Res unint模块Concate组成

Focus:对图像进行切片后再Concate组成

SPP:采用1×1,5×5,9×9,13×13的最大池化的方式,进行多尺度融合。

2.1 输入端

1. Mosaic数据增强

随机使用四张照片,用随机缩放、随机裁剪、随机排布的方式进行拼接,可以大大丰富检测数据集,特别是随机缩放会增加很地盘小目标,对于小目标的检测效果很好。但是如果数据集本身就有很多小目标,就会使目标变得更小,导致模型泛化能力变差。

2. 自适应锚框计算

在Yolo算法中,针对不同的数据集,都会有初始设定长宽的锚框。预定义锚框就是一组预设的边框,在训练时,以真实的边框位置相对于预设边框的偏移来构建,这就相当于先大致在可能的位置框出来目标,然后再在这些预设边框的基础上进行调整。具体来说,是在网络训练中,网络在初始锚框的基础上输出预测框,进而和真实框groundtruth进行比对,计算两者差距,再反向更新,迭代网络参数。

3. 自适应图片缩放

在常用的目标检测算法中,不同的图片长宽都不相同,因此常用的方式是将原始图片统一缩放到一个标准尺寸,再送入检测网络中,比如Yolo算法中常用416*416,608*608等尺寸。在图片长宽比不同的时候会先进行放缩后再加入黑边输入网络,这时黑边填充较多,存在信息冗余,会导致推理速度变慢。而Yolov5使用的自适应图片缩放可以对原始图像自适应的添加最少的黑边,推理速度得到了37%的提升。

2.2 Backbone

Focus结构

Backbone结构主要利用了Focus和CSP的基本组成结构,其中Focus结构是Yolov3和Yolov4没有出现的结构,比较关键的是切片操作。比如Yolov5s的Focus结构最后使用了32个卷积核,这样对原始608*608*3的图像输入Focus结构,采用切片操作,先变成304*304*12的特征图,再经过一次32个卷积核的卷积操作,最终变成304*304*32的特征图。

2. CSP_X结构

2.3 Neck

Neck部分的FPN+PAN结构可以表示为下图。

将FPN+PAN这样结合操作,FPN层自顶向下传达强语义特征,而特征金字塔包含了PAN结构则自底向上传达强定位特征,从不同的主干层对不同的检测层进行参数聚合,借鉴的是18年CVPR的PANet,当时主要应用于图像分割领域。

2.4 Prediction

目标检测任务的损失函数一般由Classificition Loss(分类损失函数)和Bounding Box Regeression Loss(回归损失函数)两部分构成。Yolov5采用的是分类损失函数中的GIOU_loss。

上图中的黄色框为预测框,蓝色框是真实框,则可以求出红色框为它们的并集,蓝底框为它们的差集,IOU为预测框与真实框的交集除以并集,就能求出GIOU_loss。GIoU不仅关注重叠区域,还关注其他的非重合区域,能更好的反映两者的重合度,可以通过最小化GIOU_loss来使预测框和真实框不断靠近。

三、Yolov5实践

可以订阅ModelArts的Yolov5算法来入门和熟悉Yolov5在目标检测中的使用流程。

3.1 准备数据集

在AI Gallery的数据中搜索“检测”,就能搜索到适合目标检测算法的训练集,可以点击helmet训练集。

点击“下载”进入下一步。

下载方式可以选择“对象存储服务(OBS)”和“ModelArts数据集”两种方式,都是将训练集下载到OBS桶内,所以目标位置都需要填写到OBS桶内的文件夹。当选择“ModelArts数据集”时可以给数据集命名,后面训练可以通过名称选择数据集。

下载好的数据集是默认训练验证集切分比例为1.00,要输入到AI Gallery的Yolov5算法中需要进行切分。在“数据管理”的“数据集”中选择对应数据名称的“发布”。

可以选择切分比例为0.8。

3.2 订阅Yolov5算法

在算法中选择物体检测-YOLOv5,订阅后前往控制台。

进入控制台后会有不同版本的Yolov5,可以选择当前最新版本并创建训练作业。

3.3 训练Yolov5模型

创建训练作业后只需要填写数据输入和模型输出train_url,超参数据可以选择默认值,也可以根据实际情况修改,创建完毕后点击“提交”。

model_name:模型名称(可选项仅有s,m,l,x)

batch-size:每步训练的图片数量(单卡)

epochs:训练的epochs数量

img-size:输入图片的shape大小(宽高都必须能整除32)

目标检测-Yolov5的理论与实践

workers:Pytorch dataloader的进程数

rect:是否使用长方形训练(即训练过程中将长宽比相近的图片除去图片冗余部分,并置于同一个batch以加快训练速度,该模式将会关闭dataloader的shuffle),默认设置False

multi-scale:是否使用多尺度训练(即训练过程中img-size的抖动幅度在设置值的+/- 50%,一般用于提升精度但会降低训练的性能,注意设置该模式batch-size一般需要调小不然容易出现OOM),默认设置False

cache-images:是否预先缓存图片以加快训练速度,默认设置False

sync-bn:是否使用SyncBatchNorm,该参数只有在分布式场景下才生效,默认设置False

训练完毕后可看训练作业的评估结果,以及精度评估和敏感度分析。

3.4 在线推理部署

点击训练作业中的“创建模型”。

选择“从训练中选择”-“训练作业”后就能根据已经训练好的训练作业来导入模型。。

模型导出成功后,选择在线服务来进行部署,选择模型后就能上传本地文件来进行预测。

四、参考链接

[1] 江大白, "深入浅出Yolo系列之Yolov5核心基础知识完整讲解", https://zhuanlan.zhihu.com/p/172121380

[2] 江大白, "深入浅出Yolo系列之Yolov3&Yolov4&Yolov5核心基础知识完整讲解", https://zhuanlan.zhihu.com/p/143747206

图像处理 机器学习 神经网络

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【编辑器】Vim学习笔记
下一篇:张小白AI博文知识点串烧Ver0.1-20210422
相关文章