yolo 系列笔记

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
多尺度预测

yolo 系列笔记_第1张图片

参考:目标检测算法——YOLOv3_Clichong的博客-CSDN博客_yolov3算法

2.2 yolov4

yolo 系列笔记_第2张图片

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

yolo 系列笔记_第3张图片

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都是一样的。

参考:YOLOv5网络详解_yolov5网络结构详解_太阳花的小绿豆的博客-CSDN博客

2.4 yolov6

yolo 系列笔记_第4张图片

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层上融合,输出未经后处理的预测结果。

参考:YOLO_v6讲解_yolov6_江南綿雨的博客-CSDN博客

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: 宽度。

参考:目标检测算法——YOLOV7——详解_TigerZ*的博客-CSDN博客_yolov7

2.6 yolov8

这里有两个结构图:

yolo 系列笔记_第5张图片

 yolo 系列笔记_第6张图片

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 v8详解_樱花的浪漫的博客-CSDN博客

(17)目标检测算法之 YOLOv8 算法改进详细解析_明月醉窗台的博客-CSDN博客

其他yolo模型后续再添加!

你可能感兴趣的:(目标检测,深度学习,学习笔记,YOLO,深度学习,人工智能)