Утечка памяти из-за запуска tf.contrib.image.sparse_image_warp с использованием сеанса - PullRequest
1 голос
/ 22 октября 2019

У меня есть функция для деформации некоторых изображений лиц с использованием их целевых ориентиров. Но я заметил, что со временем произошла утечка памяти, и я проверил ее с помощью memory_profiler. Вот код:

def image_warping(src_img, src_landmarks, dest_landmarks):
    expanded_src_landmarks = np.expand_dims(np.float32(src_landmarks), axis=0)
    expanded_dest_landmarks = np.expand_dims(np.float32(dest_landmarks), axis=0)
    expanded_src_img = np.expand_dims(np.float32(src_img) / 255, axis=0)

    warped_img, dense_flows = sparse_image_warp.sparse_image_warp(expanded_src_img,
                          expanded_src_landmarks,
                          expanded_dest_landmarks,
                          interpolation_order=1,
                          regularization_weight=0.1,
                          num_boundary_points=2,
                          name='sparse_image_warp')

    with tf.Session() as sess:
        out_img = sess.run(warped_img)
        warp_img = np.uint8(out_img[0, :, :, :] * 255)
    session.close()
    return warp_img

memory_profiler показывает 466,645 МБ и 174,574 МБ приращений для with tf.Session() as sess: и out_img = sess.run(warped_img) линий соответственно.

Есть ли другие способы преобразовать warped_img из тензорного в массив numpy вместо запуска по сеансу? Результаты этой tf-функции намного лучше, чем у любых других доступных кодов деформации изображения, но мне интересно, почему она возвращает тензор, так как все входные данные являются массивами. Я не использую эту функцию в алгоритме глубокого обучения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...