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

举报
ganxu 发表于 2021/06/04 10:38:33 2021/06/04
【摘要】 目标检测是计算机视觉项目中非常重要的一部分,而Yolo系列是常用的目标检测算法。目前使用较多的是Yolov3,Yolov4和Yolov5算法,是在Yolov3比较经典的one-stage网络结构的各个部分不断整合创新发展起来的。Yolov5的官方代码中,有Yolov5s、Yolov5m、Yolov5l、Yolov5x四个模型。本文将对Yolov5做一个介绍,并在ModelArts平台上实践。

一、概念介绍

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

二、网络结构

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

捕获.PNG

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

  1. 网络结构
  1. 输入端:Mosaic数据增强、自适应锚框计算、自适应图片缩放
  2. Backbone:Focus结构,CSP结构
  3. Neck:FPN+PAN结构
  4. Prediction:GIOU_Loss


     2. 基本组件

  1. CBL:由Conv+Bn+Leaky_relu激活函数三者组成
  2. Res unit:借鉴Resnet网络中的残差结构,让网络可以构建的更深
  3. CSP_X:借鉴CSPNet网络结构,由卷积层和X个Res unint模块Concate组成
  4. Focus:对图像进行切片后再Concate组成
  5. SPP:采用1×1,5×5,9×9,13×13的最大池化的方式,进行多尺度融合。


2.1 输入端

     1. Mosaic数据增强


捕获1.PNG

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

     2. 自适应锚框计算

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

     3. 自适应图片缩放

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


2.2 Backbone

  1. Focus结构    

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

捕获3.PNG

     2. CSP_X结构    

    每个CSP模块前面的卷积核的大小都是3*3,stride=2,因此可以起到下采样的作用,参考了2019年的CSPNet,其作者认为推理计算过高的问题是由于网络优化中的梯度信息重复导致的,因此采用CSP模块先将基础层的特征映射划分为两部分,然后通过跨阶段层次结构将它们合并,在减少了计算量的同时可以保证准确率。


2.3 Neck

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

捕获4.PNG

    将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训练集。1.jpg

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

2.jpg

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

3.jpg

    下载好的数据集是默认训练验证集切分比例为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)

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。