深度学习中的数据增强技术(一)
数据增强的原理
在深度学习中,一般要求样本的数量要充足,样本数量越多,训练出来的模型效果越好,模型的泛化能力越强。但是实际中,样本数量不足或者样本质量不够好,这就要对样本做数据增强,来提高样本质量。
在图像分类任务中,对于输入的图像进行一些简单的平移、缩放、颜色变换等,不会影响图像的类别。
如下两图,虽然做了变换,但不影响被识别成狗狗。
原始图片:
转换后图
对于图像类型的训练、数据,所谓的数据增强( Data Augmentation )方法是指利用平移 、 缩放、颜色等变躁,人工增大训练、集样本的个数 ,从而获得充足的训练数据,使模型训练的效果更好。
对于图像类型的训练、数据,所谓的数据增强( Data Augmentation )方法是指利用平移 、 缩放、颜色等变躁,人工增大训练、集样本的个数 ,从而获得充足的训练数据,使模型训练的效果更好。
关注公众号“从机器学习到深度学习那些事”获取更多最新资料
TensorFlow实现图片数据增强
①图片大小调整
import matplotlib.pyplot as plt import tensorflow as tf # 读取图片 image_data = tf.gfile.FastGFile("data/dog1.jpg", 'br').read() # 4中调整图片大小的方法,实际应用中可以根据需求组合调整 with tf.Session() as sess: img_data = tf.image.decode_jpeg(image_data) plt.imshow(img_data.eval()) plt.show() # 将图片数据转换成实数类型 img_data = tf.image.convert_image_dtype(img_data, dtype=tf.float32) # 重新转换成300X900的图片,并展示出调整后的图片 resized = tf.image.resize_images(img_data, [300, 900], method=1) plt.imshow(resized.eval()) plt.show() # # resize_image_with_crop_or_pad()如原始图像大于目标图像,则截取,如果小于则自动填充 # croped = tf.image.resize_image_with_crop_or_pad(img_data, 1000, 1000) # plt.imshow(croped.eval()) # padded = tf.image.resize_image_with_crop_or_pad(img_data,3000,3000) # plt.imshow(padded.eval()) # 按照比例裁剪图片 central_croped = tf.image.central_crop(img_data,0.8) plt.imshow(central_croped.eval()) plt.show()
部分处理效果展示:
②图像翻转
import matplotlib.pyplot as plt import tensorflow as tf # 读取图片 image_data = tf.gfile.FastGFile("data/dog1.jpg", 'br').read() # 图片翻转 with tf.Session() as sess: img_data = tf.image.decode_jpeg(image_data) plt.imshow(img_data.eval()) plt.show() # 将图片数据转换成实数类型 img_data = tf.image.convert_image_dtype(img_data, dtype=tf.float32) # # 图像上下翻转 # fliped1 = tf.image.flip_up_down(img_data) # plt.imshow(fliped1.eval()) # 左右翻转 fliped = tf.image.flip_left_right(img_data) plt.imshow(fliped.eval()) # 沿着对角线翻转 # transposed = tf.image.transpose_image(img_data) # plt.imshow(transposed.eval()) # # 以50%概率上下翻转 # fliped = tf.image.random_flip_up_down(img_data) # plt.imshow(fliped.eval()) # # 以50%概率左右翻转 # fliped = tf.image.random_flip_left_right(img_data) # plt.imshow(fliped.eval()) plt.show()
部分处理效果展示:
关注公众号“从机器学习到深度学习那些事”获取更多最新资料
先写这么多,后续会再发一篇,把剩下的色彩调整、标准化、标注裁剪等放在一起发出来,同时提供一个整合后的代码。感谢支持
参考资料
21个项目玩转深度学习
TensorFlow实战Google深度学习框架
-----------------------------------------^_^学习是成功之母^_^-----------------------------------------