zoukankan      html  css  js  c++  java
  • 【学习笔记】【转载】YOLOv4与YOLOv5的创新点

    YOLOv4

    YOLOv4的三大贡献:

    1. 设计了强大而高效的检测模型,任何人都可以用 1080Ti 和 2080Ti训练这个超快而精准的模型。
    2. 验证了很多近几年 SOTA 的深度学习目标检测训练技巧。
    3. 修改了很多 SOTA 的方法, 让它们对单GPU训练更加高效,例如 CmBN,PAN,SAM等。

    作者用一个图概括了单阶段和双阶段目标检测网络的差别,two-stage的检测网络,相当于在one-stage的密集检测上增加了一个稀疏的预测器。

    One-stage检测网络和two-stage检测网络

    bag of freebies

    指只在训练阶段耗时增多,但不影响推理耗时的技巧。

    数据增强

    1. 光度变换。包括了调整亮度、对比度、色相、饱和度和噪点。
    2. 几何变换。包括了随机缩放、裁剪、翻转和旋转。
    3. 模拟目标遮挡
      • Random erase
      • CutOut
      • Hide and Seek。通过划分Grid patches,并在训练的时候隐藏部分patches。
      • Grid Mask
    4. 图像融合
      • Mixup
      • CutMix
      • Mosaic(四宫格)
    5. 正则化
      • DropOut
      • DropConnect
      • DropBlock。相比于DropOut的随机位置丢弃,DropBlock是将整个局部区域进行删减丢弃。其借鉴了CutOut,将CutOut应用到网络中的每一个特征图上。而且并不是用固定的归零比率,而是在训练时以一个小的比率开始,随着训练过程线性的增加这个比率。
    6. 处理数据不平衡
      • 两阶段网络用难例挖掘(Hard Example Mining),但是不适合单阶段检测
      • Focal Loss
    7. 标签平滑边界框回归的损失函数
      • IOU loss
      • GIOU loss
      • DIOU loss
      • CIOU loss

    bag of specials

    指微微提高了推理耗时,却显著提升性能的技巧。

    1. 增强感受野
      • SPP
      • ASPP
      • RFB
    2. 注意力模块
      • 通道注意力
      • 空间注意力
    3. 特征融合
      • 跳跃连接
      • FPN
      • SFAM
      • ASFF
      • BiFPN
    4. 激活函数
      • LReLU(解决当输入小于0时ReLU梯度为0的情况)
      • PReLU(解决当输入小于0时ReLU梯度为0的情况)
      • ReLU6(专门为量化网络设计)
      • hard-swish(专门为量化网络设计)
      • SELU(对神经网络进行自归一化)
      • Swish(连续可微激活函数)
      • Mish(连续可微激活函数)
    5. 后处理
      • NMS
      • Soft NMS
      • DIOU NMS。在Soft NMS的基础上将重心距离的信息添加到删选BBox的过程中。

    YOLOv4网络结构

    YOLOv4

    YOLOv4

    YOLOv4整个网络架构组成:

    • Backbone: CSPDarknet53。在Yolov3主干网络Darknet53的基础上,借鉴2019年CSPNet(Cross Stage Partial Network)的经验产生的Backbone结构,其中包含了5个CSP模块。
    • Neck: SPP, PAN
    • Head: YOLOv3

    Backbone: CSPDarknet53

    Cross Stage Partial DenseNet

    YOLOv4在主干网络Backbone采用CSPDarknet53网络结构,主要有三个方面的优点:

    1. 增强CNN的学习能力,使得在轻量化的同时保持准确性。
    2. 降低计算瓶颈
    3. 降低内存成本

    作者只在Backbone中采用了Mish激活函数,网络后面仍然采用Leaky_relu激活函数。Yolov4作者实验测试时,使用CSPDarknet53网络在ImageNet数据集上做图像分类任务,发现使用了Mish激活函数的TOP-1和TOP-5的精度比没有使用时精度要高一些。因此在设计Yolov4目标检测任务时,主干网络Backbone还是使用Mish激活函数。

    Neck

    YOLOv4的Neck结构主要采用了SPP模块、FPN+PAN的方式。

    YOLOv4的作者在使用(608 imes 608)大小的图像进行测试时发现,在COCO目标检测任务中,以0.5%的额外计算代价将AP50增加了2.7%,因此YOLOv4中也采用了SPP模块。

    FPN+PAN

    YOLOv4在FPN层的后面还添加了一个自底向上的特征金字塔。这样结合操作,FPN层自顶向下传达强语义特征,而特征金字塔则自底向上传达强定位特征,从不同的主干层对不同的检测层进行参数聚合。

    原本的PANet网络的PAN结构中,两个特征图结合是采用shortcut操作,而Yolov4中则采用concat(route)操作。

    Head头

    YOLOv4 各部分使用到的Bags

    1. Bag of Freebies (BoF) for backbone:
    • CutMix、Mosaic data augmentation
    • DropBlock regularization
    • Class label smoothing
    1. Bag of Specials (BoS) for backbone:
    • Mish activation
    • Cross-stage partial connections (CSP)
    • Multi-input weighted residual connections (MiWRC)
    1. Bag of Freebies (BoF) for detector:
    • CIoU-loss
    • CmBN
    • DropBlock regularization
    • Mosaic data augmentation
    • Self-Adversarial Training。在两个前向后向阶段运行。在第一阶段,神经网络改变原始图像而不是网络权值。通过这种方式,神经网络对其自身执行对抗性攻击,改变原始图像,以制造图像上没有所需对象的欺骗。在第二阶段,训练神经网络,以正常的方式在修改后的图像上检测目标。
    • Eliminate grid sensitivity
    • Using multiple anchors for a single ground truth
    • Cosine annealing scheduler
    • Optimal hyperparameters
    • Random training shapes
    1. Bag of Specials (BoS) for detector:
    • Mish activation
    • SPP-block
    • SAM-block
    • PAN path-aggregation block
    • DIoU-NMS
  • 相关阅读:
    设计模式 --单例模式
    Neor Profile SQL 中文汉化
    office online server 安装部署整合到到C#项目
    C# 线程池
    WinForm版 屏幕截图
    golang-nsq高性能消息队列
    【Go Time】Go语言里的条件语句else、switch
    【Go Time】Go语言常量定义关键字const
    【Go Time】Go定义变量
    【Go Time】Go语言里的空接口
  • 原文地址:https://www.cnblogs.com/lvjincheng/p/14974867.html
Copyright © 2011-2022 走看看