YOLO v4学习笔记

1、概述

论文链接点我


有一些可以提高卷积神经网络准确率的特征仅适用于某一类模型、某些问题或者小规模的数据集;然而某些特征(比如批归一化残差连接)适用于大多数模型、任务或是数据集。我们假设这些通用的特征包括:

  • 加权残差连接( W e i g h t e d − R e s i d u a l − C o n n e c t i o n s Weighted-Residual-Connections WeightedResidualConnections)( W R C WRC WRC)
  • 跨阶段部分连接( C r o s s − S t a g e − P a r t i a l − c o n n e c t i o n s Cross-Stage-Partial-connections CrossStagePartialconnections)( C S P CSP CSP
  • 交叉小批量标准化( C r o s s m i n i − B a t c h N o r m a l i z a t i o n Cross mini-Batch Normalization CrossminiBatchNormalization)( C m B N CmBN CmBN
  • 自对抗训练( S e l f − a d v e r s a r i a l − t r a i n i n g Self-adversarial-training Selfadversarialtraining)( S A T SAT SAT
  • Mish激活( M i s h − a c t i v a t i o n Mish-activation Mishactivation)

使用以下新功能:

  • W R C WRC WRC
  • C S P CSP CSP
  • C m B N CmBN CmBN
  • S A T SAT SAT
  • M i s h Mish Mish a c t i v a t i o n activation activation
  • 马赛克数据增强
  • D r o p B l o c k DropBlock DropBlock正则化
  • C l o U CloU CloU损失

并结合其中一些特性来实现最新结果:在 T e s l a Tesla Tesla V 10 V10 V10上, M S MS MS C O C O COCO COCO数据集以65FPS的实时速度获得43.5%AP(65.7% A P 50 AP_{50} AP50)。



YOLOv4的结果图见上。
这篇论文的贡献如下:

  1. 这个目标检测模型高效且强大。每个人都可以使用1080Ti或者2080Ti GPU来训练超快且准确的目标检测器。
  2. 在训练过程中,我们验证了最新的目标检测方法免费袋 B a g − o f − F r e e b i e s Bag-of-Freebies BagofFreebies)和特殊袋 B a g − o f − S p e c i a l Bag-of-Special BagofSpecial)的影响。
  3. 对现有的训练方法进行了改进,使其更加高效,更适合单个GPU的训练,包括 C B N CBN CBN P A N PAN PAN S A M SAM SAM

现代的检测器通常包括两部分:

  1. I m a g e N e t ImageNet ImageNet上进行预训练的主干( b a c k b o n e backbone backbone
  2. 用于预测对象类别和包围盒( b o u n d i n g bounding bounding b o x e s boxes boxes)的头部( h e a d head head

对于头部部分,可以分为两类:

  1. one-stage object detector
  2. two-stage object detector

近年来发展起来的目标检测器通常在主干头部之间插入一些,这些层通常用于采集不同阶段的特征图。所以我们可以称这些层为颈部 n e c k neck neck

一个普通的物体检测器由以下几部分组成:

  • 输入( I n p u t Input Input):图像,补丁( P a t c h e s Patches Patches),图像金字塔( I m a g e Image Image P y r a m i d Pyramid Pyramid
  • 主干( B a c k b o n e s Backbones Backbones): V G G 16 VGG16 VGG16 R e s N e t − 50 ResNet-50 ResNet50 S p i n e N e t SpineNet SpineNet E f f i c i e n t N e t − B 0 / B 7 EfficientNet-B0/B7 EfficientNetB0/B7 C S P R e s N e X t 50 CSPResNeXt50 CSPResNeXt50 C S P D a r k n e t 53 CSPDarknet53 CSPDarknet53
  • 颈部( n e c k neck neck
    • 其他块: S P P SPP SPP A S P P ASPP ASPP R F B RFB RFB S A M SAM SAM
    • 路径聚合块( P a t h − a g g r e g a t i o n Path-aggregation Pathaggregation b l o c k s blocks blocks): F P N FPN FPN P A N PAN PAN N A S − F P N NAS-FPN NASFPN F u l l y − c o n n e c t e d Fully-connected Fullyconnected F P N FPN FPN B i F P N BiFPN BiFPN A S F F ASFF ASFF S F A M SFAM SFAM
  • 头部:
    • 密集检测( D e n s e Dense Dense P r e d i c t i o n Prediction Prediction)( o n e − s t a g e one-stage onestage):
      • R P N RPN RPN S S D SSD SSD Y O L O YOLO YOLO R e t i n a N e t ( a n c h o r RetinaNet(anchor RetinaNet(anchor b a s e d ) based) based)
      • C o r n e r N e t CornerNet CornerNet C e n t e r N e t CenterNet CenterNet M a t r i x N e t MatrixNet MatrixNet F C O S ( a n c h o r FCOS(anchor FCOS(anchor f r e e ) free) free)
    • 稀疏检测( S p a r s e Sparse Sparse P r e d i c t i o n Prediction Prediction)( t w o − s t a g e two-stage twostage):
      • F a s t e r Faster Faster R − C N N R-CNN RCNN R − F C N R-FCN RFCN M a s k Mask Mask R − C N N ( a n c h o r R-CNN(anchor RCNN(anchor b a s e d ) based) based)
      • R e p P o i n t s ( a n c h o r RepPoints(anchor RepPoints(anchor f r e e ) free) free)

在这里插入图片描述

2、Bag of freebies

这个短语可以翻译成免费袋。它是指在不增加推理成本的情况下,能使目标检测器获得更高的精度。我们称这些只改变训练策略或者只提高训练成本的方法为“免费袋”。


目标检测通常采用的“免费袋”是数据增强,数据增强的目的是增加输入图像的可变性,使所设计的目标检测模型对来自不同环境的环境具有较强的鲁棒性。


还有一些“免费袋”用于解决语义分布偏差,有时会出现不同类别之间存在数据不平衡的问题,这类问题通常通过两阶段目标检测器中的硬反例挖掘(negative example mining)或者在线硬例挖掘来解决。这类样例挖掘方法不适用于单阶段目标检测器,因为他们属于密集预测体系结构。针对此问题,焦点损失被提出用于解决不同种类存在数据不平衡问题。另外一个重要的问题是独热表示(one-hot)很难表达不同类别之间关联度的关系,独热表示经常用于执行标注,解决这类问题的方法是利用标签平滑方法将硬标签转换为软标签进行训练,使模型更加健壮。另外为了获得更好的软标签,标签精化网络被提出。


最后一些“免费袋”是包围盒(BBox)回归的目标函数。具体方法列举详见论文。

3、Bag of specials

仅增加少量推理成本,就能显著提高目标检测准确率的方法,如在网络中插入模块后处理方法,这样的方法称之为“特殊袋”。

通常在网络中插入模块是为了增强模型中某些属性,比如扩大感受野,引入注意力机制,增强特征整合能力等等。后处理是筛选模型预测结果的一种方法。

用于增强感受野的常用模块:

  • SPP
  • ASPP
  • RFB

目标检测中常用的注意模块分为两种:

  • 通道注意力
    • 代表:Squeeze-and-Excitation (SE)
    • SE模块可以将ResNet50在ImageNet图像分类任务中的能力提高1%的top-1精度,仅增加2%的计算成本,但是在GPU上通常会增加10%左右的推理时间,所以SE模块更适合在移动设备上使用。
  • 逐点注意力
    • 代表:Spatial Attention Module (SAM)
    • SAM额外花费0.1%的计算成本,在ImageNet图像分类任务上可以提高 R e s N e t 50 − S E ResNet50-SE ResNet50SE 0.5%的top-1精度。然而它完全不影响GPU上的推理速度。

特征整合现在有很多集成了特征金字塔的轻量级模块:

  • SFAM
  • ASFF
  • BiFPN

目标检测中常用的后处理方法是NMS

4、方法

我们提出了实时神经网络的两种选择:

  • 对于GPU,我们在卷积神经网络中使用少量的组(1-8):
    • C S P R e s N e X t 50 CSPResNeXt50 CSPResNeXt50
    • C S P D a r k n e t 53 CSPDarknet53 CSPDarknet53
  • 对于VPU,我们使用分组卷积,但是我们应该避免使用SE,如:
    • E f f i c i e n t N e t − l i t e EfficientNet-lite EfficientNetlite
    • M i x N e t MixNet MixNet
    • G h o s t N e t GhostNet GhostNet
    • M o b i l e N e t MobileNet MobileNet

4.1、架构选择

我们的目标是找到输入网络分辨率卷积层数参数 f i l t e r _ s i z e 2 ∗ f i l t e r s ∗ c h a n n e l / g r o u p s filter\_size^2*filters*channel/groups filter_size2filterschannel/groups)和 层输出(filters)之间的最佳平衡。
另外一个目标是为不同的检测器级别,例如(FPN,PAN,ASFF,BiFPN)选择可以增加感受野的 a d d i t i o n a l   b l o c k s additional\ blocks additional blocks和来自不同骨干的最佳方法。


与分类器相比,检测器需要以下各项:

  • 更高的输入网络大小(分辨率)——用于检测多个小对象
  • 更多层——有更高的感受野去包围增大的输入网络
  • 更多参数——使模型具有更大的容量,可以在单个图像中检测多个不同大小的对象

在这里插入图片描述
上图是 C S P R e s N e X t 50 CSPResNeXt50 CSPResNeXt50, C S P D a r k n e t 53 CSPDarknet53 CSPDarknet53, 和 E f fi c i e n t N e t B 3 EfficientNet B3 EfcientNetB3三者的比较。 C S P R e s N e x t 50 CSPResNext50 CSPResNext50 仅仅包含 16个3×3的卷积层, 一个425×425感受野和20.6 M的参数。而 C S P D a r k n e t 53 CSPDarknet53 CSPDarknet53拥有29个3 × 3的卷积层, 一个 725 × 725感受野和27.6 M参数。以上让我们选择了 C S P D a r k n e t 53 CSPDarknet53 CSPDarknet53神经网络作为检测器的骨干的最佳模型。


不同大小的感受野的影响如下:

  • 等于物体的大小——允许查看整个对象
  • 等于网络大小——允许查看对象周围的上下文
  • 超过网络大小——增加图像点和最终激活之间的连接数

影响这部分翻译的不知道准不准确,看英文就知道意思了:

  • Up to the object size - allows viewing the entire object
  • Uptonetworksize-allowsviewingthecontextaround the object
  • Exceeding the network size - increases the number of connections between the image point and the final activation

我们在CSPDarknet53添加SPP模块,因为它能显著的提高感受野的大小,分离出最重要的上下文特征。并且几乎不会降低网络运行速度。

舍弃YOLO v3中的FPN网络,YOLO v4中我们使用PANet作为不同检测器级别的不同骨干的参数聚合方法。

重点来了
最终,我们选择了CSPDarknet53骨干网,SPP附加模块,PANet路径聚合颈部和YOLO v3中的头部作为YOLO v4的体系架构。

4.2、BoF和BoS的选择

为了改进目标检测训练,CNN通常使用如下方法:

  • 激活函数
    • ReLU
    • leaky-ReLU
    • parametric-ReLU
    • ReLU6
    • SELU
    • Swish
    • Mish
  • 包围盒回归损失
    • 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)
    • Cross-Iteration Batch Normalization (CBN)
  • 跳跃链接
    • Residual connections
    • Weighted residual connections
    • Multi-input weighted residual connections
    • Cross stage partial connections (CSP)

对于激活函数,由于PReLU和SELU训练难度大,而ReLU6是专门为量化网络设计的,所以都舍去。
对于正则化方法,我们选择DropBlock作为我们正则化方法。
对于归一化方法,我们只关注一个GPU的训练策略,所以不考虑syncBN

4.3、其他改进

为了使所设计的检测器更适合在单GPU上进行训练,我们做出了额外的改进,如下:

  • 介绍了一种新的数据增强方法:Mosaic和自对抗训练(SAT)
  • 在应用遗传算法时,我们选择最佳的超参数
  • 我们修改了SAM、PAN和交叉小批量归一化(CMBN)方法

在这里插入图片描述

Mosaic是一种混合四张训练图像为一张的新型数据增强方法。而CutMix仅混合了两张。这样允许其检测正常上下文之外的对象。此外,批量归一化可以从每层上的四个不同图像计算激活统计数据,极大的减少了对大量小批量的需求。

自对抗训练(SAT)也代表了一种新的数据增强的方法,他在前后两个阶段操作。在第一阶段,神经网络改变原始图像而不是网络权值,通过这种方式,神经网络对其自身执行对抗性攻击,改变原始图像以造成图像上没有所需要对象的假象。在第二阶段,训练神经网络,以正常方式在修改后的图像上检测目标。


在这里插入图片描述

CmBN是CBN的修改版本,如上图所示,定义为Cross mini-Batch Normalization (CmBN)。它仅在单批次中的小批次之间收集统计数据。


在这里插入图片描述
我们修改SAM从空间注意力模型到点注意力模型,并将PAN的跳跃连接替换成串联,如上图所示。

4.4、YOLO v4

YOLO v4包括以下部分:

  • Backbone: CSPDarknet53
  • Neck: SPP, PAN
  • Head: YOLOv3

YOLO v4用到的:

  • 用于骨干的“免费袋”
    • CutMix and Mosaic 数据增强
    • DropBlock 正则化
    • Class label smoothing(类别标签平滑)
  • 用于骨干的“特殊袋”
    • Mish激活
    • Cross-stage partial connections (CSP)
    • 多输入残差连接 (MiWRC)
  • 用于检测器的“免费袋”
    • CIoU-loss
    • CmBN
    • DropBlock regularization
    • Mosaic data augmentation
    • Self-Adversarial Training
    • Eliminate grid sensitivity
    • Using multiple anchors for a single ground truth
    • Cosineannealingscheduler
    • Optimalhyperparameters
    • Random training shapes
  • 用于检测器的“特殊袋”
    • Mish activation
    • SPP-block
    • SAM-block
    • PAN path-aggregation block
    • DIoU-NMS

5、实验部分

在ImageNet (ILSVRC2012val)数据集上测试了各种改进技术对分类器精度的影响。在 MS COCO (test-dev 2017) 数据集上测试了各种改进技术对检测器精度的影响。

5.1、实验设置


在ImageNet图像分类实验中,默认的超参数为:

  • 训练步数(training steps)8,000,000步;
  • 批量(batch size)和小批量(mini-batch size)分别是128和32;
  • 采用多项式衰减学习率调度策略(polynomial decay learning rate scheduling strategy)初始学习率为0.1;
  • 预热步骤(warm-up steps)1000;
  • 动量(momentum)和权重(weight)衰减分别设置为0.9和0.005。

我们所有的BoS实验都使用与上面默认设置相同的超参数,在BoF实验中,我们再增加50%的训练步数


在MS COCO对象检测实验中,默认的超参数如下:

  • 训练步数(training steps)是500,500;
  • 采用步长衰减学习率调度策略(step decay learning rate scheduling strategy),初始学习率为0.01,在40万步和45万步分别乘以0.1倍;
  • 动量(momentum)和权重(weight)衰减分别设置为0.9和0.0005。

所有架构都使用单个GPU来执行批大小为64的多尺度训练,而小批量大小为8或4,具体取决于架构和GPU内存限制。

除了采用遗传算法进行超参数搜索实验外,其他的实验都采用默认设置。遗传算法使用YOLOv3-SPP算法进行带GIoU损失的训练,并搜索300 epochs 的min-val 5K集(search 300 epochs for min-val 5k sets)。

遗传算法实验采用:

  • 0.00261学习率
  • 0.949动量
  • 0.213IoU阈值
  • 0.07损失归一化

5.2、不同特征对分类训练的影响

在这里插入图片描述
从上图可知,通过引入CutMix和Mosaic数据增强类标签平滑和Mish激活函数等功能,提高了分类器的精度。因此,我们用于分类器训练的骨干“免费袋”包括以下内容:

  • CutMix and Mosaic data augmentation
  • Class label smoothing

此外,我们使用Mish激活作为补充选项,如下两表所示:
在这里插入图片描述

5.3、不同特征对检测器训练的影响

在这里插入图片描述

如上图所示,我们通过研究在不影响FPS的情况下提高探测器精度的不同特征,显著扩展了BoF列表。

  • S:消除栅格敏感度,公式: b x = σ ( t x ) + c x b_x = \sigma(t_x)+c_x bx=σ(tx)+cx b y = σ ( t y ) + c y b_y=\sigma(t_y)+c_y by=σ(ty)+cy。其中 c x c_x cx c y c_y cy始终是整数,在YOLOv3中被用于计算目标的坐标,因此要使 b x b_x bx值接近 c x c_x cx c x + 1 c_{x+1} cx+1的值,需要提高 t x t_x tx的绝对值。我们通过将Sigmoid乘以大1.0的因子来解决这个问题,从而消除了目标在其上不可检测的网格的影响。
  • M:Mosaic数据增强——在训练过程中使用4幅图像拼接,而不是单幅图像。
  • GA:遗传算法——用遗传算法选择前10%时间段网络训练中最优的超参数
  • LS:类别标签平滑——对sigmoid使用类标签平滑
  • CBN:CmBN——使用交叉小批次标准化收集整个批次内的统计信息,而不是收集单个小批次内的统计信息。
  • CA:余弦退火调度器(Cosine annealing scheduler)——改变正弦训练过程中的学习率
  • DM:动态小批量(Dynamic mini-batch size )——利用随机训练形状在小分辨率训练过程中自动增加小批量大小
  • OA:优化的锚点——使用优化的锚点进行512*512网络分辨率的训练
  • GIoU,CIoU,DIoU,MSE:使用不同的损失算法进行边界盒回归。

在这里插入图片描述

进一步实验表明,在我们实验中,当使用SPP,PAN和SAM时,检测器的性能最佳,如上图所示。

5.4、不同骨干和预训练权重对检测器训练的影响

在这里插入图片描述
进一步研究了不同骨干模型对检测器精度的影响,如上图,我们发现分类精度最好的模型并不总是检测器精度最好的模型。

首先,针对不同特征训练的CSPResNeXt50模型比CSPDarknet53模型具有更高的分类精度,但是CSPDarknet53模型在目标检测方面表现出更高的准确率。

其次,使用BoF和Mish对CSPResNeXt50模型的分类器进行训练可以提高其分类精度,但是进一步将这些预先训练好的权重用于检测器训练会降低检测器的精度。然而,使用了BoF和Mish进行 CSPDarknet53分类器的训练提高了分类器和使用该分类器预训练权重的检测器准确率。所以最终结果是CSPDarknet53比CSPResNeXt50更适合探测器。

5.5、不同小批量对检测器训练的影响

在这里插入图片描述
上图展示了用不同的小批量训练的模型获得的结果。
从上图可知,在添加BoF和BoS训练策略后,小批量大小对检测器的性能几乎没有影响。这一结果表明,在引入BoF和BoS之后,不需要再使用昂贵的GPU(还是要使用的,可以使用便宜的)进行训练了。

6、结果

在这里插入图片描述
上图显示了与其他最先进的物体检测器获得的结果的比较。YOLOv4位于帕累托最优曲线(Pareto optimality curve)上,在速度和精度方面都优于最快和最精确的检测器。

Since different methods use GPUs of different architectures for inference time verification, we operate YOLOv4 oncommonlyadoptedGPUsofMaxwell,Pascal,andVolta architectures, and compare them with other state-of-the-art methods. Table 8 lists the frame rate comparison results of usingMaxwellGPU,anditcanbeGTXTitanX(Maxwell) or Tesla M40 GPU. Table 9 lists the frame rate comparison results of using Pascal GPU, and it can be Titan X (Pascal), Titan Xp, GTX 1080 Ti, or Tesla P100 GPU. As for Table 10, it lists the frame rate comparison results of using Volta GPU, and it can be Titan Volta or Tesla V100 GPU.

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7、其他

这里有一篇博文介绍了YOLOv1-YOLOv4,有兴趣的可以看看:

  • https://blog.csdn.net/wjinjie/article/details/107509243
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值