深度学习中的数据增强技术(一)

时间:2024-02-20 18:24:25

 

数据增强的原理

在深度学习中,一般要求样本的数量要充足,样本数量越多,训练出来的模型效果越好,模型的泛化能力越强。但是实际中,样本数量不足或者样本质量不够好,这就要对样本做数据增强,来提高样本质量。

 

在图像分类任务中,对于输入的图像进行一些简单的平移、缩放、颜色变换等,不会影响图像的类别。

 

如下两图,虽然做了变换,但不影响被识别成狗狗。

原始图片:

转换后图

 

对于图像类型的训练、数据,所谓的数据增强( 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深度学习框架