tensorflow图像裁剪进行数据增强操作

 更新时间:2020年06月30日 14:57:57   转载 作者:yeler082  
这篇文章主要介绍了tensorflow图像裁剪进行数据增强操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

我就废话不多说了,大家还是直接看代码吧~

#!/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) 的处理。

注意:

数据增强不一定是万能药(虽然数据多了),数据增强提高了原始数据的随机性,但是若 测试集或应用场景 并不具有这样的随机性,那么它将不会起到作用,还会增加训练所需的时间。

使用方法:

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图像裁剪进行数据增强操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python科学计算之NumPy入门教程

    Python科学计算之NumPy入门教程

    这篇文章主要介绍了Python科学计算之NumPy,文中给出了详细的介绍与示例代码,对大家的理解具有一定的参考借鉴价值,有需要的朋友可以一起来学习学习。
    2017-01-01
  • Python中实现常量(Const)功能

    Python中实现常量(Const)功能

    这篇文章主要介绍了Python中实现常量(Const)功能,python语言本身没有提供const,本文使用一个类来实现常量定义功能,并介绍了使用方法,需要的朋友可以参考下
    2015-01-01
  • 讲解python参数和作用域的使用

    讲解python参数和作用域的使用

    本文会介绍如何将语句组织成函数,还会详细介绍参数和作用域的概念,以及递归的概念及其在程序中的用途。
    2013-11-11
  • 用map函数来完成Python并行任务的简单示例

    用map函数来完成Python并行任务的简单示例

    这篇文章主要介绍了用map函数来完成Python并行任务的简单示例,多线程和多进程编程的问题一直都是Python中的热点和难点,需要的朋友可以参考下
    2015-04-04
  • Python实现的朴素贝叶斯分类器示例

    Python实现的朴素贝叶斯分类器示例

    这篇文章主要介绍了Python实现的朴素贝叶斯分类器,结合具体实例形式分析了基于Python实现的朴素贝叶斯分类器相关定义与使用技巧,需要的朋友可以参考下
    2018-01-01
  • pymongo实现多结果进行多列排序的方法

    pymongo实现多结果进行多列排序的方法

    这篇文章主要介绍了pymongo实现多结果进行多列排序的方法,涉及Python排序的相关技巧,需要的朋友可以参考下
    2015-05-05
  • Django缓存系统实现过程解析

    Django缓存系统实现过程解析

    这篇文章主要介绍了Django缓存系统实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • python 使用sys.stdin和fileinput读入标准输入的方法

    python 使用sys.stdin和fileinput读入标准输入的方法

    今天小编就为大家分享一篇python 使用sys.stdin和fileinput读入标准输入的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Python里字典的基本用法(包括嵌套字典)

    Python里字典的基本用法(包括嵌套字典)

    今天小编就为大家分享一篇关于Python里字典的基本用法(包括嵌套字典),小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • Python 使用 docopt 解析json参数文件过程讲解

    Python 使用 docopt 解析json参数文件过程讲解

    这篇文章主要介绍了Python 使用 docopt 解析json参数文件过程讲解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08

最新评论