本文将介绍Python数据增强的概念、意义、常用方法以及在具体案例中的应用,并通过一个具体案例展示数据增强在图像分类任务中的应用。 一、Python数据增强概述 数据增强是一种通过人工或自动方式对数据进行修改或变换,以增加数据集规模和多样性的技术。 在机器学习中,数据增强被广泛应用于解决数据稀缺、数据不平衡、数据噪声等问题,提高模型的泛化能力和鲁棒性。 二、Python数据增强的常用方法 1.图像数据增强 图像数据增强是一种常用的数据增强技术,通过对图像进行旋转、平移、缩放、翻转、裁剪等操作,增加图像的多样性和规模。 三、Python数据增强的应用案例 下面以一个图像分类任务为例,介绍Python数据增强的应用。在这个案例中,我们使用了Keras框架和ImageDataGenerator类来进行图像数据增强。
为什么要做数据增强在计算机视觉相关任务中,数据增强(Data Augmentation)是一种常用的技术,用于扩展训练数据集的多样性。它包括对原始图像进行一系列随机或有规律的变换,以生成新的训练样本。 数据增强的主要目的是增加模型的泛化能力、提高模型的鲁棒性,并减轻过拟合的风险。以下是进行数据增强的几个重要原因:增加数据样本数量:数据增强可以通过生成变体来增加训练样本的数量。 通过数据增强,您可以使用较少的标记样本来训练模型,同时保持性能。常见的数据增强技术包括图像翻转、旋转、缩放、裁剪、颜色变换、加噪声等。 选择哪些数据增强技术以及如何应用它们通常取决于具体任务和数据集的特点。数据增强在许多计算机视觉任务中都被广泛使用,包括图像分类、目标检测、分割、人脸识别等。 通过增强数据的多样性,可以提高模型的性能并使其更适应复杂的现实世界场景。人脸图像数据增强对于人脸图像数据增强,有多种方法可以提高模型的鲁棒性和性能。
其实我们都知道Pytorch的torchvision的transforms并非真正意义上的数据增强,它只是将图像做了变换,实际上图像数据集的总量是不变的。 现在我们使用Augmentor来做真正意义上的数据增强,首先安装Augmentor pip install Augmentor 如果我们的ground truth,即mask图像是单通道的,需要转成3通道的 im_name_new = im_name.split('.')[0]+'.png' cv2.imwrite(output_path + im_name_new, img) 最后就是开始做数据增强处理了 ,当然我这里只做了旋转和翻转处理,你还可以作一些其他的数据增强。 最后会得到20000张增强图像。
数据增强汇总仓库 一个强大的数据增强仓库 https://github.com/aleju/imgaug 介绍了大量不同任务的数据增强方法,包括代码和可视化 ? 另一份数据增强的文档是百度深度学习框架 PandlePandle 的介绍 https://paddleclas.readthedocs.io/zh_CN/latest/advanced_tutorials 以下详细介绍几种数据增强的策略 Mix up 论文: 《mixup: Beyond Empirical Risk Minimization》 https://arxiv.org/abs/1710.09412 这种数据增强的方法有 4 个参数 、、、 ,其物理意义如下: ? 参考:https://zhuanlan.zhihu.com/p/103992528 Mosaic ? Mosaic 是 YOLOv4 提出的一种数据增强方法,在 Cutmix 中我们组合了两张图像,而在 Mosaic 中我们使用四张训练图像按一定比例组合成一张图像,使模型学会在更小的范围内识别对象。
最近遇到数据样本数目不足的问题,自己写的增强工具生成数目还是不够,终于在网上找到一个数据增强工具包,足够高级,足够傻瓜。想要多少就有多少!再也不怕数据不够了! 简介 Augmentor是一个Python包,旨在帮助机器学习任务的图像数据人工生成和数据增强。它主要是一种数据增强工具,但也将包含基本的图像预处理功能。 特色 Augmentor是用于图像增强的软件包,重点在于提供通常用于生成机器学习问题的图像数据的操作。 使用Examples 分3步: 实例化Pipeline 对象,通过指定包含要处理图片所在的目录; 定义数据增强操作,crop、rotate等等,添加到pipeline中; 调用pipeline的sample 总结 个人认为其最大的亮点是只需要指定要增强图片所在的路径即可,不用进行读入、以及numpy数据转换; 增强时只需要指定最后的数目N,无论原始图片有多少,总能生成你想要的数目!!!
前言 由于自己的数据比较少,因此想采用数据增强的方式来扩充自己的数据集,对于目标检测任务而言,除了需要改变原始图像外,还需要对目标框进行相应的变化。 复刻YOLO官方的数据增强实现 在YOLOv5的datasets.py中,封装了一系列数据增强的方法。于是我想把它提取出来,单独在外面进行数据增强。 我主要想做一些简单的数据增强,比如平移、旋转、缩放等,于是我找到了random_perspective这个函数。 旋转增强弊端 在思考采用旋转数据增强时,我想到了一个问题,就是旋转之后的目标框实际上是要比原先要大的。采用这位博主所画的图可以进行解释。 数据增强提升经验 我尚未使用数据增强进行对比测试,看到这位博主已经进行了测试,各方法提升结果如下: 结论是使用旋转(Rotate)、随机去除像素点(Dropout)、仿射变换(Affine)对结果的提升比较显著
译者 | 小韩 编辑 | 安可 【磐创AI导读】:本文讲解了图像数据增强实战。想要获取更多的机器学习、深度学习资源,欢迎大家点击上方蓝字关注我们的公众号:磐创AI。 我目前正在做图像数据增强的深度和有效性的研究。这项研究的目的是学习怎样增加只有有限或少量数据的数据集大小,增强训练的卷积网络模型的鲁棒性。 /NIKE.png') img = np.array(img) plt.imshow(img) plt.show() 翻转(Flipping) 翻转图像是最流行的图像数据增强方法之一。 这主要是由于翻转图像的代码比较简单,而且对于大多数问题而言,翻转图像会增强模型的性能。下面的模型可以被认为是看到左鞋而不是右鞋,因此通过这种数据增加,模型对于看到鞋的潜在变化变得更加有鲁棒性。 img[i][j][k] += noise[i][j][k] plt.imshow(img) plt.show() 生成对抗网络(GAN) 我阅读过很多将生成对抗网络用于数据增强的文献
如果大家对图像数据增强有兴趣可以关注微信公众号和我们一起学习。
物料主数据增强(2) 之前写了一一篇物料主数据增强的文档ABAP随笔-物料主数据界面增强,需要配置+增强代码,今天升级一下功能,对物料主数据页签进行增强 1. 对物料主数据表增强 append custom field in MARA 随便加一个你想要的字段 2. 数据更新 之前我们在物料主数据界面增强中已经讲过了,如何对物料主数据进行增强校验了, 这里我们简单做一个唯一性校验: 启用EXIT_SAPLMGMU_001出口 和 CI_MMH1 *&------ 'MM01' 对MM01也进行唯一性的校验是因为,MM01可以对已存在的物料进行扩展 更多其他的文章请点击历史记录 ABAP随笔-物料主数据界面增强 BP客户增强-保存时增加校验事件(DCHCK) BP 客户增强-详细-干货 S4 BP客户增强说明
中文NLP数据增强工具:https://github.com/InsaneLife/NLPDataAugmentation 分类的增强方法 EDA EDA-Easy Data Augmentation Techniques for Boosting Performance on Text Classification Tasks 提出了数据增强方法: synonym replacement(SR 作者将数据集分别在0,20%,40%,60%,80,100%上进行了实验,结果自然是数据越少增强带来的提升越大,到100%带来的提升不大,这个倒是意料之中,比较有意思的是作者还进一步进行了实验。 通过原始数据训练一个RNN模型,然后在测试集中每个句子通过EDA获得9个增强的句子,输入到模型中,获取其最后一层的向量输出,通过t-SNE算法将向量转为2维表达并绘制2D图形,发现增强的句子与原始句子的周围且距离很近 个人感觉众包review更为可信,对于论文发表来说没啥技术含量且冗长,而且也与数据增强初衷违背。 但是NER问题的增强EDA可能不太适合使用,槽位值很可能因为随机替换之类的操作而改变。
中文NLP数据增强工具:https://github.com/InsaneLife/NLPDataAugmentation 分类的增强方法 EDA EDA-Easy Data Augmentation Techniques for Boosting Performance on Text Classification Tasks 提出了数据增强方法: synonym replacement(SR 作者将数据集分别在0,20%,40%,60%,80,100%上进行了实验,结果自然是数据越少增强带来的提升越大,到100%带来的提升不大,这个倒是意料之中,比较有意思的是作者还进一步进行了实验。 通过原始数据训练一个RNN模型,然后在测试集中每个句子通过EDA获得9个增强的句子,输入到模型中,获取其最后一层的向量输出,通过t-SNE算法将向量转为2维表达并绘制2D图形,发现增强的句子与原始句子的周围且距离很近 个人感觉众包review更为可信,对于论文发表来说没啥技术含量且冗长,而且也与数据增强初衷违背。 但是NER问题的增强EDA可能不太适合使用,槽位值很可能因为随机替换之类的操作而改变。
前言 一些常用的数据增强方法 Cutout:随即删除一个矩形区域,通过0填充 Random Erasing:随即删除一个矩形区域,通过均值填充 Mixup:两张图像每个位置的像素根据一定比例进行叠加, 要解决什么问题 深度学习训练非常容易造成过拟合,需要大量数据以及各类正则化方法。 数据增强可以看做是一种正则化方法。 1.2. Mixup 相关资料: arxiv github 论文解读 论文基本信息 领域:数据增强 作者单位:MIT&FAIR 发表时间:ICLR 2018 一句话总结: 3.1. Cutmix 相关资料: arxiv github 论文解读 论文基本信息 领域:数据增强 作者单位:NAVER Crop(韩国搜索引擎) & LINE Plus Crop(韩国版微信? 还存在什么问题&可借鉴之处 对于这些增强方法都有一个问题,随机删除了区域如果没有什么重要信息只有背景信息,那应该会影响结果吧? 换句话说,这些方法应该对输入数据都有较大要求吧。。
的出发点和随机擦除一样,也是模拟遮挡,目的是提高泛化能力,实现上比Random Erasing简单,随机选择一个固定大小的正方形区域,然后采用全0填充就OK了,当然为了避免填充0值对训练的影响,应该要对数据进行中心归一化操作 (如果你还不了解Random Erasing,请查看【数据增强】Random Erasing) 本文和随机擦除几乎同时发表,难分高下(不同场景下谁好难说),区别在于在cutout中,擦除矩形区域存在一定概率不完全在原图像中的 但是有个小疑问:训练的时候不是有数据增强吗?下一个回合再用前一次增强后的数据有啥用?我不太清楚作者的实现细节。如果是验证模式下进行倒是可以。
pytorch提供的torchvision中有三剑客 datasets 包含了很多数据集 models 包含了很多预训练模型 transforms 包含了转换数据的方法或者是数据增强的方法 今天我们就来谈一下 channel - If input image is 3 channel: grayscale version is 3 channel with r == g == b 今天就先介绍这六种常用的增强方法
前言 之前对于xml格式的YOLO数据集,之前记录过如何用imgaug对其进行数据增强。不过DOTA数据集采用的是txt格式的旋转框标注,因此不能直接套用,只能另辟蹊径。 DOTA数据集简介 DOTA数据集全称:Dataset for Object deTection in Aerial images DOTA数据集v1.0共收录2806张4000 × 4000的图片, DOTA数据集论文介绍:https://arxiv.org/pdf/1711.10398.pdf 数据集官网:https://captain-whu.github.io/DOTA/dataset.html 数据增强及可视化 数据增强代码主要参考的是这篇博文:目标识别小样本数据扩增 调整亮度 这里通过skimage.exposure.adjust_gamma来调整亮度: # 调整亮度 def changeLight rgb_img.shape temp_imag = np.zeros(img_shape, dtype=float) for num in range(0, 3): # 通过直方图正规化增强对比度
目前深度学习神经网络对数据的要求很高,不进数据要相关,且更要有尽可能大的数据集。 那么在现实生活中,想要得到大量的数据,不仅要收集各种情景下、各种角度、各个位置的照片,还有确保数据的多样性。 因此本节介绍一些为神经网络提供更多数据的方法-数据增强。 数据增强有多种手段,包括对原照片进行旋转、拉伸、加噪声等处理。 其实在之前所讲课程中就已经讲了数据增强的方法, 如在数据中加入shuffle=True,将原数据随机打乱,并没有增加照片的数量。 但本文所讲的是在原照片数据量较少的情况下进行数据增强,以加入一些经过旋转、拉伸等处理后的图片。 要注意的是采用这种方法加入的数据肯定没有新图片效果好,因为其本质上仍是原图片。 如下图所示 ? 数据增强手段包括有:(1)Flip(图片翻转)、(2)Rotate(旋转)、(3)Random Move & Crop(随机移动、裁剪)、(4)GAN(GAN神经网络)。 首先看数据翻转 ?
首先你需要一个粗糙的数据扩充管道。在人工智能开发的这一点上,这是不容置疑的。 但是,拼凑数据增强管道的过程通常是手动和迭代的;这是一种痛苦。但是,请注意我说的是“通常”。 我认为这种方法是自动化数据增强的未来;然而,它可能(还)不适合个人开发人员。在其中,我们必须训练一个完整的 GAN——一个需要棘手的实现和重要计算资源的过程。 幸运的是,这就是我们使用其他数据增强管道搜索策略“基于随机性的方法”所得到的结果,它减少了搜索空间(通过使用更少的参数)和随机采样策略。 然而,RandAugment 仍然要快得多,如果你只需要一个“足够好”的数据增强管道——一个易于使用并且仍然比手动和迭代地拼凑在一起更好的管道——它是一个可行的选择。 总结 我们对数据增强策略搜索算法的区系进行了调查。有些游戏在我们的任务之上叠加了另一个AI模型。其他的使用更少的参数和一个随机样本的集合变换。前者比后者表现得更准确,但速度要慢得多。
一般情况下,不同的图像任务和模型有不同的数据增强方法。然而比较通用的有图像的仿射变换,颜色抖动,水平/垂直翻转, 随机crop。
6张图片检测个屁啊… 不过我自己也想到了数据集增强,用opencv进行图片的翻转,平移,调节亮度啊,调节对比度等等。 数据集少?那就来数据增强吧? :图片增强 直接贴代码: # ### # 本代码共采用了四种数据增强,如采用其他数据增强方式,可以参考本代码,随意替换。 # imageDir 为原数据集的存放位置 # saveDir 为数据增强后数据的存放位置 # ### def flip(root_path,img_name): #翻转图像 img = 输入数据为两个文件夹一个是需要增强的影像数据(JPEGImages),一个是对应的xml文件(Annotations)。注意:影像文件名需和xml文件名相对应!
数据增强 获得更大的数据集是提高机器学习算法性能最可靠的方法之一 —— 用Andrew Ng的一句话来说,“数据量驱动机器学习过程”。 在2017年的一篇论文中,使用深度学习的图像分类中的数据增强的有效性,作者发现使用GANs直接的数据增强不如其他增强策略有效。 少样本背景下的数据增强 因此,让我们修改一下我们的问题:如果我们有一个非常小的类作为一个更大数据集的子集,比如图像数据集中的一个罕见的狗品种,会怎么样? BAGAN框架 思考 尽管使用GANs进行简单的数据增强有时可以提高分类器的性能,特别是在非常小或有限的数据集的情况下,但使用GANs进行增强的最有希望的情况似乎包括迁移学习或少量学习。 随着研究不断提高GAN训练的稳定性和可靠性,将GAN用于数据增强的快速进展将不足为奇。