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

作者:yeler082 时间:2023-06-23 14:33:20 

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

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

来源:https://blog.csdn.net/yeler082/article/details/90375302

标签:tensorflow,图像,裁剪,增强
0
投稿

猜你喜欢

  • 详解vue-Resource(与后端数据交互)

    2024-06-05 09:15:06
  • 如何用SA-FileUp上传一个单纯的HTML文件?

    2010-05-18 18:29:00
  • 基于ORA-19815闪回空间爆满问题的处理方法

    2024-01-21 03:35:04
  • python包导入的两种方式

    2022-11-25 22:49:30
  • python使用pandas读写excel文件的方法实例

    2021-04-09 17:44:26
  • Django 限制访问频率的思路详解

    2021-08-17 16:52:57
  • python使用Matplotlib改变坐标轴的默认位置

    2021-08-06 00:27:42
  • Django def clean()函数对表单中的数据进行验证操作

    2023-08-16 00:31:47
  • numpy中loadtxt 的用法详解

    2022-03-21 09:46:39
  • Flask实现swagger在线文档与接口测试流程详解

    2023-04-29 11:34:17
  • 升级SQL Server 2008数据库引擎

    2009-03-25 12:58:00
  • Oracle关于时间/日期的操作

    2024-01-21 23:39:42
  • 在Python的Flask框架中构建Web表单的教程

    2023-10-04 06:03:12
  • python知识:装饰器@property到底有啥用途

    2022-07-23 12:25:45
  • python实现共轭梯度法

    2021-10-06 22:39:01
  • python 绘制国旗的示例

    2023-01-05 19:29:32
  • 5个常见的XHTML验证错误

    2010-01-15 20:24:00
  • python中k-means和k-means++原理及实现

    2022-01-17 10:52:07
  • pycharm 如何缩进和SQL乱码及SQL包含变量

    2021-05-19 04:43:24
  • python调用百度语音识别api

    2023-02-13 10:23:48
  • asp之家 网络编程 m.aspxhome.com