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 27 Python
Python实现的圆形绘制(画圆)示例
Jan 31 Python
python查看列的唯一值方法
Jul 17 Python
解决Python3 被PHP程序调用执行返回乱码的问题
Feb 16 Python
pandas读取CSV文件时查看修改各列的数据类型格式
Jul 07 Python
PYTHON发送邮件YAGMAIL的简单实现解析
Oct 28 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
Dec 25 Python
Pycharm中import torch报错的快速解决方法
Mar 05 Python
降低python版本的操作方法
Sep 11 Python
Python实现像awk一样分割字符串
Sep 15 Python
提高python代码运行效率的一些建议
Sep 29 Python
Python实现七个基本算法的实例代码
Oct 08 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
PHP 应用程序的安全 -- 不能违反的四条安全规则
2006/11/26 PHP
初学CAKEPHP 基础教程
2009/11/02 PHP
javascript,php获取函数参数对象的代码
2011/02/03 PHP
PHP中的事务使用实例
2015/05/26 PHP
CI(Codeigniter)的Setting增强配置类实例
2016/01/06 PHP
点击广告后才能获得下载地址
2006/10/26 Javascript
jquery 元素控制(追加元素/追加内容)介绍及应用
2013/04/21 Javascript
js 中将多个逗号替换为一个逗号的代码
2014/06/07 Javascript
ext前台接收action传过来的json数据示例
2014/06/17 Javascript
js贪吃蛇网页版游戏特效代码分享(挑战十关)
2015/08/24 Javascript
confirm确认对话框的实现方法总结
2016/06/17 Javascript
详解JS中的attribute属性
2017/04/25 Javascript
javascript字体颜色控件的开发 JS实现字体控制
2017/11/27 Javascript
解决vue中无法动态修改jqgrid组件 url地址的问题
2018/03/01 Javascript
实战node静态文件服务器的示例代码
2018/03/08 Javascript
解决vue中虚拟dom,无法实时更新的问题
2018/09/15 Javascript
vue自定义全局共用函数详解
2018/09/18 Javascript
搭建基于express框架运行环境的方法步骤
2018/11/15 Javascript
vue+element加入签名效果(移动端可用)
2019/06/17 Javascript
python判断字符串编码的简单实现方法(使用chardet)
2016/07/01 Python
Python实现多并发访问网站功能示例
2017/06/19 Python
python中Apriori算法实现讲解
2017/12/10 Python
彻彻底底地理解Python中的编码问题
2018/10/15 Python
Python两个字典键同值相加的几种方法
2019/03/05 Python
超实用的 30 段 Python 案例
2019/10/10 Python
python读取yaml文件后修改写入本地实例
2020/04/27 Python
Python列表如何更新值
2020/05/27 Python
解决keras,val_categorical_accuracy:,0.0000e+00问题
2020/07/02 Python
Python多线程的退出控制实现
2020/08/10 Python
详解Html5微信支付爬坑之路
2018/07/24 HTML / CSS
施工资料员岗位职责
2014/01/06 职场文书
群教个人对照检查材料
2014/08/20 职场文书
2014年餐厅服务员工作总结
2014/11/18 职场文书
2015年健康教育工作总结
2015/04/10 职场文书
谢师宴学生致辞
2015/07/27 职场文书
排查Tomcat进程假死的问题
2022/05/06 Servers