36 数据增广【动手学深度学习v2】

数据增广(主要是关于图像增强)
- 大型数据集是成功应用深度神经网络的先决条件
- 图像增广在对训练图像进行一系列的随机变化之后,生成相似但不同的训练样本,从而扩大训练集的规模
- 大多数图像增广方法都具有一定的随机性
- 数据增广不仅仅局限于处理图片,还可以处理文本和语音
- 对于图片的处理方式包括:覆盖掉一些像素、对颜色进行变换、对亮度进行变换
在训练集中使用图像增广,随机改变训练样本可以减少模型对某些属性(如位置、颜色等)的依赖,尽可能地模拟现场部署时的场景,提高模型的泛化性能
如何进行数据增广
数据增强就是在已有的数据集上通过对数据的变换,使得数据具有多样性
- 对于语音数据来说,可以加入不同的背景噪音
- 对于图片数据来说,可以改变图片的形状,颜色等

- 上图中右边两行小图是对图片进行数据增广之后的结果
- 第1、2列是对原图像进行部分截取之后的结果
- 第3、4列是对原图像的亮度进行变换之后的结果
- 第5、6列是对原图像的色温进行变换之后的结果
如何使用增广数据进行训练
一般来说,增广数据都是在线生成的,而不是先进行数据增广生成增广数据之后再保存下来
- 先从原始数据中读取图片,然后随机做数据增强(将不同的数据增强的方法随机地用来处理原始数据)生成增强数据,再将增强数据放入模型中进行训练
- 核心是:1、在线生成,2、数据增强的方法是随机的
数据增强可以看作是训练过程中的一个正则项
在测试的时候一般是不会进行图像增强的
常见的数据增强方法
翻转

图片的翻转包括左右翻转和上下翻转
- 左右翻转图像通常不会改变图像的类别(最早且最广泛使用的图像增广方法之一)
- 上下翻转并不是一定可行的,如上图最后一行图片所示,当对猫的图片进行翻转之后,猫的头就会朝向下面,建筑物的图片同理(上下翻转取决于数据集是否适合上下翻转)
裁剪

切割一般是在图片中切割一块出来,然后将它变成固定的形状(之所以是固定的形状,是因为卷积神经网络的输入通常是固定的,一般是224*224)
- 通过对图像进行随机裁剪,使物体以不同的比例出现在图像的不同位置,从而降低模型对目标位置的敏感性
如何进行切割(随机性原理)
- 随机高宽比:比如在某一个区间(比如[3/4,4/3])之间随机取一个数来作为切割部分的高宽比
- 随机大小:比如在某一个区间(比如[8%,100%])之间随机取一个数来作为切割部分的大小(切割部分占原始图像的比例)
- 随机位置:给定截取部分的形状大小,然后在原始图像上面进行随机切割
颜色

改变颜色中四个比较重要的指标
- 色调
- 饱和度
- 对比度
- 明亮度
一般说实在某一个区间(比如[0.5,1.5])上随机选定一个值,然后在该指标的当前值的基础之上进行增减
其他

imgaug(https://github.com/aleju/imgaug)中提供了几十种不同的图像增强的方法
- 高斯模糊
- 将图片中的某一块抹掉
- 对整个图片进行变形
- 锐化
- 等等
某一种数据增强的方法有用,很多时候是因为测试集中某些图片和原始图片通过这种数据增强的方式处理之后的效果类似
- 很多时候应该从结果向前推,通过对现场部署的情况或者测试集可能发生的变化进行分析,由此来反推所需要进行的数据增强
- 在实践中,通常结合多种图像增广方法
总结
- 数据增强通过变形数据来获取多样性从而使得模型泛化性能更好(基于现有的训练数据生成随机图像,以提高模型的泛化能力,本质上是希望通过对原始数据的变化来模拟现场部署或者是测试集中可能出现的情况)
- 常见的图片增强包括翻转、切割、变色
- 为了在预测过程中得到确切的结果,通常会只对训练样本进行图像增广,而在预测过程中不使用带随机操作的图像增广
- 在实践中,通常会组合使用多种图像增广方法
Q&A
- 1、理论上,是不是如果原始样本足够多,就用不着做增广?QA P3 - 00:00
- 2、老师,num_worker 的值是不是根据机器 GPU 性能而设定的?QA P3 - 02:14
- 3、老师,金融风控领域经常碰到的数据都是极度偏斜数据(欺诈样本/正样本比例只占 1%),是否可以针对正样本试试类似的数据增强(之前使用重采样,效果一般般)?QA P3 - 03:38
- 4、老师,测试一般做什么样的增广?测试增广在比赛中能提高精度,如何理解?QA P3 - 04:44
- 5、老师,课件中提到的对比试验固定了所有的随机种子吗?做完增广之后,训练精度下降,是不是意味着还可以继续训练,减少 gap ?QA P3 - 07:28
- 6、请问老师图片增广之后需要一张张确认是否有效吗?QA P3 - 09:36
- 7、老师,做了图片增广之后,训练数据的分布可能会和测试数据的分布不一样,那会对模型的最终精度有影响吗?QA P3 - 09:59
- 8、老师您好,后面会讲图神经网络吗?听说图神经网络挺强大的,老师可以稍微讲解一下吗?QA P3 - 10:55
- 9、老师,怎么理解 mosaic 这种增广方式?把不同的图片 crop 之后拼接在一起,label 也是拼接的,为什么有效呢?QA P3 - 12:02
- 10、老师好,最后对比没增广的训练精度和测试精度时,训练集用的是测试集,那最后同时把这些作为训练集的测试集当作测试集时,为什么测试精度不是100%呢?QA P3 - 13:49
- 11、使用对一个事物的视频描述做数据集,是不是效果会更有效,对比于这样的增广?QA P3 - 14:19
- 12、多张图片叠加,是不是也是一种有效的增广方式?QA P3 - 15:06
- 13、老师,做车辆位置识别,如果实际应用场景摄像头高度和角度清晰度和训练集不一样,是不是只能针对场景单独采集数据重新打标训练?QA P3 - 15:14
- 14、图像增广的样本会不会跟原始样本有混淆结果,比如样本A做图像增广后A'跟样本B相似度从80%升到了90%?QA P3 - 16:41
- 15、如何理解多样性增加,但是分布不变?QA P3 - 17:19
- 16、mix-up增广为什么有效?测试集中不会出现这样的样本?QA P3 - 18:42
- 17、图像增广减少了类间差异,混淆了不同类别怎么办?会出现这种情况吗?QA P3 - 19:30
- 18、老师,请问一下,想做一个加油锥套的的识别,并且测量实际距离。用 yolo 做识别后,有什么办法能提高测量距离的精度?以及做数据集的时候有什么要注意的重点吗?QA P3 - 20:11
- 19、请问老师实际操作时使用 torchvision 好还是 albumentation 好?QA P3 - 20:49
- 20、标号怎么叠加?标号是 label 吗?QA P3 - 21:12
----end----
其他参考:
1、《动手学深度学习》,课程安排,https://courses.d2l.ai/zh-v2/assets/pdfs/part-2_5.pdf
2、《动手学深度学习》,https://zh-v2.d2l.ai/chapter_computer-vision/image-augmentation.html