YOLOv4论文解读
论文原文:
https://arxiv.org/pdf/2004.10934.pdf
代码实现:
https://github.com/AlexeyAB/darknet
一、介绍
原文名称:《YOLOv4: Optimal Speed and Accuracy of Object Detection》,可以看出这是一个非常自信的题目,声称YOLOv4在目标检测具有最优的速度和准确率。相比于Joe Redmon的最终作品YOLOv3,Alexey Bochkovskiy为一作的YOLOv4确实取得了非常明显的速度和准确率的提升。笔者认为YOLOv4的提升更多的还是一些工程上的奇技淫巧,将最近几年内提出的用于其他模型的方法结合YOLO进行融汇贯通。从数据增强,模型结构和训练方法等都进行了大量的改进,通过本文也可以了解到最近一些年提出的工程上的最佳实践。
上图横轴为效率,纵轴为准确率。效率和准确率都高则会在图中右上部分。在低帧率上,例如EfficientDet能够达到更高的准确率,但是就低于30FPS而言(图中非蓝色部分),达不到实时流畅的程度。所以说YOLOv4在效率和准确率上具有最佳性价比更加贴切。
二、YOLOv4改进
YOLOv4的改进内容十分丰富,但原作者在Introduction部分自述贡献主要包括以下三点:
- 提出了一个高效高性能的目标检测模型,确保任何人都可以使用单张传统的GPU便可以训练YOLOv4,例如1080Ti或2080Ti(相比于TITAN V 或者Tesla V100等高端显卡或多张显卡而言)。
- 结合最新的BoF(Bag-of-Freebies)和BoS(Bag-of-Specials)方法YOLOv4进行改进。(BoF,一袋免费的商品,比喻的是一些训练方法技巧,加入这些训练方法和技巧,并不会增加模型推理时候的开销,即在模型部署使用时并不会推理更慢或者占用更高的机器性能,但是可能会在训练时多费一些时间和功夫,加入这些方法和技巧肯定能使模型训练的更好,因此比作一袋免费的商品,只会带给模型好处,不要白不要的道理!BoS,一袋特价的商品,和BoF的差别在于,可能会在部署使用时有少量额外的开销,但是能大幅提升模型性能,因此也是可以权衡利弊考虑加入的一些方法)。
- 修改并适配最新的训练方法使它们更高效且适合用于单张GPU训练,包括CBN,PAN,SAM等。
三、相关工作(站在巨人的肩上,并不是由本作者提出的方法,但是现有的研究成果)
1、目标检测模型(通用范式)
作者对相关工作的目标检测模型进行综述,详细回顾了近些年提出的一些目标检测模型的通用套路。即无论使用哪种算法,基于深度学习的目标检测模型都逃不出以下套路:
上图中,可以看到目标检测模型都可以按套路分为四个部分:Input(输入)、Backbone(骨干)、Neck(颈部)、Head(头部,又分为Dense Prediction 和Sparse Prediction)。头部分为两类,分别对应一阶段目标检测算法(One-Stage Detector)和两阶段目标检测算法。例如我们所讲的YOLO即是前者,我们也在YOLOv1论文解读中谈论到了YOLO仅使用单个神经网络进行预测,相比于R-CNN系列的两阶段目标检测算法,没有根据候选框和卷积层特征再训练一个模型(即Sparse Prediction)这一步,而是直接根据卷积层特征输出进行的预测。
2、BoF(Bag-of-Freebies,一些不用白不用,用了有好处的方法)
①数据增强
- 像素级调整:调整样本的光线、亮度、饱和度、对比度等,随机加入噪声,也会进行缩放,裁剪、旋转和翻转等操作。
- 逻辑性调整:模拟现实中的遮挡等,采用随机擦除(random erase)和CutOut等方法,比如随机选择图片的一个举行区域,全部置白或者置黑等(表现在模型的卷积层中,即针对feature map则体现为DropOut(失活一部分神经元)、DropConnect(失活一部分连接)和DropBlock(失活一整块神经元区域))。
-
结合多张图片:一种是融合(MixUp),例如两张图片各占比%50融合为一张,再通过比例去确定训练样本的标签;另一种是剪切合并(CutMix),将一个图像的部分剪切下来覆盖到另一张图像上。
- 图像风格迁移:风格迁移GAN(Style transfer GAN),通过生成对抗网络训练,能够将训练样本之间进行不同风格迁移,生成多样的训练数据。
②解决样本分布失衡
- 调整不平衡的数据分布:困难负样本挖掘(hard negative example mining)和在线困难负样本挖掘(online hard negative example mining),即把错误分类的负样本再次送入分类器进行训练(就像学生做错题集,错的题目多学才能提高能力),上述两方法只对两阶段目标检测算法有效,因此YOLO不适用。适用于一阶段目标检测平衡样本分布的方法是使用focal loss来平衡样本数量,该损失函数是对二分类交叉熵损失函数的改进。
③标签改进
- 使用软标签代替硬标签:标签平滑(label smoothing)即用“概率”替换“是非”。
③新的BBox检测目标函数
- CIoU损失函数:传统的IoU损失函数可能会由于预测区域和实际区域之间没有交集而产生梯度消失问题,通过在传统的IoU损失函数基础上做一些改进来避免梯度消失问题。
3、BoS(Bag-of-Specials,一些用了以后利大于弊的方法)
- 匹配多尺度图像输入:提出了SPP,ASPP,RFP等分割特征图的方法提升模型精度(不适用于全连接层的模型),SPP在YOLOv3-608中被使用,RFB在SSD中被使用。
- 注意力机制:又被分为channel-wise attention(代表为Squeeze-and-Excitation (SE))和point-wise attention(代表为Spatial Attention Module (SAM) ),YOLOv4选择了后者,因为其开销更小。
- 特征整合:最初的特征整合技术包括跨层连接(skip connection)和hyper-column,将底层的物理特征整合为高层的语义特征。因为FPN的流行,更多整合特征金字塔的轻量级模型被提出,例如SFAM,ASFF,BiFPN,最终目标还是实现多尺度的检测任务。
- **函数改进:ReLU有效改善了tanh和sigmoid的梯度消失问题,还有很多变种LReLU,PReLU,ReLU6,SELU,Swish,hard-sWish和Mish。其中Swish和Mish都是连续可微的**函数。
- 后处理方法:NMS能够减少BBox对同一目标物体不好的预测框。使用DIoU NMS通过计算预测的置信度得分和概率,对同一目标物体的预测框进行排序输出最好的一个。
四、YOLOv4的技术选择
YOLOv4模型结构:
- Backbone:CSPDarknet53
- Neck:SPP,PAN
- Head:YOLOv3
使用的BoF和BoS:
对于backbone使用的BoF:
- CutMix
- Mosaic data augmentation
- DropBlock regularization
- Class label smoothing
对于backbone使用的BoS:
- Mish activation
- Cross-stage partial connections (CSP)
- Multiinput weighted residual connections (MiWRC)
对于detector使用的BoF:
- CIoU-loss
- CmBN,DropBlock regularization
- Mosaic data augmentation
- self-Adversarial Training
- Eliminate grid sensitivity
- Using multiple anchors for a single ground truth
- Cosine annealing scheduler
- Optimal hyper-parameters
- Random taining Shapes
对于detector使用的BoS:
- Mish activation
- SPP-block
- SAM-block
- PAN path-aggregation block
- DIoU-NMS。
上述技术都可以单独查阅阅读并理解,值得一提的是:
-
CSPDarknet53即是对Darknet53应用跨阶段局部连接技术进行的模型改进。
-
Cosine annealing scheduler (模拟余弦退火)初看中文翻译觉得很难理解,其实是学习率衰减的一种方式,衰减速率曲线类似余弦函数cos从最高点到最低点的部分。简单可理解为起初学习率衰减慢,训练中间衰减快,最后衰减速率再变缓。
-
SAM-Block进行了修改,取消了最大池化和均值池化,直接采用了卷积操作。
-
PAN也进行了修改,将两层相加改为两层拼接。
五、实验对比
作者进行了大量的实验,围绕两个方面进行:
-
YOLOv4加入上述BoS和BoF后对模型精度和执行时间的影响即变化:
-
YOLOv4和其他目标检测模型的对比:
参考文献
https://arxiv.org/pdf/2004.10934.pdf
https://github.com/AlexeyAB/darknet