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大小。

 

最新文章

  1. AD域修改组策略
  2. [deviceone开发]-天气demo
  3. Spring的meta标签
  4. linux下串口控制
  5. [转]Delphi Form的释放和隐藏:free,hide,close
  6. 使用Dataset
  7. 把python项目部署到centos里
  8. PHP学习笔记三十八【下载】
  9. Objective-C 关于静态方法与实例方法的转载
  10. java基础总结(1)安装jdk
  11. LomBok插件的使用
  12. Django连接Oracle数据库配置
  13. C#实现office文档转换为PDF格式
  14. Linux lvm 分区知识笔记
  15. console.log-对象引用
  16. eclipse的jdk版本和spring冲突问题WARN XmlWebApplicationContext:1060 - Exception thrown from LifecycleProcessor on context close
  17. 【RS】Modeling User Exposure in Recommendation - 在推荐中建模用户的暴露程度
  18. 怎么安装WinXP和Win7双系统
  19. SSH Secure Shell Client--- the host may be dow
  20. python及pandas,numpy等知识点技巧点学习笔记

热门文章

  1. 【SpringBoot】Spring Boot
  2. showdan
  3. left join 后用 on 还是 where,区别大了!
  4. 『动善时』JMeter基础 — 15、使用JMeter实现上传文件
  5. 浅谈CRM系统的选型和实施
  6. Java虚拟机栈和PC寄存器
  7. 【转载】linux 设备管理器 图形hardinfo 字符 lshw lspci
  8. Linux如何设置用户登录超时(闲置时间)vi /etc/profile ... export TMOUT=900
  9. Mysql数据库-多实例主从复制-主从故障详解
  10. mysql基础之mysql双主(主主)架构