training_set_name, training_set_class, training_set_image = sess.run([fR.training_set_name, fR.training_set_class, fR.training_set_image])
fileReader类的相关代码。在
^{pr2}$labelFileBatchProcessor读取csv、无序处理并返回包含名称和标签的批处理。Filenamelister()
将这些名称转换为路径,并返回一个队列。这个队列被传递给imageloader()
函数,该函数返回图像张量。在
问题是加载的图像张量和image_tra_name_batch
不匹配。我认为问题是当build_images(files_training)
被执行时,另一个浴缸被加载。有解决办法吗?在
我希望避免将所有内容存储在一个文件中,而更喜欢从csv中读取图像名称,然后对其进行无序处理,然后再读取图像。在
编辑1:一些相关功能
labelFileBatchProcessor函数:
def labelFileBatchProcessor(batch_size, num_epochs=None, what_set="training"):
if what_set == "training":
inputCsv = ["./data/BDRW_train/BDRW_train_1/labels.csv"]
elif what_set == "validation":
inputCsv = ["./data/BDRW_train/BDRW_train_2/labels.csv"]
labelFile_queue = tf.train.string_input_producer(inputCsv, num_epochs=1, shuffle=False)
image_name, image_class = labelFileInit(labelFile_queue)
min_after_dequeue = 50
capacity = min_after_dequeue + 3 * batch_size
image_name_batch, image_class_batch = tf.train.shuffle_batch(
[image_name, image_class], batch_size=batch_size, capacity=capacity,
min_after_dequeue=min_after_dequeue)
return image_name_batch, image_class_batch
filenameLister2函数:
def filenameLister2(imageNameBatch):
FILES_TRAINING = TRAINING_DIR + imageNameBatch + ".jpg"
FILES_TRAINING = tf.train.string_input_producer(FILES_TRAINING, name="CSVFilenames")
return FILES_TRAINING
构建图像功能:
def build_images(files_training):
image_reader = tf.WholeFileReader()
_, image_file = image_reader.read(files_training)
image_orig = tf.image.decode_jpeg(image_file)
image = tf.image.resize_images(image_orig, [48, 48])
image.set_shape((48, 48, 3))
num_preprocess_threads = 1
min_queue_examples = 256
images = tf.train.batch([image], batch_size=BATCH_SIZE, num_threads=NUM_PREPROCESS_THREADS, capacity=BATCH_SIZE)
return images
编辑2
我更新了labelFileBatchProcessor()
函数,并从^{tf.train_batch()
。这可能是由另一个问题引起的。我把张量放在同一批图像仍然不匹配。在
def labelFileBatchProcessor(batch_size, num_epochs=None, what_set="training"):
if what_set == "training":
inputCsv = ["./data/BDRW_train/BDRW_train_1/labels.csv"]
elif what_set == "validation":
inputCsv = ["./data/BDRW_train/BDRW_train_2/labels.csv"]
labelFile_queue = tf.train.string_input_producer(inputCsv, num_epochs=1, shuffle=False)
image_name, image_class = labelFileInit(labelFile_queue)
min_after_dequeue = 50
capacity = min_after_dequeue + 3 * batch_size
filenames = [TRAINING_DIR + image_name + ".jpg"]
files_training = tf.train.string_input_producer(filenames, name="CSVFilenames", shuffle=False)
images = build_images(files_training)
image_name_batch, image_class_batch, images, filenames2 = tf.train.shuffle_batch(
[image_name, image_class, images, filenames], batch_size=batch_size, capacity=capacity,
min_after_dequeue=min_after_dequeue, allow_smaller_final_batch=True)
return image_name_batch, image_class_batch, images, filenames2
据我所知,问题的出现是因为您的输入管道中有两个独立的批处理阶段:
image_tra_name_batch
和{labelFileBatchProcessor()
中的^{images
由build_images()
中的^{因此,每个文件名和类以及每个图像之间的关联都会丢失。这样的问题的一般解决方案是确保训练示例的所有属性(在本例中,
image_name
,image_class
,和image
)传递给同一个tf.train.batch()
(或tf.train.shuffle_batch()
)调用。这将确保它们作为不可分割的张量元组进行预处理,并保持关联。在相关问题 更多 >
编程相关推荐