YOLO v4分析
YOLO v4分析
YOLO v4 的作者共有三位:Alexey Bochkovskiy、Chien-Yao Wang 和 Hong-Yuan Mark Liao。其中一作 Alexey Bochkovskiy 是位俄罗斯开发者,此前曾做出 YOLO 的 windows 版本。
那么,YOLOv4 性能如何呢?
在实际研究中,有很多特性可以提高卷积神经网络(CNN)的准确性。需要在大型数据集上对这些特征的组合进行实际测试,并需要对其结果进行理论上的证明。某些特性仅在某些模型上运行,并且仅在某些问题上运行,或者仅在小型数据集上运行;而某些特性(例如批归一化和残差连接)适用于大多数模型,任务和数据集。我们假设此类通用属性包括加权残差连接(WRC),跨阶段部分连接(CSP),交叉小批量标准化(CmBN),自对抗训练(SAT)和Mish激活。我们使用以下新功能:WRC,CSP, CmBN,SAT,Mish激活,马赛克数据增强,CmBN,DropBlock正则化和CloU丢失,并结合其中一些特性来实现最新结果:在MSCOCO数据集以Tesla V10以65FPS的实时速度获得43.5%AP(AP50为65.7%)。
在相关论文中,研究者对比了 YOLOv4 和当前最优目标检测器,发现 YOLOv4 在取得与 EfficientDet 同等性能的情况下,速度是 EfficientDet 的二倍!此外,与 YOLOv3 相比,新版本的 AP 和 FPS 分别提高了 10% 和 12%。

接下来,我们看下 YOLO V4 的技术细节。
许多特征可以提高 CNN 的准确率,然而真正实行起来,还需要在大型数据集上对这些特征组合进行实际测试,并且对测试结果进行理论验证。某些特征仅在某些模型上运行,并且仅限于特定的问题,或是只能在小型数据集上运行;而另外有些特征(如批归一化和残差连接)则适用于大多数模型、任务和数据集。
那么,如何利用这些特征组合呢?
YOLOv4 使用了以下特征组合,实现了新的 SOTA 结果:
- 加权残差连接(WRC)
- Cross-Stage-Partial-connection,CSP
- Cross mini-Batch Normalization,CmBN
- 自对抗训练(Self-adversarial-training,SAT)
- Mish 激活(Mish-activation)
- Mosaic 数据增强
- DropBlock 正则化
- CIoU 损失
据介绍,YOLOv4 在 MS COCO 数据集上获得了 43.5% 的 AP 值 (65.7%
AP50),在 Tesla V100 上实现了 ∼65 FPS 的实时速度。
该研究的主要贡献如下:
1. 建立了一个高效强大的目标检测模型。它使得每个人都可以使用 1080Ti 或 2080Ti 的 GPU 来训练一个快速准确的目标检测器。
2. 验证了当前最优 Bag-of-Freebies 和 Bag-of-Specials 目标检测方法在检测器训练过程中的影响。
3. 修改了 SOTA 方法,使之更加高效,更适合单 GPU 训练。这些方法包括 CBN、PAN、SAM 等。
YoloV4 如何实现这么好的效果?
YoloV4 的基本目标是提高生产系统中神经网络的运行速度,同时为并行计算做出优化,而不是针对低计算量理论指标(BFLOP)进行优化。YoloV4 的作者提出了两种实时神经网络:
- 对于 GPU,研究者在卷积层中使用少量组(1-8 组):CSPResNeXt50 / CSPDarknet53;
- 对于 VPU,研究者使用了分组卷积(grouped-convolution),但避免使用
Squeeze-and-excitement(SE)块。具体而言,它包括以下模型:EfficientNet-lite / MixNet / GhostNet / MobileNetV3。
在模型结构选择时,主要考虑了三个问题:为了检测较小的物体,输入图片需要较高的分辨率,为了更大的感受野需要更多层的网络,为了网络的容量需要更多的参数。其中关于感受野作者分析了三种不同level的感受野:能看到整个目标的感受野,能看到整个图像的感受野,大于整个图像的感受野。作者选择了CSPDarknet53作为主干网络,SPP与modified-PAN作为Neck,沿用了yolov3的Head。
YOLOv4 包含以下三部分:
- 骨干网络:CSPDarknet53
- Neck:SPP、PAN
- Head:YOLOv3
具体而言,YOLO v4 使用了:
bag-of-freebies:不会对测试过程的时间造成影响的方法。这里主要包括数据增强,dropout等正则化方法,对数据不平衡问题进行处理的方法(focal loss等),最后就是bbox回归问题进行处理的方法(改变mse loss 为IOU loss等)。
bag-of-specials:在网络中插入模块使得网络的测试过程的时间轻微增加的方法。这里主要包括上面讲到的各种用于提取并组合特征的Neck,在网络中加入attention module(注意力模块),以及一些类似NMS(非最大值抑制)的后处理方法。
- 用于骨干网络的 Bag of Freebies(BoF):CutMix 和 Mosaic
数据增强、DropBlock 正则化和类标签平滑; - 用于骨干网络的 Bag of Specials(BoS):Mish 激活、CSP 和多输入加权残差连接(MiWRC);
- 用于检测器的 Bag of Freebies(BoF):CIoU-loss、CmBN、DropBlock 正则化、Mosaic 数据增强、自对抗训练、消除网格敏感性(Eliminate grid sensitivity)、针对一个真值使用多个锚、余弦退火调度器、优化超参数和随机训练形状;
- 用于检测器的 Bag of Specials(BoS):Mish 激活、SPP 块、SAM 块、PAN 路径聚合块和
DIoU-NMS。
架构选择
该研究的目标是找出输入网络分辨率、卷积层数量、参数量(滤波器大小*滤波器*通道/组)和层输入数量(滤波器)四者之间的最优平衡。
次要目标则是挑选能够增加感受野的额外块(additional block),以及针对不同级别的检测器从不同骨干层中挑选最佳的参数聚合方法,如 FPN、PAN、ASFF 和 BiFPN 网络。
研究者在 CSPDarknet53 上添加了 SPP 块,因为它能够极大地增加感受野,分离出最显著的上下文特征,并且几乎没有降低网络运行速度。他们针对不同级别的检测器从不同骨干层中挑选 PANet 作为参数聚合方法,而放弃了 YOLOv3 中使用的 FPN 网络。
最后,研究者选择了 CSPDarknet53 骨干网络、SPP
额外模块、PANet 路径聚合 neck 和 YOLOv3(基于锚的)head 作为
YOLOv4 的整体架构。

BoF 和 BoS 的选择
为了提升目标监测的训练效果,CNN 使用了以下方法:
- 激活函数:ReLU、 leaky-ReLU、parametric-ReLU、ReLU6、SELU、Swish、Mish;
- 边界框回归损失(Bounding box regression loss):MSE、IoU、GIoU、CIoU、DIoU;
- 数据增强:CutOut、MixUp、CutMix;
- 正则化方法:DropOut,、DropPath、Spatial DropOut、DropBlock;
- 通过均值和方差的归一化网络激活函数:批归一化(BN)、跨 GPU 批归一化 (CGBN 或 SyncBN)、滤波器响应归一化(FRN)、交叉迭代批归一化(CBN);
- 跳跃连接方式:残差连接、加权残差连接、多输入加权残差连接、Cross stage 局部连接(CSP)。
在训练激活函数时,因为 PReLU 和 SELU 更难训练,ReLU6 是专为量化网络设计的,所以从候选列表里删除了这几个函数。
额外改进
为了使检测器更适合在单个 GPU 上进行训练,研究者还做出了以下额外的设计与改进:
- 提出新型数据增强方法 Mosaic 和自对抗训练(SAT);
- 在应用遗传算法时选择最优超参数;
- 修改现有方法,使新方法实现高效训练和检测——modified SAM、modified PAN 和 Cross mini-Batch
Normalization (CmBN)。
新型数据增强方法 Mosaic 混合了 4 张训练图像,而 CutMix 只混合了两张输入图像,具体如下图 3 所示:

图 3:Mosaic 表示的一种新型数据增强方法。
自对抗训练(SAT)也是一种新的数据增强方法,它包括两个阶段。第一个阶段中,神经网络更改原始图像;第二阶段中,训练神经网络以正常方式在修改后的图像上执行目标检测任务。
CmBN 是 CBN 的改进版,它仅收集单个批次内
mini-batch 之间的统计数据。

图 4:CmBN 图示。
研究者还将 SAM 从空间注意力机制(spatial-wise attention)修改为点注意力机制(point-wise attention),并将 PAN 中的捷径连接替换为级联,如下图 5、6 所示:

图 5:Modified SAM。

图 6:Modified PAN。
实验结果
YOLO v4 与其他 SOTA 目标检测器的对比结果如下图 7所示。从图上可以看出,YOLOv4 位于帕累托最优曲线上,并在速度和准确性上都优于最快和最精准的检测器。
图 7:不同目标检测器的速度和准确性对比结果。
YOLO v4分析的更多相关文章
- YOLO V4 :win10+cpu环境的体验
1.前言 Yolo V3已经体验了,接下来是V4版本. 关于V4版本,学术界褒贬不一.从工业界实际应用角度看,V4做了不少的优化,精度提升了10%,速度提升了12%.详细参见: <如何评价新出的 ...
- YOLO v1到YOLO v4(上)
YOLO v1到YOLO v4(上) 一. YOLO v1 这是继RCNN,fast-RCNN和faster-RCNN之后,rbg(RossGirshick)针对DL目标检测速度问题提出的另外一种框 ...
- YOLO v1到YOLO v4(下)
YOLO v1到YOLO v4(下) Faster YOLO使用的是GoogleLeNet,比VGG-16快,YOLO完成一次前向过程只用8.52 billion 运算,而VGG-16要30.69bi ...
- 目标检测中特征融合技术(YOLO v4)(下)
目标检测中特征融合技术(YOLO v4)(下) ASFF:自适应特征融合方式 ASFF来自论文:<Learning Spatial Fusion for Single-Shot Object D ...
- 目标检测中特征融合技术(YOLO v4)(上)
目标检测中特征融合技术(YOLO v4)(上) 论文链接:https://arxiv.org/abs/1612.03144 Feature Pyramid Networks for Object De ...
- YOLO V4的模型训练
1.YOLO V4模型训练的基本思路 所有机器学习涉及模型训练,一般都有训练集.验证集.测试集,因此需要准备数据集.有了数据集,再调用训练的算法,获取训练的结果.v3.v4模型训练方法相同. 2.YO ...
- Yolov4性能分析(上)
Yolov4性能分析(上) 一.目录 实验测试 1) 测试介绍 2) Test 3) Train 二. 分析 1.实验测试 1. 1 实验测试方法 Yolov4训练train实验方法(Darkn ...
- 深度学习与CV教程(13) | 目标检测 (SSD,YOLO系列)
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...
- ModelArts 与HiLens Kit联合开发丨行人社交距离风险提示Demo
摘要:本Demo使用YOLOv3_Resnet18模型来检测的视频流中的行人,获取行人坐标(即图中蓝色方框),然后计算所有检测到的人之间的相互"距离". 前情提要 听到行人社交距离 ...
随机推荐
- win10 添加全局快捷键
前言 好久没写博客了,今天水一下 如何在win10 下添加一个全局唤醒的快捷键(打开截图软件) 步骤 win + Q 输入 管理工具 添加快捷方式 这里没有管理员权限,可以直接把创建好的 快捷方式 粘 ...
- 菜鸟教程jsonp基础知识讲解
jsonp是什么? Jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即跨域读取数据. 为什么我们从不同的 ...
- Docker怎么实现容器之间的通信?
//TODO 参考资料: https://developer.aliyun.com/article/55912 https://blog.csdn.net/u011541946/article/det ...
- Oracle 数据库裸设备扩容处理
前段时间,我管理的一台Oracle数据库表空间容量不足了,由于本人以前没有接触过Oracle的使用所以,就自己查资料来研究如何扩容,网上的文档多数都是在物理机上扩容,而偏偏我的数据文件是存储在裸设备上 ...
- Win64 驱动内核编程-2.基本框架(安装.通讯.HelloWorld)
驱动安装,通讯,Hello World 开发驱动的简单流程是这样,开发驱动安装程序,开发驱动程序,然后安装程序(或者其他程序)通过通讯给驱动传命令,驱动接到之后进行解析并且执行,然后把执行结果返回. ...
- 栈(Stack) --- C# 自定义和微软官方的区别
最近在学习算法基础,本篇文章作为一个记录,也算是一次实践和总结.(顺便也深入C#运行时学习一下) 目录 1. 栈是什么 2. Stack 自定义实现 3. Stack C#官方实现 4. 区别 5. ...
- 用PS给视频磨皮美颜
无意间找到的,但是一个10分钟的视频渲染了我一天的时间,但是效果是不错的 参考视频链接 https://www.bilibili.com/video/BV1b7411m74e 视频中涉及的添加插件链接 ...
- 【编译原理】求First和Follow
写这篇博客的原因,是因为考试前以为自己已经将这个问题弄清楚了,但是,考试的时候,发现自己还是不会,特别是求follow集合.虽然考试结束了,希望屏幕前的你,可以真正理解这个问题. 码字和做视频都不容易 ...
- PHP 上传文件至阿里云OSS对象存储
简述 1.阿里云开通对象存储服务 OSS 并创建Bucket 2.下载PHP SDK至框架扩展目录,点我下载 3.码上code 阿里云操作 开通对象存储服务 OSS 创建 Bucket 配置Acces ...
- 【c#】 使用Directory.GetFiles获取局域网中任意电脑指定文件夹下的文件
本文为老魏原创,如需转载请留言 格式如下: // 获取IP地址为10.172.10.167下D盘下railway下的所有文件 string[] picArray = Directory.GetFile ...