【摘记】YOLO V4


【说在最前面的话】

YOLO V4 整合了 Weighted-Residual-Connections(WRC)Cross-Stage-Partial-connections(CSP)Cross mini-Batch Normalization(CmBN)Self-adversarial-training(SAT)Mish-activationMosaic data augmentationDropBlockCIoU 满满的都是硬核操作 o(°°)oЮ||o(*°▽°*)o|Ю


Contribution

该文的贡献主要有以下几点:

  • 设计了一种快速而强有力的目标检测器,它使得任何人仅需一个 1080Ti 或者 2080Ti 即可训练这样超快且精确的目标检测器
  • We verify the influence of SOTA bag-of-freebies and bag-of-specials methods of object detection during detector training
  • 作者对一些 SOTA 方法进行了改进(含CBN、PAN,SAM)以使其更适合单GPU训练

网络结构

对于目标检测来说,在确定了 backbone 之后,需要做的就是加入额外的模块以提升感受野、更好的汇聚特征等等。所以,第一步,选择一个好的网络结构,对于目标检测器来说是十分关键。

好的检测模型需要以下几点特性:

  • 更高的输入分辨率,为了更好的检测小目标
  • 更多的卷积层,为了具有更大的感受野
  • 更多的参数,更复杂的模型能够同时检测不同大小的目标

简单来说就是,需要选择具有更大感受野、更多参数的模型作为 backbone

而从下面的表格中可以看出,把 CSPDarkNet53 作为 YOLO V4 的 backbone 是一个不错的选择。
【摘记】YOLO V4

按照上面说的,选好了 backbone,接下来的工作就是添加一些辅助的模块。在CSPDarkNet53 的基础上,作者添加了 SPP 模块,因其可以提升模型的感受野、分离更重要的上下文信息,同时还不会导致模型推理速度的下降。此外,作者还采用 PANet 中的不同backbone 级的参数汇聚方法替代 FPN

最终,

YOLOv4 = CSPDarkNet53 + SPP + path-aggregation neck (PANet) + YOLOv3-head

Some tricks

为更好的训练目标检测模型,CNN 模型通常具有以下模块:

  • Activations:ReLU、Leaky-ReLU、PReLU、ReLU6、SELU、Swish or Mish
  • Bounding box regression Loss:MSE、IoU、GIoU、CIoU、DIoU
  • Data Augmentation:CutOut、MixUp、CutMix
  • Regularization:DropOut、DropPath、Spatial DropOut、DropBlock
  • Normalization:BN、SyncBn、FRN、CBN
  • Skip-connections: Residual connections, weighted residual connections, Cross stage partial connections

作者从上述模块中做出了如下的选择:**函数方面选择 Mish;正则化方面选择 DropBlock;由于聚焦在单 GPU,故而未考虑 SyncBN

其他的改进策略

为使得 YOLOv4 更适合于单 GPU,作者还进行了其他几项额外设计与改进:

  • 引入一种新的数据增广方法:Mosaic 与自对抗训练
  • 通过GA算法选择最优超参数
  • 对现有方法进行改进以更适合高效训练和推理:改进SAM、改进PAN,CmBN

【摘记】YOLO V4
【摘记】YOLO V4
【摘记】YOLO V4
【摘记】YOLO V4