C2-3.3.2 机器学习/深度学习——数据增强

C2-3.3.2 数据增强

参考链接

1、为什么要使用数据增强?

  • ※总结最经典的一句话:希望模型学习的更稳健

  • 当数据量不足时候: 人工智能三要素之一为数据,但获取大量数据成本高,但数据又是提高模型精度和泛化效果的重要因素。 当数据量不足时,模型很容易过拟合,精度也无法继续提升,因此数据增强技术应运而生

  • 通过执行数据增强,你可以阻止神经网络学习不相关的特征,从根本上提升整体性能。——见后面4、应用场景 举例

2、什么是数据增强?

数据增强(Data Augmentation):是一种通过利用算法来扩展训练数据的技术。利用算法,※让有限的数据产生更多的等价数据(通过 镜像,旋转,位移,等比例放缩等)来人工扩展训练数据集的技术,自动增强训练数据。

3、如果没有很多数据,我怎么去获得更多数据?

  • 即:要对现有的数据集进行微小的改变。比如旋转(flips)、移位(translations)、旋转(rotations)等微小的改变。

你不必寻找新奇的图片增加到你的数据集中。为什么?因为,**神经网络在开始的时候并不是那么聪明。**比如,一个欠训练的神经网络会认为这三个如下的网球是不同、独特的图片。

img

所以,为了获得更多的数据,我们只要对现有的数据集进行微小的改变。比如旋转(flips)、移位(translations)、旋转(rotations)等微小的改变。我们的网络会认为这是不同的图片。

img

4、应用场景

自己的总结】:我们的数据是有限的,但是我喂给模型数据之后,我想让模型自己会辨认物体。 比如我有 50张照片,是 猫 和 狗 的照片。**不光是我喂给模型那些数据情况下,还有不同角度,不同大小,不同位移,比例等等情况下,希望他都会辨认。。。**这就是 数据增强实现的效果。


一个卷积神经网络,如果能够对物体即使它放在不同的地方也能稳健的分类,就被称为具有不变性的属性。更具体的,CNN可以对移位(translation)、视角(viewpoint)、大小(size)、照明(illumination)(或者以上的组合)具有不变性。

这本质上是数据增强的前提。在现实场景中,我们可能会有一批在有限场景中拍摄的数据集。但是我们的目标应用可能存在于不同的条件比如在不同的方向、位置、缩放比例、亮度等。我们通过额外合成的数据来训练神经网络来解释这些情况。


示例如下:

img

在我们的假想数据集中分为两类。左侧为品牌A(Ford),有车为品牌B(Chevrolet)。

假设我们有一个数据集,含两种品牌的车,如上所示。我们假设A品牌的车都如上面左侧一样对其(所有的车头朝向左侧)。同样B如右侧(所有的都朝向右侧)。现在,你将你的数据集送入“最先进的”神经网络,你希望等训练结束后获得令人印象深刻的结果。

img

​ Ford车(A品牌)却朝向右侧

当训练结束后,**你送入上面的品牌A车的图片。 但是你的神经网络却认为它是一辆B品牌的车!**你很困惑。难道不是刚刚通过这个“最先进的”神经网络获得了95%的准确率吗?我不是夸张,这个事情以往发生过

我们如何去阻止这件事发生呢? 我们不得不减少数据集中不相关的特征。对于上面的轿车模型分类器,一个简单的方案是增加分别朝向原始方向反向的两种车的图片。更好的方法是,你可以从沿着水平方向翻转图片以便它们都朝着反方向!现在,在新数据集上训练神经网络,你将会获得你想要获得的性能。

通过执行数据增强,你可以阻止神经网络学习不相关的特征,从根本上提升整体性能。

5、流行的数据增强技术

数据增强的两类方法:

在我们的机器学习管道(pipeline)的何处进行增强数据呢?

一种是事先执行所有转换,实质上会增强你的数据集的大小。

另一种选项是在送入机器学习之前,在小批量(mini-batch)上执行这些转换。

第一个选项叫做线下增强(offline augmentation)。这种方法适用于较小的数据集(smaller dataset)。你最终会增加一定的倍数的数据集,这个倍数等于你转换的个数。比如我要翻转我的所有图片,我的数据集相当于乘以2。

第二种方法叫做线上增强(online augmentation)或在飞行中增强(augmentation on the fly)。这种方法更适用于较大的数据集(larger datasets),因为你无法承受爆炸性增加的规模。另外,你会在喂入模型之前进行小批量的转换 。一些机器学习框架支持在线增强,可以再gpu上加速。

5.1 翻转(Flip)

可以对图片进行水平和垂直翻转。一些框架不提供垂直翻转功能。但是,一个垂直反转的图片等同于图片的180度旋转,然后再执行水平翻转。下面是我们的图片翻转的例子。

img

你可以使用你喜欢的工具包进行下面的任意命令进行翻转,数据增强因子=2或4

# NumPy.'img' = A single image.
flip_1 = np.fliplr(img)
# TensorFlow. 'x' = A placeholder for an image.
shape = [height, width, channels]
x = tf.placeholder(dtype = tf.float32, shape = shape)
flip_2 = tf.image.flip_up_down(x)
flip_3 = tf.image.flip_left_right(x)
flip_4 = tf.image.random_flip_up_down(x)
flip_5 = tf.image.random_flip_left_right(x)

从左侧开始,原始图片,水平翻转的图片,垂直翻转的图片。

4.2 旋转(Rotation)

一个关键性的问题是当旋转之后图像的维数可能并不能保持跟原来一样。如果你的图片是正方形的,那么以直角旋转将会保持图像大小。如果它是长方形,那么180度的旋转将会保持原来的大小。以更精细的角度旋转图像也会改变最终的图像尺寸。我们将在下一节中看到我们如何处理这个问题。以下是以直角旋转的方形图像的示例。

img

当我们从左向右移动时,图像相对于前一个图像顺时针旋转90度。

你可以使用你喜欢的工具包执行以下的旋转命令。数据增强因子= 2或4。

# Placeholders: 'x' = A single image, 'y' = A batch of images
# 'k' denotes the number of 90 degree anticlockwise rotations
shape = [height, width, channels]
x = tf.placeholder(dtype = tf.float32, shape = shape)
rot_90 = tf.image.rot90(img, k=1)
rot_180 = tf.image.rot90(img, k=2)
# To rotate in any angle. In the example below, 'angles' is in radians
shape = [batch, height, width, 3]
y = tf.placeholder(dtype = tf.float32, shape = shape)
rot_tf_180 = tf.contrib.image.rotate(y, angles=3.1415)
# Scikit-Image. 'angle' = Degrees. 'img' = Input Image
# For details about 'mode', checkout the interpolation section below.
rot = skimage.transform.rotate(img, angle=45, mode='reflect')

4.3 缩放比例(Scale)

图像可以向外或向内缩放。向外缩放时,最终图像尺寸将大于原始图像尺寸。大多数图像框架从新图像中剪切出一个部分,其大小等于原始图像。我们将在下一节中处理向内缩放,因为它会缩小图像大小,迫使我们对超出边界的内容做出假设。以下是缩放的示例或图像。

img

从左到右,原始图像,向外缩放10%,向外缩放20%

4.4 裁剪(Crop)

与缩放不同,我们只是从原始图像中随机抽样一个部分。然后,我们将此部分的大小调整为原始图像大小。这种方法通常称为随机裁剪。以下是随机裁剪的示例。仔细观察,你会发现此方法与缩放之间的区别。

img

从左至右,原始图像,左上角裁剪的图像,右下角裁剪的图像。裁剪的部分被缩放为原始图像大小。

你可以使用以下任何TensorFlow命令执行随机裁剪。数据增强因子=任意。

# TensorFlow. 'x' = A placeholder for an image.
original_size = [height, width, channels]
x = tf.placeholder(dtype = tf.float32, shape = original_size)
# Use the following commands to perform random crops
crop_size = [new_height, new_width, channels]
seed = np.random.randint(1234)
x = tf.random_crop(x, size = crop_size, seed = seed)
output = tf.images.resize_images(x, size = original_size)

4.5 移位(Translation)

移位只涉及沿X或Y方向(或两者)移动图像。在下面的示例中,我们假设图像在其边界之外具有黑色背景,并且被适当地移位。这种增强方法非常有用,因为大多数对象几乎可以位于图像的任何位置。这迫使你的卷积神经网络看到所有角落。

img

从左至右,原始图像,向右移位,向上移位

你可以使用以下命令在TensorFlow中执行转换。数据增强因子=任意。

# pad_left, pad_right, pad_top, pad_bottom denote the pixel 
# displacement. Set one of them to the desired value and rest to 0
shape = [batch, height, width, channels]
x = tf.placeholder(dtype = tf.float32, shape = shape)
# We use two functions to get our desired augmentation
x = tf.image.pad_to_bounding_box(x, pad_top, pad_left, height + pad_bottom + pad_top, width + pad_right + pad_left)
output = tf.image.crop_to_bounding_box(x, pad_bottom, pad_right, height, width)

4.6 高斯噪声(Gaussian Noise)

当您的神经网络试图学习可能无用的高频特征(大量出现的模式)时,通常会发生过度拟合。具有零均值的高斯噪声基本上在所有频率中具有数据点,从而有效地扭曲高频特征。这也意味着较低频率的组件(通常是您的预期数据)也会失真,但你的神经网络可以学会超越它。添加适量的噪音可以增强学习能力。

一个色调较低的版本是盐和胡椒噪音,它表现为随机的黑白像素在图像中传播。这类似于通过向图像添加高斯噪声而产生的效果,但可能具有较低的信息失真水平。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/307992.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

工业智能网关:HiWoo Box远程采集设备数据

工业智能网关:HiWoo Box远程采集设备数据 在工业4.0和智能制造的浪潮下,工业互联网已成为推动产业升级、提升生产效率的关键。而在这其中,工业智能网关扮演着至关重要的角色。今天,我们就来深入探讨一下工业智能网关。 一、什么…

Apache JMeter 5.5: 新手指南

如何获取并运行 JMeter 首先,要使用 JMeter,你需要从官网获取软件包。前往 Apache JMeter 的官方页面,然后下载所 需的压缩文件。 配置和启动 JMeter 获取了 JMeter 后,由于它是无需安装即可使用的工具,直接解压下载…

申请企业通配符SSL证书流程

通配符SSL证书,又叫泛域名SSL证书,可以用一张SSL证书同时保护主域名以及主域名下的所有子域名。按照验证方式可以将通配符SSL证书分为DV通配符SSL证书和OV通配符SSL证书。其中OV通配符SSL证书只支持企事业单位申请,又称之为OV企业型通配符SSL…

贝蒂详解<string.h>(下)

✨✨欢迎大家来到贝蒂大讲堂✨✨ ​​​​🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C语言学习 贝蒂的主页:Betty‘s blog 目录 1. 简介 2. memset()函数 2.1用法 2.2实例 2.3 实现me…

快速了解云计算与云原生

快速了解云计算与云原生 云计算云原生DevOps容器持续交付微服务 云计算 在讲云原生之前,先来讲讲云计算 其中云原生属于技术架构理念,而云计算提供应用所需的基础资源,云计算是云原生的基础,两者是相辅相成的 云计算简单来说&a…

竞赛保研 基于深度学习的水果识别 设计 开题 技术

1 前言 Hi,大家好,这里是丹成学长,今天做一个 基于深度学习的水果识别demo 这是一个较为新颖的竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/pos…

JVM基础(3)——JVM垃圾回收机制

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 学习必须往深处挖&…

复合机器人作为一种新型的智能制造装备高效、精准和灵活的生产方式

随着汽车制造业的快速发展,对于高效、精准和灵活的生产方式需求日益增强。复合机器人作为一种新型的智能制造装备,以其独特的优势在汽车制造中发挥着越来越重要的作用。因此,富唯智能顺应时代的发展趋势,研发出了ICR系列的复合机器…

计算机毕业设计 | SpringBoot航空订票 机票预定购买系统(附源码)

1, 概述 1.1 选题目的 目前,国内航空公司的数量和规模都在扩大,国外航空公司也纷纷着陆中国,这些航空公司之间的竞争可谓日益激烈。配备一个安全、高效、灵活、可靠的客户服务中心系统对于航空公司加强客户服务质量,…

使用Android Compose实现网格列表滑到底部的提示信息展示

文章目录 概述1 效果对比1.1 使用添加Item的办法:1.2 使用自定义的方法 2. 效果实现2.1 列表为空时的提示页面实现2.2 添加Item的方式代码实现2.3 使用自定义的方式实现 3. UI工具类 概述 目前大多数的APP都会使用列表的方式来呈现内容,例如淘宝&#x…

解决Echarts y轴文本超出容器问题

解决Echarts y轴文本超出容器问题 一开始好好的 数据变多之后就被挤出去了 解决方法: // echarts的grid属性 主要就是containLabel这个属性的配置 不设置的话他默认是false, 主要是包含是否包含刻度标签grid: {left: "5%",right: "10%",botto…

linux 里面在docker 里面安装pg 数据库(亲测有效)

目录 1 上传 1 上传 上传之后tar 包,将他变成镜像 输入docker images,发现目前是没有镜像的,现在将tar 包变成镜像 docker load -i postgresql.tar以上就将tar 包变成镜像了 现在在宿主机找一个地方,存放数据库的数据 /home/softinstall/…

全网独家:基于openEuler-20.03-LTS-SP4底包构建opengaussV5.0.1LTS的单机极简版数据库容器

本文尝试基于openEuler-20.03-LTS-SP4底包构建opengaussV5.0.1LTS的单机版极简版数据库容器。 一、软件包源 1、openEuler-20.03-LTS容器底包 openEuler-20.03-LTS-SP4 下载链接 sha256:24d8f51c1f3a79eb975c4e498cadd9055bfd708d66c15935ec46664d0f975a7b openEuler-dock…

@DependsOn:解析 Spring 中的依赖关系之艺术

欢迎来到我的博客,代码的世界里,每一行都是一个故事 DependsOn:解析 Spring 中的依赖关系之艺术 前言简介基础用法高级用法在 XML 配置中使用 DependsOn通过 Java Config 配置实现依赖管理 生命周期与初始化顺序Bean 生命周期的关键阶段&…

高照数量关系(一)—— 倍数特性、方程问题、周期问题

倍数特性 整除型 (1)口诀法:(常用于3、4、5、9)3/9看各个位数字之和,5看末位,4看末两位。 3/9 -> 看各位数字之和能否被3/9整除,例:124345 2/5 ->看数字末一位能…

【Linux】进程

----------------| 本文目录 |---------------- 1. 进程1.1 基本概念1.2 描述进程 - PCB1.2.1 task_struct - PCB的一种1.2.2 task_struct 内容分类 1.3 组织进程1.4 查看进程1.5 通过系统调用获取进程标示符1.6 通过系统调用创建进程 - fork初识 2. 进程状态2.1 看看Linux内核…

美创科技第59号安全实验室最新力作!《内网渗透实战攻略》出版发行

总结先进攻防实战经验,基于创新入侵生命周期模型,为提升渗透实战能力提供系统操作教程!近期,美创科技创始人&CEO柳遵梁,美创第59号安全实验室(王月兵、覃锦端、毛菲、刘聪等)撰写的新书《内…

时空序列问题的本质和底层逻辑

本质:Still need to polish this. 底层逻辑:Still need to polish this.See you pretty soon. Reference 【时空序列预测】什么是时空序列问题?这类问题主要应用了哪些模型?主要应用在哪些领域?_mb62b92582e5a0a的技…

办公场景日益多样化 企业如何保持安全?

当前,企业的办公场景日益多样化。远程办公、移动办公、云办公、分支机构等,这些新的办公场景也带来了新的网络安全挑战。以下将介绍一些办公场景带来的安全威胁。 1、远程办公:员工可以在任何地方工作,但同时也带来了网络安全的隐…

支付宝电脑端支付代码

在学习某些项目需要用到支付功能,如支付宝支付。 详细配置 演示沙箱环境下支付,沙箱环境和正式支付只不过一些参数不同 像AppId PrivateKey AlipayPublicKey gatewayUrl 这些参数会有不同。 代码配置 @Component @Data public class payConfig {private String PrivateKey…