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

四.数据增强相关-GridMask Data Augmentation

论文名称:GridMask Data Augmentation

论文地址:https://arxiv.org/abs/2001.04086v2

论文摘要

本文提出了一种新的数据增强方法GridMask。它利用信息去除来实现各种计算机视觉任务的最新结果。分析了信息丢弃的需求。在此基础上,指出了现有信息丢弃算法的局限性,提出了一种简单有效的结构化方法。它基于输入图像区域的删除。大量实验表明,本方法优于最新的AutoAugment,这是由于使用强化学习来寻找最佳策略而导致的计算代价更高。在用于识别的ImageNet数据集、COCO2017对象检测和用于语义分割的Cityscapes数据集上,本方法都显著提高了性能。大量的实验证明了新方法的有效性和通用性。

本文可以认为是前面3篇文章的改进版本。本文的出发点是:删除信息和保留信息之间要做一个平衡,而随机擦除、cutout和hide-seek方法都可能会出现可判别区域全部删除或者全部保留,引入噪声,可能不好。如下所示:

要实现上述平衡,作者发现非常简单,只需要结构化drop操作,例如均匀分布似的删除正方形区域即可。并且可以通过密度和size参数控制,达到平衡。如下所示:

其包括4个超参,如下所示:

首先定义k,即图像信息的保留比例,其中H和W分别是原图的高和宽,M是保留下来的像素数,保留比例k如下,该参数k和上述的4个参数无直接关系,但是该参数间接定义了r:

d决定了一个dropped square的大小, 参数 x和 y的取值有一定随机性.

   其实看起来,就是两个参数: r和d,r通过k计算而来,用于计算保留比例(核心参数),d用了控制每个块的大小。d越大,每个黑色块面积就越大,黑色块的个数就越少,d越小,黑色块越小,个数就越多。xy仅仅用于控制第一个黑色块的偏移而已。

对于应用概率的选择,可以采用固定值或者线性增加操作,作者表示线性增加会更好,例如首先选择r = 0.6,然后随着训练epoch的增加,概率从0增加到0.8,达到240th epoch后固定,这种操作也是非常make sense,为了模拟更多场景,在应用于图片前,还可以对mask进行旋转。这种策略当然也可以应用于前3种数据增强策略上。

五.数据增强相关-object
Region Mining with Adversarial Erasin

论文地址:https://arxiv.org/pdf/1703.08448.pdf

论文摘要

研究了一种利用分类网络逐步挖掘目标区域的方法来解决弱监督语义分割问题。分类网络只对来自感兴趣对象的小而稀疏的区分区域做出响应,这偏离了分割任务的要求,分割任务需要对密集、内部和整体区域进行本地化,以便进行像素级推理。为了缩小这一差距,提出了一种新的对抗性擦除方法来逐步定位和扩展目标区域。从单个小目标区域开始,提出的方法通过以对抗的方式擦除当前的挖掘区域,驱动分类网络顺序地发现新的和补充的目标区域。这些局部区域最终构成一个稠密完整的学习语义分割的对象区域。为了通过对抗性擦除进一步提高发现区域的质量,开发了一种在线禁止性分段学习方法,通过提供由更可靠的分类分数调节的辅助分段监督,与对抗性擦除协作。尽管该方法明显简单,但在帕斯卡VOC 2012 val和测试集(这是最新的技术状态)上,其平均交集(mIoU)得分分别达到55.0%和55.7%。

本文在yolov4中仅仅是提了一下,不是重点,但是觉得思想不错,所以还是写一下。

本文要解决的问题是使用分类做法来做分割任务(弱监督分割),思想比较有趣。如下所示:

通过迭代训练的方式不断挖掘不同的可判别区域,最终组合得到完整的分割结果。第t次训练迭代(一次迭代就是指的一次完整的训练过程),对于每张图片都可以得到cam图(类别激活图),将cam图二值化然后盖在原图上,进行下一次迭代训练,每次迭代都是学习一个不同的可判别区域,迭代结束条件就是分类性能不行了,因为可判别区域全部被盖住了(由于该参数其实很难设置,故实验直接取3)。最后的分割结果就是多次迭代的cam图叠加起来即可。

本文是cvpr2017的论文,放在现在来看,做法其实超级麻烦,现在而言肯定直接采用细粒度方法,采用特征擦除技术,端到端训练,学习出所有可判别区域。应该不会比这种做法效果差,但是在当时还是不错的思想。

但是其也提供了一种思路:是否可以采用分类预测出来的cam,结合弱监督做法,把cam的输出也引入某种监督,在提升分类性能的同时,提升可判别学习能力。

六.数据增强相关-mixup

论文名称:mixup: BEYOND
EMPIRICAL RISK MINIMIZATION

论文地址:https://arxiv.org/abs/1710.09412

论文摘要

大型深层神经网络功能强大,但表现出不受欢迎的行为,如记忆和对敌对例子的敏感性。在这项工作中,提出了mixup,一个简单的学习原则来缓解这些问题。从本质上讲,mixup训练一个神经网络,这是关于一对例子及其标签的凸组合的。通过这样做,mixup使神经网络正则化,以利于训练实例之间的简单线性行为。在ImageNet-2012、CIFAR-10、CIFAR-100、Google命令和UCI数据集上的实验表明,mixup改进了最先进的神经网络体系结构的通用性。本文还发现,混合减少了对腐败标签的记忆,提高了对抗性例子的鲁棒性,并稳定了生成性对抗性网络的训练。

mixup由于非常有名,想大家都应该知道,而且网上各种解答非常多,故这里就不重点说了。

其核心操作是:两张图片采用比例混合,label也需要混合。

论文中提到的一些关键的Insight:


    1 也考虑过三个或者三个以上的标签做混合,但是效果几乎和两个一样,而且增加了mixup过程的时间。

    2 当前的mixup使用了一个单一的loader获取minibatch,对其随机打乱后,mixup对同一个minibatch内的数据做混合。这样的策略和在整个数据集随机打乱效果是一样的,而且还减少了IO的开销。

    3 在同种标签的数据中使用mixup不会造成结果的显著增强

七.数据增强相关-cutmix和Mosaic

论文名称:CutMix:
Regularization Strategy to Train Strong Classifiers with Localizable Features

论文地址:https://arxiv.org/abs/1905.04899

开源地址:https://github.com/clovaai/CutMix-PyTorch

论文摘要

为了提高卷积神经网络分类器的性能,提出了区域退学策略。事实证明,它们可以有效地引导模型关注对象中不易区分的部分(例如,腿而不是人头),从而使网络更好地进行泛化,并具有更好的对象定位能力。另一方面,当前的区域性丢失方法通过叠加一块黑色像素或随机噪声来去除训练图像上的信息像素。这种删除是不可取的,因为它会导致信息丢失和训练效率低下。提出了CutMix增强策略:在训练图像中剪切和粘贴面片,其中地面真值标签也与面片的面积成比例地混合。通过有效利用训练像素和保持区域回归的正则化效果,CutMix在CIFAR和ImageNet分类任务以及ImageNet弱监督定位任务中始终优于最新的增强策略。此外,与以前的增强方法不同,CutMix训练的ImageNet分类器在用作预训练模型时,在Pascal检测和MS-COCO图像字幕基准方面获得了一致的性能增益。证明了CutMix提高了模型对输入腐败的鲁棒性及其分布外检测性能。

简单来说cutmix相当于cutout+mixup的结合,可以应用于各种任务中。

mixup相当于是全图融合,cutout仅仅对图片进行增强,不改变label,而cutmix则是采用了cutout的局部融合思想,并且采用了mixup的混合label策略,看起来比较make sense。

cutmix和mixup的区别是,其混合位置是采用hard 0-1掩码,而不是soft操作,相当于新合成的两张图是来自两张图片的hard结合,而不是Mixup的线性组合。但是其label还是和mixup一样是线性组合。作者认为mixup的缺点是:Mixup samples suffer from the fact that they are locally ambiguous
and unnatural, and therefore confuses the model, especially for localization。

M是和原图大小一样的矩阵,只有0-1值,用于控制线性混合度,通过参数可以控制裁剪矩形大小,

伪代码如下:

而Mosaic增强是本文提出的,属于cutmix的扩展,cutmix是两张图混合,而马赛克增强是4张图混合,好处非常明显是一张图相当于4张图,等价于batch增加了,可以显著减少训练需要的batch size大小。

 

YOLOV4各个创新功能模块技术分析(二)的更多相关文章

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

    YOLOV4各个创新功能模块技术分析(一) 简 介 yolov4论文:YOLOv4: Optimal Speed and Accuracy of Object Detection arxiv:http ...

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

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

  3. 从业务流程角度:分析TMS系统各个功能模块

    TMS的主要功能是协调承运商.运营商.货主三种角色人员分工合作共同完成运输任务,并实现对运输任务的跟踪管理.本文将按照业务流程顺序对TMS系统各个功能模块进行分析说明. 一.业务描述 新零售的兴起及& ...

  4. 背景建模技术(二):BgsLibrary的框架、背景建模的37种算法性能分析、背景建模技术的挑战

    背景建模技术(二):BgsLibrary的框架.背景建模的37种算法性能分析.背景建模技术的挑战 1.基于MFC的BgsLibrary软件下载 下载地址:http://download.csdn.ne ...

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

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

  6. Excel阅读模式/聚光灯开发技术之二 超级逐步录入提示功能开发原理简述—— 隐鹤 / HelloWorld

    Excel阅读模式/聚光灯开发技术之二 超级逐步录入提示功能开发原理简述———— 隐鹤  /  HelloWorld 1. 引言 自本人第一篇博文“Excel阅读模式/单元格行列指示/聚光灯开发技术要 ...

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

    原文地址:http://blog.nsfocus.net/nssock2-dll-module-malicious-code-analysis-report/ NetSarang是一家提供安全连接解决 ...

  8. 大数据技术之_14_Oozie学习_Oozie 的简介+Oozie 的功能模块介绍+Oozie 的部署+Oozie 的使用案列

    第1章 Oozie 的简介第2章 Oozie 的功能模块介绍2.1 模块2.2 常用节点第3章 Oozie 的部署3.1 部署 Hadoop(CDH版本的)3.1.1 解压缩 CDH 版本的 hado ...

  9. jQuery 源码分析(二) 入口模块

    jQuery返回的对象本质上是一个JavaScript对象,而入口模块则可以保存对应的节点的引用,然后供其它模块操作 我们创建jQuery对象时可以给jQuery传递各种不同的选择器,如下: fals ...

随机推荐

  1. PHP--date转成时间戳,time()获取的是秒数

    date("Y-m-d H:i:s");  //如果存成datetime型在MYSQL中 必须用这种格式 实现功能:获取某个日期的时间戳,或获取某个时间的时间戳.strtotime ...

  2. UVA10020(最小区间覆盖)

    题意:       给你一个区间[0,m]和一些小的区间[l,r]让你选择最少的小区间个数去把整个区间覆盖起来. 思路:       算是比较经典的贪心题目吧(经典于难度没什么对应关系),大体思路可以 ...

  3. Python中math和cmath模块的使用

    目录 Math模块 Cmath模块 Math模块 pi                数字常量,圆周率 e                 表示一个常量 sqrt(x)         求x的平方根 ...

  4. Python脚本扫描给定网段的MAC地址表(scapy或 python-nmap)

    目录 用scapy模块写 用 python-nmap 模块写 python3.7  windows环境 以下两个都可以扫描指定主机或者指定网段的 IP 对应的 MAC 地址,然后保存到 csv 文件中 ...

  5. PowerShell-3.多线程

    $start = Get-Date $task1 = { $vUrl = 'http://img.mottoin.com/wp-content/uploads/2016/09/5-25.png' $v ...

  6. spring泛型注入

    泛型依赖注入 Spring 4.0版本中更新了很多新功能,其中比较重要的一个就是对带泛型的Bean进行依赖注入的支持. 泛型依赖注入允许我们在使用spring进行依赖注入的同时,利用泛型的优点对代码进 ...

  7. thinkphp之独立日志(tp5.1)

    为了便于分析,File类型的日志还支持设置某些级别的日志信息单独文件记录,以error类型的日志为例,例如: 1.在log.php 中配置 'apart_level' => [ 'error' ...

  8. 前端Node的实用方法

    Node 一.什么是Node Node是以基于Chrome V8引擎的JavaScript运行环境,使用了一个事件驱动.非阻塞式I/O模型(I/O是 input/output的缩写,即输入输出端口,在 ...

  9. java集合类介绍

    目录 集合类简介 List ArrayList LinkedList Vector Stack Set HashSet LinkedHashSet TreeSet Map HashMap Hashta ...

  10. python上下文管理协议,即with的详细使用

    一.with obj as f: #代码块... 二.执行流程: 1.with obj --->触发obj.__enter__(),需要在obj里写__enter__(self),在它里边写返回 ...