在YOLOV1发布后,作者并没有满足于此,而是持续对YOLO进行了改进。
YOLOV2:Better, Faster, Stronger
YOLOv2(又称YOLO9000)发表于2017年CVPR,是YOLO系列的第二代版本。其论文标题“Better, Faster, Stronger”直观体现了其三大改进目标:更高的精度、更快的速度和更强的能力。YOLOv2在mAP(平均精度)上达到了当时最高水平,同时速度远超前代,成为实时目标检测领域的标杆。
Better部分:精度提升的改进
1.引入BN层(Batch Normalization Layer)
作用:
BN层对每一层的输入进行归一化处理,通过规范化每批数据的均值和方差(均值为0,方差为1),加速训练收敛并减少过拟合。
具体操作:
对输入 xxx 计算 x^=x−μσ2+ϵ\hat{x} = \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}}x^=σ2+ϵx−μ,再通过可学习的参数 γ\gammaγ 和 β\betaβ 进行缩放和偏移。
作者在卷积层后加入BN层,使训练过程更稳定,收敛速度更快。同时,BN层减少了对Dropout等正则化技术的依赖,作者甚至在YOLOv2中移除了Dropout层。
BN层的引入降低了对参数初始化的敏感性,允许使用更高的学习率。提供轻微正则化效果,提升模型泛化能力。
简单来说,BN层就像一个“调音师”,让网络各层输出更“和谐”,训练更稳、更快。
2.更高分辨率的分辨器
改进:
YOLOv1使用448×448的输入分辨率,而YOLOv2调整为416×416(适配特征图网格划分),并在训练时使用更高分辨率的图像。更高的分辨率使网络能捕捉更细致的特征,尤其提升了对小目标的检测能力。
“分辨器”在这里指网络的输入分辨率,训练时的高分辨率输入增强了模型的细节感知能力。推理时,图像会被resize到416×416,平衡精度与速度。高分辨率就像“高清相机”,让网络“看得更清楚”,对小物体更加敏感。
3.基于Anchor的目标边界框预测
由于YOLOv1直接回归边界框坐标,学习难度大,尤其当目标形状多样时效果不佳。因此为了改进,YOLOv2引入了Anchor Boxes(锚框),预定义一组固定形状的框,网络只需预测这些框的偏移量(offset)和置信度。这种方式将复杂的边界框预测简化为对预定义框的“微调”,降低了学习难度。
采用Anchor后,召回率(recall)从YOLOv1的81%提升到88%,显著提高了检测能力。就像“模板”,网络只需调整模板形状,预测更准、更快。
4.使用聚类方法选择Anchor
传统方法(如Faster R-CNN)手动设计Anchor Boxes,可能不适配特定数据集的目标形状。YOLOv2使用K-means聚类对训练集中的真实边界框进行分析,自动选择最优的Anchor Boxes形状。
聚类目标:使Anchor与真实框的IOU(交并比)最大化。
距离度量:自定义距离公式:d=1−IOU(box,centroid)d = 1 - \text{IOU}(box, centroid)d=1−IOU(box,centroid),IOU越大,距离越小,表示Anchor与真实框越匹配。
K-means聚类就像“量身定制”,根据数据集自动挑选最合适的“模板框”,提升预测精度。
5.细粒度特征与Passthrough层
深层特征图分辨率低,适合检测大目标;浅层特征图分辨率高,适合小目标。YOLOv2引入Passthrough层,将高分辨率的浅层特征图与低分辨率的深层特征图连接,进行特征融合。类似于ResNet中的shortcut连接,Passthrough层以前面高分辨率特征图为输入,连接到后面的低分辨率特征图上。增强了对小目标的检测能力,提升了模型的多尺度适应性。
Passthrough层就像“望远镜 + 显微镜”,融合粗细特征,让网络“大处着眼,小处着手”。
YOLOV3:集大成者
YOLOV3发布于2018年,相比YOLOv2 的基础上进行了多项改进,显著提升了目标检测的准确性和灵活性,同时保持了实时性。
YOLOv3 在 YOLOv2 的基础上引入了以下关键改进:
1.特征提取器升级:Darknet-53
YOLOv2 使用 Darknet-19 作为骨干网络,而 YOLOv3 升级为更强大的 Darknet-53,包含 53 个卷积层,特征提取能力更强。
此外,作者还提供了轻量级版本 Tiny-Darknet,适用于资源受限的设备。
Darknet-53 是 YOLOv3 的骨干网络,由 53 个卷积层组成。其基本构建单元称为 DBL(Darknet Basic Layer),包括:
- 卷积层:1×1 和 3×3 卷积交替使用,1×1 卷积用于降维,3×3 卷积用于特征提取。
- 批量归一化(BN)层:在每个卷积层后加入 BN层,规范化特征,防止过拟合。
- Leaky ReLU 激活函数:缓解梯度消失问题,提升非线性表达能力。
与darknet-19相比,做出了如下改进:首先,darknet-53摒弃了最大池化层,改用步长为2的卷积层进行下采样,来保留更多空间信息。其次,引入了残差网络的思想,通过跳跃连接加深网络层次,提取更深层特征,同时避免梯度消失或爆炸。
2.多尺度检测:特征金字塔网络(FPN)
YOLOv3 借鉴了特征金字塔网络(FPN)的思想,通过多尺度特征融合实现对不同大小目标的检测(通过上采样和张量拼接,将浅层高分辨率特征与深层低分辨率特征融合)。
网络输出三个不同尺度的特征图(Y1、Y2、Y3),对应三种层的特征图,分别用于检测大、中、小目标。
3.多标签分类:逻辑回归替代 Softmax
YOLOv2 使用 Softmax 假设目标只属于一个类别(单标签分类)。YOLOv3 改用逻辑分类器(Sigmoid),对每个类别独立进行二分类,支持多标签分类。实现方式:每个类别的输出经过 Sigmoid 函数映射到 [0, 1]。如果输出值大于阈值(例如 0.5),则认为目标属于该类别。
在复杂场景中(如交通场景),目标可能同时属于多个类别(例如“汽车”和“卡车”),多标签分类更灵活。
4.损失函数优化
位置损失仍采用平方和误差(Sum-Square Error),而置信度和类别预测改为交叉熵损失(Cross-Entropy Loss),提升分类性能,更适合判断是否有目标的二分类问题。
这些改进使得 YOLOv3 在性能上显著优于前代,成为目标检测领域的里程碑。从 YOLOv1 到 YOLOv3,每一代的性能提升都离不开骨干网络的改进。YOLOv3 在保持实时性的同时兼顾高精度,使其广泛应用于目标检测任务。
YOLOV4:命运多舛
2020年,YOLO系列的作者Redmon在推特上发表声明,出于道德方面的考虑,从此退出CV界。在疫情的原因加持下,本以为YOLO就此完结,然而Alexey Bochkovskiy等人与Redmon取得联系,正式将他们的研究命名为YOLOv4。
YOLOv4 集成了多种深度学习技巧,这些“Tricks”包括网络架构优化、数据增强和损失函数改进等,旨在提升检测速度和精度的平衡。
1.网络架构优化
- WRC(Weighted-Residual-Connections,重权残差连接):
研究表明,WRC 通过加权残差连接,强调网络中某些特征的传递,可能提升特征提取能力。
适用范围广,适合大多数模型和任务。 - CSP(Cross-Stage-Partial-connections,跨阶段部分连接):
CSP 是 YOLOv4 骨干网络 CSPDarknet53 的核心设计,通过部分连接不同网络阶段,减少计算量并提升特征流。
具体实现:将特征图分成两部分,一部分直接传递,另一部分经过卷积处理后融合。 - CmBN(Cross mini-Batch Normalization,跨小批量归一化):
CmBN 是一种批量归一化变体,允许在单 GPU 上高效训练,适合资源受限的场景。
与传统 BN 相比,CmBN 在小批量训练中更稳定。
2.训练优化
- SAT(Self-adversarial-training,自我对抗训练):
SAT 通过生成对抗样本并在训练中加入,增强模型对噪声和扰动的鲁棒性。
研究显示,SAT 帮助模型泛化到新特征,提升检测性能。 - Mish 激活函数:
Mish 激活函数公式为 Mish(x)=x⋅tanh(softplus(x))\text{Mish}(x) = x \cdot \tanh(\text{softplus}(x))Mish(x)=x⋅tanh(softplus(x)),平滑且无上界。
相比 ReLU,Mish 可能提升网络深度表达能力,实验表明在 YOLOv4 中表现优于传统激活函数。 - Mosaic 数据增强:
Mosaic 数据增强将四张图像随机裁剪并拼接成一张,模拟复杂场景。
增加训练样本多样性,特别适合检测小目标或密集场景。 - DropBlock 正则化:
DropBlock 是 Dropout 的扩展,在特征图上随机丢弃连续区域,强制网络学习更鲁棒的特征。
例如,隐藏图像部分(如狗的头部),迫使网络依赖其他特征。
3.损失函数改进
- CIoU 损失(Complete Intersection over Union Loss):
CIoU 损失公式为 LCIoU=1−IoU+d2C2+αvL_{CIoU} = 1 - \text{IoU} + \frac{d^2}{C^2} + \alpha vLCIoU=1−IoU+C2d2+αv,其中:
ddd 是预测框和真实框中心距离。
CCC 是最小外接框对角线长度。
v=4π2(arctanwgthgt−arctanwh)2v = \frac{4}{\pi^2} \left( \arctan \frac{w^{gt}}{h^{gt}} - \arctan \frac{w}{h} \right)^2v=π24(arctanhgtwgt−arctanhw)2 考虑长宽比。
α=v(1−IoU)+v\alpha = \frac{v}{(1 - \text{IoU}) + v}α=(1−IoU)+vv 为权衡参数。
相比 IoU 损失,CIoU 考虑了框中心距离和长宽比,加速收敛并提升定位精度。
YOLOV4的其他具体改进:
1.多 Anchor 负责单个 GT
YOLOv3 中,一个 Anchor 只负责一个 Ground Truth(GT),可能导致正负样本不均衡。YOLOv4 允许多个 Anchor 负责同一个 GT,只要 IoU(anchori,GTj)>threshold\text{IoU}(\text{anchor}_i, \text{GT}_j) > \text{threshold}IoU(anchori,GTj)>threshold。Anchor 数量不变,但正样本比例增加,缓解了正负样本不均衡问题,提升召回率。就像多个“模板框”可以同时匹配一个目标,增加训练数据的多样性。
2.边界框预测公式改进
YOLOv2 和 v3 中,bx,byb_x, b_ybx,by 使用 Sigmoid 函数,输出范围为 (0, 1),无法预测到边界。
YOLOv4 修改公式为:
bx=1.1⋅σ(tx)+cxb_x = 1.1 \cdot \sigma(t_x) + c_xbx=1.1⋅σ(tx)+cx
by=1.1⋅σ(ty)+cyb_y = 1.1 \cdot \sigma(t_y) + c_yby=1.1⋅σ(ty)+cy
其中 σ(tx)\sigma(t_x)σ(tx) 是 Sigmoid 函数输出,乘以 1.1 扩展范围,允许预测框覆盖整个网格。这样提升了边界框预测的灵活性,特别适合边界目标。
3.损失函数的改进历程
YOLOv1中使用的是 MSE 损失(平方和误差)计算边界框回归,简单但不直接优化 IoU。后来引入 IoU 损失,直接优化重叠度,但当框无重叠时,IoU 为 0,无梯度回传。
GIoU 损失(Generalized IoU)考虑最小外接框,解决无重叠问题。
DIoU 损失(Distance IoU)进一步加入框中心距离,加速收敛。
CIoU 损失在 DIoU 基础上加入长宽比一致性,综合考虑几何因素。
YOLOv4 的选择是采用 CIoU 损失,实验表明其在 COCO 数据集上表现优于 GIoU 和 DIoU。
在解决 IoU 损失的梯度消失问题的同时考虑框中心距离,加速训练收敛。加入长宽比项,提升定位精度。