数据增强

摘要:
如果补充其他数据增强方法,将获得更好的多样性,这是数据增强的本质。几何变换和颜色变换有许多详细的数据增强方法。我向您推荐一个git项目:https://github.com/aleju/imgaug预览它可以完成的数据增强。数据增强不会降低网络容量,也不会增加计算复杂性和参数调整工作量。这是一种隐式正则化方法。

1 什么是数据增强?

来自 <https://www.infoq.cn/article/kyXx3sRKNsdFgqapv2Gw?utm_source=rss&utm_medium=article>

数据增强也叫数据扩增,意思是在不实质性的增加数据的情况下,让有限的数据产生等价于更多数据的价值。

数据增强第1张

比如上图,第1列是原图,后面3列是对第1列作一些随机的裁剪、旋转操作得来。

 每张图对于网络来说都是不同的输入,加上原图就将数据扩充到原来的10倍。假如我们输入网络的图片的

分辨率大小是256×256,若采用随机裁剪成224×224的方式,那么一张图最多可以产生32×32张不同的图,

数据量扩充将近1000倍。虽然许多的图相似度太高,实际的效果并不等价,但仅仅是这样简单的一个操作,效果已经非凡了。

 如果再辅助其他的数据增强方法,将获得更好的多样性,这就是数据增强的本质。

 数据增强可以分为,有监督的数据增强和无监督的数据增强方法。其中有监督的数据增强又可以分为单样本数据增强

和多样本数据增强方法,无监督的数据增强分为生成新的数据和学习增强策略两个方向。

2 有监督的数据增强

有监督数据增强,即采用预设的数据变换规则,在已有数据的基础上进行数据的扩增,包含单样本数据增强和多样本

数据增强,其中单样本又包括几何操作类,颜色变换类。

 2.1. 单样本数据增强

 所谓单样本数据增强,即增强一个样本的时候,全部围绕着该样本本身进行操作,包括几何变换类,颜色变换类等。

 (1) 几何变换类

 几何变换类即对图像进行几何变换,包括翻转,旋转,裁剪,变形,缩放等各类操作,下面展示其中的若干个操作。

 数据增强第2张数据增强第3张数据增强第4张 数据增强第5张

 变形缩放:

 翻转操作和旋转操作,对于那些对方向不敏感的任务,比如图像分类,都是很常见的操作,在 caffe 等框架中翻转对应的就是 mirror 操作

 翻转和旋转不改变图像的大小,而裁剪会改变图像的大小。通常在训练的时候会采用随机裁剪的方法,在测试的时候选择裁剪中间部分

或者不裁剪。值得注意的是,在一些竞赛中进行模型测试时,一般都是裁剪输入的多个版本然后将结果进行融合,对预测的改进效果非常明显。

 以上操作都不会产生失真,而缩放变形则是失真的。

很多的时候,网络的训练输入大小是固定的,但是数据集中的图像却大小不一,此时就可以选择上面的裁剪成固定大小输入或者缩放到网络

的输入大小的方案,后者就会产生失真,通常效果比前者差。

(2) 颜色变换类

上面的几何变换类操作,没有改变图像本身的内容,它可能是选择了图像的一部分或者对像素进行了重分布。如果要改变图像本身

的内容,就属于颜色变换类的数据增强了,常见的包括噪声、模糊、颜色变换、擦除、填充等等。

基于噪声的数据增强就是在原来的图片的基础上,随机叠加一些噪声,最常见的做法就是高斯噪声。更复杂一点的就是在面积大小

可选定、位置随机的矩形区域上丢弃像素产生黑色矩形块,从而产生一些彩色噪声,以 Coarse Dropout 方法为代表,甚至还可以对

图片上随机选取一块区域并擦除图像信息。

数据增强第6张

                       添加 Coarse Dropout 噪声

颜色变换的另一个重要变换是颜色扰动,就是在某一个颜色空间通过增加或减少某些颜色分量,或者更改颜色通道的顺序。

数据增强第7张

 几何变换类,颜色变换类的数据增强方法细致数还有非常多,推荐给大家一个 git 项目:

https://github.com/aleju/imgaug

预览一下它能完成的数据增强操作吧。

数据增强第8张

4 思考

数据增强的本质是为了增强模型的泛化能力,那它与其他的一些方法比如 dropout,权重衰减有什么区别?

(1) 权重衰减,dropout,stochastic depth 等方法,是专门设计来限制模型的有效容量的,用于减少过拟合,

这一类是显式的正则化方法。研究表明这一类方法可以提高泛化能力,但并非必要,且能力有限,而且参数高度依赖于网络结构等因素。

(2) 数据增强则没有降低网络的容量,也不增加计算复杂度和调参工程量,是隐式的规整化方法。实际应用中更有意义,所以我们常说,数据至上。

免责声明:文章转载自《数据增强》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇docker内报错 ImportError: libGL.so.1: cannot open shared object file: No such file or directoryGHO文件内IE主页的修改方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SqlServer 游标逐行更新数据,根据上一行的数据来更新当前行

工作中用到的记录一下,游标的详细定义及说明请百度--游标格式化数据 DECLARE cursor_jxsmb CURSOR FOR --定义一个游标 SELECT F0 FROM dbo.JXSMB2019; --定于游标的数据源 OPEN cursor_jxsmb --打开游标 DECLARE @LAST NVARCHAR(4000),@...

python读取数据库表数据并写入excel

一个简单的使用python读取mysql数据并写入excel中实例 1、python连接mysql数据库 conn = pymysql.connect(user='root',host='127.0.0.1',port=3306,passwd='root',db='python',charset='utf8') #连接数据库 cur = conn.cur...

入选 SIGMOD2021 的时间序列多周期检测通用框架 RobustPeriod 如何支撑阿里业务场景?

简介: 本文除了介绍RobustPeriod的核心技术亮点,还将重点解释如何将它构筑成服务来解决阿里云的业务痛点。 近日,由阿里云计算平台和阿里云达摩院合作的时序多周期检测相关论文RobustPeriod: Robust Time-Frequency Mining for Multiple Periodicity Detection被SIGMOD 2021...

kinect学习笔记(三)——深度数据的提取

一、创建Console工程 二、添加kinect引用 里面用引用,打开后 选择然后OK。 三、编写代码(有附加注释) using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Task...

Apache seaTunnel 数据集成平台

为什么我们需要 seatunnel Databricks 开源的 Apache Spark 对于分布式数据处理来说是一个伟大的进步。我们在使用 Spark 时发现了很多可圈可点之处,同时我们也发现了我们的机会 —— 通过我们的努力让Spark的使用更简单,更高效,并将业界和我们使用Spark的优质经验固化到seatunnel这个产品中,明显减少学习成本,加...

Flink RichSourceFunction应用,读关系型数据(mysql)数据写入关系型数据库(mysql)

1. 写在前面 Flink被誉为第四代大数据计算引擎组件,即可以用作基于离线分布式计算,也可以应用于实时计算。Flink的核心是转化为流进行计算。Flink三个核心:Source,Transformation,Sink。其中Source即为Flink计算的数据源,Transformation即为进行分布式流式计算的算子,也是计算的核心,Sink即为计算后的...