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


Posted in Python onJune 30, 2020

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

#!/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:

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

裁剪后224x224x3:

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

补充知识: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 相关文章推荐
Python实现竖排打印传单手机号码易撕条
Mar 16 Python
Python随手笔记之标准类型内建函数
Dec 02 Python
python将字符串以utf-8格式保存在txt文件中的方法
Oct 30 Python
快速解决docker-py api版本不兼容的问题
Aug 30 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
Sep 05 Python
Python制作词云图代码实例
Sep 09 Python
python集合删除多种方法详解
Feb 10 Python
Python多线程多进程实例对比解析
Mar 12 Python
Python通过getattr函数获取对象的属性值
Oct 16 Python
python使用numpy中的size()函数实例用法详解
Jan 29 Python
python实现b站直播自动发送弹幕功能
Feb 20 Python
Python如何加载模型并查看网络
Jul 15 Python
浅谈tensorflow 中的图片读取和裁剪方式
Jun 30 #Python
Python openpyxl模块实现excel读写操作
Jun 30 #Python
tensorflow下的图片标准化函数per_image_standardization用法
Jun 30 #Python
Python的控制结构之For、While、If循环问题
Jun 30 #Python
关于tensorflow softmax函数用法解析
Jun 30 #Python
基于tensorflow for循环 while循环案例
Jun 30 #Python
解析Tensorflow之MNIST的使用
Jun 30 #Python
You might like
教你IIS6的PHP最佳配置方法
2006/09/05 PHP
火车采集器 免费版使出收费版本功能实现原理
2009/09/17 PHP
php中数字、字符与对象判断函数用法实例
2014/11/26 PHP
Yii框架中memcache用法实例
2014/12/03 PHP
js删除所有的cookie的代码
2010/11/25 Javascript
基于jquery封装的一个js分页
2011/11/15 Javascript
jQuery之日期选择器的深入解析
2013/06/19 Javascript
addEventListener()第三个参数useCapture (Boolean)详细解析
2013/11/07 Javascript
原始XMLHttpRequest方法详情回顾
2013/11/28 Javascript
jquery和ajax的关系详细介绍
2013/11/29 Javascript
详解AngularJS的通信机制
2015/06/18 Javascript
js实现文字超出部分用省略号代替实例代码
2016/09/01 Javascript
js如何编写简单的ajax方法库
2017/08/02 Javascript
vue修改vue项目运行端口号的方法
2017/08/04 Javascript
Node.js静态服务器的实现方法
2018/02/28 Javascript
Vue的路由动态重定向和导航守卫实例
2018/03/17 Javascript
详解如何解决Vue和vue-template-compiler版本之间的问题
2018/09/17 Javascript
小程序关于请求同步的总结
2019/05/05 Javascript
Vue动态组件和异步组件原理详解
2019/05/06 Javascript
vue+mock.js实现前后端分离
2019/07/24 Javascript
JavaScript函数Call、Apply原理实例解析
2020/02/17 Javascript
vue实现的多页面项目如何优化打包的步骤详解
2020/07/19 Javascript
python 简易计算器程序,代码就几行
2009/08/29 Python
Python时间模块datetime、time、calendar的使用方法
2016/01/13 Python
Tensorflow卷积神经网络实例进阶
2018/05/24 Python
DRF跨域后端解决之django-cors-headers的使用
2019/01/27 Python
使用virtualenv创建Python环境及PyQT5环境配置的方法
2019/09/10 Python
详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程
2020/03/25 Python
Python configparser模块应用过程解析
2020/08/14 Python
Python 列表反转显示的四种方法
2020/11/16 Python
CSS3属性 line-clamp控制文本行数的使用
2020/03/19 HTML / CSS
质检员的岗位职责
2013/11/15 职场文书
不错的求职信范文
2014/07/20 职场文书
大学生党校培训心得体会
2014/09/11 职场文书
小学运动会入场词
2015/07/18 职场文书
Vue实现tab导航栏并支持左右滑动功能
2021/06/28 Vue.js