如何将 jpeg 数据加载、标记和馈送到 Tensorflow 中?
How do you load, label, and feed jpeg data into Tensorflow?
我一直在尝试将 1750 * 1750 图像输入 Tensorflow,但在使用 tf.image.decode_jpeg() 函数将图像转换为 Tensor 后,我不知道如何标记和输入数据。
目前,我的代码是:
import tensorflow as tf
import numpy as np
import imageflow
import os, glob
sess = tf.InteractiveSession()
def read_jpeg(filename_queue):
reader = tf.WholeFileReader()
key, value = reader.read(filename_queue)
my_img = tf.image.decode_jpeg(value)
my_img.set_shape([1750, 1750, 1])
print(value)
return my_img
#####################################################
def read_image_data():
jpeg_files = []
images_tensor = []
i = 1
WORKING_PATH = "/Users/Zanhuang/Desktop/NNP/DATA"
jpeg_files_path = glob.glob(os.path.join(WORKING_PATH, '*.jpeg'))
for filename in jpeg_files_path:
print(i)
i += 1
jpeg_files.append(filename)
filename_queue = tf.train.string_input_producer(jpeg_files)
mlist = [read_jpeg(filename_queue) for _ in range(len(jpeg_files))]
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
images_tensor = tf.convert_to_tensor(images_tensor)
sess.close()
现在,正如我之前所说,我需要输入和标记数据。我看过 CIFAR-10 教程文件,但它们将标签存储在一个文件中,我打算不这样做。
我是 Tensorflow 的新手,所以请尽可能详细地回复。
谢谢!
根据您要执行的操作,有几个方向需要考虑。
如果您只是想 运行 推断任意 JPEG 文件(即不需要标签),那么您可以按照 classify_image.py 的示例进行操作JPEG 图像转换成预训练的 Inception 网络:
github.com/tensorflow/models/blob/master/tutorials/image/imagenet/classify_image.py
如果您确实希望在 small 自定义 JPEG 图像数据集上训练(或微调)模型,请查看此有关如何根据一小组 JPEG 图像训练模型的示例。
github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/image_retraining/retrain.py
如果您确实希望在 大型 自定义 JPEG 图像数据集上训练(或微调)模型,然后读取许多单独的 JPEG 文件将是低效的,并且会极大地减慢训练速度。
我建议遵循 inception/ 模型库中描述的过程,将 JPEG 图像目录转换为包含序列化 JPEG 图像的分片 RecordIO。
github.com/tensorflow/models/blob/master/research/inception/inception/data/build_image_data.py
运行转换脚本的说明可在此处获得:
运行完成转换后,您可以 employ/copy inception/ 模型使用的图像预处理管道。
github.com/tensorflow/models/blob/master/research/inception/inception/image_processing.py
我一直在尝试将 1750 * 1750 图像输入 Tensorflow,但在使用 tf.image.decode_jpeg() 函数将图像转换为 Tensor 后,我不知道如何标记和输入数据。
目前,我的代码是:
import tensorflow as tf
import numpy as np
import imageflow
import os, glob
sess = tf.InteractiveSession()
def read_jpeg(filename_queue):
reader = tf.WholeFileReader()
key, value = reader.read(filename_queue)
my_img = tf.image.decode_jpeg(value)
my_img.set_shape([1750, 1750, 1])
print(value)
return my_img
#####################################################
def read_image_data():
jpeg_files = []
images_tensor = []
i = 1
WORKING_PATH = "/Users/Zanhuang/Desktop/NNP/DATA"
jpeg_files_path = glob.glob(os.path.join(WORKING_PATH, '*.jpeg'))
for filename in jpeg_files_path:
print(i)
i += 1
jpeg_files.append(filename)
filename_queue = tf.train.string_input_producer(jpeg_files)
mlist = [read_jpeg(filename_queue) for _ in range(len(jpeg_files))]
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
images_tensor = tf.convert_to_tensor(images_tensor)
sess.close()
现在,正如我之前所说,我需要输入和标记数据。我看过 CIFAR-10 教程文件,但它们将标签存储在一个文件中,我打算不这样做。
我是 Tensorflow 的新手,所以请尽可能详细地回复。
谢谢!
根据您要执行的操作,有几个方向需要考虑。
如果您只是想 运行 推断任意 JPEG 文件(即不需要标签),那么您可以按照 classify_image.py 的示例进行操作JPEG 图像转换成预训练的 Inception 网络:
github.com/tensorflow/models/blob/master/tutorials/image/imagenet/classify_image.py
如果您确实希望在 small 自定义 JPEG 图像数据集上训练(或微调)模型,请查看此有关如何根据一小组 JPEG 图像训练模型的示例。
github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/image_retraining/retrain.py
如果您确实希望在 大型 自定义 JPEG 图像数据集上训练(或微调)模型,然后读取许多单独的 JPEG 文件将是低效的,并且会极大地减慢训练速度。
我建议遵循 inception/ 模型库中描述的过程,将 JPEG 图像目录转换为包含序列化 JPEG 图像的分片 RecordIO。
github.com/tensorflow/models/blob/master/research/inception/inception/data/build_image_data.py
运行转换脚本的说明可在此处获得:
运行完成转换后,您可以 employ/copy inception/ 模型使用的图像预处理管道。
github.com/tensorflow/models/blob/master/research/inception/inception/image_processing.py