深度学习技术可以解决很多人类难以处理的问题,但也存在数据需求大和训练耗时长的缺点。
为了解决数据需求问题,常用的方法是数据增强(Data Augmentat)。当我们需要大量的增强数据时(如构建出上百万的新图片),增强处理也会消耗大量的计算资源,导致训练过程变慢。一个行之有效的解决方法是采用tensorflow.image函数来进行增强操作,该函数基于GPU计算,因此效率很高。
我们采用tensorflow的eager_execution,这样就可以不允许代码也可以看到数据增强的效果。
导入图像
Tensorflow的图像函数要求输入的图像是个指针,下面我们导入图像并将其转化为指针。
代码语言:javascript复制img = matplotlib.pyplot.imread(‘/img_path’)
tf_img = tf.convert_to_tensor(img)
图像来源:https://cdn-images-1.medium.com/max/1000/1*ULBhR9EVavi-HhpdbrjEzQ.jpeg
增强操作
下面我们介绍不同的增强算法对图像处理效果。
1.翻转图像
翻转图像是最常用的数据增强操作之一,可以很容易的对数据量进行翻倍。通常包括水平翻转、垂直翻转和随机翻转。
水平翻转
代码语言:javascript复制brght_img = tf.image.flip_left_right(tf_img)
垂直翻转
代码语言:javascript复制brght_img = tf.image.flip_up_down(tf_img)
随机翻转:随机翻转使你有1/2的可能进行水平翻转或垂直翻转,代码如下。
代码语言:javascript复制brght_img = tf.image.random_flip_left_right(tf_img)
brght_img = tf.image.random_flip_up_down(tf_img)
除了以上方法,你还可以使用tf.reverse来达到同样的效果。
tf.reverse可以控制图像沿X轴或Y轴来翻转图像。
代码语言:javascript复制brght_img = tf.reverse(tf_img, axis =[0]) #Verticle flipping
brght_img = tf.reverse(tf_img, axis =[1]) #Horizontal flipping
2.图像旋转
tensorflow提供了tf.image.rot90()函数来实现图像逆时针旋转90度。
代码语言:javascript复制brght_img = tf.image.rot90(tf_img, k = 1)
3.亮度调整
可以使用以下代码来调整图像亮度。
代码语言:javascript复制brght_img = tf.image.adjust_brightness(tf_img, delta= 0.2)
delta参数代表加到图像像素上的量值,数值越大则图像越亮。如果delta为负数,则图像相应的变暗。此外,还可以随机的调整图像的亮度值。
代码语言:javascript复制brght_img = tf.image.random_brightness(tf_img, max_delta=0.5)
此时,delat值在-max_delta和max_delta之间。
4.图像修剪
central_crop函数保留从中心到指定距离的图像,并剪切掉外围的像素。
代码语言:javascript复制brght_img = tf.image.central_crop(tf_img, 0.5)
crop_to_bounding_box 函数指定偏移量和图像的宽度、高度,从而准确控制剪切区域。
代码语言:javascript复制brght_img = tf.image.crop_to_bounding_box(tf_img,offset_height = 100, offset_width = 100, target_height = 400, target_width = 800)
-
4. 其他方法
代码语言:javascript复制tf.image.adjust_contrast
tf.image.random_contrast
tf.image.adjust_hue
tf.image.random_hue
tf.image.adjust_gamma
tf.image.adjust_saturation
tf.image.random_saturation