YOLOv4: Optimal Speed and Accuracy of Object Detection 论文笔记
论文连接:https://arxiv.org/abs/2004.10934
论文代码:https://github.com/AlexeyAB/darknet
本以为YOLO系列因为作者的原因不会再更新了,没想到前些日子居然在GitHub上更新了yolov4的论文和代码。虽然作者不一样了,但是论文的目的是一样的,都是在研究高fps下准确率更高的检测网络。下图是coco数据集上yolov4与其他检测网络的FPS与AP比较。
可以看到YOLO v4相比YOLO v3的提升还是蛮大的,相同FPS下提升了大约10%的AP,我觉得基本上可以说是做到了精度高的模型(AP>40)里速度最快的,速度快的模型(FPS>30)里精度最高的。那接下来让我们看看相比yolo v3论文里又做了哪些提升吧。
Introduction
作者在第一章里先是介绍了他们的研究是用来解决CNN检测网络在单GPU上的训练以及实时推断的问题,也就是说YOLO v4是可以在单卡上进行训练以及实时检测的。然后作者在文章中阐明了他们的研究目的设计一个可以在工业系统上快速计算并且实现最优的平行计算能力的目标检测器,而不是低计算量(BFLOP)的检测器(这句话在文章进行了多次强调)。并提出了他们的主要贡献有以下三点:
- 提出了一个更高效的检测模型,并且可以在单独的一块1080ti或者2080ti上训练。
- 通过实验证实了一些SOTA的Bag-of-Freebies 和 Bag-of-Specials方法对检测网络的影响。这Bag-of-Freebies 和 Bag-of-Specials主要是指能够提升网络性能的训练方法、网络模块和计算函数等,论文后面会说。(不过我这种菜🐔之前一般把这些方法统称为tricks🐶)。
- 对一些SOTA的方法做了进一步的提升,例如CBN、PAN、SAM等
Related work
Object detection models
作者在这一节主要是对当今的检测模型做了一个大致的归纳,具体可以看下图:
现在的CNN检测模型一般可以分为图上的几个部分,分别是Input、Backbone、Neck、Dense Prediction 和Sparse Prediction。其中Input就是只网络的输入,一般是图像或者图像金字塔这些;Backbone是指骨干网络用来提取输入图片的特征,一般是VGG、ResNet这些比较成熟的图像分类网络去掉的最后的全连接层;Neck是指对图像不同特征进行融合的部分,像FPN、PANet、Bi-FPN这种;Dense Prediction是指一般单阶段检测网络的heads部分,主要用来对每个特征进行分类和位置回归;Sparse Prediction则是指一般双阶段检测网络的提取proposals(例如RPN层)以及分类回归的he