【YOLO-v5学习笔记】

先附上一张大神画的模型结构图,按着模型的结构进行学习。

一、input端

1、Mosaic数据增强:

(1)思想:采用与Yolov4一样的Mosaic数据增强,参考了2019年底提出的CutMix数据增强的方式,但CutMix只使用了两张图片进行拼接,而Mosaic数据增强则采用了4张图片,通过随机缩放、随机裁剪、随机排布的方式对图片进行处理再拼接到一张图上作为训练数据。

(2)优点:①丰富数据集:许多数据集中,小、中、大目标的占比并不均衡,小目标数量较少,采用随机scale的trick增加了小目标,使得网络鲁棒性更好;②减少GPU:Mosaic进行训练时,四张图片拼接在一起,可以直接计算4张图片的数据,变相地提高了batch_size,在进行batch normalization的时候也会计算四张图片,所以对本身batch_size不是很依赖,单块GPU就可以训练。

(3)缺点:如果数据集本身就有很多的小目标,那么Mosaic数据增强会导致本来较小的目标变得更小,导致模型的泛化能力变差。

2、自适应锚框:

(1)思想:在Yolo算法中,针对不同的数据集都会有初始设定长宽的锚框。在网络的训练过程中,网络在初始锚框的基础上输出预测框,然后和真实框groundtruth进行比对,计算两者差距,再反向更新,迭代网络参数。在Yolov3、Yolov4中,训练不同的数据集时,计算初始锚框的值是通过单独的程序运行的。但Yolov5中将此功能嵌入到代码中,每次训练时,自适应的计算不同训练集中的最佳初始锚框值。

(2)方式:K-means聚类。YOLO的框的标注格式为<object-class><x><y><width><height>,通过K-means计算anchor boxes的width和height。先计算yaml文件给的anchor,如果bpr(best possible recall,最佳召回率)小于0.98,则重新计算anchor,当最佳召回率大于或等于0.98,则不需要更新anchor。步骤:①计算每个bounding box与所有聚类中心的距离1-iou,选择最近的那个聚类中心作为它的类别②使用每个类别簇的均值作为下次迭代计算的类别中心。(代码:https://www.cnblogs.com/yxyun/p/14253168.html

3、自适应图片缩放:

(1)思想:在常用的目标检测算法中,不同的图片长宽都不相同,因此常用的方式是将原始图片统一缩放到一个标准尺寸,再送入检测网络中。但在项目实际使用时,很多图片的长宽比不同,因此缩放填充后,两端的黑边大小都不同,而如果填充的比较多,则存在信息冗余,影响推理速度。于是对YOLOv5进行了改进,对原始图像自适应的添加最少的黑边

(2)优点:图像高度上两端的黑边变少了,在推理时,计算量也会减少,目标检测速度得到提升。

二、Backbone

1、Focus结构:YOLOv5才提出来的结构,相较于v3、v4的创新,关键在于切片操作。

(1)思想:将原始图像二倍间隔采样:每隔一个像素拿到一个值,相当于对原始特征重排。相当于对原始图像进行了下采样。

(2)优点:提高感受野,将w-h面上的信息转到通道维度,保证信息未丢失。与v3相比计算量和计算速度有提升。用作者的观点来说就是,用一个focus层替代三个普通下采样卷积层,减少计算量和参数量。但是也有学者认为,在数据集比较简单的情况下,focus的引入也只是起到了锦上添花的作用。

2、CSP结构:YOLOv4中只有主干网络使用了CSP结构(Cross Stage Paritial),而YOLOv5中设计了两种CSP结构,以YOLOv5s网络为例,CSP1_X结构应用于Backbone主干网络,另一种CSP2_X结构则应用于Neck中。

(1)CSP1_X:将原输入分成两个分支,一个分支进行卷积操作使得通道数减半,另一个分支进行残差操作,然后concat两个分支,使得输入与输出是一样的大小,同时也让模型学习到更多的特征。

(2)CSP2_X:CSP2_X相对于CSP1_X来说,不一样的地方只有CSP2_X将Resunit换成了2 * X个CBL。

(3)优点:①将梯度的变化集成到特征图中,因此减少了模型的参数量和FLOPS数值,既保证了推理速度和准确率,又减小了模型尺寸;②有效缓解梯度消失问题(因为通过非常深的网络很难去反推丢失信号)

三、Neck:借鉴PANet的FPN+PAN结构(自顶向下+自底向上)

1、FPN+PAN结构

(1)FPN:将高层语义信息传递下来,使得所有尺度下的特征都有丰富的语义信息。(Backbone的浅层网络提取目标边缘等底层特征,深层网络构建高级语义信息。)FPN让高级语义融合到稍浅层网络。

(2)PAN:由于FPN缺少定位信息,其采用自底向上的方式又将定位信息传回去。

2、SPP模块:使用k={1*1,5*5,9*9,13*13}的最大池化的方式,将不同尺度的特征图进行Concat操作,进行多尺度特征融合,提高感受野,丰富了特征图的表达能力,有利于待检测图像中目标大小差异较大的情况。

四、损失函数:包括位置损失、置信度损失以及分类损失

YOLOv5 采用了BECLogits 损失函数计算分类损失,置信度损失采用了交叉熵损失函数(BCEclsloss),bounding box采用了GIOU Loss。代码实际用Focaloss计算了非损失和置信度损失。

五、预测:得到许多密密麻麻的预测框之后,采用非极大抑制去除多余的预测框,然后去初添加的灰条,最后绘制预测框,显示结果。

参考:

https://zhuanlan.zhihu.com/p/172121380

https://www.cnblogs.com/yxyun/p/14253168.html

学习也不是很透彻,有部分为个人理解,若有错误欢迎指正~~~

  • 3
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值