读批图像很慢?

时间:2017-02-22 23:56:05

标签: tensorflow

我有以下代码,它从本地磁盘上的文件中读取一批10张图像。

问题是代码似乎运行得很慢。运行完成大约需要5-6分钟。包含图像的目录包含大约。 25.000张图片。

代码是正确的还是我做了些蠢事?

import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
import tensorflow as tf

image_width  = 202
image_height = 180
num_channels = 3

filenames = tf.train.match_filenames_once("./train/Resized/*.jpg")

def read_image(filename_queue):
    image_reader = tf.WholeFileReader()
    key, image_filename = image_reader.read(filename_queue)
    image = tf.image.decode_jpeg(image_filename)
    image.set_shape((image_height, image_width, 3))

    return image

def input_pipeline(filenames, batch_size, num_epochs=None):
    filename_queue = tf.train.string_input_producer(filenames, num_epochs=num_epochs, shuffle=True)
    input_image = read_image(filename_queue)
    min_after_dequeue = 10000
    capacity = min_after_dequeue + 3 * batch_size
    image_batch = tf.train.shuffle_batch(
        [input_image], batch_size=batch_size, capacity=capacity,
        min_after_dequeue=min_after_dequeue)
    return image_batch

new_batch = input_pipeline(filenames, 10)

with tf.Session() as sess:
    # Required to get the filename matching to run.
    tf.global_variables_initializer().run()

    # Coordinate the loading of image files.
    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(coord=coord)

    b1 = sess.run(new_batch)

    # Finish off the filename queue coordinator.
    coord.request_stop()
    coord.join(threads)

1 个答案:

答案 0 :(得分:1)

将min_after_dequeue减少到1000并尝试一次。请查看以下时间轴,了解不同的min_after_dequeue值。

min_after_dequeue = 2000 => 2.1 sec to finish

min_after_dequeue = 100 => 0.13 sec to finish

请遵循以获取时间表

from tensorflow.python.client import timeline

run_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE)
run_metadata = tf.RunMetadata()

b1 = sess.run(new_batch,options=run_options,run_metadata=run_metadata)
# Create the Timeline object, and write it to a json
tl = timeline.Timeline(run_metadata.step_stats)
ctf = tl.generate_chrome_trace_format()
with open('timelinestack1.json', 'w') as f:
    f.write(ctf)

此外,请确保您的所有图片都与您提到的尺寸相同。否则,请在set_shape()之前使用下面一行。

image = tf.image.resize_images(imaged, [224, 224])

我希望我给出了合理的答案。