YOLOV4各个创新功能模块技术分析(一)

简 介

yolov4论文:YOLOv4: Optimal Speed and Accuracy of Object Detection
arxiv:https://arxiv.org/abs/2004.10934
github源码:https://github.com/AlexeyAB/darknet

论文摘要

有大量的特征被认为可以提高卷积神经网络(CNN)的精度。需要在大型数据集上对这些特征的组合进行实际测试,并对结果进行理论证明。某些功能只在某些模型上运行,某些问题只在某些模型上运行,或只在小规模数据集上运行;而某些功能(如批处理规范化和剩余连接)适用于大多数模型、任务和数据集。假设这些通用特征包括加权剩余连接(WRC)、跨阶段部分连接(CSP)、跨小批量规范化(CmBN)、自对抗训练(SAT)和Mish激活。使用了新功能:WRC、CSP、CmBN、SAT、误激活、马赛克数据增强、CmBN、DropBlock正则化和CIoU丢失,并将其中一些功能结合起来,以达到最新的结果:43.5%AP(65.7%AP50)的MS
COCO数据集,在Tesla V100上以约65 FPS的实时速度。

YOLOV4的发布,可以想象到大家的激动,但是论文其实是一个结合了大量前人研究技术,加以组合并进行适当创新的高水平论文,实现了速度和精度的完美平衡。很多yolov4的分析文章都会说其中应用了哪些技术?本文的目的希望通过YOLOV4提到的各种新技术进行分析,明白YOLOV4后面的功臣算法。

文中将前人的工作主要分为Bag

of freebies和Bag of specials,前者是指不会显著影响模型测试速度和模型复杂度的技巧,主要就是数据增强操作,对应的Bag of specials就是会稍微增加模型复杂度和速度的技巧,如果不大幅增加复杂度且精度有明显提升,那也是不错的技巧。本文按照论文讲的顺序进行分析。由于每篇论文其实内容非常多,主要是分析思想和一些核心细节。

本文技术:random erasing、cutout、hide-and-seek、grid mask、Adversarial Erasing、mixup、cutmix、mosaic、Stylized-ImageNet、label smooth、dropout和dropblock。

一.数据增强相关-Random
erasing data augmentation

论文名称:Random erasing data
augmentation
论文地址:https://arxiv.org/pdf/1708.04896v2.pdf
github: https://github.com/zhunzhong07/Random-Erasing

论文摘要

本文介绍了一种用于卷积神经网络(CNN)训练的新的数据增强方法&随机删除法。在训练中,随机擦除随机选择图像中的矩形区域,并使用随机值擦除其像素。在这个过程中,生成了不同遮挡程度的训练图像,这降低了过度遮挡的风险,使模型对遮挡具有鲁棒性。随机擦除无需参数学习,易于实现,可与大多数基于CNN的识别模型集成。尽管很简单,但随机删除对常见的数据增强技术(如随机裁剪和浮动)来说是一种补充,与强大的基线相比,图像分类、对象检测和人员识别都有一致的改进。

随机擦除增强,非常容易理解。作者提出的目的主要是模拟遮挡,从而提高模型泛化能力,这种操作其实非常make sense,因为把物体遮挡一部分后依然能够分类正确,那么肯定会迫使网络利用局部未遮挡的数据进行识别,加大了训练难度,一定程度会提高泛化能力。其也可以被视为add noise的一种,并且与随机裁剪、随机水平翻转具有一定的互补性,综合应用他们,可以取得更好的模型表现,尤其是对噪声和遮挡具有更好的鲁棒性。具体操作就是:随机选择一个区域,然后采用随机值进行覆盖,模拟遮挡场景。

在细节上,可以通过参数控制擦除的面积比例和宽高比,如果随机到指定数目还无法满足设置条件,则强制返回。
一些可视化效果如下:

对于目标检测,作者还实现了3种做法,如下图所示(然而打开开源代码,发现只实现了分类的随机擦除而已,尴尬)。

当然随机擦除可以和其他数据增强联合使用,如下所示。

torchvision已经实现了:

https://pytorch.org/docs/master/_modules/torchvision/transforms/transforms.html#RandomErasing

注意:torchvision的实现仅仅针对分类而言,如果想用于检测,还需要自己改造。调用如下所示:

torchvision.transforms.RandomErasing(p=0.5, scale=(0.02, 0.33), ratio=(0.3, 3.3), value=0, inplace=False)

二.数据增强相关-Cutout

论文名称:Improved Regularization
of Convolutional Neural Networks with Cutout
论文地址:https://arxiv.org/abs/1708.04552v2
github: https://github.com/uoguelph-mlrg/Cutout

论文摘要

卷积神经网络能够学习强大的表示空间,这是处理复杂学习任务所必需的。然而,由于捕捉这些表示所需的模型容量,往往容易过度拟合,因此需要适当的正则化才能很好地推广。本文证明了在训练过程中随机屏蔽输入平方区域的简单正则化技术(称之为截断)可以提高卷积神经网络的鲁棒性和整体性能。这种方法不仅非常容易实现,而且还证明它可以与现有的数据增强形式和其他正则化方法结合使用,以进一步提高模型性能。将此方法应用于CIFAR-10、CIFAR-100和SVHN数据集上的当前最新体系结构,得到了新的最新结果,测试误差分别为2.56%、15.20%和1.30%。

出发点和随机擦除一样,也是模拟遮挡,目的是提高泛化能力,实现上比random erasing简单,随机选择一个固定大小的正方形区域,然后采用全0填充就OK了,当然为了避免填充0值对训练的影响,应该要对数据进行中心归一化操作,norm到0。

本文和随机擦除几乎同时发表,难分高下(不同场景下谁好难说),区别在于在cutout中,擦除矩形区域存在一定概率不完全在原图像中的。而在Random Erasing中,擦除矩形区域一定在原图像内。Cutout变相的实现了任意大小的擦除,以及保留更多重要区域。

需要注意的是作者发现cutout区域的大小比形状重要,所以cutout只要是正方形就行,非常简单。具体操作是利用固定大小的矩形对图像进行遮挡,在矩形范围内,所有的值都被设置为0,或者其他纯色值。而且擦除矩形区域存在一定概率不完全在原图像中的(文中设置为50%)

论文中有一个细节可以看看:作者其实开发了一个早期做法,具体是:在训练的每个epoch过程中,保存每张图片对应的最大激活特征图(以resnet为例,可以是layer4层特征图),在下一个训练回合,对每张图片的最大激活图进行上采样到和原图一样大,然后使用阈值切分为二值图,盖在原图上再输入到cnn中进行训练,有点自适应的意味。但是有个小疑问:训练的时候不是有数据增强吗?下一个回合再用前一次增强后的数据有啥用?不太清楚作者的实现细节。如果是验证模式下进行到是可以。
这种做法效果蛮好的,但是最后发现这种方法和随机选一个区域遮挡效果差别不大,而且带来了额外的计算量,得不偿失,便舍去。就变成了现在的cutout了。可能和任务有关吧,按照的理解,早期做法非常make sense,效果居然和cutout一样,比较奇怪。并且实际上考虑目标检测和语义分割,应该还需要具体考虑,不能照搬实现。学习这类论文觉得最重要的是思想,能不能推广到不同领域上面?是否可以在训练中自适应改变?是否可以结合特征图联合操作?

三.数据增强相关-Hide-and-Seek

论文名称:Hide-and-Seek: A Data
Augmentation Technique for Weakly-Supervised Localization and Beyond
论文地址:https://arxiv.org/abs/1811.02545
github地址:https://github.com/kkanshul/Hide-and-Seek

论文摘要

提出了一种通用的数据增强技术Hide-and-Seek,它是对现有数据增强技术的补充,有利于实现各种视觉识别任务。其核心思想是在训练图像中随机地隐藏补丁,以迫使网络在隐藏最具鉴别能力的内容时寻找其他相关内容。本文方法只需要修改输入图像,并且可以与任何网络一起工作来提高其性能。在测试期间,不需要隐藏任何补丁。与现有的数据增强技术相比,Hide-and-Seek的主要优势在于它能够提高弱监督环境下的目标定位精度,因此利用这一任务来激励该方法。然而,Hide-and-Seek不仅与图像定位任务相关,而且可以推广到视频等其他形式的视觉输入,以及图像分类、时间动作定位、语义分割、情感识别、年龄/性别估计、人的再识别等识别任务。在这些视觉识别问题上,进行了大量的实验来展示隐藏和搜索的优势。

可以认为是random

earsing的推广。核心思想就是去掉一些区域,使得其他区域也可以识别出物体,增加特征可判别能力。和大部分细粒度论文思想类型,如下所示:


数据增强仅仅用于训练阶段,测试还是整图,不遮挡,如下所示。

做法是将图片切分为sxs个网格,每个网格采用一定概率进行遮挡,可以模拟出随机擦除和cutout效果。

至于隐藏值设置为何值,作者认为比较关键,因为可能会改变训练数据的分布。如果暴力填黑,认为会出现训练和测试数据分布不一致问题,可能不好,特别是对于第一层卷积而言。作者采用了一些理论计算,最后得到采用整个数据集的均值来填充造成的影响最小(如果采用均值,那么输入网络前,数据预处理减掉均值,那其实还是接近0)。

YOLOV4各个创新功能模块技术分析(一)相关推荐

  1. YOLOV4各个创新功能模块技术分析(三)

    YOLOV4各个创新功能模块技术分析(三) 八.数据增强相关-Stylized-ImageNet 论文名称:ImageNet-trained cnns are biased towards textu ...

  2. YOLOV4各个创新功能模块技术分析(二)

    YOLOV4各个创新功能模块技术分析(二) 四.数据增强相关-GridMask Data Augmentation 论文名称:GridMask Data Augmentation 论文地址:https ...

  3. 有声小说书屋阅读软件 功能及技术分析

    目录 一.有声小说书屋软件功能 1.界面介绍 2.听书功能 1)点击上册工具栏的  喇叭,可实现听书功能, 2)生成网页,借助 edge浏览器的听书功能 3. 扩展书屋 二.所用技术介绍 1.导入小说 ...

  4. RTSP安防网络摄像头/海康大华硬盘录像机网页无插件直播方案EasyNVR之主要功能模块及相关技术特点与性能指标分析

    EasyNVR安防流媒体服务解决方案,支持RTSP稳定拉流接入,支持Onvif协议接入,支持RTSP/RTMP/HLS/HTTP-FLV分发,将传统安防监控设备互联化,无插件直播等. 功能模块 1.设 ...

  5. 字节码技术在模块依赖分析中的应用

    背景 近年来,随着手机业务的快速发展,为满足手机端用户诉求和业务功能的迅速增长,移动端的技术架构也从单一的大工程应用,逐步向模块化.组件化方向发展.以高德地图为例,Android 端的代码已突破百万行 ...

  6. 信息组织与检索【知识点整理】| 信息检索技术与方法 信息检索系统结构和功能模块 信息描述 信息标引 信息存储

    目录 1 简单的定义 (一)广义的信息检索(信息组织+信息检索) (二)狭义的信息检索 2 信息检索技术与方法 (一)文本信息检索 (二)多媒体信息检索 3 信息检索系统结构和功能模块 (一)信息检索 ...

  7. 大力发展先进制造业和装备制造业-高端数控机床(组合机床和立柱移动式三坐标及其基础模块和功能模块规划设计图册技术)

    前言: 原大连组合机床研究所工作,主要从事组合机床和柔性组合机床及其自动线.高端多坐标自动换刀数控机床等研发和设计. 历任技术员.工程师.高级工程师和室主任等职,曾获国家科技攻关中作出突出贡献重大成果 ...

  8. NetSarang软件中nssock2.dll模块被植入恶意代码技术分析与防护方案

    NetSarang是一家提供安全连接解决方案的公司,该公司的产品主要包括Xmanager, Xmanager 3D, Xshell, Xftp 和Xlpd.最近,官方在2017年7月18日发布的软件被 ...

  9. 觉SLAM的主要功能模块分析

    视觉SLAM的主要功能模块分析 一.基本概念 SLAM (simultaneous localization and mapping),也称为CML (Concurrent Mapping and L ...

最新文章

  1. linux配置接口多地址,Linux /etc/network/interfaces配置接口方法
  2. 直男对于产品经理的思考
  3. 服务中添加mysql服务_Windows平台下在服务中添加MySQL
  4. 用位运算计算两数的和
  5. quartz各版本MySQL数据库存储建表SQL语句
  6. dede列表页if判断输出html,首页、列表页调用文章body内容的两种方法
  7. mysql+5.6+左连接_第5章 索引与算法
  8. 修改vscode 窗口字体大小和编辑窗口字体大小
  9. C++:在堆上创建对象,还是在栈上?
  10. C++ STL 学习 :for_each与仿函数(functor)
  11. mysql 主要有哪些函数_MySql常用函数全部汇总
  12. STM32——串口通信及实验
  13. ENSP实验五——三层交换机+二层交换机
  14. RFC8998+BabaSSL---让国密驶向更远的星辰大海
  15. CodeWarrior for S12(X) V5.1 Special详细安装过程
  16. 查询净值连续增长天数
  17. 微信读书中总显示服务器错误,微信读书充值遇到问题怎么办 微信读书充值遇到问题解决方法...
  18. 计算机房灭火器单具基准,厂房、车间灭火器配置计算范例
  19. Controllable Generation from Pre-trained Language Models via Inverse Prompting翻译
  20. 计算机用户被停用,电脑教程:Windows7用户被停用解决方法

热门文章

  1. FastAI 课程学习笔记 lesson 1:宠物图片分类
  2. c语言从stdin读入
  3. 手把手从零开始搭建k8s集群超详细教程
  4. TVM,Relay,Pass
  5. 摄像头ISP系统原理(上)
  6. Yolov1目标检测算法详细分析
  7. Django 缓存6.2
  8. Android switchCompat. 和 Switch
  9. Error:(17, 0) SDK location not found. Define location with sdk.dir in the local.properties file or w
  10. org.gradle.api.internal.tasks.DefaultTaskInputs$TaskInput........