GC.Collect()
fileReader类的相关代码。
training_set_name, training_set_class, training_set_image = sess.run([fR.training_set_name, fR.training_set_class, fR.training_set_image])
labelFileBatchProcessor读取csv,shuffle,并返回包含名称和标签的批处理。 def return_training_set():
image_tra_name_batch, image_tra_class_batch = labelFileBatchProcessor(50, 1, "training")
files_training = filenameLister2(image_tra_name_batch)
images = build_images(files_training)
return image_tra_name_batch, image_tra_class_batch, images
training_set_name, training_set_class, training_set_image = return_training_set()
将这些名称转换为路径,它返回一个队列。此队列将传递给Filenamelister()
函数,该函数将返回图像张量。
问题是加载的图像张量与imageloader()
不匹配。我认为问题是当image_tra_name_batch
被执行时,会加载另一个浴缸。有没有解决这个问题?
我想避免将所有内容存储在一个文件中,而是希望从csv中读取图像名称,然后将其随机播放,然后再将图像随机播放。
Edit1:一些相关的功能
labelFileBatchProcessor函数:
build_images(files_training)
filenameLister2功能:
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
build_images功能:
def filenameLister2(imageNameBatch):
FILES_TRAINING = TRAINING_DIR + imageNameBatch + ".jpg"
FILES_TRAINING = tf.train.string_input_producer(FILES_TRAINING, name="CSVFilenames")
return FILES_TRAINING
EDIT2
我更新了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
功能,并从labelFileBatchProcessor()
中删除了tf.train_batch()
。这可能是由不同的问题引起的。我把张量放在同一批次中,图像仍然不匹配。
build_images()
答案 0 :(得分:0)
据我所知,问题出现了,因为输入管道中有两个独立的批处理阶段:
image_tra_name_batch
和image_tra_class_batch
由labelFileBatchProcessor()
中的tf.train.shuffle_batch()
批量处理。
images
由build_images()
中的tf.train.batch()
批量处理。
结果,每个文件名和类之间的关联以及每个图像都丢失了。对此类问题的一般解决方案是确保将训练示例的所有属性(在本例中为image_name
,image_class
和image
)传递给相同的{{1 }(或tf.train.batch()
)调用。这将确保它们被预处理为不可分割的张量元组,并且将保持关联。