Я использую эту функцию для чтения данных изображения из корзины GCS:
def _load_image(path, height, width):
try:
with tf.gfile.GFile(path, 'rb') as fl:
image_bytes = fl.read()
image = cv2.imdecode(np.frombuffer(image_bytes, np.uint8), -1)
return image.astype(np.float32)
except Exception as e:
logging.exception('Error processing image %s: %s', path, str(e))
return
Она вызывается внутри цикла, который считывает данные изображения и выводит их в файл .tfrecord
def _write_tf_records(examples, output_filename):
writer = tf.python_io.TFRecordWriter(output_filename)
for example in tqdm(examples):
try:
image = _load_image(example['path'], height=HEIGHT, width=WIDTH)
if image is not None:
encoded_img_string = cv2.imencode('.jpg', image)[1].tostring()
feature = {
'train/label': _bytes_feature(tf.compat.as_bytes(example['classname'])),
'train/image': _bytes_feature(tf.compat.as_bytes(encoded_img_string))
}
tf_example = tf.train.Example(features= tf.train.Features(feature=feature))
writer.write(tf_example.SerializeToString())
except Exception as e:
print(e)
pass
writer.close()
Функция отлично работает при выполнении на локальном компьютере считывания изображений из моей корзины GCS.Но когда я пытаюсь запустить этот скрипт на языке Python из внутри контейнера Docker , он начинает быстро потреблять оперативную память и в конечном итоге дает сбой (возможная утечка памяти).
Я устранил другие возможные причины и почти уверенчто GFile.read()
является причиной ошибки.
Предложения по решению этой проблемы?