算法集锦(6) |基于GPU框架的tensorflow数据增强算法

时间:2022-07-22
本文章向大家介绍算法集锦(6) |基于GPU框架的tensorflow数据增强算法,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

深度学习技术可以解决很多人类难以处理的问题,但也存在数据需求大和训练耗时长的缺点。

为了解决数据需求问题,常用的方法是数据增强(Data Augmentat)。当我们需要大量的增强数据时(如构建出上百万的新图片),增强处理也会消耗大量的计算资源,导致训练过程变慢。一个行之有效的解决方法是采用tensorflow.image函数来进行增强操作,该函数基于GPU计算,因此效率很高。

我们采用tensorflow的eager_execution,这样就可以不允许代码也可以看到数据增强的效果。

导入图像

Tensorflow的图像函数要求输入的图像是个指针,下面我们导入图像并将其转化为指针。

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.翻转图像

翻转图像是最常用的数据增强操作之一,可以很容易的对数据量进行翻倍。通常包括水平翻转、垂直翻转和随机翻转。

水平翻转

brght_img = tf.image.flip_left_right(tf_img)

垂直翻转

brght_img = tf.image.flip_up_down(tf_img)

随机翻转:随机翻转使你有1/2的可能进行水平翻转或垂直翻转,代码如下。

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轴来翻转图像。

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度。

brght_img = tf.image.rot90(tf_img, k = 1)

3.亮度调整

可以使用以下代码来调整图像亮度。

brght_img = tf.image.adjust_brightness(tf_img, delta= 0.2)

delta参数代表加到图像像素上的量值,数值越大则图像越亮。如果delta为负数,则图像相应的变暗。此外,还可以随机的调整图像的亮度值。

brght_img = tf.image.random_brightness(tf_img, max_delta=0.5)

此时,delat值在-max_delta和max_delta之间。

4.图像修剪

central_crop函数保留从中心到指定距离的图像,并剪切掉外围的像素。

brght_img = tf.image.central_crop(tf_img, 0.5)

crop_to_bounding_box 函数指定偏移量和图像的宽度、高度,从而准确控制剪切区域。

brght_img = tf.image.crop_to_bounding_box(tf_img,offset_height = 100, offset_width = 100, target_height = 400, target_width = 800)

-

4. 其他方法

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