YOLO4

一、论文核心创新点

1. 集大成的技术融合

YOLOv4将目标检测领域的先进技术进行跨模块优化组合 ,提出**Bag of Freebies(BOF,训练技巧)Bag of Specials(BOS,网络设计)**两大策略,在单GPU上实现实时检测的同时,精度超越同期模型(如COCO数据集上AP达43.5%,FPS约65)。

2. 网络结构革新
  • CSPDarknet53 :结合CSPNet(跨阶段部分网络)与Darknet-53,通过特征图拆分与跨阶段融合,减少计算量的同时增强梯度流动,提升特征复用效率。
  • SPP模块:引入空间金字塔池化(1×1、5×5、9×9、13×13最大池化),扩大感受野,分离上下文特征,提升多尺度目标检测能力。
  • FPN+PAN:双向特征金字塔网络,FPN自顶向下传递语义信息,PAN自底向上补充空间细节,实现多尺度特征深度融合。
3. 激活函数与正则化
  • Mish激活函数 :Mish(x)=x⋅tanh⁡(ln⁡(1+ex))Mish(x) = x \cdot \tanh(\ln(1+e^x))Mish(x)=x⋅tanh(ln(1+ex)),比ReLU更平滑、可微分,缓解梯度消失,提升深层网络的特征表达能力。
  • DropBlock:随机丢弃连续区域的特征(如3×3或5×5块),模拟目标遮挡,迫使模型学习非连续特征,减少过拟合。
4. 损失函数与后处理优化
  • CIoU Loss :在DIoU基础上增加长宽比约束 ,公式为CIoU=1−IOU+d2c2+αvCIoU = 1 - IOU + \frac{d^2}{c^2} + \alpha vCIoU=1−IOU+c2d2+αv,其中vvv衡量宽高比差异,α\alphaα为权重系数,实现重叠面积、中心点距离、宽高比的联合优化。
  • DIoU-NMS:非极大值抑制中结合中心点距离,避免误删密集目标框,提升拥挤场景检测精度。
5. 数据增强与训练策略
  • Mosaic增强:将4张图片随机缩放、裁剪、拼接,增加小目标数量,丰富背景多样性,同时减少对BN层的依赖。
  • Self-Adversarial Training(SAT):分两步训练,先在原图添加噪音生成对抗样本,再用噪音图训练模型,提升鲁棒性。
  • CmBN(交叉小批量归一化):跨多个mini-batch计算均值和方差,同步多GPU训练的统计量,加速收敛。

二、核心模块详解

1. Backbone:CSPDarknet53
  • 结构:基于Darknet-53,在每个残差块前将特征图按通道拆分为两部分,一部分通过残差路径(含1×1卷积降维和3×3卷积),另一部分直接跨阶段连接,最终拼接输出。
  • 优势
    • 减少计算量(仅一半特征参与残差计算),降低显存占用。
    • 增强梯度流动性,避免特征重复,提升模型学习能力。
2. Neck:SPP + FPN+PAN
  • SPP模块
    • 对CSPDarknet53输出的13×13×1024特征图,分别进行1×1、5×5、9×9、13×13最大池化(步长1,padding保证尺寸不变),拼接后得到13×13×2048特征图,扩大感受野并分离上下文特征。
  • FPN+PAN
    • FPN:自顶向下将深层语义特征(13×13)上采样后与浅层特征(26×26、52×52)拼接,增强语义信息。
    • PAN:自底向上将浅层细节特征(52×52)通过卷积后与高层特征(26×26、13×13)拼接,补充空间信息,最终输出三尺度特征图(13×13、26×26、52×52)。
3. Head:多尺度检测
  • 输出维度:每个尺度预测3个Anchor Boxes,每个Box包含4个坐标偏移量、1个置信度、80个类别概率,总输出为3×(4+1+80)=255通道。
  • Anchor分配:通过K-means聚类COCO数据集生成9个Anchor,按尺度分配(13×13对应大目标Anchor:116×90、156×198、373×326;26×26对应中目标:30×61、62×45、59×119;52×52对应小目标:10×13、16×30、33×23)。

三、算法公式解释

1. CIoU Loss(边界框损失)

CIoU=1−IOU+d2c2+αv CIoU = 1 - IOU + \frac{d^2}{c^2} + \alpha v CIoU=1−IOU+c2d2+αv

  • 参数解析
    • IOUIOUIOU:交并比,衡量重叠面积。
    • d2c2\frac{d^2}{c^2}c2d2:预测框与真实框中心点距离的归一化值,推动中心点对齐。
    • vvv:宽高比差异项,v=4π2(arctan⁡wtht−arctan⁡wphp)2v = \frac{4}{\pi^2} \left( \arctan \frac{w_t}{h_t} - \arctan \frac{w_p}{h_p} \right)^2v=π24(arctanhtwt−arctanhpwp)2,其中wt,htw_t, h_twt,ht为真实框宽高,wp,hpw_p, h_pwp,hp为预测框宽高。
    • α\alphaα:平衡系数,α=v(1−IOU)+v\alpha = \frac{v}{(1 - IOU) + v}α=(1−IOU)+vv,动态调整宽高比约束的权重。
2. 分类损失与置信度损失
  • 分类损失 :采用二元交叉熵(BCE) ,适配多标签场景(如目标同时属于"猫"和"宠物"),公式为:
    Losscls=∑c∈classesBCEwithLogitsLoss(pc,p^c) Loss_{cls} = \sum_{c \in classes} BCEwithLogitsLoss(p_c, \hat{p}_c) Losscls=c∈classes∑BCEwithLogitsLoss(pc,p^c)
    其中pcp_cpc为真实类别标签(0或1),p^c\hat{p}_cp^c为模型输出概率。
  • 置信度损失 :BCE损失,计算预测置信度与真实置信度(IOU)的差异:
    Lossconf=Iobj(C−C^)2+λnoobjInoobj(C−C^)2 Loss_{conf} = \mathbb{I}{obj}(C - \hat{C})^2 + \lambda{noobj}\mathbb{I}{noobj}(C - \hat{C})^2 Lossconf=Iobj(C−C^)2+λnoobjInoobj(C−C^)2
    其中Iobj\mathbb{I}
    {obj}Iobj表示目标存在的网格,λnoobj=0.5\lambda_{noobj}=0.5λnoobj=0.5为负样本权重。

四、数据处理细节

1. 数据集与预处理
  • 数据集:以COCO为主(118k训练图+5k验证图),兼容PASCAL VOC,支持多标签标注。
  • 预处理
    • 多尺度缩放:训练时随机选择320-608px的输入尺寸(步长32),推理时可灵活调整(如608px对应20FPS)。
    • 归一化:像素值÷255归一化到0-1,配合CmBN标准化数据。
2. 数据增强
  • Mosaic增强
    1. 随机选择4张图片,分别进行随机缩放(0.1-1.0倍)、裁剪、色域调整(亮度/对比度/饱和度)。
    2. 将4张图片按2×2网格拼接(如左上、右上、左下、右下),超出边界的部分剪裁。
    3. 调整标签坐标,确保边界框在拼接后的图片中有效。
  • Self-Adversarial Training(SAT)
    1. 对抗阶段:在原始图像上添加微小噪音,生成对抗样本,使模型预测错误。
    2. 正常训练阶段:用对抗样本和原始标签训练模型,提升抗干扰能力。
3. 标签编码
  • Anchor匹配:真实框与Anchor的IOU>0.5时,该Anchor负责预测;若所有Anchor的IOU≤0.5,选择IOU最大的Anchor。
  • 偏移量编码 :与YOLOv3一致,x=σ(tx)+cxx = \sigma(t_x) + c_xx=σ(tx)+cx,w=pwetww = p_w e^{t_w}w=pwetw,其中cxc_xcx为网格坐标,pwp_wpw为Anchor宽。
  • 类别编码:二进制标签(0或1),适配sigmoid多标签预测。
4. 正则化与优化
  • Label Smoothing :将独热编码标签软化,公式为:
    ysmoothed=(1−ϵ)ytrue+ϵK y_{smoothed} = (1 - \epsilon)y_{true} + \frac{\epsilon}{K} ysmoothed=(1−ϵ)ytrue+Kϵ
    其中ϵ=0.1\epsilon=0.1ϵ=0.1,KKK为类别数,防止模型过度自信。
  • 优化器:使用SGD,初始学习率0.01,余弦退火衰减,动量0.9,权重衰减0.0005。
相关推荐
喜欢吃豆8 小时前
掌握本地化大语言模型部署:llama.cpp 工作流与 GGUF 转换内核全面技术指南
人工智能·语言模型·架构·大模型·llama·llama.cpp·gguf
aneasystone本尊8 小时前
重温 Java 21 之记录模式
人工智能
懒羊羊不懒@8 小时前
JavaSe—List集合系列
java·开发语言·数据结构·人工智能·windows
东坡肘子8 小时前
惊险但幸运,两次!| 肘子的 Swift 周报 #0109
人工智能·swiftui·swift
IT_陈寒8 小时前
Redis 7.0的这个新特性让我处理百万级QPS轻松了50%,你可能还不知道!
前端·人工智能·后端
少林码僧8 小时前
1.1 大语言模型调用方式与函数调用(Function Calling):从基础到实战
人工智能·ai·语言模型·自然语言处理·llm·1024程序员节
liliangcsdn8 小时前
如何基于llm+mysql构建轻量级全文搜索
数据库·人工智能·mysql
CCF ODC8 小时前
CNCC 2025|开源AI基础设施论坛成功举办
人工智能·开源·ai infra·ccf odtc·ccf开源发展技术委员会
wjykp8 小时前
part1~2 神经网络基础
人工智能·深度学习·神经网络