图像格式,学习笔记tf015

TensorFlow帮助JPG、PNG图像格式,昂CoraGB、福睿斯GBA颜色空间。图像用与图像尺寸相同(height*width*chnanel)张量代表。通道表示为带有每个通道颜色数量标量秩1张量。图像全体像素存在磁盘文件,需求被加载到内部存款和储蓄器。

学学笔记TF015:加载图像、图像格式、图像操作、颜色,学习笔记tf015

TensorFlow辅助JPG、PNG图像格式,LX570GB、纳瓦拉GBA颜色空间。图像用与图像尺寸相同(height*width*chnanel)张量代表。通道表示为涵盖各个通道颜色数量标量秩1张量。图像全数像素存在磁盘文件,供给被加载到内存。

图像加载与二进制文件一律。图像要求解码。输入生成器(tf.train.string_input_producer)找到所需文件,加载到行列。tf.WholeFileReader加载完整图像文件到内部存款和储蓄器,WholeFileReader.read读取图像,tf.image.decode_jpeg解码JPEG格式图像。图像是三阶张量。汉兰达GB值是一阶张量。加载图像格式为[batch_size,image_height,image_width,channels]。批数量图像过大过多,占用内部存款和储蓄器过高,系统会停下响应。

大尺寸图像输入占用大量系统内部存款和储蓄器。锻练CNN须要大量时刻,加载大文件扩展愈多练习时间,也难存放多数种类GPU显存。大尺寸图像多量毫不相关本征属性音讯,影响模型泛化能力。

tf.image.decode_jpeg解码JPEG格式图像。tf.image.decode_png解码PNG格式图像。
差异在阿尔法(反射率)音讯。移除区域阿尔法值设0,有助于标识。JPEG图像频繁操作会留给伪影(atrifact)。PNG格式无损压缩,保留原有文本全体新闻(被缩放或降采集样品除此而外),文件体积较大。

TensorFlow内置文件格式TFRecord,二进制数据和教练项指标签数据存款和储蓄在平等文件。模型磨练前图像转换为TFRecord格式。TFRecord文件是protobuf格式。数据不减弱,可高效加载到内部存款和储蓄器。

独热编码(one-hot
encoding)格式,表示多类分类(单)标签数据。图像加载到内部存款和储蓄器,转换为字节数组,添加到tf.train.Example文件,SerializeToString
连串化为二进制字符,保存到磁盘。体系化将内部存款和储蓄器对象转换为可安全传输文件格式,可被加载,可被反体系化为样本格式。直接加载TFRecord文件,能够省去锻炼时间。援救写入八个样本。

TFRecordReader对象读取TFRecord文件。tf.parse_single_example不解码图像,解析TFRecord,图像按原始字节读取(tf.decode-raw)。tf.reshape调整形状,使布局符合tf.nn.conv2d渴求([image_height,image_width,image_channels])。tf.expand扩展维数,把batch_size维添加到input_batch。tf.equal检查是否加载同一图像。sess.run(tf.cast(tf_record_features[‘label’],
tf.string))查看从TFRecord文件加载的竹签。使用图像数据援引应用TFRecord文件存款和储蓄数据与标签。做好图像预处理并保存结果。

最佳在预处理阶段达成图像操作,裁剪、缩放、灰度调整等。图像加载后,翻转、扭曲,使输入网络练习音讯多种化,缓解过拟合。Python图像处理框架PIL、OpenCV。TensorFlow提供一些图像处理办法。裁剪,tf.image.central_crop,移除图像区域,完全抛弃在那之中音信,与tf.slice(移除张量分量)类似,基于图像大旨重临结果。磨练时,要是背景有用,tf.image.crop_to_bounding_box(只收到明确形状张量,输入图像须要事先在数据流图运转)
随机裁剪区域先导位置到图像中央的偏移量。

tf.image.pad_to_bounding_box
用0填充边界,使输入图像符合期待尺寸。尺寸过大过小图像,边界填充灰度值0像素。tf.image.resize_image_with_crop_or_pad,相对图像中央,裁剪或填充同时拓展。

反过来,各样像素地点沿水平或垂真方向翻转。随机翻转图像,能够幸免过拟合。tf.slice选拔图像数据子集。tf.image.flip_left_right
实现水平翻转。tf.image.flip_up_down
完结垂直翻转。seed参数控制翻转随机性。

编纂过图像磨练,误导CNN模型。属性随机械修理改,使CNN精确匹配编辑过或不一致光照图像特点。tf.image.adjust_brightness
调整灰度。tf.image.adjust_contrast
调整相比度。调整比较度,选择较小增量,防止“过曝”,达到最大值不能复苏,大概全白全黑。tf.slice
优良改变像素。tf.image.adjust_hue
调整色度,色彩更丰硕。delta参数控制色度数量。tf.image.adjust_saturation
调整饱和度,非凡颜色变化。

单纯性颜色图像,灰度颜色空间,单颜色通道,只需求单个重量秩1张量。缩减颜色空间可以加快演练。灰度图具有单个重量,取值范围[0,255]。tf.image.rgb_to_grayscale
把OdysseyGB图像转换为灰度图。灰度变换,每种像素全体颜色值取平均。tf.image.rgb_to_hsv
ENVISIONGB图像转换为HSV,
色度、饱和度、灰度构成HSV颜色空间,三个轻重秩1张量。更贴近人类感知属性。HSB,B亮度值。tf.image.hsv_to_rgb
HSV图像转换为EnclaveGB,tf.image.grayscale_to_rgb
灰度图像转换为RAV4GB。python-colormath提供LAB颜色空间,颜色差距映射贴近人类感知,五个颜色欧氏距离反映人类感受的颜料差距。

tf.image.convert_image_dtype(image, dtype,saturate=False)
图像数据类型变化,像素值比例变化。

 

    import tensorflow as tf
    sess = tf.Session()
    red = tf.constant([255, 0, 0])
    file_names = ['./images/chapter-05-object-recognition-and-classification/working-with-images/test-input-image.jpg']
    filename_queue = tf.train.string_input_producer(file_names)
    image_reader = tf.WholeFileReader()
    _, image_file = image_reader.read(filename_queue)
    image = tf.image.decode_jpeg(image_file)
    sess.run(tf.global_variables_initializer())
    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(sess=sess,coord=coord)
    print sess.run(image)
    filename_queue.close(cancel_pending_enqueues=True)
    coord.request_stop()
    coord.join(threads)
    print "------------------------------------------------------"
    image_label = b'\x01'
    image_loaded = sess.run(image)
    image_bytes = image_loaded.tobytes()
    image_height, image_width, image_channels = image_loaded.shape
    writer = tf.python_io.TFRecordWriter("./output/training-image.tfrecord")
    example = tf.train.Example(features=tf.train.Features(feature={
            'label': tf.train.Feature(bytes_list=tf.train.BytesList(value=[image_label])),
            'image': tf.train.Feature(bytes_list=tf.train.BytesList(value=[image_bytes]))
        }))
    print example
    writer.write(example.SerializeToString())
    writer.close()
    print "------------------------------------------------------"
    tf_record_filename_queue = tf.train.string_input_producer(["./output/training-image.tfrecord"])
    tf_record_reader = tf.TFRecordReader()
    _, tf_record_serialized = tf_record_reader.read(tf_record_filename_queue)
    tf_record_features = tf.parse_single_example(
    tf_record_serialized,
    features={
        'label': tf.FixedLenFeature([], tf.string),
        'image': tf.FixedLenFeature([], tf.string),
        })
    tf_record_image = tf.decode_raw(
        tf_record_features['image'], tf.uint8)
    tf_record_image = tf.reshape(
        tf_record_image,
        [image_height, image_width, image_channels])
    print tf_record_image
    tf_record_label = tf.cast(tf_record_features['label'], tf.string)
    print tf_record_label
    print "------------------------------------------------------"
    sess.close()
    sess = tf.Session()
    sess.run(tf.global_variables_initializer())
    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(sess=sess,coord=coord)
    print sess.run(tf.equal(image, tf_record_image))
    sess.run(tf_record_label)
    coord.request_stop()
    coord.join(threads)
    print "------------------------------------------------------"
    print sess.run(tf.image.central_crop(image, 0.1))
    real_image = sess.run(image)
    bounding_crop = tf.image.crop_to_bounding_box(
        real_image, offset_height=0, offset_width=0, target_height=2, target_width=1)
    print sess.run(bounding_crop)
    print "------------------------------------------------------"
    real_image = sess.run(image)
    pad = tf.image.pad_to_bounding_box(
        real_image, offset_height=0, offset_width=0, target_height=4, target_width=4)
    print sess.run(pad)
    print "------------------------------------------------------"
    crop_or_pad = tf.image.resize_image_with_crop_or_pad(
        real_image, target_height=2, target_width=5)
    print sess.run(crop_or_pad)
    print "------------------------------------------------------"
    sess.close()
    sess = tf.Session()
    top_left_pixels = tf.slice(image, [0, 0, 0], [2, 2, 3])
    flip_horizon = tf.image.flip_left_right(top_left_pixels)
    flip_vertical = tf.image.flip_up_down(flip_horizon)
    sess.run(tf.global_variables_initializer())
    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(sess=sess,coord=coord)
    print sess.run([top_left_pixels, flip_vertical])
    print "------------------------------------------------------"
    top_left_pixels = tf.slice(image, [0, 0, 0], [2, 2, 3])
    random_flip_horizon = tf.image.random_flip_left_right(top_left_pixels)
    random_flip_vertical = tf.image.random_flip_up_down(random_flip_horizon)
    print sess.run(random_flip_vertical)
    print "------------------------------------------------------"
    example_red_pixel = tf.constant([254., 2., 15.])
    adjust_brightness = tf.image.adjust_brightness(example_red_pixel, 0.2)
    print sess.run(adjust_brightness)
    print "------------------------------------------------------"
    adjust_contrast = tf.image.adjust_contrast(image, -.5)
    print sess.run(tf.slice(adjust_contrast, [1, 0, 0], [1, 3, 3]))
    print "------------------------------------------------------"
    adjust_hue = tf.image.adjust_hue(image, 0.7)
    print sess.run(tf.slice(adjust_hue, [1, 0, 0], [1, 3, 3]))
    print "------------------------------------------------------"
    adjust_saturation = tf.image.adjust_saturation(image, 0.4)
    print sess.run(tf.slice(adjust_saturation, [1, 0, 0], [1, 3, 3]))
    print "------------------------------------------------------"
    gray = tf.image.rgb_to_grayscale(image)
    print sess.run(tf.slice(gray, [0, 0, 0], [1, 3, 1]))
    print "------------------------------------------------------"
    hsv = tf.image.rgb_to_hsv(tf.image.convert_image_dtype(image, tf.float32))
    print sess.run(tf.slice(hsv, [0, 0, 0], [3, 3, 3]))
    print "------------------------------------------------------"
    rgb_hsv = tf.image.hsv_to_rgb(hsv)
    rgb_grayscale = tf.image.grayscale_to_rgb(gray)
    print rgb_hsv, rgb_grayscale
    print "------------------------------------------------------"

 

参考资料:
《面向机器智能的TensorFlow实践》

迎接加笔者微信沟通:qingxingfengzi
自身的微信公众号:qingxingfengzigz
自个儿太太张幸清的微信公众号:qingqingfeifangz

http://www.bkjia.com/Pythonjc/1213364.htmlwww.bkjia.comtruehttp://www.bkjia.com/Pythonjc/1213364.htmlTechArticle学习笔记TF015:加载图像、图像格式、图像操作、颜色,学习笔记tf015
TensorFlow扶助JPG、PNG图像格式,奥迪Q7GB、RGBA颜色空间。图像用与图像尺寸相…

图像加载与二进制文件一律。图像需求解码。输入生成器(tf.train.string_input_producer)找到所需文件,加载到行列。tf.WholeFileReader加载完整图像文件到内部存款和储蓄器,WholeFileReader.read读取图像,tf.image.decode_jpeg解码JPEG格式图像。图像是三阶张量。KoleosGB值是一阶张量。加载图像格式为[batch_size,image_height,image_width,channels]。批数量图像过大过多,占用内部存款和储蓄器过高,系统会甘休响应。

大尺寸图像输入占用大批量种类内存。磨练CNN须要大批量时辰,加载大文件扩张越来越多磨炼时间,也难存放多数连串GPU显存。大尺寸图像多量无关本征属性新闻,影响模型泛化能力。

tf.image.decode_jpeg解码JPEG格式图像。tf.image.decode_png解码PNG格式图像。
差异在阿尔法(折射率)消息。移除区域alpha值设0,有助于标识。JPEG图像频仍操作会留下伪影(atrifact)。PNG格式无损压缩,保留原来文件整体信息(被缩放或降采集样品除此之外),文件体积较大。

TensorFlow内置文件格式TFRecord,二进制数据和演练项目的签数据存储在同样文件。模型练习前图像转换为TFRecord格式。TFRecord文件是protobuf格式。数据不优惠扣,可火速加载到内部存款和储蓄器。

独热编码(one-hot
encoding)格式,表示多类分类(单)标签数据。图像加载到内部存款和储蓄器,转换为字节数组,添加到tf.train.Example文件,SerializeToString
系列化为二进制字符,保存到磁盘。体系化将内部存款和储蓄器对象转换为可安好传输文件格式,可被加载,可被反系列化为样本格式。直接加载TFRecord文件,能够节省陶冶时间。援助写入多少个样本。

TFRecordReader对象读取TFRecord文件。tf.parse_single_example不解码图像,解析TFRecord,图像按原始字节读取(tf.decode-raw)。tf.reshape调整形状,使布局符合tf.nn.conv2d渴求([image_height,image_width,image_channels])。tf.expand增添维数,把batch_葡萄娱乐场,size维添加到input_batch。tf.equal检查是否加载同一图像。sess.run(tf.cast(tf_record_features[‘label’],
tf.string))查看从TFRecord文件加载的标签。使用图像数据援引应用TFRecord文件存款和储蓄数据与标签。做好图像预处理并保存结果。

最棒在预处理阶段完毕图像操作,裁剪、缩放、灰度调整等。图像加载后,翻转、扭曲,使输入网络磨练消息四种化,缓解过拟合。Python图像处理框架PIL、OpenCV。TensorFlow提供部分图像处理方法。裁剪,tf.image.central_crop,移除图像区域,完全吐弃在那之中消息,与tf.slice(移除张量分量)类似,基于图像中心重回结果。操练时,借使背景有用,tf.image.crop_to_bounding_box(只接受分明形状张量,输入图像需求事先在多少流图运维)
随机裁剪区域发轫地方到图像宗旨的偏移量。

tf.image.pad_to_bounding_box
用0填充边界,使输入图像符合期待尺寸。尺寸过大过小图像,边界填充灰度值0像素。tf.image.resize_image_with_crop_or_pad,相对图像中央,裁剪或填充同时展开。

扭转,每一种像素地点沿水平或垂真方向翻转。随机翻转图像,可以预防过拟合。tf.slice接纳图像数据子集。tf.image.flip_left_right
完结水平翻转。tf.image.flip_up_down
实现垂直翻转。seed参数控制翻转随机性。

编写过图像磨炼,误导CNN模型。属性随机械修理改,使CNN精确匹配编辑过或区别光照图像特点。tf.image.adjust_brightness
调整灰度。tf.image.adjust_contrast
调整相比度。调整相比较度,选拔较小增量,制止“过曝”,达到最大值不能恢复生机,或许全白全黑。tf.slice
非凡改变像素。tf.image.adjust_hue
调整色度,色彩更拉长。delta参数控制色度数量。tf.image.adjust_saturation
调整饱和度,出色颜色变化。

单一颜色图像,灰度颜色空间,单颜色通道,只要求单个重量秩1张量。缩减颜色空间能够加速磨炼。灰度图具有单个重量,取值范围[0,255]。tf.image.rgb_to_grayscale
把SportageGB图像转换为灰度图。灰度变换,各种像素全体颜色值取平均。tf.image.rgb_to_hsv
PRADOGB图像转换为HSV,
色度、饱和度、灰度构成HSV颜色空间,一个轻重秩1张量。更接近人类感知属性。HSB,B亮度值。tf.image.hsv_to_rgb
HSV图像转换为CR-VGB,tf.image.grayscale_to_rgb
灰度图像转换为CRUISERGB。python-colormath提供LAB颜色空间,颜色差距映射贴近人类感知,四个颜色欧氏距离反映人类感受的颜料差距。

tf.image.convert_image_dtype(image, dtype,saturate=False)
图像数据类型变化,像素值比例变化。

 

    import tensorflow as tf
    sess = tf.Session()
    red = tf.constant([255, 0, 0])
    file_names = ['.hapter-05-object-recognition-and-classification/working-with-images/test-input-image.jpg']
    filename_queue = tf.train.string_input_producer(file_names)
    image_reader = tf.WholeFileReader()
    _, image_file = image_reader.read(filename_queue)
    image = tf.image.decode_jpeg(image_file)
    sess.run(tf.global_variables_initializer())
    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(sess=sess,coord=coord)
    print sess.run(image)
    filename_queue.close(cancel_pending_enqueues=True)
    coord.request_stop()
    coord.join(threads)
    print "------------------------------------------------------"
    image_label = b'\x01'
    image_loaded = sess.run(image)
    image_bytes = image_loaded.tobytes()
    image_height, image_width, image_channels = image_loaded.shape
    writer = tf.python_io.TFRecordWriter("./output/training-image.tfrecord")
    example = tf.train.Example(features=tf.train.Features(feature={
            'label': tf.train.Feature(bytes_list=tf.train.BytesList(value=[image_label])),
            'image': tf.train.Feature(bytes_list=tf.train.BytesList(value=[image_bytes]))
        }))
    print example
    writer.write(example.SerializeToString())
    writer.close()
    print "------------------------------------------------------"
    tf_record_filename_queue = tf.train.string_input_producer(["./output/training-image.tfrecord"])
    tf_record_reader = tf.TFRecordReader()
    _, tf_record_serialized = tf_record_reader.read(tf_record_filename_queue)
    tf_record_features = tf.parse_single_example(
    tf_record_serialized,
    features={
        'label': tf.FixedLenFeature([], tf.string),
        'image': tf.FixedLenFeature([], tf.string),
        })
    tf_record_image = tf.decode_raw(
        tf_record_features['image'], tf.uint8)
    tf_record_image = tf.reshape(
        tf_record_image,
        [image_height, image_width, image_channels])
    print tf_record_image
    tf_record_label = tf.cast(tf_record_features['label'], tf.string)
    print tf_record_label
    print "------------------------------------------------------"
    sess.close()
    sess = tf.Session()
    sess.run(tf.global_variables_initializer())
    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(sess=sess,coord=coord)
    print sess.run(tf.equal(image, tf_record_image))
    sess.run(tf_record_label)
    coord.request_stop()
    coord.join(threads)
    print "------------------------------------------------------"
    print sess.run(tf.image.central_crop(image, 0.1))
    real_image = sess.run(image)
    bounding_crop = tf.image.crop_to_bounding_box(
        real_image, offset_height=0, offset_width=0, target_height=2, target_width=1)
    print sess.run(bounding_crop)
    print "------------------------------------------------------"
    real_image = sess.run(image)
    pad = tf.image.pad_to_bounding_box(
        real_image, offset_height=0, offset_width=0, target_height=4, target_width=4)
    print sess.run(pad)
    print "------------------------------------------------------"
    crop_or_pad = tf.image.resize_image_with_crop_or_pad(
        real_image, target_height=2, target_width=5)
    print sess.run(crop_or_pad)
    print "------------------------------------------------------"
    sess.close()
    sess = tf.Session()
    top_left_pixels = tf.slice(image, [0, 0, 0], [2, 2, 3])
    flip_horizon = tf.image.flip_left_right(top_left_pixels)
    flip_vertical = tf.image.flip_up_down(flip_horizon)
    sess.run(tf.global_variables_initializer())
    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(sess=sess,coord=coord)
    print sess.run([top_left_pixels, flip_vertical])
    print "------------------------------------------------------"
    top_left_pixels = tf.slice(image, [0, 0, 0], [2, 2, 3])
    random_flip_horizon = tf.image.random_flip_left_right(top_left_pixels)
    random_flip_vertical = tf.image.random_flip_up_down(random_flip_horizon)
    print sess.run(random_flip_vertical)
    print "------------------------------------------------------"
    example_red_pixel = tf.constant([254., 2., 15.])
    adjust_brightness = tf.image.adjust_brightness(example_red_pixel, 0.2)
    print sess.run(adjust_brightness)
    print "------------------------------------------------------"
    adjust_contrast = tf.image.adjust_contrast(image, -.5)
    print sess.run(tf.slice(adjust_contrast, [1, 0, 0], [1, 3, 3]))
    print "------------------------------------------------------"
    adjust_hue = tf.image.adjust_hue(image, 0.7)
    print sess.run(tf.slice(adjust_hue, [1, 0, 0], [1, 3, 3]))
    print "------------------------------------------------------"
    adjust_saturation = tf.image.adjust_saturation(image, 0.4)
    print sess.run(tf.slice(adjust_saturation, [1, 0, 0], [1, 3, 3]))
    print "------------------------------------------------------"
    gray = tf.image.rgb_to_grayscale(image)
    print sess.run(tf.slice(gray, [0, 0, 0], [1, 3, 1]))
    print "------------------------------------------------------"
    hsv = tf.image.rgb_to_hsv(tf.image.convert_image_dtype(image, tf.float32))
    print sess.run(tf.slice(hsv, [0, 0, 0], [3, 3, 3]))
    print "------------------------------------------------------"
    rgb_hsv = tf.image.hsv_to_rgb(hsv)
    rgb_grayscale = tf.image.grayscale_to_rgb(gray)
    print rgb_hsv, rgb_grayscale
    print "------------------------------------------------------"

 

参考资料:
《面向机器智能的TensorFlow实践》

迎接加小编微信沟通:qingxingfengzi
自小编的微信公众号:qingxingfengzigz
小编老伴张幸清的微信公众号:qingqingfeifangz