1.yolo历史
-
YOLOv1:2015年Joseph Redmon和 Ali Farhadi等 人(华盛顿大学)
-
YOLOv2:2016年Joseph Redmon和**Ali Farhadi等人*(华盛顿大学)*
-
YOLOv3:2018年Joseph Redmon和**Ali Farhadi等人*(华盛顿大学)*
-
YOLOv4:2020年Alexey Bochkovskiy和Chien-Yao Wang等人
-
YOLOv5:2020年Ultralytics公司
-
YOLOv6:2022年美团公司
-
YOLOv7:2022年Alexey Bochkovskiy和Chien-Yao Wang等人
-
YOLOv8:2023年Ultralytics公司
2.改进过程
2.1 yolov3
yolov3 改进 | |
backbone | darknet-19改进为darknet-53 |
多尺度预测 | |
2.2 yolov4
yolov4 | |
Backbone | CSPDarknet53 |
Neck | SPP, PAN |
Head | yolov3 |
Cross Stage Partial(CSP)结构,其初衷是减少计算量并且增强梯度的表现。主要思想是:在输入block之前,将输入分为两个部分,其中一部分通过block进行计算,另一部分直接通过一个shortcut进行concatenate。(实际很多地方直接用1×1卷积调整通道,而不是均分)
参考:
YOLOv4网络详解_yolov4网络结构图_太阳花的小绿豆的博客-CSDN博客
【目标检测】YOLOv4特征提取网络——CSPDarkNet结构解析及PyTorch实现_Cai Yichao的博客-CSDN博客_yolov4中的csp
2.3 yolov5
yolov5 | |
Backbone | New CSP-Darknet53 |
Neck | SPPF, New CSP-PAN |
Head | yolov3 |
loss 函数 | 分类: BEC Loss 回归: CIoU Loss |
- 通过对比可以发现,两者的计算结果是一模一样的,但SPPF比SPP计算速度快了不止两倍,快乐翻倍。
- 在Neck部分另外一个不同点就是New CSP-PAN了,在YOLOv4中,Neck的PAN结构是没有引入CSP结构的,但在YOLOv5中作者在PAN结构中加入了CSP。详情见上面的网络结构图,每个C3模块里都含有CSP结构。在Head部分,YOLOv3, v4, v5都是一样的。
2.4 yolov6
yolov6 | |
Backbone | RepVGG Block, RepBlock |
Neck | RepBlock |
Head | YOLOX改进 |
Anchor | Anchor-Free |
- 不难发现,Block中都由“Rep”的字样,这也是YOLO_v6的重点——RepVGG style结构。
- RepPANNeck: 其实就是将CSP-PAN中的CSP模块换成了Rep模块,形成了Rep-PAN罢了,这里不作赘述。
- Head: 原始 YOLOv5 的检测头是通过分类和回归分支融合共享的方式来实现的,而 YOLOX 的检测头则是将分类和回归分支进行解耦,同时新增了两个额外的 3x3 的卷积层,虽然提升了检测精度,但一定程度上增加了网络延时。
YOLOv5/YOLOX 使用的 Backbone 和 Neck 都基于 CSPNet 搭建,采用了多分支的方式和残差结构。对于 GPU 等硬件来说,这种结构会一定程度上增加延时,同时减小内存带宽利用率。因此,YOLOv6对Backbone 和 Neck 都进行了重新设计,Head层沿用了YOLO_x中的Decoupled Head并稍作修改。相当于YOLO_v5而言,v6对网络模型结构进行了大量的更改。
除了网络结构上的改进,作者还对训练策略进行了改进,应用了Anchor-free 无锚范式、SimOTA标签分配策略、SIOU边界框回归损失。
整个head借鉴了yolox中的解耦头设计,并对其做了改进,head流程如下:从neck层输出三个分支,对于每个分支,先对输出fm通过BConv层,做fm的特征融合后,分成两个分支一个分支通过BConv+Conv完成分类任务的预测,另外一个分支先通过BConv融合特征后再分成两个分支,一个分支通过Conv完成边框的回归,一个分支通过Conv完成前后背景的分类,至此三个分支再通过concate在channel层上融合,输出未经后处理的预测结果。
2.5 yolov7
整体上和YOLOV5是相似的,主要是网络结构的内部组件的更换(涉及一些新的sota的设计思想)、辅助训练头、标签分配思想等。
yolov7 | |
Backbone | ELAN结构 MP 结构 |
Neck | SPPCSPC结构, MP 结构(和backbone参数不同) Rep结构 |
Head | 类似yolov5 (anchor based ) |
Anchor | Anchor-Base |
- ELAN:在不破坏原有梯度路径的情况下不断增强网络学习能力的能力。(看着就是从CSP结构过来的)
- MP:之前下采样我们通常最开始使用maxpooling,之后大家又都选用stride = 2的3*3卷积。这里作者同时使用了max pooling 和 stride=2的conv。 需要注意backbone中的MP前后通道数是不变的。
- SPPCSPC结构:从图上可以看出来,还是在yolov4的SPP结构(五九十三结构)上优化的。
- Rep: 宽度。
2.6 yolov8
这里有两个结构图:
yolov8 | |
Backbone | C3 换成 C2f |
Neck | PAN-FPN |
Head | Decoupled-Head |
Anchor | Anchor-Free |
loss 函数 | 分类损失:VFL Loss 回归损失: DFL Loss+CIOU Loss |
样本匹配 | IOU匹配 换成 Task-Aligned Assigner匹配 |
- C2f模块:参考了C3模块以及ELAN的思想进行的设计,让YOLOv8可以在保证轻量化的同时获得更加丰富的梯度流信息。(第一个图中C2f结构更加直观)
- PAN-FPN: 相对于YOLOv5,YOLOv8将C3模块以及RepBlock替换为了C2f,同时细心可以发现,相对于YOLOv5,YOLOv8选择将上采样之前的1×1卷积去除了,将Backbone不同阶段输出的特征直接送入了上采样操作。
其他yolo模型后续再添加!