• TensorFlow笔记-图片读取


    回到上一篇文件的读取分这么几步:

    # 构造队列
        # 1,构造图片文件的队列
        file_queue = tf.train.string_input_producer(filelist)

    # 构造阅读器
        # 2,构造图片阅读器读取队列数据(按一张)
        reader = tf.WholeFileReader()

    # 读取文件然后解码
    # 3, 读取图片数据并进行解码
    key,value = reader.read(file_queue)
    image = tf.image.decode_jpeg(value)
    # 文件处理
    # 4,处理图片数据的大小
    image_resize = tf.image.resize_images(image,[200,200])
    image_resize.set_shape([200,200,3])
    # 批量处理
    # 5,批处理
    image_batch = tf.train.batch([image_resize],batch_size=7,num_threads=1,capacity=3)
    # 循环输出
        with tf.Session() as sess:
            coord = tf.train.Coordinator()
    
            threads = tf.train.start_queue_runners(sess,coord=coord)
            print(sess.run([image_batch]))
    
            coord.request_stop()
            coord.join(threads)

    图像基本概念

    在图像数字化表示当中,分为黑白和彩色两种。在数字化表示图片的时候,有三个因素。分别是图片的长、图片的宽、图片的颜色通道数。那么黑白图片的颜色通道数为1,它只需要一个数字就可以表示一个像素位;而彩色照片就不一样了,它有三个颜色通道,分别为RGB,通过三个数字表示一个像素位。TensorFlow支持JPG、PNG图像格式,RGB、RGBA颜色空间。图像用与图像尺寸相同(heightwidthchnanel)张量表示。图像所有像素存在磁盘文件,需要被加载到内存。

    图像大小压缩

    大尺寸图像输入占用大量系统内存。训练CNN需要大量时间,加载大文件增加更多训练时间,也难存放多数系统GPU显存。大尺寸图像大量无关本征属性信息,影响模型泛化能力。最好在预处理阶段完成图像操作,缩小、裁剪、缩放、灰度调整等。图像加载后,翻转、扭曲,使输入网络训练信息多样化,缓解过拟合。Python图像处理框架PIL、OpenCV。TensorFlow提供部分图像处理方法。

    • tf.image.resize_images 压缩图片导致定大小

    图像数据读取实例

    同样图像加载与二进制文件相同。图像需要解码。输入生成器(tf.train.string_input_producer)找到所需文件,加载到队列。tf.WholeFileReader 加载完整图像文件到内存,WholeFileReader.read 读取图像,tf.image.decode_jpeg 解码JPEG格式图像。图像是三阶张量。RGB值是一阶张量。加载图像格 式为[batch_size,image_height,image_width,channels]。批数据图像过大过多,占用内存过高,系统会停止响应。直接加载TFRecord文件,可以节省训练时间。支持写入多个样本。

    读取图片数据到Tensor

    管道读端多文件内容处理

    但是会发现read只返回一个图片的值。所以我们在之前处理文件的整个流程中,后面的内容队列的出队列需要用特定函数去获取。

    • tf.train.batch 读取指定大小(个数)的张量
    • tf.train.shuffle_batch 乱序读取指定大小(个数)的张量
    import tensorflow as tf
    import os
    import warnings
    warnings.filterwarnings('ignore')
    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
    FLAGS = tf.app.flags.FLAGS
    
    tf.app.flags.DEFINE_string("cifar_dir", "data/person/", "文件的目录")
    
    def imgread(filelist):
        # 1,构造图片文件的队列
        file_queue = tf.train.string_input_producer(filelist)
        # 2,构造图片阅读器读取队列数据(按一张)
        reader = tf.WholeFileReader()
        # 3, 读取图片数据并进行解码
        key,value = reader.read(file_queue)
        image = tf.image.decode_jpeg(value)
        # 4,处理图片数据的大小
        image_resize = tf.image.resize_images(image,[200,200])
        print(image_resize)
        image_resize.set_shape([200,200,3])
        print(image_resize)
    
        # 5,批处理
        image_batch = tf.train.batch([image_resize],batch_size=7,num_threads=1,capacity=3)
        return image_batch
    if __name__ == '__main__':
        file_name = os.listdir(FLAGS.cifar_dir)
        filelist = [os.path.join(FLAGS.cifar_dir, file) for file in file_name]
        image_batch = imgread(filelist)
        with tf.Session() as sess:
            coord = tf.train.Coordinator()
    
            threads = tf.train.start_queue_runners(sess,coord=coord)
            print(sess.run([image_batch]))
    
            coord.request_stop()
            coord.join(threads)

    这里data/person下的图片如下:

     



  • 相关阅读:
    计算机网络基础1
    jmeter 之系统参数根据条件修改
    jmeter 之变量传递
    ant 执行jmeter脚本
    ant安装报错:ANT_HOME is set incorrectly or ant could not be located. Please set ANT_HOME.
    数据类型的转换
    你真的了解JavaScript的数据类型吗?
    js的一些常识
    数组扁平化
    vue.config.js
  • 原文地址:https://www.cnblogs.com/TimVerion/p/11225763.html
Copyright © 2020-2023  润新知