各位用户为了找寻关于tensorflow图像裁剪进行数据增强操作的资料费劲了很多周折。这里教程网为您整理了关于tensorflow图像裁剪进行数据增强操作的相关资料,仅供查阅,以下为您介绍关于tensorflow图像裁剪进行数据增强操作的详细内容
我就废话不多说了,大家还是直接看代码吧~
? 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 26train_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