YOLOv4: Optimal Speed and Accuracy of Object Detection
论文:https://arxiv.org/abs/2004.10934
代码:https://github.com/AlexeyAB/darknet
论文中提到,在COCO数据集上,YOLOv4比YOLOv3提升了10%的AP和12%的fps,所以YOLOv4更加快速、精准。
达到这种效果,主要原因是YOLOv4将很多单独的优化算法做了集成,包括:
- Weighted-Residual-Connections (WRC)
- Cross-Stage-Partial-connections (CSP)-------用来作backbone
- Cross mini-Batch Normalization (CmBN)
- Self-adversarial-training (SAT)
- Mish-activation
- Mosaic data augmentation
- CmBN
- DropBlock regularization
- CIoU loss
本文的主要贡献如下:
1. 提出了一种高效而强大的目标检测模型。它使每个人都可以使用1080 Ti或2080 Ti GPU 训练超快速和准确的目标检测器(牛逼!)。
2. 在检测器训练期间,验证了SOTA的Bag-of Freebies 和Bag-of-Specials方法的影响。
3. 改进了SOTA的方法,使它们更有效,更适合单GPU训练,包括CBN [89],PAN [49],SAM [85]等。文章将目前主流的目标检测器框架进行拆分:input、backbone、neck 和 head
总结一下YOLOv4框架:
-
Backbone:CSPDarknet53
-
Neck:SPP,PAN
-
Head:YOLOv3
关于CSPNet的理解可以参考 https://zhuanlan.zhihu.com/p/101909017
其中YOLOv4用到相当多的技巧:
-
用于backbone的BoF(bag of freebies):CutMix和Mosaic数据增强,DropBlock正则化,Class label smoothing
-
用于backbone的BoS(bag of specials):Mish激活函数,CSP,MiWRC
-
用于检测器的BoF:CIoU-loss,CmBN,DropBlock正则化,Mosaic数据增强,Self-Adversarial 训练,消除网格敏感性,对单个ground-truth使用多个anchor,Cosine annealing scheduler,最佳超参数,Random training shapes
-
用于检测器的Bos:Mish激活函数,SPP,SAM,PAN,DIoU-NMS
看看YOLOv4部分组件:
从论文中的参数调节、不同实验的对比就可以证明作者的厉害
参考:https://zhuanlan.zhihu.com/p/135980432
在github上下载了压缩包,用本地视频做了检测,检测的网络结构如下所示
YOLOv4的backbone应该是到了101行(我现在不明白YOLOv4的backbone CSPDarknet53结构是什么样的??),因为shortcut到了101行,后边加的网络层是用来做upsample、以及继续route。
[YOLOv4作者训练好的权重和预训练模型的百度网盘下载地址:链接:https://pan.baidu.com/s/1FNldwUemAnVjUtP9Xrl3PQ
提取码:p6mk]