freebies的意思是提高模型的检测精度但不增加模型推理消耗的trick。
specials的意思是提高模型的检测精度也增加了推理消耗的trick。
以上列出的Bag of Freebies和Bag of Specials在这里不做详细解释,想详细了解的请查看相应的论文。
作者认为检测网络的基本目标是在系统中的快速运行和优化并行计算,而不是低计算量理论指标(BFLOP)。作者提出了两种实时神经网络方案:
选择网络结构的目标是找到网络输入分辨率、卷积层数、参数量( fi l t e r s i z e 2 ∗ fi l t e r s ∗ c h a n n e l / g r o u p s filter size^2 * filters * channel / groups filtersize2∗filters∗channel/groups)和层输出数(filters)之间的最佳平衡。例如,经过作者的实验,就ILSVRC2012(ImageNet)数据集上的分类任务而言,CSPResNext50比CSPDarknet53要好得多。然而,在MS-COCO数据集上的目标检测任务,CSPDarknet53比CSPResNext50要好。
另一个目标是选择额外的模块增加网络的感受野,并对不同的检测层级从骨干网络的不同层级选择最佳的参数聚集方法:例如FPN、PAN、ASFF、BiFPN。
所以对于检测模型来说,分类最佳的参考模型并不总是最优的。与分类模型不同的是,检测模型的要求如下:
Backbone model | Input network resolution | Receptive field size | Parameters | Average size of layer output( W × H × C W\times H\times C W×H×C) | BFLOPs ( 512 × 512 512\times 512 512×512 network resolution) | FPS(GPU RTX 2070) |
---|---|---|---|---|---|---|
CSPResNext50 | 512x512 | 425x425 | 20.6M | 1058K | 31(15.5 FMA) | 62 |
CSPDarknet53 | 512x512 | 725x725 | 27.6M | 950K | 52(26.0 FMA) | 66 |
EfficientNet-B3 (ours) | 512x512 | 1311x1311 | 12.0M | 668K | 11(5.5 FMA) | 26 |
假设一个具有更大的感受野大小(具有更大数量的卷积层3×3)和更大数量的参数的模型应该被选为骨干网络。上表中显示了CSPResNeXt50,CSPDarknet53,Efficientnet B3的信息。CSPResNext50仅包含16个3×3卷积层、425×425的感受野和20.6M参数,而CSPDarknet53包含29个3×3卷积层、725×725的感受野和27.6M参数。理论上的证明,加上作者的大量实验,表明CSPDarknet53神经网络是两者结合最佳的检测模型骨干网络。
作者通过在CSPDarknet53添加了SPP模块来增加感受野,分离出了最重要的背景特征,并且几乎不会降低网络运行速度。使用了PANet代替YOLOv3中的FPN,从骨干网络的不同层级对的主干层对不同层的检测器层进行参数融合。
最后,YOLOv4选择CSPDarknet53作为骨干网络,SPP作为附加模块,PANet作为特征融合的Neck,YOLOv3检测器作为Header。
作者没有使用CGBN或SyncBN或昂贵的专用设备。目的是允许任何人在普通的GPU(如GTX 1080Ti或RTX 2080Ti)上复现论文最新成果。
为了提高目标检测训练效果,卷积神经网络通常使用下列方法:
对于训练激活函数来说,PReLU和SELU训练困难,ReLU6用来训练量化网络,故以上函数不予考虑;而DropBlock的作者详细比较了他们的方法和其他人的方法,DropBlock方法好很多,于是直接选择了DropBlock方法作为正则化方法;对于归一化方法的选择,因为作者的目标是单GPU训练,故syncBN不予考虑。
为了让设计的检测模型更适合单GPU训练,作者增加了补充的设计和提高如下:
作者在ImageNet(2012 val)和COCO 2017(test-dev 2017)数据集上分别验证了了各种trick对分类网络和检测网络准确率的提高效果。
ImageNet图像分类实验中,迭代步数为8000000步;batch size和mini-batch size分别为128和32;采用了polynomial decay学习率下降方法,初始学习率为0.1;warm-up迭代步数为1000;momentum和weight decay分别为0.9和0.005。验证BoS时,hyper-parameter使用默认设置,验证BoF时, 增加了50%训练步数。BoF实验验证了MixUp,CutMix,Mosaic,Bluring data数据增强方法,以及label smoothing方法;BoS实验验证了LReLU,Swish和Mish激活函数。
MS COCO目标检测实验中,默认hyper-parameters如下:迭代步数为500500;学习率下降策略为初始学习率为0.01,在400000步和450000步时,学习率乘以0.1,momentum和weight decay分别为0.9 and 0.0005。使用单GPU进行multi-scale训练,batch size为64,mini-batch size为8或者4,根据GPU架构和GPU显存大小决定。除了使用遗传算法进行hyper-parameter搜索,其他实验都使用默认设置。遗传算法实验使用了YOLOv3 SPP网络训练GIOU损失函数,在min-val 5k测试集上进行验证,采用了搜索到的学习率为0.00261,momentum为0.949,对ground truth的IoU threshold为0.213,loss normalizer为0.07。验证了大量的BoF,包括grid sensitivity elimination,mosaic数据增强,IoU threshold,遗传算法,class label smoothing, CmBN,自对抗训练,cosine annealing学习策略,动态mini-batch size, DropBlock, Optimized Anchors, 不同的IoU losses。验证了大量的BoS,包括Mish,SPP,SAM,RFB,BiFPN以及Gaussian YOLO。所有实验都基于单GPU训练,syncBN优化并没有使用。
MixUp | CutMix | Mosaic | Bluring | Label Smoothing | Swish | Mish | Top-1 | Top-5 |
---|---|---|---|---|---|---|---|---|
77.9% | 94.0% | |||||||
x | 77.2% | 94.0% | ||||||
√ | 78.0% | 94.3% | ||||||
√ | 78.1% | 94.5% | ||||||
x | 77.5% | 93.8% | ||||||
√ | 78.1% | 94.4% | ||||||
x | 64.5% | 86.0% | ||||||
√ | 78.9% | 94.5% | ||||||
√ | √ | √ | 78.5% | 94.8% | ||||
√ | √ | √ | √ | 79.8% | 95.2% |
从上表中可以看出,对CSPResNeXt-50分类结果有提高的trick是CutMix,Mosaic,Label Smoothing和Mish激活函数,四项结合分类准确率达到了最高。
MixUp | CutMix | Mosaic | Bluring | Label Smoothing | Swish | Mish | Top-1 | Top-5 |
---|---|---|---|---|---|---|---|---|
77.2% | 93.6% | |||||||
√ | √ | √ | 77.8% | 94.4% | ||||
√ | √ | √ | √ | 78.7% | 94.8% |
同CSPResNeXt-50分类结果一致,CutMix,Mosaic,Label Smoothing和Mish激活函数对分类效果有提高,并且四项结合分类准确率达到了最高,但是CSPDarknet-53的分类效果不如CSPResNeXt-50好,TOP1和TOP5的准确率均稍低一点。
检测网络验证了以下BoF提高了检测的准确率并且没有影响检测模型的FPS。
512x512
分辨率训练时,使用优化的anchors;验证了对于不同Bag-of-Specials,包括 PAN,RFB,SAM,Gaussian YOLO(G),及ASFF对检测精度的影响,认为SPP,PAN,和SAM对检测精度有提高。
S | M | IT | GA | LS | CBN | CA | DM | OA | loss | AP | AP50 | AP75 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
MSE | 38.0% | 60.0% | 40.8% | |||||||||
x | MSE | 37.7% | 59.9% | 40.5% | ||||||||
√ | MSE | 39.1% | 61.8% | 42.0% | ||||||||
x | MSE | 36.9% | 59.7% | 39.4% | ||||||||
√ | MSE | 38.9% | 61.7% | 41.9% | ||||||||
x | MSE | 33.0% | 55.4% | 35.4% | ||||||||
√ | MSE | 38.4% | 60.7% | 41.3% | ||||||||
√ | MSE | 38.7% | 60.7% | 41.9% | ||||||||
x | MSE | 35.3% | 57.2% | 38.0% | ||||||||
√ | GIoU | 39.4% | 59.4% | 42.5% | ||||||||
√ | DIoU | 39.1% | 58.8% | 42.1% | ||||||||
√ | CIoU | 39.6% | 59.2% | 42.6% | ||||||||
√ | √ | √ | √ | CIoU | 41.5% | 64.0% | 44.8% | |||||
x | x | CIoU | 36.1% | 56.5% | 38.4% | |||||||
√ | √ | √ | √ | √ | MSE | 40.3% | 64.0% | 43.1% | ||||
√ | √ | √ | √ | √ | GIoU | 42.4% | 64.4% | 45.9% | ||||
√ | √ | √ | √ | √ | CIoU | 42.4% | 64.4% | 45.9% |
从上表的前9行可以看出,训练使用的trick,单独的消除网格敏感性,IoU阈值,label smoothing和动态mini-batch size对检测mAP的提高没有帮助,label smoothing这个方法对图像分类的准确率有提高,而对目标检测并没有效果;从第10到第12行可以看出,使用GIOU、DIOU、CIOU损失函数对0.5mAP没有提高,但是对0.5:0.95mAP和0.75mAP有所提高;从第13和第14行可以看出,单独使用CIOU损失函数对mAP的提高没有帮助,加上消除网格敏感性,Mosaic数据增强,IoU阈值和遗传算法后,CIOU损失函数可以提高mAP;从第15到第17行可以看出消除网格敏感性,Mosaic数据增强,IoU阈值、遗传算法和优化Anchors几个tirck结合,即使使用MSE函数对检测mAP也是有提高的,加上GIOU和CIOU损失函数,对mAP提高的效果更明显,CIOU和GIOU对mAP提高的结果相同(PS:这两个结果完全相同,未免有点儿太巧了,悄咪咪地说。。。)。
Model | AP | AP50 | AP75 |
---|---|---|---|
CSPResNeXt50-PANet-SPP | 42.4% | 64.4% | 45.9% |
CSPResNeXt50-PANet-SPP-RFB | 41.8% | 62.7% | 45.1% |
CSPResNeXt50-PANet-SPP-SAM | 42.7% | 64.6% | 46.3% |
CSPResNeXt50-PANet-SPP-SAM-G | 41.6% | 62.7% | 45.0% |
CSPResNeXt50-PANet-SPP-ASFF-RFB | 41.1% | 62.6% | 44.4% |
在表5中表明,以表4中加了BoF的最佳结果为baseline,加了SAM结构的网络对检测mAP有提高,而同时使用SAM和Gaussian YOLO时对CSPDarknet53-PANet-SPP网络检测的mAP并没有提高,对CSPDarknet53-PANet-SPP的mAP作者还在实验中,见https://github.com/AlexeyAB/darknet/issues/5341。
Model (with optimal setting) | Size | AP | AP50 | AP75 |
---|---|---|---|---|
CSPResNeXt50-PANet-SPP | 512x512 | 42.4 | 64.4 | 45.9 |
CSPResNeXt50-PANet-SPP(BoF-backbone) | 512x512 | 42.3 | 64.3 | 45.7 |
CSPResNeXt50-PANet-SPP(BoF-backbone+Mish) | 512x512 | 42.3 | 64.2 | 45.8 |
CSPDarknet53-PANet-SPP(BoF-backbone) | 512x512 | 42.4 | 64.5 | 46.0 |
CSPDarknet53-PANet-SPP(BoF-backbone+Mish) | 512x512 | 43.0 | 64.9 | 46.5 |
从上表中可以看出,在相同分辨率条件下,使用了BoF训练的CSPResNeXt50-PANet-SPP的ImageNet预训练模型对检测效果的提高没有帮助,反而使得检测效果有所下降。而使用了BoF训练的CSPDarknet53-PANet-SPP预训练模型对检测精度的提高有所帮助,加上Mish激活函数后,在512x512分辨率下,检测效果达到了最好。作者认为,虽然CSPDarknet53在ImageNet分类上不如CSPResNeXt50的效果好,加了各种trick后CSPDarknet53的检测效果比CSPResNeXt50效果好,说明CSPDarknet53是一个适合检测的网络。
Model (without OA) | Size | AP | AP50 | AP75 |
---|---|---|---|---|
CSPResNeXt50-PANet-SPP(without BoF/BoS, mini-batch 4) | 608 | 37.1 | 59.2 | 39.9 |
CSPResNeXt50-PANet-SPP(without BoF/BoS, mini-batch 8) | 608 | 38.4 | 60.6 | 41.6 |
CSPDarknet53-PANet-SPP(with BoF/BoS, mini-batch 4) | 512 | 41.6 | 64.1 | 45.0 |
CSPDarknet53-PANet-SPP(with BoF/BoS, mini-batch 8) | 512 | 41.7 | 64.2 | 45.2 |
从上表中可以看出,CSPResNeXt50-PANet-SPP在不使用BoF和BoS时,mini batch为4和mini batch为8最终得到的mAP结果是有差别的,mini batch越大,检测效果越好;而CSPDarknet53-PANet-SPP在使用了BoF和BoS后,mini batch为4和mini batch为8的检测精度接近,说明mini batch的大小对检测精度的没有影响,作者认为,这样任何人都可以使用一张GPU来训练一个完美的检测模型。(PS:突然觉得作者可以试一下Group Norm,因为训练Faster RCNN时一张卡上的batch size是2)
经过实验,与其他最新目标检测模型的结果比较,YOLOv4位于帕累托的最优曲线上,在速度和精度方面都优于最快和最精确的目标检测模型。
由于不同的算法使用不同架构的GPU进行推理时间验证,作者在Maxwell、Pascal和Volta架构的常用GPU上运行了YOLOv4,并与其他最新方法进行了比较,结果列在了论文的表8~表10中。
作者提出了一个在COCO数据集上的又快又准的检测模型,检测模型可以在8~16GB的GPU上进行训练,并且验证了很多深度学习的训练trick对分类网络和检测网络的影响。
感谢Glenn Jocher提供了mosaic数据增强算法,使用遗传算法选择超参数以及解决了grid sensitivity问题,Glenn Jocher的代码位置在https://github.com/ultralytics/yolov3。
见论文原文