YOLO 基础知识梳理
参考资料1:YOLO系列演化历史
参考资料2:深入浅出Yolo系列之 Yolov3 & Yolov4 & Yolov5 & Yolox9
YOLO是目标检测中非常经典的模型,但是其发展演化非常之快让人有点摸不清其脉络。这次内容安全实验课需要用到YOLOv8模型,我顺便将YOLO系列的原理都整理一遍。
基础知识
整个YOLO模型由三个部分组成:
- "backbone" 指的是骨干网络,负责提取特征;
- "neck" 指的是位于骨干网络之后的模块,用于进一步处理特征;
- "head" 指的是位于模型顶部的部分,执行特定任务并生成最终的预测结果。
YOLO v1
YOLO v1 的结构比较简单,可以分为两个部分理解:
- 第一个部分用于提取特征,即 backone
-
第二个部分用于预测目标 ( 维度信息为:7 * 7 * 30 ),即 head
7 * 7 是特征图大小,30 是预测目标信息。具体来说 30 = 5 * 2 + 20 , 其中的 5 * 2 表示(X,Y,H,W,C)* 框的数量,20 表示支持20中类别。这些信息包含了框的位置、置信度和类别。
这样可以设计出其损失函数,主要分为:坐标损失、置信度损失、类别损失。
YOLO v2
YOLO v2 在第一版的基础上增加了很多改进:
重点分析下面的几个改进:
- Batch Normalization:可以提升模型收敛速度,起到正则化的作用,降低模型过拟合,训练更稳定
- Backbone模块,使用DarkNet-19,降低了计算量
- Neck模块,将不同尺度的特征进行融合(Fine-Grained Features),从而提高模型的泛化能力
- Head模块,用卷积替换全连接,因此可以使用各种尺度(32的倍数)的图像进行训练
- Anchor Box:使用聚类(Dimension Clusters)得到预设框的尺寸,提高目标的定位准确率。
YOLO v3
What’s new in YOLO v3? 图上非常清楚了,感觉挺好理解的,和v2非常像,就融入了一些小技巧。不过和v2图画的不一样,容易让人误解最后prediction有三个,其实最后会concat,所以还是和v2一样。 Backbone换成了DarkNet-53,v3 最显着的特点是它以三种不同的尺度进行检测。
YOLO v4
- 输入端:主要包括Mosaic数据增强、cmBN、SAT自对抗训练
- BackBone:将各种新的方式结合起来,包括:CSPDarknet53、Mish激活函数、Dropblock(随机删除减少神经元的数量,使网络变得更简单,Dropout在卷积层上效果并不好)
- Neck:目标检测网络在BackBone和最后的输出层之间会插入一些层,比如SPP模块、FPN+PAN结构
FPN层自顶向下传达强语义特征,而特征金字塔(PAN)则自底向上传达强定位特征
- Head:训练时的损失函数CIOU_Loss,以及预测框筛选的nms变为DIOU_nms
CIOU_Loss : 重叠面积、中心点距离,长宽比都考虑了进来
YOLO v5
整体变化不大,YOLO v5,作者没有发论文
- Focus结构,Yolov3&Yolov4中并没有这个结构,其中比较关键的是切片操作
- 自适应图片缩放,即根据长宽比对图像进行缩放,添加最少的黑边,减少计算量
YOLO v6
YOLO v7
YOLO v8
- YOLOv8参考了YOLOX和YOLOV6,使用了Decoupled-Head,即使用两个卷积分别做分类和回归
- 为了轻量化,v8设计了c2f结构,与c3相比少了一层conv,采用split将特征分层而不是conv
后面的YOLO感觉都只是小修小改,融入一些新的技术和理念...就不多赘述了