我就废话不多说了,大家还是直接看代码吧~
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
#!/usr/bin/env python # encoding: utf-8 ''' @author: lele Ye @contact: 1750112338@qq.com @software: pycharm 2018.2 @file: 13mnist.py @time: 2018/12/17 10:23 @desc: ''' import tensorflow as tf import scipy.misc import matplotlib.pyplot as plt import random # 读取图像可任意大小 filenames = [ './tianchi.jpg' ] # 创建文件读取队列 filename_queue = tf.train.string_input_producer(filenames) # 一个阅读器,读取整个文件,返回文件名称key,以及文件中所有的内容value reader = tf.WholeFileReader() # Returns the next record (key, value) pair produced by a reader key, value = reader.read(filename_queue) images = tf.image.decode_jpeg(value) # tf.image.decode_png(value) target_width = target_height = 224 # 裁切图片 with tf.Session() as sess: # Coordinator的使用,用于多线程的协调 coord = tf.train.Coordinator() # 启动所有graph收集到的队列运行器(queuerunners) threads = tf.train.start_queue_runners(coord = coord) height,width,channels = sess.run(tf.shape(images)) offset_height = random.randint( 0 ,height - target_height) offset_width = random.randint( 0 ,width - target_width) reshapeimg = tf.image.crop_to_bounding_box(images, offset_height = offset_height, offset_width = offset_width, target_height = target_height,target_width = target_width) print ( type (reshapeimg)) # <class 'tensorflow.python.framework.ops.Tensor'> reimg1 = reshapeimg. eval () # reimg1的类型是<class 'numpy.ndarray'> scipy.misc.imsave( './crop.jpg' , reimg1) plt.imshow(reimg1) plt.axis( "off" ) plt.show() # 请求线程结束 coord.request_stop() # 等待线程终止 coord.join(threads) |
原始图像480x320x3:
裁剪后224x224x3:
补充知识:Tensorflow 图像增强(ImageDataGenerator)
当我们训练一个较为复杂的网络,并且我们的训练数据集有限时,网络十分容易陷入过拟合的状态。
解决这个问题的一个可能的有效方法是:进行数据增强,即通过已有的有限的数据集,通过图像处理等方法(旋转,剪切,缩放…),获得更多的,类似的,多样化的数据。
数据增强处理,不会占用更多的存储空间,即在数据增强过程中,原始的数据不会被修改,所有的处理过程都是在内存中 即时(on-the-fly) 的处理。
注意:
数据增强不一定是万能药(虽然数据多了),数据增强提高了原始数据的随机性,但是若 测试集或应用场景 并不具有这样的随机性,那么它将不会起到作用,还会增加训练所需的时间。
使用方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
train_datagen = ImageDataGenerator( rescale = 1. / 255 , #数据值除以255,[0-255] ->[0,1] shear_range = 0.2 , #剪切强度(逆时针方向的剪切角度,以度为单位) zoom_range = 0.2 , #随机缩放范围 horizontal_flip = True ) #水平翻转 test_datagen = ImageDataGenerator(rescale = 1. / 255 ) train_generator = train_datagen.flow_from_directory( 'data/train' , target_size = ( 150 , 150 ), batch_size = 32 , class_mode = 'binary' ) validation_generator = test_datagen.flow_from_directory( 'data/validation' , target_size = ( 150 , 150 ), batch_size = 32 , class_mode = 'binary' ) model.fit_generator( train_generator, steps_per_epoch = 2000 , epochs = 50 , validation_data = validation_generator, validation_steps = 800 ) |
以上这篇tensorflow图像裁剪进行数据增强操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/yeler082/article/details/90375302