Code # encoding:utf-8 import cv2 image = cv2.imread("girl.jpg") # Flipped Horizontally 水平翻转 h_flip = cv2.flip(image, 1) cv2.imwrite("girl-h.jpg", h_flip) # Flipped Vertically 垂直翻转 v_flip = cv2.flip(image , 0) cv2.imwrite("girl-v.jpg", v_flip) # Flipped Horizontally & Vertically 水平垂直翻转 hv_flip = cv2.flip >>> help(cv2.flip) Help on built-in function flip: flip(...) @brief Flips a 2D array around vertical, horizontal, or both axes. . .
本文将介绍Python数据增强的概念、意义、常用方法以及在具体案例中的应用,并通过一个具体案例展示数据增强在图像分类任务中的应用。 一、Python数据增强概述 数据增强是一种通过人工或自动方式对数据进行修改或变换,以增加数据集规模和多样性的技术。 二、Python数据增强的常用方法 1.图像数据增强 图像数据增强是一种常用的数据增强技术,通过对图像进行旋转、平移、缩放、翻转、裁剪等操作,增加图像的多样性和规模。 2.文本数据增强 文本数据增强是一种通过对文本进行语法变换、语义分析等操作来增加文本多样性的技术。例如,通过使用同义词替换文本中的单词、将句子变成否定形式等方式,增加文本的多样性和规模。 plt from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img 2.
为什么要做数据增强在计算机视觉相关任务中,数据增强(Data Augmentation)是一种常用的技术,用于扩展训练数据集的多样性。它包括对原始图像进行一系列随机或有规律的变换,以生成新的训练样本。 数据增强的主要目的是增加模型的泛化能力、提高模型的鲁棒性,并减轻过拟合的风险。以下是进行数据增强的几个重要原因:增加数据样本数量:数据增强可以通过生成变体来增加训练样本的数量。 通过数据增强,您可以使用较少的标记样本来训练模型,同时保持性能。常见的数据增强技术包括图像翻转、旋转、缩放、裁剪、颜色变换、加噪声等。 选择哪些数据增强技术以及如何应用它们通常取决于具体任务和数据集的特点。数据增强在许多计算机视觉任务中都被广泛使用,包括图像分类、目标检测、分割、人脸识别等。 通过增强数据的多样性,可以提高模型的性能并使其更适应复杂的现实世界场景。人脸图像数据增强对于人脸图像数据增强,有多种方法可以提高模型的鲁棒性和性能。
一句话总结: 思路相当简单,利用GPT-2强大的生成能力来进行文本增强,从而在few-shot场景下达到很好的增强效果。 用已有的有标签数据训练一个classifier image.png 这个A会被用来当做一个filter,用来筛选生成的样本的质量。 2. 为了生成我们需要的增强语料,这里的方式是使用我们的训练集,来构造一批语料,让GPT-2继续在该语料上进行Next-word-prediction的训练. 语料如何构建呢? 另外我发现,上面那个表,其实主要是ATIS数据集效果很明显,其他的俩效果都只能说有提高,但是对于few-shot的场景下只有1-2个点的提高,说实话不是什么突破性提高。 但是呢,虽然实验效果没那么惊喜,数据集的选取、实验的设计也有很多槽点,但这里的方法还是给人一些启发的,告诉了我们NLG模型用于文本数据增强的更多可能。
一、项目案例简介 1、多数据简介 实际的项目中,经常会用到不同的数据库以满足项目的实际需求。随着业务的并发量的不断增加,一个项目使用多个数据库:主从复制、读写分离、分布式数据库等方式,越来越常见。 2、MybatisPlus简介 MyBatis-Plus(简称 MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。 插件特点 无代码侵入:只做增强不做改变,引入它不会对现有工程产生影响。 强大的 CRUD 操作:通过少量配置即可实现单表大部分 CRUD 操作满足各类使用需求。 2、多数据源配置 spring: # 数据源配置 datasource: type: com.alibaba.druid.pool.DruidDataSource admin-data = new UserBase() ; userBase2.setId(1); userBase2.setUserName("spring"); boolean
其实我们都知道Pytorch的torchvision的transforms并非真正意义上的数据增强,它只是将图像做了变换,实际上图像数据集的总量是不变的。 现在我们使用Augmentor来做真正意义上的数据增强,首先安装Augmentor pip install Augmentor 如果我们的ground truth,即mask图像是单通道的,需要转成3通道的 + im_name_new, img) 最后就是开始做数据增强处理了,当然我这里只做了旋转和翻转处理,你还可以作一些其他的数据增强。 最后会得到20000张增强图像。 mask数据集中即可开始训练。
数据增强汇总仓库 一个强大的数据增强仓库 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 ? 这就会导致两个问题 1、over-fitting 2、使得损失函数对逻辑输出的导数差异变大,降低了模型的适应能力。
最近遇到数据样本数目不足的问题,自己写的增强工具生成数目还是不够,终于在网上找到一个数据增强工具包,足够高级,足够傻瓜。想要多少就有多少!再也不怕数据不够了! 简介 Augmentor是一个Python包,旨在帮助机器学习任务的图像数据人工生成和数据增强。它主要是一种数据增强工具,但也将包含基本的图像预处理功能。 特色 Augmentor是用于图像增强的软件包,重点在于提供通常用于生成机器学习问题的图像数据的操作。 /images") # 2. 总结 个人认为其最大的亮点是只需要指定要增强图片所在的路径即可,不用进行读入、以及numpy数据转换; 增强时只需要指定最后的数目N,无论原始图片有多少,总能生成你想要的数目!!!
),另一个方法就是数据增强了。 在深度学习模型的训练过程中,模型的复杂度不断提升,参数量不断增长,数据量就显得完全不足了,而数据增强是必不可少的,数据增强就是对有限的少量训练数据,通过各种变换操作生成大量的新数据。 ? 数据增强方法分为离线增强和在线增强两种,离线增强一般用于很小规模的数据集,在离线状态下增强几倍数据量。 在线增强(动态增强)则用于较大规模的数据量,对输入模型的小批量数据不断进行变换增强,用新的数据进行训练,使得内存不再负担数据的爆炸性增长,同时可以通过GPU卡加速运算。 一、数据增强方法 1.数据翻转(Flip) 对输入图像进行水平或垂直翻转。 ?
前言 由于自己的数据比较少,因此想采用数据增强的方式来扩充自己的数据集,对于目标检测任务而言,除了需要改变原始图像外,还需要对目标框进行相应的变化。 复刻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) 我阅读过很多将生成对抗网络用于数据增强的文献
#这里要注意引入模块时导入的包名是cv2而不是Opencv (2)、读取图片使用cv2.imread函数 ,将返回的值赋值给img (3)、切割图片使用img[10:100,20:50], 10:100 图像的旋转首先要构造一个旋转矩阵M,使用cv2.getRotationMatrix2D函数,其参数为旋转的中心、角度、缩放比例。然后使用cv2.warpAffine函数实现图像的旋转。 ,fy=0.6,interpolation=cv2.INTER_LINEAR) #将原图放大到原来的2倍 size_up=cv2.resize(img,None,fx=2,fy=2,interpolation /2,height/2),angle=180,scale=1.0) rotation=cv2.warpAffine(img,M,(width,height)) cv2.imshow("size_down 如果大家对图像数据增强有兴趣可以关注微信公众号和我们一起学习。
物料主数据增强(2) 之前写了一一篇物料主数据增强的文档ABAP随笔-物料主数据界面增强,需要配置+增强代码,今天升级一下功能,对物料主数据页签进行增强 1. 对物料主数据表增强 append custom field in MARA 随便加一个你想要的字段 2. 其中function MARA_GET_SUB 和 MARA_SET_SUB 分别是得到和更新MM02/MM01/MM03内存变量中MARA的值 配置2 接着我们继续选择spro->后勤-常规->物料主数据 数据更新 之前我们在物料主数据界面增强中已经讲过了,如何对物料主数据进行增强校验了, 这里我们简单做一个唯一性校验: 启用EXIT_SAPLMGMU_001出口 和 CI_MMH1 *&------ 'MM01' 对MM01也进行唯一性的校验是因为,MM01可以对已存在的物料进行扩展 更多其他的文章请点击历史记录 ABAP随笔-物料主数据界面增强 BP客户增强-保存时增加校验事件(DCHCK) 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中,擦除矩形区域存在一定概率不完全在原图像中的 但是有个小疑问:训练的时候不是有数据增强吗?下一个回合再用前一次增强后的数据有啥用?我不太清楚作者的实现细节。如果是验证模式下进行倒是可以。 [2]: 想读懂YOLOV4,你需要先了解下列技术(一). 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
pytorch提供的torchvision中有三剑客 datasets 包含了很多数据集 models 包含了很多预训练模型 transforms 包含了转换数据的方法或者是数据增强的方法 今天我们就来谈一下 3, 4] with 2 elements on both sides in reflect mode will result in [3, 2, 1, 2, 3, 4, 3, padding [1, 2, 3, 4] with 2 elements on both sides in symmetric mode will result in [2, 1 , 1, 2, 3, 4, 4, 3] 2.torchvision.transforms.RandomHorizontalFlip() 随机水平翻转,一个参数p是概率参数 Init signature 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): # 通过直方图正规化增强对比度
一般情况下,不同的图像任务和模型有不同的数据增强方法。然而比较通用的有图像的仿射变换,颜色抖动,水平/垂直翻转, 随机crop。 object): def gen_transforms(self): transforms = [ you_define_transform1(), you_define_transform2( [1, np.tan(theta), 0], [0, 1, 0]], dtype=np.float32) # method2: (point1, point2) # shear equals to M_shear sheared_point = M_shear.dot(point) # choose borderValue [1])),borderMode=cv2.BORDER_CONSTANT, borderValue=(128, 128, 128))