tensorflow图像裁剪进行数据增强操作
作者:yeler082 发布时间:2023-06-23 14:33:20
标签: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)
来源:https://blog.csdn.net/yeler082/article/details/90375302


猜你喜欢
- 本文实例讲述了Python实现导出数据生成excel报表的方法。分享给大家供大家参考,具体如下:#_*_coding:utf-8_*_imp
- 前言go mod tidy的作用是把项目所需要的依赖添加到go.mod,并删除go.mod中,没有被项目使用的依赖。Tidy makes s
- 通过创建变量var a = 'something' + '  
- 由于某些原因需要把函数直接放到 img 标签上的 onload 属性执行,比如:For some reasons we have to ex
- 一、前奏在谈回调函数之前,先看下下面两段代码:不妨猜测一下代码的结果。function say (value) {  
- PHP children() 函数实例查找 note 节点的子节点:<?php $note=<<<XML<no
- 网页设计中的脏、乱、差,是我们在设计过程中常会遇到的问题。通常"脏"是由对色彩使用不当所产生的,而色彩使用不当产生的不好
- Flask file upload代码import osfrom flask import Flask, request, re
- 上班族经常会遇到这样情况,着急下班结果将关机误点成重启,或者临近下班又通知开会,开完会已经迟了还要去给电脑关机。今天使用PyQt5做了个自动
- 实例如下:String.prototype.trim = function (char, type) { if (char) {
- 1 以下代码的输出结果为:print(round(-3.6))A.-4B.-4.0C.-3D. -3.02 以下代码的输出结果为(Pytho
- 一. 概念理解你可能有留意到当你浏览网页时,会有一些推送消息,大多数是你最近留意过的同类东西,比如你想买桌子,上淘宝搜了一下,结果连着几天会
- 这两天做了一个判断浏览器类型和版本号的业务,记录下相关的js代码: function allinfo(){ var ua = navigat
- 一、原理说明1,authentication_string这是Mysql8.0新做出的修改,在旧版本中使用的是password()函数。2,
- 前言今天我看了一下自己的文件夹,发现了自己写了许多似乎很无聊的代码。于是乎,一个想法油然而生:“生活已经很无聊了,不如再无聊一点叭”。说干就
- 通过python对多个txt文件进行处理读取路径,读取文件获取文件名,路径名对响应的文件夹名字进行排序对txt文件内部的数据相应的某一列/某
- 前言使用强类型变量常常需要从一种类型向另一种类型转换,通常使用ToString或ParseInt可以来实现一些简单的转换,但是有时候需要像.
- 女友让我给她论文的图片上加上字母序号,本来觉得是个很简单的事情,但那个白底黑字的圆圈序号却难住了我, 试了几个常用的软件,都不行。后来用 P
- 前提:安装xhtml2pdf https://pypi.python.org/pypi/xhtml2pdf/下载字体:微软雅黑;待转换的文件
- pymysql 是 python 用来操作MySQL的第三方库,下面具体介绍和使用该库的基本方法。1.建立数据库连接通过 connect 函