数据增强方法 | 基于随机图像裁剪和修补的方式(文末源码共享)

深度卷积神经网络(CNNs)在图像处理中取得了显著的效果。然而,他们的高表达能力有过度适应的风险。因此,提出了在丰富数据集的同时防止过度拟合的数据增强技术。最新的CNN体系结构具有更多的参数,使得传统的数据增强技术显得不足。

导读

由于最近流行的CNN结构都具有更多的参数,使得老早之前传统的数据增强技术显得微不足道。 今天分享的文献中,提出了一种新的数据增强技术,称为随机图像裁剪和修补( RICAP ),它随机地对四幅图像进行裁剪,并对它们进行修补,以生成新的训练图像。此外,RICAP混合了四幅图像的类标签,从而产生了类似于标签平滑的优势。 最后作者用当前最先进的CNN(例如, shake-shake regularization model )对RICA P进行了评估,并与竞争的数据增强技术(如切分和混淆)进 行了比较。 RICAP在CIFAR-10上实现了2.19%的最新测试误差,最后还证实,使用CIFAR-100和ImageNet以及使用Microsoft CoCO的图像标题检索任务,使用RICAP的深层CNN在分类任务上取得了更好的效果。

640?wx_fmt=jpeg

引言

深层卷积神经网络(CNNs)以其众多的参数和丰富的表达能力在图像分类和图像处理领域取得了显著的成果。最近的一项研究表明,CNNs的性能与训练样本的数量成对数关系。相反,如果没有足够的训练样本,具有许多参数的CNN就会有过拟合的风险,因为它们会记住训练图像的细节特征,而这些特征不能被概括。由于收集大量样本成本高得令人望而却步,因此数据增强方法已被普遍采用。

数据增强通过多种方式增加图像的多样性,例如翻转、调整大小和随机裁剪。颜色抖动改变了亮度、对比度和饱和度,使用主成分分析(PCA)对RGB通道进行颜色转换交替。Dropout是一种常用的数据增强技术,它通过降低像素向图像中注入噪声。与传统的数据增强技术不同,数据丢失会干扰和掩盖原始图像的特征。最近的许多研究提出了新的CNN结构,它具有更多的参数,而上述传统的数据增强技术已经变得不足。

640?wx_fmt=jpeg 因此,新的数据增强技术已引起越来越多的关注。 在每个训练步骤中,裁剪在图像中随机隐藏一个方形区域,从而改变明显的特征。CutOut 是Dropout的延伸,可以实现更好的性能。 随机擦除也掩盖了一个分区域的图像,如cutout。 与裁剪不同,它随机决定是否掩蔽一个区域,以及掩蔽区域的大小和高宽比。 混合 alpha-blends 两幅图像形成一个新的图像,正则化CNN以利于在训练图像之间的简单线性行为。 除了图像种类的增加之外,Mixup的行为类似于类标签平滑,因为它将两个图像的类标签与λ: 1−λ混合。 这些新的数据增强技术已经应用于现代的深层CNN,并打破了记录,证明了数据增强的重要性。

相关技术及工作

Data Augmentation

数据增强增加了训练样本的多样性,防止了过拟合。深层CNN,AlexNet,使用随机剪切和水平翻转对CIFAR数据集进行评估。通过改变图像中的表面特征,随机剪切可以防止CNN过拟合到特定的特征。水平翻转使具有特定方向的图像中的变化加倍,例如飞机的侧视。AlexNet还对一组RGB值执行主成分分析(PCA),以改变RGB通道的容量,以便在ImageNet数据集上进行评估。他们在每幅图像中添加了发现的主成分的倍数。这种颜色翻译对于五颜六色的物体很有用,比如花。FacebookAI研究使用了另一种名为颜色抖动的颜色转换方法,用于重新实现。(https://github.com/facebook/fb.resnet.torch)上提供的ResNet颜色抖动会改变图像的亮度、对比度和饱和度,而不是RGB通道。

这些传统的数据增强技术在深层神经网络的训练中起着重要的作用。然而,随着许多研究提出新的网络结构,参数的数量在不断增加,而且过拟合的风险也在不断增加。因此,数据增强技术引起了人们的进一步关注。

Label Smoothing

在分类任务中,类标签通常表示为0和1的概率,深层CNN通常使用Softmax函数,它从不预测0和1的精确概率,因此,深层CNN继续学习越来越大的权重参数,并产生不公正的高置信度。标签平滑将类概率设置为中间值,如0.9和0.8。它防止了对估计类的hard 0和1概率的无止境追求,并使权重参数能够收敛到某些值,而不影响正确的分类。将混合图像的类标签与λ:1−λ混合,对标签平滑有相似的贡献。

新框架方法

今天分享的文献中,提出了一种新的数据增强技术,称为随机图像剪切与修补(RICAP),用于深层卷积神经网络(CNN)。对RICAP的概念解释如下图所示。它包括三个数据操作步骤。首先,从训练集中随机选取四幅图像。第二,图像分别裁剪。第三,对裁剪后的图像进行修补以创建新的图像。尽管这一简单的程序,RICAP大幅度增加了图像的多样性,并防止了深度CNN具有许多参数的过拟合。四幅图像的类标签与图像面积成正比。这种标签混合工作在标签平滑,并防止无止境地追求hard 0和1的概率在深CNN使用Softmax函数。

640?wx_fmt=png

更具体的实现说明如下图所示:

640?wx_fmt=png

从训练集中随机选择了四个图像k∈{1,2,3,4},并在左上角、右上角、左下角和右下角区域对它们进行了修补。Ix和Iy分别表示原始训练图像的宽度和高度。(w,h)是给出每幅裁剪图像的大小和位置的边界位置。从Beta分布中选择每个训练步骤中的边界位置(w,h),如下所示。

640?wx_fmt=jpeg

Concept of RICAP

RICAP与裁剪、混淆和标签平滑共享概念,并有可能克服它们的缺点。剪裁掩盖了图像的一个子区域,而RICAP产生了一个图像的子区域。在每个训练步骤中,两者都会改变图像的明显特征。然而,遮掩只会减少每个样本中可用特征的数量。相反,提出的RICAP补丁图像,因此修补图像的整个区域产生了有助于培训的特性。

混合使用一个 alpha-blend (即混合像素的强度),而RICAP补丁四个裁剪的图像,这可以看作是一个空间的混合。 通过阿尔法混合两幅图像,混合产生像素级的特征,原始图像永远不会产生,大大增加了cnn必须学习的各种特征,并潜在地扰乱了训练。 相反,由RICAP方法修补的图像总是产生像素级的特征,除了边界修补之外,原始图像也会产生像素级的特征。 当边界位置(w,h)接近四坐标时,裁剪区域变小,偶尔不描绘物体。 RICAP不检查对象是否位于裁剪区域。 即使在裁剪区域中没有对象,CNN也会从其他裁剪区域学习其他对象,并享受标签平滑的好处。

实验

640?wx_fmt=png

在CIFAR数据集上使用WIDE RESNET测试错误率 640?wx_fmt=png

TEST ERROR RATES ON CIFAR-10

640?wx_fmt=png

640?wx_fmt=png 目标类激活映 射图

640?wx_fmt=png

源码

640?wx_fmt=png测试结果:

640?wx_fmt=png

如果想加入我们“计算机视觉战队”,请扫二维码加入学习群。计算机视觉战队主要涉及机器学习、深度学习等领域,由来自于各校的硕博研究生组成的团队,主要致力于人脸检测、人脸识别,多目标检测、目标跟踪、图像分割等研究方向。

640?wx_fmt=jpeg

我们开创一段时间的“计算机视觉协会”知识星球,也得到很多同学的认可,我们定时会推送实践型内容与大家分享,在星球里的同学可以随时提问,随时提需求,我们都会及时给予回复及给出对应的答复。

640?wx_fmt=jpeg

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,很高兴为您解答这个问题。 在深度学习中,数据增强是一种常用的技术,它可以通过对原始数据进行变换、裁剪、旋转、翻转等操作,来扩充训练集,从而提高模型的泛化能力和鲁棒性。在图像领域,常用的数据增强方法包括随机裁剪随机旋转、随机翻转、色域变换等。下面,我将为您介绍如何使用 Python 对图像进行随机数据增强。 1. 随机裁剪 随机裁剪是一种简单而有效的数据增强方法,它可以通过对原始图像进行随机裁剪,来扩充训练集。在 Python 中,我们可以使用 PIL 库中的 Image 模块来实现随机裁剪。 ```python from PIL import Image import random def random_crop(img, crop_size): w, h = img.size left = random.randint(0, w - crop_size) top = random.randint(0, h - crop_size) right = left + crop_size bottom = top + crop_size return img.crop((left, top, right, bottom)) ``` 2. 随机旋转 随机旋转是一种常用的数据增强方法,它可以通过对原始图像进行随机旋转,来扩充训练集。在 Python 中,我们可以使用 PIL 库中的 Image 模块来实现随机旋转。 ```python from PIL import Image import random def random_rotate(img, angle_range): angle = random.uniform(-angle_range, angle_range) return img.rotate(angle) ``` 3. 随机翻转 随机翻转是一种简单而有效的数据增强方法,它可以通过对原始图像进行随机翻转,来扩充训练集。在 Python 中,我们可以使用 PIL 库中的 Image 模块来实现随机翻转。 ```python from PIL import Image import random def random_flip(img, flip_prob): if random.random() < flip_prob: return img.transpose(Image.FLIP_LEFT_RIGHT) return img ``` 4. 色域变换 色域变换是一种常用的数据增强方法,它可以通过对原始图像进行色彩变换,来扩充训练集。在 Python 中,我们可以使用 PIL 库中的 Image 模块来实现色域变换。 ```python from PIL import Image import random def random_color(img, color_range): r, g, b = img.split() r = r.point(lambda i: i + random.randint(-color_range, color_range)) g = g.point(lambda i: i + random.randint(-color_range, color_range)) b = b.point(lambda i: i + random.randint(-color_range, color_range)) return Image.merge('RGB', (r, g, b)) ``` 以上就是使用 Python 进行随机数据增强的一些常用方法,希望对您有所帮助。如果您有任何问题,请随时联系我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

计算机视觉研究院

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值