图像增广(Image Augmentation)

作者:欧新宇(Xinyu OU)

本文档所展示的测试结果,均运行于:Intel Core i7-7700K CPU 4.2GHz, nVidia GeForce GTX 1080 Ti
本教案所涉及的数据集仅用于教学和交流使用,请勿用作商用。

最后更新:2021年2月23日


【本章要点】

  1. 简要介绍数据增强的基本方法
  2. 给出基于opencv(cv2)的数据处理方法
  3. 给出paddle.vision的数据处理方法

一. 数据增强简介

数据增强是深度学习任务非常常见的数据预处理工作,它主要包括两个方面的原因:防止(缓解)过拟合问题,增强模型的泛化能力。

二. 图片载入与数据显示

在python中,最常用的图像处理和操作库有两个,分别是Python图形库(Python Imaging Library, PIL)和开源计算机视觉库(OpenSource Computer Vision, OpenCV)。两个库通常都可以实现大多数图像的变换操作。

相较而言对于简单的图像操作PIL是不错的选择,因为其代码简单;而当需要同时处理图像、视频,或者更高级功能时,OpenCV是不二的选择。此外在大多数相同操作中,OpenCV的执行效率要更高一些,因此在批量处理时,OpenCV速度更快。

2.1 图片载入

  1. PIL库使用img=Image.open()方法打开图片时,图像类型为PIL Image,值为0-255,尺寸为W*H*C,图像使用的是RGB通道(这一点和matplotlib是一致的)更便于显示,但要进行操作需要转换为numpy数组,方法为:img=np.array(img),转换后的尺寸为H*W*C。
  2. OpenCV库使用img=cv2.imread()方法打开图片时,图像类型为numpy数据,图像使用的时BGR通道,值是0-255,但尺寸为H*W*C,这个格式便于后续处理。但是如果要使用matplotlib进行显示,就需要将颜色通道从BGR转换为RGB,方法为img=cv2.cvtColor(img, cv2.COLOR_BGR2RGB),转换后的尺寸不变,仍然为H*W*C。注意直接使用opencv显示不需要进行转换。

此外,PaddlePaddle提供了一个数据预处理的库,在使用Paddle进行编程的时候,可以直接调用paddle.vision.transforms数据预处理库进行处理,该库提供了简易的数据接口,可以大大提高变成的效率。在Padaddle.vision视觉库中,同时提供了PILcv2两种数据接口。当设置set_image_backend('cv2')时,数据格式和cv2一致;不做设置时,数据格式和PIL一致。

2.2 图片显示

2.2.1 基于Notebook的内嵌式显示