YOLOv4: Optimal Speed and Accuracy of Object Detection
YOLOv4:物体检测的最佳速度和准确性
看过这篇论文之后,顺便做个翻译,解读和总结,方便需要时查看,文中有些地方直接引用原文,原因在于能够直接对其中的一些专有名词拥有直观的感受,相信做机器视觉的大家都能够看懂。如有问题和理解不到位的地方,欢迎大家指出,共同讨论。
一些技巧仅针在某些模型、某些问题、小规模数据集;
而一些技巧通用,包括:批处理归一化,残差连接
这些通用技巧包括:
本文使用新的技巧:
普通的物体检测器是由几个部分组成:
Input: Image, Patches, Image Pyramid
Backbones: VGG16, ResNet-50, SpineNet, EffificientNet-B0/B7, CSPResNeXt50,CSPDarknet53
Neck:
Heads:
Dense Prediction (one-stage):
◦ RPN , SSD , YOLO , RetinaNet (anchor based)
◦ CornerNet , CenterNet , MatrixNet, FCOS (anchor free)
Sparse Prediction (two-stage):
◦ Faster R-CNN , R-FCN , Mask R-CNN (anchor based)
◦ RepPoints [87] (anchor free)
作者把所有的调优手段分为了两大类“Bag of freebies(免费礼包) ”和“Bag of specials(特价礼包)”
传统的目标检测器的训练都是在离线进行的,因此,研究者们总是喜欢研究更好的训练方法,使之目标检测器在不增加推理损耗的情况下达到更好的精度。我们将这些方法称为只需转变训练策略或只增加训练量成本为 " bag of freebies "。
数据增强:photometric distortions和geometric distortions
光度畸变:调整亮度、对比度,加入了色相、饱和度和噪声
几何畸变:随机缩放、裁剪、翻转和旋转
- 一些人重点放在了模拟object occlusion,他们在图像分类和目标检测中取得了好的结果
例如:random erase和CutOut,可以随机选取图像中的矩形区域
hide-and-seek和grid mask,随机或均匀地选择多个图像中的矩形区域,并将其替换为全0,若将类似概念运用到特征图中,就是DropOut,DropConnect和DropBlock方法。
- 一些人提出多张图像一起使用数据的方法扩增
例如:MixUp,使用两个图像乘以不同系数的乘法叠加,并调节标签
CutMix,为了覆盖裁剪后的图像到其他图像的矩形区域,并根据混合区的大小调整标签
style transfer GAN,
问题
不同于上面的方法,其他方法专门解决数据集中的语义分布偏差。在处理语义困扰的问题上,有一个很重要的问题是不同类别之间的数据不平衡。
解决
two-stage检测器处理这个问题,通过hard negative example mining或online hard example mining。
但是example mining method不适用于一级目标检测器,因为这种检测器属于密集预测架构,Linet al 提出focal loss解决了数据不平衡问题。
问题
one-hot编码很难表达出类与类之间关联程度问题
解决
label smoothing方案是将硬标签转化为软标签进行训练,为了获得更好的软标签,lslam将知识蒸馏的概念引入标签席话网络设计中。
问题
最后一个bag of freebies是objective function of Bounding Box (BBox)回归。
检测器通常使用MSE对BBOX的中心点和宽高进行回归,至于anchor-based方法,它是为了估算出对应的偏移量。但是,要直接估计BBOX的点坐标值,是要将这些点作为独立变量,但实际上未考虑对象本身的完整性。
解决
IoU损失[90],同时考虑预测的Bbox面积和ground truth Bbox面积覆盖。IoU损失会计算到BBox的四个坐标点,然后连接到生成一个完整的代码。因为IOU是一个尺度不变表示,它可以解决当传统方法计算 { x c e n t e r , y c e n t e r , w , h } \{ x_{center},y_{center},w,h \} {xcenter,ycenter,w,h}的 l 1 l_1 l1或 l 2 l_2 l2损失导致尺度增加。
改进建议找到能同时覆盖预测Bbox和ground truth Bbox的最小面积Bbox,并使用这个Bbox作为分母,以取代IoU损失的分母。至于 DIoU 损失[99],它另外还包括考虑物体中心的距离,CIoU损失[99],另一方面,同时考虑到重叠区域,中心点之间的距离,以及长宽比。CIoU可以在BBox回归问题上实现更好的收敛速度和精度。
对于那些插入模块和后期处理方法只会增加少量的推理成本,但可显著提高目标检测的准确性,我们称其为 “Bag of specials”。
插入模块
一般来说,这些插入模块是用来增强某些属性,例如: enlarging receptive field, introducing attention mechanism, or strengthening feature integration capability, etc。而后处理是一种筛选模型预测结果方法。可用于扩大感受野:SPP、ASPP和RFB
注意力模块
在目标检测中经常使用的注意力模块,通常分为channel-wise注意力和point-wise注意力。代表模型是Squeeze-and-Excitation (SE) and Spatial Attention Module (SAM) 。
特征融合
在特征融合方面,早期的做法是用skip connection或hyper-column来融合低级和高级特征。由于FPN等多尺度预测方法已成为流行,许多轻量级模块集成了不同的特征金字塔。包括SFAM、ASFF和BiFPN。SFAM的主要思想是利用SE模块在多尺度叠加特征图上来执行channel-wise级别re-weighting。至于ASFF,它用softmax惊醒点对点re-weighting,然后添加不同尺度的特征图。在BiFPN中,提出multi-input weighted residual connections执行scale-wise level re-weighting然后再添加不同尺度的特征图。
激活函数
2010年,Nair and Hinton提出了ReLU,随后LReLU,PReLU,ReLU6,Scaled Exponential Linear Unit (SELU)、Swish、hard-Swish、和Mish等
LReLU和PReLU其主要目的是:是为了解决梯当输出小于零时,ReLU的梯度为零。至于ReLU6和Hard-Swish,它们是专为量化网络设计。对于自归一化的神经网络,提出了SELU的激活函数满足子归一化目的。有一点需要注意的是,Swish和Mish都是连续可微激活函数。
后处理方法
常用NMS,它可以用于过滤那些预测错误的BBoxes,并只保留较高的候选BBoxes。NMS努力改进的方式与以下目标函数的优化方法一致。
基本目的是生产系统中的神经网络的快速运行速度和并行计算的优化
我们提出了两种实时神经网络。
我们的目的是寻求最佳平衡,在网络输入分辨率、卷积层数、卷积层数、参数(滤波器大小^2滤波器通道/组)和层输出(过滤器)的数量之中。
下一个目标是选择更多的block扩大感受野,为不同级别的backbone、不同的检测器级别:如FPN、PAN、ASFF、BiFPN找到参数聚合的最佳方法。一个最佳的分类参考模型是并不总是最佳的检测器。相比之下,检测器需要满足:
不同大小的感受野的影响总结如下:
我们将SPP模块添加到CSPDarknet53上,因为它大大增加了感受野,分离出最重要的context特征,几乎不会导致降低网络运行速度。我们使用PANet作为来自不同backbone的参数聚合方法而不是YOLOv3中使用的FPN。最后,我们选择CSPDarknet53主干,SPP添加模块,PANet path-aggregation neck和YOLOv3(anchor based)头作为YOLOv4架构。
今后,我们计划对探测器的Bag of freebies(Bof)的内容进行大幅度的扩展,从理论上可以解决一些问题,提高探测器的精度,并按顺序进行 以实验的方式检查每个特征的影响。
我们不使用跨GPU批量标准化(CGBN或SyncBN)或昂贵的专用设备。 这使任何人都能在以下方面重现我们的最新成果常规图形处理器,例如 GTX 1080Ti或RTX 2080Ti。
为了改进目标检测训练方法,CNN通常用以下方法:
Training activation function: PReLU and SELU较难训练,ReLU6特别适合为量化网络而设计。
Reqularization:DropBlock
为了适合单GPU训练,做了额外的设计和仿真设计
Mosaic:混合了四个训练图像,代表了一种新的数据增强方法,而CutMix只混合了两个输入图像,这允许他探测到正常内容之外的物体。此外,batch normalization从每层上的4个不同的图像计算激活数据,显著减少了对大batch size的需要。
Self-Adversarial Training(SAT):以2个前向操作阶段的方式进行操作。
第一阶段:神经网络改变的是原始图像而不是网络权重,这样神经网络对其自身进行对抗性攻击,改变原有的形象,创造出图像上没有物体的欺骗假象。
第二阶段:神经网络以通常方式训练物体
Cross mini-Batch Normalization (CmBN)
mBN是CBN的修改版,在图4中,定义为Cross mini-Batch Normalization(CmBN),这只收集一个批次内mini-batches之间的数据。
组成部分:
YOLOv4使用:
测试了不同的训练改进的影响。包括(ILSVRC 2012年val)ImageNet数据集分类准确性,然后是MS COCO(test-dev 2017)数据集的检测准确性。
ImageNet默认超参数如下:
超参数 | 细节 |
---|---|
训练步数 | 8,000,000 |
batch size | 128 |
mini-batch size | 32 |
the polynomial decay learning rate scheduling strategy | initial learning rate 0.1 |
warm-up steps | 1000 |
momentum | 0.9 |
weight decay | 0.005 |
BoS experiments | default |
比较了LReLU、Swish和Mish的效果 | |
BoF experiments | add an additional 50% training steps |
验证MixUp, CutMix, Mosaic, Bluring数据增强、和label smoothing regularization方法 |
MS COCO默认超参数:
超参数搜索使用遗传算法,所有其他实验使用默认设置。遗传算法实验使用YOLOv3-SPP以GIoU损失进行训练,对min-val 5k数据搜索 300轮。对于所有的实验,我们只使用一个GPU训练,因此,诸如syncBN这样的技术可以优化多GPU训练并未使用。
超参数 | 细节 |
---|---|
训练步数 | 500500500 |
step decay learning rate scheduling strategy | initial learning rate 0.01,并分别在40万步和45万步时乘以系数0.1 |
momentum | 0.9 |
weight decay | 0.0005 |
mini-batch size | 8或4 |
searched learning rate | 0.00261 |
momentum | 0.949 |
IoU threshold for assigning ground truth | 0.213 |
loss normalizer | 0.07 |
We have verifified a large number of BoF, including grid sensitivity elimination, mosaic data augmentation, IoU threshold, genetic algorithm, class label smoothing, cross mini-batch normalization, self-adversarial training, cosine annealing scheduler, dynamic mini-batch size, DropBlock, Optimized Anchors, different kind of IoU losses. We also conduct experiments on various BoS, including Mish, SPP, SAM, RFB, BiFPN, and Gaus-sian YOLO [8]. For all experiments, we only use one GPU for training, so techniques such as syncBN that optimizes multiple GPUs are not used.
首先,我们研究了不同技巧对分类训练的影响
Class label smoothing
data augmentation techniques, bilateral blurring, MixUp, CutMix and Mosaic,详见图7
different activations, such as Leaky-ReLU (by default), Swish, and Mish.
CutMix and Mosaic data augmentation, Class label smoothing, and Mish activation.
所以,our BoF-backbone (Bag of Freebies) for classififier training include:
CutMix and Mosaic data augmentation and Class label smoothing
此外,使用Mish activation作为补充选择,如表2,3所示
表4中,进一步研究了不同的Bag-of-Freebies (BoF-detector)对检测器训练精度的影响
通过研究提高检测器精度而不影响FPS的不同特性,显著地扩展了BoF列表。
• S: Eliminate grid sensitivity the equation b x = σ ( t x ) + c x , b y = σ ( t y ) + c y b_x = \sigma (t_x) + c_x,b_y = \sigma (t_y)+c_y bx=σ(tx)+cx,by=σ(ty)+cy, where c x c_x cxand c y c_y cyare always whole numbers, is used in YOLOv3 for evaluating the object coordinates, therefore, extremely high t x t_x tx absolute values are required for the b x b_x bx value approaching the c x c_x cxor c x + 1 c_x +1 cx+1 values. We solve this problem through multiplying the sigmoid by a factor exceeding 1.0, so eliminating the effect of grid on which the object is undetectable.
• M: Mosaic data augmentation - using the 4-image mosaic during training instead of single image
• IT: IoU threshold - using multiple anchors for a single ground truth IoU (truth, anchor) > IoU threshold
• GA: Genetic algorithms - using genetic algorithms for selecting the optimal hyperparameters during network training on the fifirst 10% of time periods
• LS: Class label smoothing - using class label smoothing for sigmoid activation
• CBN: CmBN - using Cross mini-Batch Normalization for collecting statistics inside the entire batch, instead of collecting statistics inside a single mini-batch
• CA: Cosine annealing scheduler - altering the learning rate during sinusoid training
• DM: Dynamic mini-batch size - automatic increase of mini-batch size during small resolution training by using Random training shapes
• OA: Optimized Anchors - using the optimized anchors for training with the 512x512 network resolution
• GIoU, CIoU, DIoU, MSE - using different loss algorithms for bounded box regression
进一步的研究涉及到不同的Bag-of-Specials(BoS-detector)对探测器训练精度的影响,包括PAN、RFB、SAM、Gaussian YOLO(G)和ASFF,如表5所示。在我们的实验中,当使用SPP、PAN和SAM时,检测器获得最佳性能。
进一步研究不同backbone对精度的影响,如表6所示。我们注意到具有最佳的分类特征精度模型并不总是最好的检测精度。
首先,虽然CSPResNeXt50的分类准确率高于 CSPDarknet53,CSPDarknet53模型在目标检测方面有更高的精度。
第二,使用BoF和Mish对CSPResNeXt50训练,提高了其分类精度,但进一步应用这些预先训练过的权重降低了检测器的精度。然而,使用BoF和Mish用于CSPDarknet53分类器的训练均提高了分类器和检测器的精度。结果是,backbone CSPDarknet53比CSPResNeXt50更适合用于检测器。
我们观察到,CSPDarknet53模型显示了更大的能力来提高检测器的精度,这是因为各种改进。
用模型来分析用不同的mini-batch进行训练,结果发现,在加入BoF和BoS训练策略后,mini-batch size几乎对检测器的每一个batch的检测结果没有任何影响,只是用一个传统GPU即可训练。
与其他SOTA检测器结果比较,YOLOv4位于Pareto optimality curve曲线,并且是最快和最准确的检测器。由于不同方法使用不同架构GPU,为了进行推理实践验证,我们让YOLOv4运行在Maxwell,Pascal和Volta等常用GPU,并与其他最新技术进行比较。
表8列出了使用Maxwell GPU(可为GTX Titan X (Maxwell)或Tesla M40 GPU)帧率比较
表9列出了使用Pascal GPU的结果帧率比较,可以是Titan X(Pascal),Titan Xp,GTX 1080 Ti或Tesla P100 GPU。
表10,列出使用Volta GPU的帧率比较结果,可以是Titan Volta或Tesla V100 GPU。
Table 10: Comparison of the speed and accuracy of different object detectors on the MS COCO dataset (test-dev 2017).
(Real-time detectors with FPS 30 or higher are highlighted here. We compare the results with batch=1 without using tensorRT.)
Table 10: Comparison of the speed and accuracy of different object detectors on the MS COCO dataset (test-dev 2017).
(Real-time detectors with FPS 30 or higher are highlighted here. We compare the results with batch=1 without using tensorRT.)