一文了解YOLO-v4目标检测

一、YOLO-v4主要做了什么?

通俗的讲,就是说这个YOLO-v4算法是在原有YOLO目标检测架构的基础上,采用了近些年CNN领域中最优秀的优化策略,从数据处理、主干网络、网络训练、**函数、损失函数等各个方面都有着不同程度的优化,虽没有理论上的创新,但是会受到许许多多的工程师的欢迎,各种优化算法的尝试。文章如同于目标检测的trick综述,效果达到了实现FPS与Precision平衡的目标检测 new baseline。

①论文主要有以下三点贡献:[1]

  1. 开发了一个高效而强大的模型,使得任何人都可以使用一张1080Ti或者2080Ti GPU去训练一个超级快速和精确的目标检测器。
  2. 验证了一系列state-of-the-art的目标检测器训练方法的影响。
  3. 修改了state-of-the-art方法,使得他们在使用单个GPU进行训练时更加有效和适配,包括CBN,PAN,SAM等。

②作者把训练的方法分成了两类:

  1. Bag of freebies:只改变训练策略或者只增加训练成本,比如数据增强。
  2. Bag of specials:插件模块和后处理方法,它们仅仅增加一点推理成本,但是可以极大地提升目标检测的精度。

附:论文地址及主流框架的实现源码[2]

  1. YOLOv4论文地址
  2. AlexeyAB大神的项目地址
  3. YOLOv4的TensorFlow2.0实现
  4. YOLOv4的TensorFlow实现:地址一地址二
  5. YOLOv4的PyTorch实现:地址一地址二
  6. YOLOv4(TensorFlow后端)的Keras实现
  7. YOLOv4-QtGUI
  8. 将YOLOv4模型转换到tflite中使用

二、网络结构

  1. 上图总结了近些年的目标检测检测器的优化改进手段的方向结构组成,同时在下面对几个重要改进的部分列出了改进的方法,如下:[3]

一文了解YOLO-v4目标检测

目前主流two-stage检测器的主要架构

  • Input部分:Image,Patches,Images Pyramid(图像金字塔)
  • Backbone部分:VGG16,ResNet-50,SpineNet,EfficientNet-B0 / B7,CSPResNeXt50,CSPDarknet53
  • neck部分:
    • Additional blocks:SPP,ASPP,RFB,SAM
    • Path-aggregation blocks:FPN,PAN,NAS-FPN,Fully-connected FPN,BiFPN,ASFF,SFAM
  • Heads部分:
    • Dense Predictions(one-stage):
      • RPN,SSD,YOLO,RetinaNet (基于anchor)
      • CornerNet,CenterNet,MatrixNet,FCOS(无anchor)
    • Sparse Predictions(two-stages):
      • Faster R-CNN,R-FCN,Mask R-CNN(基于anchor)
      • RepPoints(无anchor)

2. 下图为 yolov4 网络结构的采用的算法,其中保留了yolov3的head部分,修改了主干网络为CSPDarknet53,同时采用了SPP(空间金字塔池化)的思想来扩大感受野,PANet作为neck部分。

一文了解YOLO-v4目标检测

Yolo-v4网络架构图

3. 下图为yolov4在技术处理的思维导图:

一文了解YOLO-v4目标检测

YOLO-v4的backbone与detector的主要技术实现

三、算法知识点相关释义[4]

  1. BoF(bag of freebies)

在文中是指那些能够提高精度而不增加推断时间的技术。

  • 比如数据增广的方法:图像几何变换、Cutout、grid mask等,
  • 网络正则化的方法:Dropout、Dropblock等,
  • 类别不平衡的处理方法,
  • 难例挖掘方法,
  • 损失函数的设计等,

2. BoS(bag of specials)

是指那些增加稍许推断代价,但可以提高模型精度的方法。

  • 比如增大模型感受野的SPP、ASPP、RFB等,
  • 引入注意力机制Squeeze-and-Excitation (SE) 、Spatial Attention Module (SAM)等 ,
  • 特征集成方法SFAM , ASFF , BiFPN等,
  • 改进的**函数Swish、Mish等,
  • 或者是后处理方法如soft NMS、DIoU NMS等,

3.在目标检测训练中,通常对CNN的优化改进方法

  • **函数:ReLU,leaky-ReLU,parameter-ReLU,ReLU6,SELU,Swish或Mish
  • bbox回归loss函数:MSE,IoU,GIoU,CIoU,DIoU
  • 数据增强:CutOut,MixUp,CutMix
  • 正则化方法:DropOut,DropPath,Spatial DropOut或DropBlock
  • 通过均值和方差对网络**进行归一化:Batch Normalization (BN), Cross-GPU Batch Normalization (CGBN or SyncBN), Filter Response Normalization (FRN), orCross-Iteration Batch Normalization (CBN)
  • 跨连接:Residual connections, Weightedresidual connections, Multi-input weighted residualconnections, or Cross stage partial connections (CSP)

4.CSPDarknet53

由论文可知,CSPDarknet53包含29个卷积层,725*725的感受野,27.6M参数。

一文了解YOLO-v4目标检测

backbone对比

5.关于CmBN

BN是对当前mini-batch进行归一化。CBN是对当前以及当前往前数3个mini-batch的结果进行归一化,本文提出的CmBN则是仅仅在这个Batch中进行累积。在消融实验中,CmBN要比BN高出不到一个百分点。

一文了解YOLO-v4目标检测

CmBN

6.关于SAM

Attention机制中的CBAM, CBAM含有空间注意力机制和通道注意力机制,

SAM就是其中的空间注意力机制.

一文了解YOLO-v4目标检测

SAM

7. PANet

PANet融合的时候使用的方法是Addition, 详解见:CVPR 2018 PANet

YOLOv4算法将融合的方法由加法改为乘法。

一文了解YOLO-v4目标检测

PANet

 

四、算法的实验效果

  1. 使用MS COCO数据集,在每一行不同的GPU上,使用不同的网络跟YOLOv4进行的对比结果:(横轴为FPS,纵轴为AP值)

一文了解YOLO-v4目标检测

2.因为不同的算法公布时可能在不同的GPU上进行测试,作者根据不同的GPU(Maxwell/Pascal/Volta)分别列出了YOLOv4与其他算法的更详细的比较,即Table 8、9、10,帧率大于等于30的用蓝底标出。

一文了解YOLO-v4目标检测

图一

一文了解YOLO-v4目标检测

图二

一文了解YOLO-v4目标检测

图三

YOLOv4 算法在实时目标检测算法中精度最高,实现了精度和速度的最佳平衡。

参考

  1. ^YOLOv4论文学习记录 https://blog.csdn.net/heiheiya/article/details/105812825
  2. ^YOLOv4 的各种实现汇总 https://mp.weixin.qq.com/s?__biz=MzIwMTE1NjQxMQ==&mid=2247506196&idx=2&sn=d5de504af0edf82697c6f0ecfcb50d12&chksm=96f0ab40a18722569c8cd15c03529e1d29d11b66be526b26b53d443611babda339a8fc37ab23&mpshare=1&scene=1&srcid=0427URofQY95wbfbpZELWNGk&sharer_sharetime=1587994657016&sharer_shareid=c69c9a4255c32bdac8d66c388b9626a6#rd
  3. ^YOLOv4全文解读与翻译总结 https://mp.weixin.qq.com/s?__biz=MzU2NTc5MjIwOA==&mid=2247489140&idx=1&sn=7ec16d43b182dd56b2d975bb3cd05adf&chksm=fcb70acbcbc083ddbab8be612388135e4cc5ebee00b301755404c66f3da51f7ebd6a17f89eba&mpshare=1&&srcid=&sharer_sharetime=1587900548327&sharer_shareid=8a987be85d15ba23c8b37882f59430b7&from=timeline&scene=2&subscene=1&clicktime=1587901287&enterid=1587901287#rd
  4. ^YOLOv4来了 https://mp.weixin.qq.com/s?__biz=MzUzODkxNzQzMw==&mid=2247484251&idx=1&sn=ae336111261f1a92a015a41a08f9eb80&chksm=fad12c0dcda6a51b8ec884c9603078f1d5d7d64a5b221fad629d3f324274a75fa690a097e6c8&mpshare=1&scene=1&srcid=0424xB4HCCRQGCiHFv5UzWaG&sharer_sharetime=1587701862634&sharer_shareid=c69c9a4255c32bdac8d66c388b9626a6#rd