Преобразование замороженного графа Tensorflow в UFF для вывода TensorRT

Я хочу использовать модель тензорного потока с TensorRT (C ++), и сначала мне нужно преобразовать формат .pb в .uff. При выполнении этого кода:

uff_model = uff.from_tensorflow_frozen_model(
  frozen_file="my_tf_model.pb",
  output_nodes=["output_layer"],
  output_filename="tmp.uff",
  debug_mode=True,
)

Я получаю это сообщение об ошибке:

Traceback (most recent call last):
  File "/home/jodo/ILONA/object-detection/ssd/src/uff_converter/uff_converter.py", line 29, in <module>
    text=False,
  File "/home/jodo/miniconda3/envs/uff_converter/lib/python3.7/site-packages/uff/converters/tensorflow/conversion_helpers.py", line 228, in from_tensorflow_frozen_model
    graphdef.ParseFromString(frozen_pb.read())
google.protobuf.message.DecodeError: Error parsing message

Экспортированный граф (my_tf_model.pb) был обучен и сохранен с помощью tensorflow 2.0.0. Но для конвертера uff мне нужно использовать tensorflow 1.15.0. Может ли это быть проблемой или файл .pb должен иметь обратную совместимость?

Обновление: протестировано на модели, обученной с той же версией, что и использованный конвертер uff (1.15.0), и все та же ошибка.


person Jodo    schedule 15.12.2019    source источник


Ответы (1)


Отвечая на свой вопрос: мой файл .pb был не замороженным графиком, а частью формата SavedModel

Чтобы исправить это 1) преобразуйте его в замороженный график и используйте замороженный график:

python -m tensorflow.python.tools.freeze_graph --input_saved_model_dir SAVED_MODEL_DIR

Тогда uff.from_tensorflow_frozen_model() должно работать.

person Jodo    schedule 16.12.2019