今年2月22日,知名的 DarkNet 和 YOLO 系列作者 Joseph Redmon 宣布退出 CV 界面,这也就意味着 YOLOv3 不会再有官方更新了。但是,CV 领域进步的浪潮仍在滚滚向前,仍然有人在继续优化 YOLOv3。今日,著名的AlexeyAB版本发布了 YOLOv4的论文。该论文提出了五大改进,二十多个技巧的实验,可以说 YOLOv4是一项非常solid的工作。

论文题目:YOLOv4: Optimal Speed and Accuracy of Object Detection

论文链接:https://arxiv.org/pdf/2004.10934.pdf

开源代码:https://github.com/AlexeyAB/darknet

首先,看一下作者论文上的效果图,可以说在平均精度(mAP)和速度上,远超 YOLOv3版本(文中提到 mAP 提升 10个点,速度提升12%)。

笔者仔细阅读了该论文,可以说 YOLOv4 是做了很多扎实的(solid)的工作。下面我们首先简单介绍一下该论文,然后详细介绍论文提到的五大改进二十多项最新目标检测技巧的实验。

1

如何看待YOLOv4

目前,工业界常用的目标检测算法,SSD 是 2015年发表的,RetinaNet、 Mask R-CNN、Cascade R-CNN 是 2017 年发表的,YOLOv3 是2018年发表的。时光荏苒,过去的五年,深度学习也在不断更新,从激活函数上,到数据增强,到网络结构,都有大量的创新。而YOLOv4这项工作, 可以说是既往开来。

如果用一个词来评论这篇论文,那就是“良心”。这篇文章试验对比了大量的近几年来最新的深度学习技巧,例如  Swish、Mish激活函数,CutOut和CutMix数据增强方法,DropPath和DropBlock正则化方法,也提出了自己的创新,例如 Mosaic (马赛克) 和 自对抗训练数据增强方法提出了修改版本的 SAM 和 PAN,跨Batch的批归一化(BN),共五大改进。所以说该文章工作非常扎实,也极具创新。

而且作者也在文中多次强调,这是一个平衡精度和速度的算法,大的模型,例如Mask-RCNN和Cascade R-CNN在比赛中可以霸榜,但速度太慢;小的模型速度快,但精度又不高。另外,当今的不少模型因为太大,需要很多GPU 进行并行训练,而 YOLOv4 可以在一块普通的GPU(1080Ti)上完成训练,同时能够达到实时性,从而能够在生产环境中部署。

2

YOLOv4作者的思考

作者总结的 YOLOv4 三大贡献:

  • 设计了强大而高效的检测模型,任何人都可以用 1080 Ti 和  2080 Ti训练这个超快而精准的模型。

  • 验证了很多近几年 SOTA 的深度学习目标检测训练技巧。

  • 修改了很多 SOTA 的方法, 让它们对单GPU训练更加高效,例如 CBN,PAN,SAM等。

作者总结了近几年的单阶段和双阶段的目标检测算法以及技巧,并 用一个图概括了单阶段和双阶段目标检测网络的差别,two stage的检测网络,相当于在one stage的密集检测上增加了一个稀疏的预测器,或者说one stage网络是 two stage的 RPN部分,是它的一个特例或子集。

作者将那些增加模型性能,只在训练阶段耗时增多,但不影响推理耗时的技巧称为 —— 赠品(bag of freebies),也就是白给的提高精度的方法。而那些微微提高了推理耗时,却显著提升性能的,叫做——特价(bag of specials),就是那些不免费,但很实惠的技巧。

bag of freebies

以数据增强方法为例,虽然增加了训练时间,但可以让模型泛化性能和鲁棒性更好。例如下面的常见增强方法:

    • 图像扰动,

    • 改变亮度、对比对、饱和度、色调

    • 加噪声

    • 随机缩放

    • 随机裁剪(random crop)

    • 翻转

    • 旋转

    • 随机擦除(random erase)

    • Cutout

    • MixUp

    • CutMix

    下图是作者在训练模型时用的图像增强方法:

    另外,还有常见的正则化方法:

    • DropOut

    • DropConnect

    • DropBlock

    平衡正负样本的方法:

    • Focal loss

    • OHEM(在线难分样本挖掘)

    此外,还有回归 loss的改进:

    • GIOU

    • DIOU

    • CIoU

    凡此种种,都是训练时候的改进技巧,不影响推理速度,都可以称为赠送品。

bag of specials

特价品是指稍微增加推理的耗时,但是显著提升性能的技巧。

例如增大感受野技巧:

  • SPP

  • ASPP

  • RFB

注意力机制:

  • Squeeze-and-Excitation (SE), 增加2%计算量(但推理时有10%的速度),可以提升1%的ImageNet top-1精度。

  • Spatial Attention Module (SAM),增加0.1%计算量,提升0.5%的top-1准确率。

特征融合集成:

    • FPN

    • SFAM

    • ASFF

    • BiFPN (也就是大名鼎鼎的EfficientDet)

    更好的激活函数:

    • ReLU

    • LReLU

    • PReLU

    • ReLU6

    • SELU

    • Swish

    • hard-Swish

    后处理非最大值抑制算法:

    • soft-NMS

    • DIoU NMS

3

YOLOv3模型设计

作者针对 GPU和 VPU 分别使用不同的组卷积策略,GPU 使用 1~8 组卷积, 对VPU则使用完全的组卷积。网络结构采用的CSPResNeX50和CSPDarknet53。

作者提到,CSPResNeX50分类精度比CSPDarknet,但是检测性能却不如后者。

为了让模型可以在单个GPU上训练的的更快,作者使用了以下几个技巧:

  • 独创的数据增强方法 Mosaic (马赛克) 和 自对抗训练(Self Adversarial Training, SAT)

  • 使用遗传算法选择最优超参数

  • 修改版本的 SAM,修改版本的PAN和跨批量归一化(Cross mini-Batch Normalization)

这个Mosaic,就是把四张图片拼接为一张图片,这等于变相的增大了一次训练的图片数量,可以让最小批数量进一步降低,让在单GPU上训练更为轻松。

这里的CmBN,是对CBN的改进,收集一个batch内多个mini-batch内的统计数据。BN, CBN, CmBN的区别如下图所示:

此外,作者还将 SAM的空间注意力改为逐点注意力,并将 PAN的快捷连接的相加改为拼接(concatenation)。

一个完整的YOLOv4 由以下三部分组成:CSPDarknet53 (backbone) + SPP+PAN (Neck,也就是特征增强模块)+ YoloV3组成。

另外,YOLOv4使用了“赠送”技巧有CutMix、Mosaic 数据增强, DropBlock正则化,标签平滑,CIoU-loss,CmBN,自对抗训练,每个目标分配给多个anchor,(这点和v3有差别,v3版本每个目标只有一个正样本)。

使用的“特价”技巧:Mish activation、跨阶段空间连接 (CSP),多输入权重残差连接,SPP-block、SAM-block,PAN,DIoU-NMS。

4

试验结果

作者做了大量的对比消融试验,在分类任务上,在CSPResNeXt50和CSPDarknet53上,使用不同配置的结果对比如下:

作者使用的多个技巧,在检测任务上的对比结果如下(这里需要读论文对照一下每个符号的含义):

最后,是在Maxwell、Pascal、Volta三个不同系列的GPU,在COCO 数据集上的结果对比:

总的来说,YOLOv4是在速度和精度上trade off做的非常好的一项工作。

5

总结

笔者本来想详尽的介绍一下本论文,但发现这篇paper信息量太大,难以在一篇博文描述完。可以看出作者是实打实的做了很多近几年的各种技巧的对比实验,也做了不少方法的创新改进。可以说这是一篇花了很多功夫和精力的论文。推荐大家读一下论文,文章写的真的非常通俗易懂,总结了大量的技巧,甚至可以做为目标检测面试宝典

往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习在线手册深度学习在线手册AI基础下载(pdf更新到25集)本站qq群1003271085,加入微信群请回复“加群”获取一折本站知识星球优惠券,复制链接直接打开:https://t.zsxq.com/yFQV7am喜欢文章,点个在看

YOLOv4重磅发布,五大改进,二十多项技巧实验,堪称最强目标检测万花筒相关推荐

  1. 【Vue2.0】— 消息订阅与发布pubsub(二十)

    [Vue2.0]- 消息订阅与发布pubsub(二十)

  2. 真三国无双8二十四项修改器风灵月影版

    点击下载来源:真三国无双8二十四项修改器风灵月影版 真三国无双8修改器风灵月影顾名思义,就是由风灵月影大神专门为<真三国无双8(Dynasty Warriors 8)>量身打造的一款游戏辅 ...

  3. 【Microsoft Azure 的1024种玩法】二十九.基于Azure VM快速实现网络入侵检测 (IDS) 及网络安全监视 (NSM)

    [简介] 数据包捕获是一个重要组件,可以实施网络入侵检测系统 (IDS) 并执行网络安全监视 (NSM). 我们可以借助开源 IDS 工具来处理数据包捕获,并检查潜在网络入侵和恶意活动的签名. 使用网 ...

  4. 自动驾驶系统进阶与项目实战(十)基于PointPillars的点云三维目标检测和TensorRT实战(1)

    自动驾驶系统进阶与项目实战(十)基于PointPillars的点云三维目标检测和TensorRT实战(1) 发表于CVPR2019的PointPillars是目前比较受业内认可的激光雷达三维检测算法, ...

  5. 2016中国大数据大会成功举办 重磅发布年度大数据十大热词

    12月20日,由赛迪网.<互联网经济>杂志社.数创汇主办,赛迪智库互联网研究所.中国大数据产业生态联盟.中国信息化推进联盟以及国家信息产业公共服务平台协办的"2016中国大数据大 ...

  6. [Python图像识别] 四十八.Pytorch构建Faster-RCNN模型实现小麦目标检测

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  7. [YOLOv7/YOLOv5系列算法改进NO.5]改进特征融合网络PANET为BIFPN(更新添加小目标检测层yaml)

     前      言:作为当前先进的深度学习目标检测算法YOLOv5,已经集合了大量的trick,但是在处理一些复杂背景问题的时候,还是容易出现错漏检的问题.此后的系列文章,将重点对YOLOv5的如何改 ...

  8. 中国城市信息化50强发布 邯郸位居二十,排名不低呀,

    亚太地区城市信息化论坛第七届年会于5月26日在沪举行.作为本届年会重要分论坛的首届"中国城市信息化50强发布会"于5月27日举行.中国城市信息化50强评选活动是由亚太地区城市信息化 ...

  9. 【代码升级】【iCore3 双核心板】例程二十八:FSMC实验——读写FPGA

    实验指导书及代码包下载: 链接:https://pan.baidu.com/s/1i6WL51V 密码:1mk4 iCore3 购买链接: https://item.taobao.com/item.h ...

最新文章

  1. 知乎热问:成为算法工程师的路上,掌握什么技术会感觉自我提升突飞猛进?
  2. 【每日DP】day 5、P1095 守望者的逃离(好像悟到了DP的真谛)难度⭐⭐★
  3. 开启注解缓存_Spring Boot 2.x基础教程:进程内缓存的使用与Cache注解详解
  4. cmd.exe命令行方式执行matlab代码 【转】
  5. 浅谈C#中的数组(一)
  6. 【转】卷积的本质及物理意义(全面理解卷积)
  7. web入门,这些必须掌握!!!
  8. [图像处理]指定任意灰度变换
  9. cgo 解决 error while loading shared libraries: xxx.so.x
  10. python二维图自动保存_Autodesk Inventor工程图自动保存PDF文件iLogic代码
  11. Cocostudio生成的UI,触摸屏蔽问题
  12. wikisql 数据集解释_【wiki维基百科中文数据集】抽取wiki数据集——实操
  13. Matlab代码区出现中文乱码的情况
  14. 数据仓库(二) 数仓理论(重点核心)
  15. 嵌入式微处理器详述(1)---什么是嵌入式微处理器
  16. matlab中sqp的算法原理_最优化方法及其Matlab程序设计 马昌凤
  17. 懒癌必备-dplyr和data.table让你的数据分析事半功倍
  18. jasig cas java示例_单点登录cas jasig学习笔记
  19. 深圳/河南/天津/山东产品经理国际认证NPDP招生简章
  20. 【男生女生表白攻略】手把手教你制作有创意的表白软件

热门文章

  1. 足球动图gif(一)
  2. (转载)关于stm32编译后的代码空间和ram占用
  3. C++入门经典-例7.8-const对象,标准尺寸
  4. LeetCode——Pascal#39;s Triangle
  5. python中join的用法
  6. Individual Project
  7. python中mat函数_python matplotlib中的subplot函数使用详解
  8. 2021-11-09类作为成员变量类型
  9. AXI4总线协议的发展历史
  10. 安装 | MatlabR2021bMac链接及Matlabx运行图基本运行代码与图像