Skip to main content
 首页 » 编程设计

python之在 Tensorflow 中,是否有操作/是否有操作来接受张量(文件名)并输出图像

2025年04月02日34birdshome

我希望能够批量读取图像。但是,这些批处理必须由 python 脚本构建(由于各种原因,它们不能提前放入文件中)。什么是最有效的方法,在 tensorflow 中执行以下操作:

(1) 提供:指向图像的 B 可变长度字符串的 python 列表,所有具有相同的大小。 B 是批量大小。 (2) 对每个字符串,加载它对应的图片,应用5%的随机crop(crop是随机的,但crop的大小是固定的) (3) 将图像拼接成大小为 B x H x W x 3 的张量

如果这不可能,是否有人有关于在 python 中加载和预处理图像然后将它们放入队列的效率损失的任何基准/数据?我认为如果在 tensorflow 上内部完成图像加载/预处理,网络将运行得更快。

请您参考如下方法:

我是这样理解你的问题的:

  • 你有一些图片
  • 你有一个函数 sample_batch() 返回一批大小为 B 的文件名
  • 你想读取这些文件名对应的图片并进行预处理
  • 最后你输出了一批这样的例子

input = tf.placeholder(tf.string, name='Input') 
queue = tf.FIFOQueue(capacity, tf.string, [()], name='Queue') 
enqueue_op = queue.enqueue_many(input) 
 
reader = tf.WholeFileReader() 
filename, content = reader.read(queue) 
image = tf.image.decode_jpeg(content, channels=3) 
 
# Preprocessing 
image = tf.random_crop(image, [H, W, 3]) 
image = tf.to_float(image) 
batch_image = tf.train.batch([image], batch_size=B, name='Batch') 
output = inference(batch_image) 

然后在 session 中,您必须使用 sample_batch() 函数中的文件名运行入队操作:

with tf.Session() as sess: 
  tf.train.start_queue_runners() 
  for i in range(NUM_STEPS): 
    batch_filenames = sample_batch() 
    sess.run(enqueue_op, feed_dict={input: batch_filenames}) 
    sess.run(output)