YOLOv4在速度和准确率上都十分优异,作者使用了大量的trick,论文也写得很扎实,在工程还是学术上都有十分重要的意义,既可以学习如何调参,也可以了解目标检测的trick。



来源:晓飞的算法工程笔记 公众号

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

Introduction


  论文提出YOLOv4,从图1的结果来看,相对于YOLOv3在准确率上提升了近10个点,然而速度并几乎没有下降,论文主要贡献如下:

  • 提出速度更快、精度更好的检测模型,仅需要单张1080Ti或2080Ti即可完成训练。
  • 验证了目前SOTA的Bag-ofFreebies(不增加推理成本的trick)和Bag-of-Specials(增加推理成本的trick)的有效性。
  • 修改了SOTA方法,让其更高效且更合适地在单卡进行训练,包括CBN、PAN、SAM等。

Methodology


Selection of architecture

  对检测模型来说,分类最优的主干网络不一定是最合适的,适用于目标检测的主干网络需满足以下要求:

  • 高输入分辨率,提高小物体的检测准确率。
  • 更多的层,提高感受域来适应输入的增加。
  • 更多的参数,提高检测单图多尺寸目标的能力。

  理论来讲,应该选择感受域更大且参数了更大的模型作为主干网络,表1对比了三种SOTA主干网络的,可以看到CSPDarknet53的感受域、参数量以及速度都是最好的,故选其为主干网络。

  另外,使用不同大小的感受域有以下好处:

  • 匹配物体大小,可以观察完整的物体。
  • 匹配网络大小,可以观察物体的上下文信息。
  • 超过网络的大小,增加点与最终激活之间的连接数。

  为此,YOLOv4加入了SPP block,能够显著地改善感受域大小,而且速度几乎没有什么下降。

  另外,使用PANet替换FPN来进行多通道特征的融合。

  最终,YOLOv4选择CSPDarknet53作为主干网络,配合SPP模块,PANet通道融合以及YOLOv3的anchor based head。

Selection of BoF and BoS

  目前比较有效的目标检测提升的trick:

  • 激活函数: ReLU, leaky-ReLU, parametric-ReLU, ReLU6, SELU, Swish, or Mish。
  • bbox回归损失: MSE, IoU, GIoU, CIoU, DIoU
  • 数据增强: CutOut, MixUp, CutMix
  • 正则化方法: DropOut, DropPath, Spatial DropOut, or DropBlock
  • 归一化方法: Batch Normalization(BN), Cross-GPU Batch Normalization(CGBN or SyncBN), Filter Response Normalization (FRN), or Cross-Iteration Batch Normalization(CBN)

  由于PReLU和SELU难以训练,并且ReLU6是专门为量化网络设计的,从激活函数中去除这几种。而在正则化方法中,DropBlock的效果是最优的。对于归一化方法的选择,由于需要单卡训练,因此不考虑SyncBN。

Additional improvements

  为了让模型能更好地在单卡进行训练,做了以下的改进:

  • 提出新的数据增强方法Mosaic和Self-Adversarial Training (SAT)。
  • 使用遗传算法选择最优的超参数。
  • 修改目前的方法来让训练和检测更有效,包括改进的SAM,改进的PAN以及 Cross mini-Batch Normalization (CmBN)

  Mosaic是新的数据增强方法,同时融合4张训练图片,CutMix仅融合2张图片,使得目标的检测范围超出其正常的上下文,另外BN每次统计4张图片,这能显著地减少对大mini-batch的需要。

  Self-Adversarial Training(SAT)也提供新的数据增强手段,分为两个前向反向阶段。在第一阶段,先对图片进行前向计算,然后通过反向传播修改图片的像素,注意这里不修改网络的权重,通过这种方式,网络进行了一次对抗式训练,制造出没有目标的假象。在第二阶段,对修改后的图片进行正常的训练。

  CmBN是改进版的CBN,仅统计single-batch中的mini-batch,如图4所示,假设t-3~t为single-batch中的mini-batch,若干single-batch中包含单个mini-batch,则CmBN与BN一样。

  将SAM从spitial-wise attention修改为point-wise attention,即输入和输出的大小一致。

  将PAN的shortcut连接方法,从相加改为concate。

YOLOv4

  YOLOv4包含:

  • Backbone:CSPDarknet53
  • Neck:SPP,PAN
  • Head:YOLOv3

  YOLO v4使用:

  • 主干网络的BoF(Bag of Freebies):CutMix和Mosaic数据增强, DropBlock正则化, 标签平滑(Class label smoothing)
  • 主干网络的BoS(Bag of Specials):Mish激活, Cross-stage partial connections (CSPNet), Multiinput weighted residual connections(MiWRC)
  • 检测端的BoF(Bag of Freebies):CIoU-loss, CmBN, DropBlock正则化, Mosaic数据增强, Self-Adversarial Training, 去除边框敏感性(Eliminate grid sensitivity,见实验部分的解释), 多anchor回归(之前只选最大的), 余弦退火学习率调整(Cosine annealing scheduler), 使用遗传算法最优化超参数, 随机输入大小
  • 检测端的BoS(Bag of Specials):Mish激活, SPP-block, SAM-block, PAN通道融合, DIoU-NMS

Experiments


Influence of different features on Classifier training

  CutMix、Mosaic数据增强和标签平衡(Class label smoothing)比较有效。

Influence of different features on Detector training

  表4对比的BoF如下:

  • S:去除边框敏感性,\(b_x=\sigma(t_x) +c_x\),之前的中心点回归与anchor的边相关,当需要趋近\(c_x\)或\(c_x+1\)时,需要很大的\(|t_x|\),为此对sigmoid添加一个大于1的因子来减少这个影响
  • M:Mosaic数据增强
  • IT:IoU阈值,使用大于IoU阈值的anchor进行训练,之前好像只选最大的
  • GA:使用遗传算法进行最优超参选择
  • LS:标签平滑
  • CNB:论文提出的CmBN
  • CA:使用余弦退火(Cosine annealing scheduler)进行学习率下降
  • DM:动态mini-batch大小,小分辨率时增加mini-batch
  • OA:使用最优的anchors
  • GIoU, CIoU, DIoU, MSE:bbox损失函数

  论文也对比了检测端的BoS,从结果来看,SPP、PAN和SAM同时使用时效果最好。

Influence of different backbones and pretrained weightings on Detector training

  论文研究了不同主干网络对检测准确率的影响,可以看到CSPDarknet53能更好地适应各种改进。

Influence of different mini-batch size on Detector training

  论文对比了不同的mini-batch大小下的检测准确率,在加入BoF和BoS训练策略后,mini-batch的改变几乎对准确率没有影响。

Results

  表8、9和10分别为Maxwell GPU、Pascal GPU和Volta GPU上的实验结果,从大量的实验对比来看,YOLOv4在速度和准确率上都十分耐看。

CONCLUSION


  YOLOv4在速度和准确率上都十分优异,作者使用了大量的trick,论文也写得很扎实,在工程还是学术上都有十分重要的意义,既可以学习如何调参,也可以了解目标检测的trick。





如果本文对你有帮助,麻烦点个赞或在看呗~

更多内容请关注 微信公众号【晓飞的算法工程笔记】

YOLOv4: 虽迟但到,大型调优现场,43mAP/83FPS | 论文速递的更多相关文章

  1. 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL

    周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...

  2. 使用VisualVM进行性能分析及调优(转)

    VisualVM 是一款免费的\集成了多个 JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优.这些功能包括生成和分析海量数据.跟踪内存泄漏.监控垃圾回 ...

  3. SQL Server调优系列基础篇(常用运算符总结——三种物理连接方式剖析)

    前言 上一篇我们介绍了如何查看查询计划,本篇将介绍在我们查看的查询计划时的分析技巧,以及几种我们常用的运算符优化技巧,同样侧重基础知识的掌握. 通过本篇可以了解我们平常所写的T-SQL语句,在SQL ...

  4. SQL Server调优系列进阶篇(如何维护数据库索引)

    前言 上一篇我们研究了如何利用索引在数据库里面调优,简要的介绍了索引的原理,更重要的分析了如何选择索引以及索引的利弊项,有兴趣的可以点击查看. 本篇延续上一篇的内容,继续分析索引这块,侧重索引项的日常 ...

  5. MySQL调优系列基础篇

    前言 有一段时间没有写博客了,整天都在忙,上班,录制课程,恰巧最近一段时间比较清闲,打算弄弄MYSQL数据库. 关于MySQL数据库,这里就不做过多的介绍,开源.免费等特性深受各个互联网行业喜爱,尤其 ...

  6. 论MySQL的监控和调优

    懂PHP的人一般都懂MySQL这一点不假,大多数书籍里也是这样,书中前面讲PHP后面到数据库这块就会讲到MySQL的一些知识,前几年MySQL一直是PHP书籍的一部分,后来开始从国外翻译了一些专门讲述 ...

  7. SQL调优

    # 问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用 系统提交实际应用后,随着数据库中数据的增加,系 ...

  8. mysql的从头到脚优化之服务器参数的调优

    一. 说到mysql的调优,有许多的点可以让我们去做,因此梳理下,一些调优的策略,今天只是总结下服务器参数的调优  其实说到,参数的调优,我的理解就是无非两点: 如果是Innodb的数据库,innod ...

  9. 数据库性能调优——sql语句优化(转载及整理) —— 篇2

    下面是在网上搜集的一些个人认为比较正确的调优方案,如有错误望指出,定虚心改正 (1) 选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE 的解析器按照从右到左的顺序处理FROM子句中 ...

  10. Java性能调优笔记

    Java性能调优笔记 调优步骤:衡量系统现状.设定调优目标.寻找性能瓶颈.性能调优.衡量是否到达目标(如果未到达目标,需重新寻找性能瓶颈).性能调优结束. 寻找性能瓶颈 性能瓶颈的表象:资源消耗过多. ...

随机推荐

  1. STC8A8K64S4A12内部时钟的IRTRIM和LIRTRIM简单标定

    STC8A8K64S4A12因为没有固化的频率调节值, 要么在STC-ISP烧录时设置写入, 要么通过idata高地址读取, 这对于Linux下的SDCC用户就非常不方便, 既不能用STC-ISP, ...

  2. seq2seq模型案例分析

    1 seq2seq模型简介 seq2seq 模型是一种基于[ Encoder-Decoder](编码器-解码器)框架的神经网络模型,广泛应用于自然语言翻译.人机对话等领域.目前,[seq2seq+at ...

  3. Optional 详解

    1 前言 Optional 是 Java 8 的新特性,专治空指针异常(NullPointerException, 简称 NPE)问题,它是一个容器类,里面只存储一个元素(这点不同于 Conllect ...

  4. 为什么华为今年疯狂招od?

    不知道的大家有没有发现 这两年市场不好公司用人需求紧缩 唯有华子疯狂招人 很多人都听过华为OD 但是具体是什么还是有很多人疑惑 总结以下三个部分: 1.为啥疯狂招od而不是之前的纯"外包&q ...

  5. ABP模块的测试项目从默认的Microsoft SQL Server替换成MySQL

    1.替换项目引用 2.重新生成解决方案 3.删除Migrations 4.模块的引用 替换成:AbpEntityFrameworkCoreMySQLModule 5.命名空间 替换成:Volo.Abp ...

  6. 【Azure 环境】IntelliJ IDEA Community Edition 2021.2.3登陆Azure账号时,无法切换到中国区

    问题描述 在IntelliJ IDEA Community Edition 2021.2.3中开发Azure Function程序,最后准备部署到中国区 Azure Function中.如下,在Int ...

  7. 【Azure 应用服务】App Service 通过门户配置数据库连接字符串不生效 

    应用设置 Application Setting 在应用服务中,应用设置是作为环境变量传递给应用程序代码的变量. 对于 Linux 应用和自定义容器,应用服务使用 --env 标志将应用设置传递到容器 ...

  8. C++ 多线程笔记2 线程同步

    C++ 多线程笔记2 线程同步 并发(Concurrency)和并行(Parallelism) 并发是指在单核CPU上,通过时间片轮转的方式,让多个任务看起来像是同时进行的.实际上,CPU在一个时间段 ...

  9. RocketMQ(10) 消息类型

    一.普通消息 1. 消息发送方式分类 Producer对于消息的发送方式也有多种选择,不同的方式会产生不同的系统效果. 同步发送消息: 同步发送消息是指,Producer发出⼀条消息后,会在收到MQ返 ...

  10. Landsat 7的热红外波段有2个该如何选择?

      本文介绍Landsat 7遥感影像数据中B61.B62两个热红外波段的区别,以及研究应用时二者选择的依据.   Landsat 7遥感影像数据具有2个热红外波段,分别是Band 61与Band 6 ...