先附上一张大神画的模型结构图,按着模型的结构进行学习。
一、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的框的标注格式为
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
学习也不是很透彻,有部分为个人理解,若有错误欢迎指正~~~