图像数据增强文献调研

数据增强文献调研

本文主要是关于图像自动数据增强

现阶段我们的深度学习是靠大数据驱动的,一般的深度学习模型都是在大规模数据集上进行训练的,而且更大规模的数据集一般情况下会带来模型性能的提升,同时也能有效的预防过拟合现象的出现。但是对于有监督学习使用到的有标注数据集一般是比较小的,很难达到模型性能最佳的数据集规模,而且数据收集和标注的人工成本又过高,所以在模型训练时一般通过数据增强的方式大幅度降低数据采集的成本,同时也可以弥补数据集的不足增加样本的多样性,进而提升模型的泛化性能,即使对于大规模数据集,数据增强也是增加数据数量和多样性,改善数据分布,提升模型训练质量的一种有效的技术方法。
数据增强也被称为数据增广,一般指的是在不实质性增加数据的情况下,从有限的数据中产生更多的变种,让有限的数据产生等价于更多数据的价值。数据增强有离线与在线两种模式,离线模式一般适合小规模数据集,在数据预处理阶段完成全部变换,生成新的数据集,然后用于模型训练。在线模式一般适合大规模数据集,一边训练,一边进行数据增强变换。直观地说,数据增强是用来教给一个模型关于数据域中的不变性的,例如对一个物体进行分类通常对水平翻转或平移不敏感。在图像领域,常见的数据增强技术采用固定的预设规则进行数据扩增,包括翻转(水平和垂直)、平移(水平和垂直)、旋转、缩放、裁剪、亮度变换、颜色变换以及进行对比度的变化等。在数据样本生成的过程中,有单样本增强,比如单样本像素几何或者颜色操作类变换,这种变换多样性更强,内容变动比较大;多样本增强,比如MixUp[1]随机抽取两张图片分别经过基础数据增强操作后,再叠加一个新的样本,这时候得到的图像数据是两个样本按一定比例叠加的效果,标签数据是原样本标签按相同比例的分配,这种变换一定程度上可以起到软标签的效果;生成式模型动态产出数据,比如可以使用GAN模型进行指定类别图像的生成,这种方式有效提升了数据的数量但在训练过程中一般不太常用,因为这会造成较大的计算成本,而且该类模型生成的某类图像的效果也是有待考虑的。最近我主要对自动数据增强进行了研究,了解到的几个比较经典模型,将会在下文进行简述:
AutoAugment参照NAS的方法,把认为有效的数据增强策略集成到一个大的搜索空间,然后利用强化学习算法从中搜索出针对感兴趣数据集表现最好的数据增强策略,以此实现自动搜索改进数据增强的方法。这个工作的创新点包括:1)AutoAugment直接应用于感兴趣的数据集时可以实现自动寻找最有效的数据增强策略;2)在某一数据集上得到的数据增强策略可以转移到新的数据集上,并对模型性能有一定的提升。在实现时将寻找最佳数据增强策略的问题转化为一个离散搜索问题,整个问题被拆成两个部分:搜索空间和搜索策略。在搜索空间中,一个策略由 5 个子策略组成,每个子策略包含依次被应用的两个图像处理操作,每个操作又包括应用该操作的概率和操作的幅度这两个参数。搜索算法是采用强化学习解决的,这包括一个RNN和一个PPO算法,每一步RNN会得到有30个值的softmax预测,这分别代表着5个子策略的参数,在训练RNN时利用的奖惩信号为子模块使用RNN搜索到的策略进行训练后模型泛化能力增强的程度。在搜索结束后将针对某数据集上最好的5个策略连接在一起形成25个子策略,这些子策略可用于之后模型的训练。
为了加快AutoAugment搜索的速度,Fast AutoAugment通过基于密度匹配的搜索方式降低了搜索时间的数量级,同时也实现了相当的性能,这里的密度匹配更像是一种理论解释,我的理解是类似数据分布,这个方法也避免了调整数据增强的策略而造成重复训练子模型的步骤,所以得到了较大的速度提升。对于给定的未进行数据增强的训练集和进行数据增强的验证集,目的是搜索使训练集和验证集密度匹配的增广策略,以此来提高泛化能力,在实现时Fast AutoAugment利用模型对两个数据集的预测来衡量一个数据集在多大程度上遵循另一个数据集的模式,具体实现的过程包括:首先将训练数据集分为用于模型训练和增广策略搜索的两部分,模型要在前者上进行训练,之后用训练好的模型对采用一定增广策略的后者数据集进行预测,选出其中模型预测能够得到较高准确率的策略。
虽然AutoAugment类自动数据增强的方法在当时实现了较好的性能,但是其有一个单独的搜索阶段,这会显著提升计算成本,而RandAugment[4]引入了一个仅包含2个参数的搜索空间并且不需要单独的搜索过程也可得到更好的性能,同时它也证明了在较小规模数据集的代理任务上得到的增强策略,对于更大的任务来说可能是次优的。它在实现时为了减少参数空间同时仍然保持图像的多样性,用了均匀的概率来替代可学习的增强策略,也就是每个策略按均匀概率执行指定数量的增强方式,并且为每个增强方式添加了一个幅度参数,用来表示处理的强度。该方法不仅极大的简化了处理过程,同时也可以在多个数据集上取得更好的性能。
Faster AutoAugment该工作提出以基于梯度的方式探索搜索空间以找到更好的数据增强策略,它比以前的方法快得多且性能没有下降。该工作为一些具有离散参数的数据增强操作引入了近似梯度信息并通过引入可微分神经结构搜索方法使操作的选择过程可微分,从而可以实现基于梯度的数据增广策略的优化。它使用到对抗学习并将最小化增强后的数据与原数据分布之间的距离作为训练的目标,希望数据增强管道能够转换图像使其填补训练数据中的缺失点。
TrivialAugment[6]不需要搜索最佳的增强策略,是无参数的但可以实现最好的性能,在实现时它接受一个图像x和一组增广操作A作为输入,然后简单地从A中随机抽取一个增广操作,并将其应用于给定的图像x,设置增广的幅度为m,这个m也是从可能的强度集合中均匀地随机抽出的,最后返回增强后的图像。不同于RandAugment对批次内所有图像使用一个固定的幅值,TrivialAugment为每张图像重新采样数据增强操作和对应的幅度。
DeepAutoAugment是一种完全自动化的数据增强方法,而不是在一套固定的手工挑选的默认数据增强方法中搜索最佳的增强策略,它通过从头开始一次次堆叠增强层逐步建立一个多层的数据增强管道直到收敛,对于每个增强层是沿低方差方向利用最大化增强后图像与原图像之间的梯度余弦相似度进行优化的,将数据增强策略的搜索转化为了正则化梯度匹配的问题。在实现时它通过对单个数据进行多次增强操作来构建训练批,然后从验证集中采样一些数据作为验证批,期望通过增强处理后的训练批的梯度可以被引导到验证批,以此来实现增强后数据的数据分布接近于原数据集,这是过程是通过最大化验证批数据的梯度和增强后数据的梯度之间的余弦相似度实现的。
对于计算机视觉方向的数据增强处理,pytorch已经将其进行了模块化,可以使用torchvision.transforms包进行对应的操作,其中包括Transforms.RandomCrop随机裁剪和Transforms.RandomHorizontalFlip随机水平翻转等基础操作,这个模块也实现了TrivialAugment、RandAugment和AutoAugment,它们不需要再进行增强策略的搜索了,而是直接使用论文中搜索到的结果,这极大地简化了开发者应用数据增强方法的步骤与流程,使其可以应用到我们自己的模型训练中。

猜你喜欢

转载自blog.csdn.net/qq_48068259/article/details/127832269