Skip to content

[TensorFlow] формат saved_model #513

@ismukhin

Description

@ismukhin

@n-berezina-nn, пытаюсь написать квантизацию nncf. Данный фреймворк поддерживает несколько бэкендов: onnx, pytorch, openvino и tensorflow. Чтобы передать модель для квантизации из tensorflow, нужно сделать так, чтобы загруженная модель была наследником класса tf.Module. Этого можно достичь, если считать saved_model формат через tf.keras.models.load_model(...). Попробовал сконвертировать модели efficientnet-b0, googlenet-v4-tf и densenet-121-tf.
Строка для googlenet-v4-tf:
python3 tf_converter.py --model_path /home/vanya/projects/dl-benchmark/public/googlenet-v4-tf/inception_v4.frozen.pb --input_name input --output_names InceptionV4/Logits/Predictions
Строка для efficientnet-b0:
python3 tf_converter.py --model_path /home/vanya/projects/dl-benchmark/public/efficientnet-b0/efficientnet-b0/model.ckpt.meta --input_name sub --output_names logits
Модели переходят в этот формат, но в обоих случаях возникают логи:

INFO:tensorflow:No assets to save.
[ INFO ] No assets to save.
INFO:tensorflow:No assets to write.
[ INFO ] No assets to write.

После этого я попытался загрузить модели с помощью tf.keras.models.load_model(...) и выдало такую ошибку:

  File "/home/vanya/projects/dl-benchmark/src/quantization/nncf/model_readers.py", line 63, in _read_model
    mm = tf.keras.models.load_model(Path(self.model_path))
  File "/home/vanya/anaconda3/envs/dl_benchmark_env/lib/python3.9/site-packages/keras/src/saving/saving_api.py", line 262, in load_model
    return legacy_sm_saving_lib.load_model(
  File "/home/vanya/anaconda3/envs/dl_benchmark_env/lib/python3.9/site-packages/keras/src/utils/traceback_utils.py", line 70, in error_handler
    raise e.with_traceback(filtered_tb) from None
  File "/home/vanya/anaconda3/envs/dl_benchmark_env/lib/python3.9/site-packages/keras/src/saving/legacy/saved_model/load.py", line 253, in _generate_object_paths
    for reference in object_graph_def.nodes[current_node].children:
IndexError: list index (0) out of range

Версии библиотек:

tensorflow                   2.15.0
tensorflow-addons            0.22.0
tensorflow-estimator         2.15.0
tensorflow-io-gcs-filesystem 0.34.0
tensorflow-probability       0.22.0

При этом модель densenet-121-tf уже при загрузке через omz была в формате saved_model, ее получилось загрузить через tf.keras.models.load_model(...) и структура saved_model формата идентична тому, что создается скриптом tf_converter.py.
В чем может проблема? Заранее спасибо!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions