PaddleDetection算法分析(9)

2021SC@SDUSC

本章节开始对PaddleDetection使用的YOLOv4算法进行分析

接下来几章分析yolov4如下技术:random erasing、cutout、hide-and-seek、grid mask、Adversarial Erasing、mixup、cutmix、mosaic、Stylized-ImageNet、label smooth、dropout和dropblock。 下一篇分析网络结构、各种层归一化技术、以及其他相关技术。
 

1 数据增强相关(以下小标题是论文)

yolov4论文链接:https://arxiv.org/abs/2001.04086v2


1.1 Random erasing data augmentation


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

 

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

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

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

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

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


1.2 Cutout


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

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

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

论文中有一个细节可以看看:作者其实开发了一个早期做法,具体是:在训练的每个epoch过程中,保存每张图片对应的最大激活特征图(以resnet为例,可以是layer4层特征图),在下一个训练回合,对每张图片的最大激活图进行上采样到和原图一样大,然后使用阈值切分为二值图,盖在原图上再输入到cnn中进行训练,有点自适应的意味。但是有个小疑问:训练的时候不是有数据增强吗?下一个回合再用前一次增强后的数据有啥用?我不太清楚作者的实现细节。如果是验证模式下进行到是可以。 这种做法效果蛮好的,但是最后发现这种方法和随机选一个区域遮挡效果差别不大,而且带来了额外的计算量,得不偿失,便舍去。就变成了现在的cutout了。

可能和任务有关吧,按照我的理解,早期做法非常make sense,效果居然和cutout一样,比较奇怪。并且实际上考虑目标检测和语义分割,应该还需要具体考虑,不能照搬实现。

学习这类论文我觉得最重要的是思想,能不能推广到不同领域上面?是否可以在训练中自适应改变?是否可以结合特征图联合操作?

1.3 Hide-and-Seek


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

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

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

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

1.4 GridMask Data Augmentation


 

本文可以认为是前面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种数据增强策略上。

1.5 object Region Mining with Adversarial Erasing

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

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


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

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

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

1.6 mixup

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

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

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

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

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

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

1.7 cutmix和Mosaic


简单来说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值,λ \lambdaλ 用于控制线性混合度,通过λ \lambdaλ 参数可以控制裁剪矩形大小,

伪代码如下:

PaddleDetection算法分析(9)_第1张图片

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

1.8 Stylized-ImageNet

论文名称:ImageNet-trained cnns are biased towards texture; increasing shape bias improves accuracy and robustness

本文非常有意思,得到的结论非常有意义,可以指导我们对于某些场景测试失败的分析。本质上本文属于数据增强论文,做的唯一一件事就是:对ImageNet数据集进行风格化。

本文结论是:CNN训练学习到的实际是纹理特征(texture bias)而不是形状特征,这和人类的认知方式有所区别,如论文题目所言,存在纹理偏置。而本文引入风格化imagenet数据集,平衡纹理和形状偏置,提高泛化能力。

本文指出在ImageNet上训练的CNN强烈的偏向于识别纹理而不是形状,这和人的行为是极为不同的,存在纹理偏差,所以提出了Stylized-ImageNet数据,混合原始数据训练就可以实现既关注纹理,也关注形状(也就是论文标题提到的减少纹理偏向,增加形状偏向)。从而不仅更适合人类的行为,更惊讶的是提升了目标检测的精度,以及鲁棒性,更加体现了基于形状表示的优势。

文章从一只披着象皮的猫究竟会被识别为大象还是猫这个问题入手,揭示了神经网络根据物体的texture进行识别而非我们以为的根据物体的形状。

作者准备了6份数据,分别是正常的图片,灰色图,只包含轮廓的,只包含边缘的,只有纹理没有形状,纹理和形状相互矛盾(大象的纹理,猫的形状),对于第六份数据(纹理和形状冲突的数据),作者采用Stylized-ImageNet随机地将物体的纹理替换掉(也就是本文创新点),如下(c)所示:

 

采用了4个主流网络,加上人类直观评估。原图其实是作者除了物体外,其余都是白色背景的数据集,目的是去除干扰。 对于前面5份数据,采用原图和灰度图,神经网络都可以取得非常高的准确率,而对于只包含轮廓和只包含边缘的图片,神经网络的预测准确率则显著降低。更有意思的是,对于只包含纹理的图片,神经网络取得特别高的准确率。因而不难推断出,神经网络在识别中,主要是参考纹理信息而不是形状信息。

作者先构造数据集,然后再进行后面的深入实验,IN就是指的ImageNet,SIN是指的风格化的ImageNet,如下所示

SIN的特点是保留shape,但是故意混淆掉纹理信息。

从上表的第一行可以看出,在原始图片IN上训练的模型不能适应去除纹理SIN的图片(IN-SIN),而使用去除纹理的图片进行训练和测试效果会差于使用原始图片进行训练和测试(SIN-SIN),这说明纹理信息在图像识别中确实起到了一定的作用,去除了纹理信息会提高模型识别的难度。最后,当我们使用去除纹理的图片进行训练而在原图进行测试的时候(SIN-IN),效果比在去除纹理的图片上面效果好(SIN-SIN)。

后面三行的实验采用的是第一行resnet的网络结构,其主要特征是限制模型的感受野,从而让模型无法学习到空间的信息,其对应的感受野分别是3333, 17 * 17,99,对于训练原始的图片,其结果测试误差跟没有加上感受野限制的误差差别不大,从而说明纹理信息起到主导作用(IN-IN),而对应去除掉纹理信息的图片,其测试结果下降十分明显(SIN-SIN),说明形状信息起到主要的作用,证明了SIN的模型确实在学习形状的信息而不是纹理的信息。这个实验是要说明提出的SIN数据集由于强制抹掉了固定纹理,网络训练难度增大,在没有限制感受野情况下可以学的蛮好,但是一旦限制了感受野就不行了,说明SIN模型学习到的不仅仅是纹理(因为纹理是局部的,如果依靠纹理来分类,那么准确率应该下降不了这么多),更多的是依靠shape分类,因为感受野外限制了,导致无法看到整个shape,并且通过更加限制感受野,SIN-SIN准确率下降更多可以发现。 也就是说SIN数据集由于替换掉了纹理,迫使网络学习shape和纹理,达到了本文目的。SIN上训练的ResNet50展示出更强的形状偏向,符合人类常理。

增强形状偏向也改变了表示,那么影响了CNN的性能和鲁棒性了吗?我们设置了两个训练方案:

1 同时在SIN和IN上训练

2 同时在SIN和IN上训练,在IN上微调。称为Shape-ResNet。

作者把去掉纹理的数据和原图一起放进去模型中进行训练,最后用原图进行finetune,发现这种方法可以提高模型的性能。Shape-ResNet超过了原始ResNet的准确率,说明SIN是有用的图像增强。

总结:CNN识别强烈依赖于纹理,而不是全局的形状,但是这是不好的,为了突出形状bias,可以采用本文的SIN做法进行数据增强,SIN混合原始数据训练就可以实现既关注纹理,也关注形状,不仅符合人类直观,也可以提高各种任务的准确率和鲁邦性。所以本文其实是提出了一种新的数据增强策略。是不是很有意思的结论?

1.9 label smooth

论文题目:Rethinking the inception architecture for computer vision

 

label smooth是一个非常有名的正则化手段,防止过拟合,我想基本上没有人不知道,故不详说了,核心就是对label进行soft操作,不要给0或者1的标签,而是有一个偏移,相当于在原label上增加噪声,让模型的预测值不要过度集中于概率较高的类别,把一些概率放在概率较低的类别。
 

以上便是paddledetection所用到的yolov4模型中的数据增强相关的分析,下一章开始我们将要进行特征增强相关的分析

你可能感兴趣的:(2021SC@SDUSC,算法,深度学习,人工智能)