速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

如何选择最合适的数据增强操作

  • 2019-09-27
  • 本文字数:2035 字

    阅读完需:约 7 分钟

如何选择最合适的数据增强操作


本文讲述数据增强中的应用,这也是 AutoML 技术最早期的应用之一。

1 数据增强的重要性

大家都知道数据增强很重要,是深度学习必备良药,写论文刷比赛提指标的大杀器。


论文中的数据我们就不多说了,如果大家想验证一下数据增强的强大,可以去我们的 GitHub 项目中找到一个二分类的图像任务,它的数据集大小只有 1000 张图。


https://github.com/longpeng2008/yousan.ai


https://github.com/longpeng2008/Caffe_Long


如果不使用任何数据增强操作,测试集无法达到 90%以上的精度。如果使用了裁剪+颜色变换等数据增强操作,测试集精度可以达到 96%以上。


以下是不使用数据增强,固定裁剪,自由裁剪,裁剪+对比度扰动,裁剪+对比度扰动+颜色扰动的结果,由于使用的模型和数据集非常小,使用 CPU 都可以快速完成验证。



如果不会使用 Caffe 可以阅读公众号的教程。



传统的数据增强方法以各类通过参数控制的预设几何变换和颜色变换为主,可以阅读往期综述文章如下。



这便是大家熟知的数据增强操作,它成就了深度学习里程碑模型 AlexNet,与深度学习一直同在,技术也在不断演进。

2 自动学习数据增强策略

如果让模型针对具体的任务自动学习数据增强,理论上会更加智能,这便是我们这要说的基于 AutoML 的数据增强技术,它主要是用于自动学习数据增强策略。还有一类方法如 GAN 等生成式模型可以直接伪造新的数据,这不在本文阐述的范围内。

2.1 AutoAugment[1]

AutoAugment 是 Google 提出的自动选择最优数据增强方案的研究,也是最早的使用 AutoML 技术来搜索数据增强策略的研究。


它的基本思路是使用增强学习从数据本身寻找最佳图像变换策略,对于不同的任务学习不同的增强方法,流程如下:


(1) 准备 16 个常用的数据增强操作。


(2) 从 16 个中选择 5 个操作,随机产生使用该操作的概率和相应的幅度,将其称为一个 sub-policy,一共产生 5 个 sub-polices。


(3) 对训练过程中每一个 batch 的图片,随机采用 5 个 sub-polices 操作中的一种。


(4) 通过模型在验证集上的泛化能力来反馈,使用的优化方法是增强学习方法。


(5) 经过 80~100 个 epoch 后网络开始学习到有效的 sub-policies。


(6) 之后串接这 5 个 sub-policies,然后再进行最后的训练。


总的来说,就是学习已有数据增强的组合策略,比如对于门牌数字识别等任务,研究表明剪切和平移等几何变换能够获得最佳效果:



官方开源实现如下:


https://github.com/DeepVoltaire/AutoAugment


随着在图像分类任务中 AutoAugment 取得成功后,该论文的作者们又将该技术应用于目标检测任务[2]。



核心方法没有太大的改变,搜索空间中共包含 22 种操作,分别为:


(1) 颜色操作:颜色扰动类,如调节亮度,对比度等。


(2) 几何操作:旋转、剪切等。


(3) 边界框操作:对框内的目标进行颜色和几何类操作。


之后的搜索策略和训练方法与 AutoAugment 一致,在 COCO 数据集上的 mAP 提升超过 2 个点,并且可以直接迁移到其他目标检测数据集上。


下图展示了在不同样本数量时的提升,样本越少提升越明显。


2.2 Population Based Augmentation

AutoAugment 计算成本非常高昂,伯克利 AI 研究院提出的 Population Based Augmentation[3]方法成本要低很多(三个数量级),它也可以学习到数据增强策略。


与 AutoAugment 不同之处在于,Population Based Augmentation 学习的是策略的使用顺序而不是一组最优策略,当然所使用的 15 个策略都来自于 AutoAugment。



这个方法的核心思想是:


(1) 并行训练多个小模型,这些小模型组成了种群。


(2) 种群中每一个小模型都会学习到不同的候选超参数,周期性地将性能最佳的一些模型的参数迁移到性能较差的一些模型上(文中是 25%),同时再加上随机扰动操作。


最终得到的是一系列按照时间排序的增强操作,取得了与 AutoAugment 性能相当但是训练代价小很多的效果,开源代码如下:


https://github.com/arcelien/pba


参考文献


[1] Cubuk E D, Zoph B, Mane D, et al. Autoaugment: Learning augmentation policies from data[J]. arXiv preprint arXiv:1805.09501, 2018.


[2] Zoph B, Cubuk E D, Ghiasi G, et al. Learning Data Augmentation Strategies for Object Detection[J]. arXiv preprint arXiv:1906.11172, 2019.


[3] Ho D, Liang E, Stoica I, et al. Population Based Augmentation: Efficient Learning of Augmentation Policy Schedules[J]. arXiv preprint arXiv:1905.05393, 2019.


[4] Lim S, Kim I, Kim T, et al. Fast autoaugment[J]. arXiv preprint arXiv:1905.00397, 2019.

总结

如何做机器学习任务中做好数据增强是每一个从业人员必须认真面对的问题,如今已经发展到了使用 AutoML 技术来代替人工设计策略,请大家持续关注。


作者介绍


言有三,真名龙鹏,曾先后就职于奇虎 360AI 研究院、陌陌深度学习实验室,6 年多计算机视觉从业经验,拥有丰富的传统图像算法和深度学习图像项目经验,拥有技术公众号《有三 AI》,著有书籍《深度学习之图像识别:核心技术与案例实战》。


原文链接


https://mp.weixin.qq.com/s/YtL7GeIGYm9xtdofnabu1g


2019-09-27 19:202493

评论

发布
暂无评论
发现更多内容

机器学习 Machine Learning- 吴恩达Andrew Ng 第5~15课总结 John 易筋 ARTS 打卡 Week 47

John(易筋)

ARTS 打卡计划

如何判断企业赚不赚钱?

石云升

创业 财务分析 5月日更

重磅!数字人民币接入支付宝!

CECBC

数字人民币

网络攻防学习笔记 Day10

穿过生命散发芬芳

5月日更 网络攻防

Nginx如何配置Http、Https、WS、WSS?

冰河

nginx 负载均衡 反向代理 https HTTP

Yii2反序列化RCE 新POP链

Thrash

凭借一份“面试真经pdf”,我四面字节跳动,拿下1-2级offer

Java 程序员 架构 面试

SSL / TLS协议解析!什么是SNI? SNI 识别?

明儿

差点扛不住了,阿里巴巴支付宝面试 5 轮暴击,终获 Offer

Java架构师迁哥

工业制造业亟需数字化转型,区块链可以发挥哪些价值?

CECBC

区块链

Linux下内存不足问题的定位与处理

明儿

Linux 内存 性能调优

挖矿从入门到放弃:Chia

程序员架构进阶

数字货币 28天写作 Chia奇亚挖矿 5月日更

阿里P7大佬!王者级讲解ConcurrentHashMap源码,码农:太透彻了

牛哄哄的java大师

Java ConcurrentHashMap

强!上线3天获10w浏览量,京东T8纯手码Redis缓存手册,我粉了

飞飞JAva

redis

Java程序员如何在“黄金五年”实现最大价值?

学Java关注我

Java 编程 架构 互联网 计算机

常见流媒体服务器方案对比分析

liuzhen007

音视频 5月日更

一千座5G工厂的花苞

脑极体

从SPACE矩阵,看5G究竟是否在走向成功?

脑极体

实战排查由于系统负载引起的服务响应异常

Coder的技术之路

高并发 性能调优 线上问题

语义理解过程中的崩溃

Qien Z.

nlp 语义 5月日更

云原生下的灰度体系建设

阿里巴巴云原生

容器 运维 云原生 k8s 监控

云原生的进一步具象化

阿里巴巴云原生

大数据 容器 云原生 监控 中间件

王兴的失败观

池建强

成功 王兴 创业失败启示录

GreenPlum中的资源队列

数据社

greenplum 5月日更

数据工作者必备工作技能:数据治理

博文视点Broadview

☕【Java技术之旅】如何彻底认识AQS的原理(上篇)

洛神灬殇

Java AQS JVM JUC 5月日更

太赞了!美团大牛强推的Spring事务笔记,上线仅1天就获赞上万

飞飞JAva

Java 事务spring

异步编程的几种方式,你知道几种?

xcbeyond

Java 异步编程 5月日更

边缘计算与云计算的故事

攻城先森

云计算 边缘计算 5月日更

API网关

lenka

5月日更

凭借师兄甩给我的通关秘籍,顺利拿到字节Offer

学Java关注我

Java 编程 架构 面试

如何选择最合适的数据增强操作_AI&大模型_言有三_InfoQ精选文章