预备知识
1.non-max suppression 非极大值抑制 :抑制不是极大值的元素,搜索局部的极大值。经过非极大值抑制后,仅保留概率最大的预测结果
2.IoU 交并比:计算的是 “预测的边框” 和 “真实的边框” 的交集和并集的比值,一般约定0.5为一个可以接受的值
3.p_c 预测结果的置信概率,表示是否含有对象
4.Anchor :在目标检测任务中,输入图像经过骨干网络提取得到特征图,该图上的每个像素点,即为anchor锚点
一、yolov1 -2015
You Only Look Once:Unified, Real-Time Object Detection
code
简介
可以实现端到端的目标检测,也就是输入图片,输出检测目标。即直接从完整的图像中预测边界框和类的概率
目标检测流程
模型设计思路
模型网络设计
采用卷积神经网络来提取特征,然后使用全连接层来得到预测值
二、yolov2 -2016
YOLO9000:Better, Faster, Stronger
code
简介
YOLOV2 相对于YOLOV1 的改进主要可以分为以下三点:
1、网络结构的改进
- 在每个卷积层和激活函数层之间加入了BN层,并且不再使用droput
- 加入BN层之后,为了能够更好地对小目标的物体进行检测,YOLOV2 还提出了一个passthrough层来检测细粒度特征
2、Anchor的设计
- YOLOv2移除了YOLOv1中的全连接层而采用了卷积核anchor boxes来预测边界框
- YOLOv2采用k-means聚类方法对训练集中的边界框做了聚类分析,以寻找尽可能匹配样本的边框尺寸
3、训练策略的改进
- 采用Multi-Scale Training策略,YOLOv2可以适应不同大小的图片,并且预测出很好的结果
网络模型图
–Darknet-19
三、yolov3 -2018
YOLOv3: An Incremental Improvement
code
简介
本次最主要的改进:
- 多尺度预测(引入特征金字塔FPN)
- 更好的backbone(darknet-53,类似于ResNet引入残差结构)
- 分类器不再使用softmax(darknet-19中使用),损失函数中采用binary cross-entropy loss(二分类交叉损失熵)
–Darknet-53
四、yolov4 -2020
YOLOv4: Optimal Speed and Accuracy of Object Detection
code
简介
yolov3后,原作者退圈了,4是别的作者提出的,改进(不全):
- 新的backbone:CSPDarkNet-53,采用Cross Stage Partial Network结构。将DarkNet-53中的LeakyReLU全部换成了全新的Mish激活函数
- 采用了PAN(Path Aggregation Network)结构。原先的YOLOv3仅使用了top-down结构的FPN,而PAN是在此基础上加了bottom-up的结构。
- YOLOv4使用了Mosaic Augmentation,数据增强
CSPDarknet53
五、yolov5 -2020
简介
六、yolov6 -2022
YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications
code
简介
YOLOv6 是美团视觉智能部研发的一款目标检测框架,致力于工业应用
改进:
- 统一设计了更高效的 Backbone 和 Neck :受到硬件感知神经网络设计思想的启发,基于 RepVGG style设计了可重参数化、更高效的骨干网络 EfficientRep Backbone 和 Rep-PAN Neck。
- 优化设计了更简洁有效的 Efficient Decoupled Head,在维持精度的同时,进一步降低了一般解耦头带来的额外延时开销。
- 在训练策略上,采用 Anchor-free 无锚范式,同时辅以 SimOTA标签分配策略以及 SIoU边界框回归损失来进一步提高检测精度。
网络模型图
七、yolov7 -2022
YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors
code
简介
八、yolov8 -2023
简介
- 提供了一个全新的 SOTA 模型,包括 P5 640 和 P6 1280 分辨率 的目标检测网络和基于 YOLACT 的实例分割模型。和 YOLOv5 一样,基于缩放系数也提供了 N/S/M/L/X 尺度的不同大小模型,用于满足不同场景需求
- 骨干网络和 Neck 部分可能参考了 YOLOv7 ELAN 设计思想,将 YOLOv5 的 C3 结构换成了梯度流更丰富的 C2f 结构,并对不同尺度模型调整了不同的通道数,属于对模型结构精心微调,不再是无脑一套参数应用所有模型,大幅提升了模型性能。不过这个 C2f 模块中存在 Split 等操作对特定硬件部署没有之前那么友好了
- Head 部分相比 YOLOv5 改动较大,换成了目前主流的解耦头结构,将分类和检测头分离,同时也从 Anchor-Based 换成了 Anchor-Free
- Loss 计算方面采用了 TaskAlignedAssigner 正样本分配策略,并引入了 Distribution Focal Loss
- 训练的数据增强部分引入了 YOLOX 中的最后 10 epoch 关闭 Mosiac 增强的操作,可以有效 地 提升精度
网络模型图