Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >嵌入式AI —— 6. 为糖葫芦加糖,浅谈深度学习中的数据增广

嵌入式AI —— 6. 为糖葫芦加糖,浅谈深度学习中的数据增广

作者头像
刘盼
发布于 2019-05-22 06:36:16
发布于 2019-05-22 06:36:16
6920
举报
文章被收录于专栏:人人都是极客人人都是极客

没有读过本系列前几期文章的朋友,需要先回顾下已发表的文章:

  1. 开篇大吉
  2. 集成AI模块到系统中
  3. 模型的部署
  4. CMSIS-NN介绍
  5. 从穿糖葫芦到织深度神经网络

又和大家见面了,上次本程序猿介绍了CMSIS-NN,一晃过去了两个月。。。。闲话不多说,开始正题,小编这次带来的是,进行深度学习部署时的一段比较有用的小插曲:浅谈深度学习中的数据增广

数据增广,听起来很玄乎,其实很简单,就是把有限的数据集变得更大更多。方法也主要是对现有图像做些变换,比如平移,缩放,拉伸,旋转,加噪声等。

首先回顾一下,上期的文章:从串糖葫芦到织深度神经网络,(此处应该有掌声,比喻的是如此的恰当),我们的工程师,用糖葫芦做比喻,生动形象的向大家介绍了各种通用的深度神经网络,包括简单直接的普通糖葫芦—CIFAR-10模型,拔丝糖葫芦—残差网络等,随后在试吃环节,介绍了拔丝糖葫芦—基于MobileFaceNet的人脸识别网络在小钢炮i.MX RT上的应用,让人不得不赞叹:真香!

但是,可能有人会问了,糖葫芦穿好了,是不是要进行粘糖——训练模型了?对于喜欢吃甜口的顾客,可能要让大家失望了,因为,我们糖不够了

,再次要对大家说声抱歉了,因为糖目前比较稀少,还涨价了(时不我待。。。。)。

不过,为了不让我们广大的“糖迷”们失望,本期,我们就将介绍,如何为糖葫芦粘更多的糖

,满足广大吃货朋友们的愿望——浅谈深度学习中的数据增广,通过对数据集进行数字图像处理,进行数据集的扩充,让糖变多!

OK, Everybody, Let’s Go!

第一个问题:在没有大量数据的情况下,如何获取更多的数据呢?

事实上,当我们利用CNN等进行模型训练的时候,大量的原始数据集不一定是必须的,为什么呢?因为神经网络从设计之初就不是个天才,不是始祖智能的,例如,缺乏训练的网络会认为下面三个小狗是不同的,disappointing

所以,为了获得更多数据,我们可以利用这点,戏弄神经网络,仅需要对已有数据集做微小的调整。比如,翻转、镜像、平移、旋转,神经网路会认为数据是不同的,不得不说,神经网络还是有点脸盲的。

同时,一个卷积神经网络通常具有不变性的性质,通俗点讲,不论你如何摧残数据集:平移、视角变换、尺寸、照度(或是组合摧残),网络都会爱你永不变(多么痴情的人工智能)。

而以上,这些就是数据增广的理论基础。在现实中,我们可能仅有一袋糖豆儿:一组在有限条件下拍摄的照片。但是,我们的目标应用可能是在多变的环境下,例如,不同的方向、位置、比例、亮度等。通过使用综合修改后的数据来训练网络,以应对这些情形,让糖翻倍。

第二个问题:我已经有足够多的数据了,继续增强也是有必要的吗?

答案当然是肯定的了!不然我这篇文章还怎么写。。。。(好了,开个小玩笑)

话不多说,图来凑,上图!

在人类的眼中,一定一眼就可以得出结论:左边是可爱的狗子,右边是小花猫。

但是,当你完成了网络训练,利用下图进行测试时(可爱的狗子,但是朝向右侧),你会发现,网络却会认为此图为小猫咪……于是,生气的你准备把网络再次回炉重塑,以为是训练不充足,但是无论你重试多少次,结果都一样。这时你可能会想,可能我错怪Ta了,因为数据集充足,而且网络的确是会有5%左右的误差的,那就这样吧。

那么,为什么会这样呢?因为大多数的机器学习就是这样工作的:网络本身会寻找区分物体间的最明显的特征。在本例中,事实上Ta找到了,就是所有狗子的图片都是向左的,而小猫咪是向右的。

尽管听起来很怪,但是,事实上就是如此。因此,无论你训练多少次,当你输入一张朝向右侧的图片时,无论是什么,都只会输出一个结果:小猫咪。这就说明,神经网络的好坏取决于输入的数据。

那么我们要如何预防此类问题呢?

我们需要减少数据集中无关特征的数量。对于上面的猫狗分类器,一个简单的办法就是为数据集添加不同朝向的猫狗图片。更好的办法是,将数据集中的照片进行水平翻转,再用新的数据集就会训练得到你想要的结果。

通过数据集的增强,可以防止网络学习到不相关的模式,根本上提升整体性能。

而这也就带来了一个新的问题,在机器学习中的什么位置进行数据增广呢?

答案相当的明显,在向模型输入数据之前。但同时,你有两个选择,其一是预先进行所必要的变换,从根本上增加数据集规模。另一个是小批量变换,仅仅在输入模型前。

第一个我们称之为离线增强,常用于体型小的数据集。因为你最终会通过一个与执行的转换数量相等的因子来增加数据集的大小(例如,通过翻转所有图像,数据集会增加2倍)

第二个称之为在线增强,或称为动态增强。主要用于大块头的数据集,使你无法负担数据量爆炸性增长。这,可以通过对即将输入模型的小批量数据执行相应的变化。当然,很多机器学习架构均已支持在线增强,并且可以利用GPU进行加速。

在文章最后,简单介绍下常用的增强技术,为了简单起见,我们的所有变换都基于一个假设:我们不需要关心图片边界之外的东西。因为,如果使用的技术需要关注图片边界之外的区域,我们需要插入一些信息。我们赋予每个技术一个增强因子,以增强数据集。

但是要注意,并不是所有的模型都适合进行数据集扩展的,比如,人脸识别,一般不能进行水平翻转。

  1. 翻转:对图片进行水平或是垂直翻转
  1. 旋转,这个操作,需要注意一个关键问题,在旋转之后,图像纬度信息可能不会保留。如果是正方形,图像旋转90度后尺寸会被保存,但是,如果仅仅旋转一个小角度,将会改变图像的尺寸。
  1. 缩放,图像可以被放大或是缩小
  1. 裁剪,随机从原始图中采样一部分,然后调整为原始大小,又称作随机裁剪。
  1. 平移,将图像沿X或Y方向(或同时沿着两个方向)移动,方便起见,可假设边界以外是黑色的,也同步移动,这一方法非常有用,因为大多数对象有可能分布在图像的任何地方,这迫使你的卷积网络需要看到所有的地方。
  1. 高斯噪声,过拟合通常会发生在神经网络学习高频特性时(及非常频繁出现的无意义模式),而学习这些特征对模型没什么帮助。解决办法其一是采用零均值高斯噪声,在所有频率产生数据点,使得高频特征失真,减弱对模型的影响。但也意味着低频部分(所关心的特征)也会收到影响,但网络本身可以通过学习来克服,因此,事实证明,通过增加适当的噪声能够有效提升网络学习能力。还有个相对比较low的办法,采用添加椒盐噪声的方式,以随机的白色和黑色的像素点呈现并铺满整个图片,效果类似高斯噪声,但是效果相对较弱。下图分别为:原图,高斯噪声,椒盐噪声。

当然,还有很多数据增广的技术,此处就不一一介绍了,小编就充当一个引路人吧,如果读者朋友们有兴趣的话,可自行搜索下关于数据增广的小知识,很有意思的一种提高神经网络训练效果的方法。

到此,本期浅谈深度学习中的数据增广就结束了,希望通过本期的介绍,大家对于数据增广有了一定的认识,从此,我们再也不怕粘糖葫芦没有糖了!现在,我们有好多好多的糖可以用了,哈哈哈哈

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 人人都是极客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
21个项目玩转深度学习 学习笔记(2)
事实上,必须先读入数据后才能进行计算,假设读入用时0.1s,计算用时0.9秒,那么没过1s,GPU都会有0.1s无事可做,大大降低了运算的效率。
2018/09/03
7190
第七章 AI数据质量-2
数据增强是机器学习中的一项重要技术,用于生成大量高质量、多样化的训练数据集的方法。这种方法的出现背景主要是由于以下几个原因。
bettermanlu
2025/04/15
680
第七章 AI数据质量-2
Prototypical Networks(原型网络)
Prototypical Networks,即原型网络,是一种在元学习和少样本学习领域中常见的深度学习模型。以下是关于原型网络的详细介绍:
jack.yang
2025/04/05
1150
i.MX RT助您跨界AI ——5. 从穿糖葫芦到织深度神经网络
CMSIS-NN作为在i.MX RT上运行深度神经网络的关键幕后英雄,在上期中终于闪亮登场,并且在i.MX RT强大算力的支持下,分类10样物体只是小试牛刀——每秒能识别多达50次!
刘盼
2019/05/13
6530
i.MX RT助您跨界AI ——5. 从穿糖葫芦到织深度神经网络
NanoNets:数据有限如何应用深度学习?
我觉得人工智能就像是去建造一艘火箭飞船。你需要一个巨大的引擎和许多燃料。如果你有了一个大引擎,但燃料不够,那么肯定不能把火箭送上轨道;如果你有一个小引擎,但燃料充足,那么说不定根本就无法成功起飞。所以,构建火箭船,你必须要一个巨大的引擎和许多燃料。 深度学习(创建人工智能的关键流程之一)也是同样的道理,火箭引擎就是深度学习模型,而燃料就是海量数据,这样我们的算法才能应用上。——吴恩达 使用深度学习解决问题的一个常见障碍是训练模型所需的数据量。对大数据的需求是因为模型中有大量参数需要学习。 以下是几个例子展
崔庆才
2018/06/25
1.1K0
数据增强:数据有限时如何使用深度学习 ? (续)
这篇文章是对深度学习数据增强技术的全面回顾,具体到图像领域。这是《在有限的数据下如何使用深度学习》的第2部分。
AI研习社
2018/07/26
1.5K0
数据增强:数据有限时如何使用深度学习 ? (续)
从零开始深度学习(十五):正则化
深度学习可能存在着数据 过拟合 问题,即存在 高方差。常见的解决方法有两个:一个是 正则化;另一个是 更多数据,更多数据 是一个非常可靠的方法,但是可能无法时时刻刻准备足够多的训练数据,或者获取更多训练数据的成本很高,正则化 则没有这些问题,它通常有助于避免过拟合或减少网络误差。
我是管小亮
2020/04/20
7930
【技术综述】深度学习中的数据增强(下)
今天带来深度学习中的数据增强方法的下篇。我们将从以下几个方向入手。1,介绍一下什么是无监督的数据增强方法。2,简单介绍一下GAN生成数据的应用。3,介绍一下AutoAugment为代表的网络自动学习数据增强策略的方法。4,总结。
用户1508658
2019/07/25
5030
【技术综述】深度学习中的数据增强(下)
深度学习为什么需要那么多的数据?
深度学习近两年来发展极为迅速,在计算能力大大提高的情况下,很多深度学习方向的思想都得以实现。但是,深度学习有一个令人头疼的缺点,那就是需要大量样本来进行训练才能达到较好的泛化。
老潘
2018/08/01
8350
深度学习为什么需要那么多的数据?
一文综述生成更多图像训练数据的方法|视觉进阶
像Google和Microsoft这样的大公司在图像识别方面已经超越了人类基准[1,2]。平均而言,人类大约有5%的时间在图像识别任务上犯了错误。截至2015年,微软的图像识别软件的错误率达到4.94%,与此同时,谷歌宣布其软件的错误率降低到4.8%[3]
磐创AI
2019/10/15
1.2K0
一文综述生成更多图像训练数据的方法|视觉进阶
[综述类] 一文道尽深度学习中的数据增强方法(上)
在深度学习项目中,寻找数据花费了相当多的时间。但在很多实际的项目中,我们难以找到充足的数据来完成任务。
用户1508658
2019/07/25
1.1K0
[综述类] 一文道尽深度学习中的数据增强方法(上)
深度学习应用篇-计算机视觉-图像增广1:数据增广、图像混叠、图像剪裁类变化类等详解
在图像分类任务中,图像数据的增广是一种常用的正则化方法,主要用于增加训练数据集,让数据集尽可能的多样化,使得训练的模型具有更强的泛化能力,常用于数据量不足或者模型参数较多的场景。除了 ImageNet 分类任务标准数据增广方法外,还有8种数据增广方式非常常用,这里对其进行简单的介绍和对比,大家也可以将这些增广方法应用到自己的任务中,以获得模型精度的提升。这8种数据增广方式在ImageNet上的精度指标如 图1 所示。
汀丶人工智能
2023/06/03
6000
深度学习应用篇-计算机视觉-图像增广1:数据增广、图像混叠、图像剪裁类变化类等详解
谷歌研究:通过自动增强来提高深度学习性能
计算机视觉深度学习的成功可部分归功于大量标记训练数据,随着质量提高,多样性和训练数据量,模型的性能通常会提高。但是,收集足够的高质量数据来训练模型以实现良好性能通常是非常困难的。解决这个问题的一种方法是将图像的对称性硬编码到神经网络体系结构中,这样它们就能更好地运行,或者让专家手动设计数据增强方法,比如旋转和翻转,这些方法通常用于训练表现良好的视觉模型。然而最近人们很少关注如何通过机器学习来自动增加现有的数据。在我们的自动化设计的结果中,我们设计了神经网络体系结构和优化器来取代以前的系统组件,我们是否也可以自动化数据扩增的过程?
AiTechYun
2018/07/27
4690
谷歌研究:通过自动增强来提高深度学习性能
深度学习500问——Chapter03:深度学习基础(4)
逐层贪婪训练,无监督训练(unsupervised pre-training)即训练网络的第一个隐藏层,再训练第二个...最后用这些训练好的网络参数值作为整体网络参数的初始值。
JOYCE_Leo16
2024/03/24
1460
深度学习500问——Chapter03:深度学习基础(4)
深度学习500问——Chapter08:目标检测(9)
验证是否过拟合的方法:画出loss曲线,如果训练集loss持续减小但是验证集loss增大,就说明是过拟合了。
JOYCE_Leo16
2024/05/24
1010
深度学习500问——Chapter08:目标检测(9)
CVPR2021深度框架训练:不是所有数据增强都可以提升最终精度
为了缓解上述问题,有研究者提出了一种简单而高效的方法,称为保持增强(KeepAugment),以提高增强图像的保真度。其主要思想是首先使用显著性map来检测原始图像上的重要区域,然后在增强过程中保留这些信息区域。这种信息保护策略使我们能够生成更忠实的训练示例。
计算机视觉研究院
2021/07/09
1K0
深度学习黑客竞赛神器:基于PyTorch图像特征工程的深度学习图像增强
在深度学习黑客竞赛中表现出色的技巧(或者坦率地说,是任何数据科学黑客竞赛) 通常归结为特征工程。当您获得的数据不足以建立一个成功的深度学习模型时,你能发挥多少创造力?
磐创AI
2020/06/05
9780
从零开始深度学习(一):深度学习引言
其实大部分人都是这样的,即便是我们这些技术宅,第一次听到深度学习的时候也是一脸懵逼,觉得很高大上,然而并不知道它到底是干啥的。
我是管小亮
2020/04/20
8370
深度学习中的数据增强技术:Augmentation
数据增强(Data Augmentation)是一种通过利用算法来扩展训练数据的技术。人工智能三要素之一为数据,但获取大量数据成本高,但数据又是提高模型精度和泛化效果的重要因素。当数据量不足时,模型很容易过拟合,精度也无法继续提升,因此数据增强技术应运而生:利用算法,自动增强训练数据。
用户7164815
2020/04/08
4.8K0
【技术综述】深度学习中的数据增强方法都有哪些?
数据增强也叫数据扩增,意思是在不实质性的增加数据的情况下,让有限的数据产生等价于更多数据的价值。
用户1508658
2019/07/25
1.5K0
【技术综述】深度学习中的数据增强方法都有哪些?
推荐阅读
相关推荐
21个项目玩转深度学习 学习笔记(2)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档