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

本文主要是介绍YOLOv4重磅发布,五大改进,二十多项技巧实验,堪称最强目标检测万花筒,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击上方蓝色字体,关注我们

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

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

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

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

如果您访问 arxiv 和 github 较慢,可以在公众号 AIZOO 后台回复 yolov4或者yolo 获取打包下载的论文和代码。

首先,看一下作者论文上的效果图,可以说在平均精度(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信息量太大,难以在一篇博文描述完。可以看出作者是实打实的做了很多近几年的各种技巧的对比实验,也做了不少方法的创新改进。可以说这是一篇花了很多功夫和精力的论文。推荐大家读一下论文,文章写的真的非常通俗易懂,总结了大量的技巧,甚至可以做为目标检测面试宝典

您可以在公众号 AIZOO 后台回复 yolov4或者yolo 获取打包下载的论文和代码。

精彩推荐

2020年代,中国AI创业公司将走向何方

都2020年了,在校学生还值得继续转行搞AI吗

AIZOO开源人脸口罩检测数据+模型+代码+在线网页体验,通通都开源了

新手也能彻底搞懂的目标检测Anchor是什么?怎么科学设置?[附代码]

我是元峰,互联网+AI领域的创业者,欢迎扫描下方二维码,或者直接在微信搜索“AIZOO”关注我们的公众号AIZOO。您也可以访问我们的网站 AIZOO.com 了解我们。

如果您是有算法需求,例如目标检测、人脸识别、缺陷检测、行人检测的算法需求,欢迎添加我们的微信号AIZOOTech与我们交流,我们团队是一群算法工程师的创业团队,会以高效、稳定、高性价比的产品满足您的需求。

如果您是算法或者开发工程师,也可以添加我们的微信号AIXZOOTech,请备注学校or公司名称-研究方向-昵称,例如“浙大-图像算法-元峰”,元峰会拉您进我们的算法交流群,一起交流算法和开发的知识,以及对接项目。

添加小助手邀您进AIZOO技术交流群

扫描二维码

添加小助手

AIZOOTech

这篇关于YOLOv4重磅发布,五大改进,二十多项技巧实验,堪称最强目标检测万花筒的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/999451

相关文章

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD