Я пытаюсь развернуть обученную U-Net с TensorRT. Модель была обучена с использованием Keras (с Tensorflow в качестве бэкэнда). Код очень похож на этот: https://github.com/zhixuhao/unet/blob/master/model.py
Когда я преобразовал модель в формат UFF, используя такой код:
import uff
import os
uff_fname = os.path.join("./models/", "model_" + idx + ".uff")
uff_model = uff.from_tensorflow_frozen_model(
frozen_file = os.path.join('./models', trt_fname), output_nodes = output_names,
output_filename = uff_fname
)
Я получу следующее предупреждение:
Warning: No conversion function registered for layer: ResizeNearestNeighbor yet.
Converting up_sampling2d_32_12/ResizeNearestNeighbor as custom op: ResizeNearestNeighbor
Warning: No conversion function registered for layer: DataFormatVecPermute yet.
Converting up_sampling2d_32_12/Shape-0-0-VecPermuteNCHWToNHWC-LayoutOptimizer as custom op: DataFormatVecPermute
Я попытался избежать этого, заменив слой повышающей дискретизации с повышающей дискретизацией (билинейная интерполяция) и транспонируя свертку. Но конвертер выдаст мне подобные ошибки. Я проверил https://docs.nvidia.com/deeplearning/sdk/tensorrt-support-matrix/index.html, и казалось, что все эти операции еще не поддерживаются.
Мне интересно, есть ли какое-либо решение этой проблемы? Есть ли другой формат/фреймворк, который TensorRT любит и поддерживает повышающую дискретизацию? Или его можно заменить другими поддерживаемыми операциями?
Я также видел где-то, что можно добавить настраиваемые операции, чтобы заменить те, которые не поддерживаются для TensorRT. Хотя я не совсем уверен, каким будет рабочий процесс. Также было бы очень полезно, если бы кто-то мог указать на пример пользовательских слоев.
Заранее спасибо!