Я делаю несколько файлов tfrecord с изображениями для использования с модулем HUB inceptionV3.
При создании я использую для TF:
with tf.Session() as sess:
with open(filePath, 'rb') as inputFileObj:
image = sess.run(tf.image.decode_image(inputFileObj.read()))
image = tf.image.convert_image_dtype(image, tf.float32)
image = sess.run(tf.image.resize_images(image, [299, 299]))
Это занимает около 40 секунд для первых 100 изображений, 110 секунд для следующих 100, и продолжает расти во времени и использовании памяти
При использовании PIL я получаю 1,5 секунды на 100 изображений для одного и того же кода.
код с PIL
img = pil_image.open(filePath)
if img.mode != 'RGB':
img = img.convert('RGB')
img = img.resize([299,299], pil_image.BICUBIC)
img = np.asarray(img)
scale = 1. / np.iinfo(img.dtype).max
img = img.astype(np.float32)*scale
Мне хочется сказать, что у Tensorflow есть утечки памяти?
с использованием tenorflow 1.8.0
Полный цикл - открыть файл и записать в TFRecord
writer = tf.python_io.TFRecordWriter(outputFile)
totalDocs = 0
lastTime = time.time()
for picFile, label in inputData:
totalDocs += 1
if totalDocs%100 == 0:
print "done %d in %f sec" % (totalDocs, time.time() - lastTime)
lastTime = time.time()
image = open_resize_image(picFile)
feature = {'label': _bytes_feature(label),
'image':_bytes_feature(tf.compat.as_bytes(image.tostring()))}
example = tf.train.Example(features=tf.train.Features(feature=feature))
writer.write(example.SerializeToString())
writer.close()