最新公告
  • 欢迎光临数据科学与编程,我们是数据学科学兴趣交流小组立即加入我们
  • 目标检测YOLO-V4算法详解

    论文题目《YOLOv4: Optimal Speed and Accuracy of Object Detection》
    论文地址:https://arxiv.org/abs/2004.10934
    论文代码:https://github.com/AlexeyAB/darknet

    内容目录

    1 Introduction2 Related work2.1 Object detection models2.2 Bag of freebies2.3 Bag of Specials3 Methodology3.1 Selection of architecture3.2 Selection of BoF and BoS3.3 Additional improvement3.4 YOLOv44 Experiment and Result5 实现版本

    1 Introduction

    YOLO V4建立了一个更高效更强大的目标检测模型,使用单张1080Ti或者2080Ti就可以训练,验证了SOTA的Bag-of-Freebies和Bag-of-Specials的有效性,修改了SOTA方法,使其更适合在单卡环境下训练,相对于YOLO V3在准确率上提升了10个百分点左右。

    2 Related work

    2.1 Object detection models

    文章首先抛出一张目标检测的概述图,包含One-Stage一阶段和Two-Stage两阶段目标检测算法,之前的各种算法我们都介绍过,包括R-CNN、Fast R-CNN、Faster R-CNN、SSD、 YOLO V1、YOLO V2、YLOL V3。

    接下来是讲Bag of freebies和Bag of Specials,

    2.2 Bag of freebies

    Bag of freebies 就是只改变训练策略,增加训练开销,但是不增加推理测试的开销获得更好的精度,称为“免费赠品”,用到的改进有数据增强(光度畸变、几何畸变、Cutmix)、正则项(DropBlock)、难例挖掘(数据不平衡)、损失函数等。

    2.3 Bag of Specials

    Bag of Specials就是指增加很少的计算量(插件模块、后处理)来极大的提高模型精度的方法,称为“特价袋”,用到的改进有增大感受野(SPP)、attention注意力机制、shortcut跳跃连接、激活函数、NMS非极大值抑制、归一化方法等。

    3 Methodology

    YOLO V4提出了两种实时神经网络的选择:
    对于 GPU,在卷积层中使用少量组(1-8 组):CSPResNeXt50 / CSPDarknet53;
    对于 VPU,使用了分组卷积(grouped-convolution),但避免使用 Squeeze-and-excitement(SE)块。具体而言,它包括以下模型:EfficientNet-lite / MixNet / GhostNet / MobileNetV3。

    3.1 Selection of architecture

    该研究的目标是尽量找到输入分辨率、网络深度、模型参数量等的平衡,高输入分辨率、更深的网络、更多的模型参数量往往能得到更佳的精度和性能。而理论上感受野更大、参数量更多模型的变现也会更好。
    此外,多尺度的感受野可以同时匹配不同大小的目标、兼顾目标的上下文信息、增加图像点与最终激活之间的连接数。


    作者对比了三种Backbone model(CSPResNext50、CSPDarknet53、EfficientNet-B3),最终选择了感受野、参数量和速度都比较好的CSPDarknet53模型作为主干网络,并且添加SPP block(Spatial Pyramid Pooling)空间金字塔结构,增加了多尺度的感受野但不降低运行速度,整合上下文信息,将YOLO V3中的FPN替换为PANet作为不同层的参数整合方法。

    最终作者选择CSPDarknet53作为主要网络,添加SPP模块、PANet路径整合neck,YOLOv3(基于anchor)head作为YLOLv4的整体架构。

    3.2 Selection of BoF and BoS

    为了提升目标检测卷积神经网络的性能,目前比较有效的trick有:
    Activation激活函数: ReLU, leaky-ReLU, parametric-ReLU, ReLU6, SELU, Swish, or Mish。
    Bounding box Regression loss边界框回归损失: MSE, IoU, GIoU, CIoU, DIoU
    Data augmentation数据增强: CutOut, MixUp, CutMix
    Regularization method正则化方法: DropOut, DropPath, Spatial DropOut, or DropBlock
    Normalization归一化方法: Batch Normalization(BN), Cross-GPU Batch Normalization(CGBN or SyncBN), Filter Response Normalization (FRN), or Cross-Iteration Batch Normalization(CBN)
    Skip-connection跳跃连接方式:残差连接、加权残差连接、多输入加权残差连接、Cross stage 局部连接(CSP)。
      由于PReLU和SELU难以训练,并且ReLU6是专门为量化网络设计的,从激活函数中去除这几种。而在正则化方法中,DropBlock的效果是最优的。对于归一化方法的选择,由于需要单卡训练,因此不考虑SyncBN。

    3.3 Additional improvement

    为了让目标检测模型更加适合在单卡进行训练,作者还做了如下改进:
    1) 提出新的数据增强方法Mosaic和自对抗训练SAT
    2) 采用遗传算法来选择最优的超参数
    3) 改进SAM、PAN和Cross-mini-Batch Normalization使训练更高效


    Mosaic可以同时融合4张图像进行数据增强,可以增强目标检测器的检测能力,减少对mini-batch的依赖,而Cutmix只能融合2张图像。

    SAT自对抗训练也是一种新的数据增强方法,包含两个阶段,第一阶段用神经网络进行前向传播和反向传播并修改图像,进行一次对抗训练,第二阶段对修改后的图像进行正常目标检测训练。
    CmBN是对CBN的改进,它只在当前单个batch的数据进行积累,BN是对当前mini-batch进行归一化,CBN是对当前以及往前三个mini-batch进行归一化。

    SAM从spatial-wise attention空间注意力机制修改为point-wise attention点注意力机制,直接使用卷积核Sigmoid进行激活,对应点相乘,并不使用Pooling,并将PAN中的shortcut连接替换为concate级联。

    下图为空间注意力机制:

    下图为PANet:

    3.4 YOLOv4

    这部分介绍了YOLOv4的细节构成。YOLOv4包含:
    1)Backbone主干网络:CSPDarknet53
    2)Neck颈部:SPP,PAN
    3)Head头部:YOLOv3


    总体来看,YOLO v4使用了如下结构:
    主干网络的BoF(Bag of Freebies):CutMix和Mosaic数据增强, DropBlock正则化, 标签平滑(Class label smoothing)
    主干网络的BoS(Bag of Specials):Mish激活, Cross-stage partial connections (CSPNet), Multiinput weighted residual connections(MiWRC)
    目标检测端的BoF(Bag of Freebies):CIoU-loss, CmBN, DropBlock正则化, Mosaic数据增强, Self-Adversarial Training, 去除边框敏感性(Eliminate grid sensitivity,见实验部分的解释), 多anchor回归(之前只选最大的), 余弦退火学习率调整(Cosine annealing scheduler), 使用遗传算法最优化超参数, 随机输入大小
    目标检测端的BoS(Bag of Specials):Mish激活, SPP-block, SAM-block, PAN通道融合, DIoU-NMS

    4 Experiment and Result

    作者测试了不同训练改进技术对ImageNet(ILSVRC 2012 val)数据集进行分类器准确性测试,然后对MS COCO(test-dev 2017)数据集检测器的准确性进行了测试。
    不同目标检测器的速度和准确性对比结果,YOLOv4位于P-are最优曲线上,在速度和精度方面都优于最快和最精确的检测。

    5 实现版本

    以下是部分YOLO v4的实现版本,来自Github
    TensorFlow 2.0
    https://github.com/xiao9616/yolo4_tensorflow2

    Pytorch
    https://github.com/Minerva-J/pytorch-YOLOv4
    fork自Tianxiaomo/pytorch-YOLOv4,目前还没做任何修改

    Keras
    https://github.com/Ma-Dan/keras-yolo4
    大家可以自行测试~~~

    本站上原创文章未经作者许可,不得用于商业用途,仅做学习交流使用,本站免责声明。转载请注明出处,否则保留追究法律责任的权利。《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
    数据科学与编程 » 目标检测YOLO-V4算法详解

    发表评论

    • 52会员总数(位)
    • 320资源总数(个)
    • 25本周发布(个)
    • 3 今日发布(个)
    • 333稳定运行(天)

    提供最优质的博文资源集合

    立即阅览 了解详情