Closed valentina-kustikova closed 11 months ago
Также есть проблема с запуском моделей в формате meta. Командная строка для модели efficientnet-b0 ниже. Но здесь я похоже не могу угадать название входного тензора. Использую название input
, как написано в документации.
python inference_tensorflow.py --model /home/itmm/Documents/kustikova_v/public/efficientnet-b0/efficientnet-b0/model.ckpt.meta --input /home/itmm/Documents/kustikova_v/data/ --batch_size 3 --task classification --output_names logits --labels labels/image_net_synset_first_class_base.txt --input_shape 224 224 3 --input_name input
Результат:
[ INFO ] Converting to saved model into folder /home/itmm/Documents/kustikova_v/public/efficientnet-b0/efficientnet-b0/saved_model
Traceback (most recent call last):
File "/home/itmm/miniconda/envs/tensorflow_env_3.9/lib/python3.9/site-packages/tensorflow/python/framework/ops.py", line 2894, in _as_graph_element_locked
op = self._get_operation_by_name(op_name)
KeyError: ''
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/itmm/Documents/kustikova_v/upstream/dl-benchmark/src/inference/inference_tensorflow.py", line 318, in <module>
sys.exit(main() or 0)
File "/home/itmm/Documents/kustikova_v/upstream/dl-benchmark/src/inference/inference_tensorflow.py", line 274, in main
model, _ = load_model(model_path,
File "/home/itmm/Documents/kustikova_v/upstream/dl-benchmark/src/model_converters/tf2tflite/tensorflow_common.py", line 140, in load_model
convert_to_saved_model(model_graph, input_names, output_names, str(model_path))
File "/home/itmm/Documents/kustikova_v/upstream/dl-benchmark/src/model_converters/tf2tflite/tensorflow_common.py", line 55, in convert_to_saved_model
inputs[input_name] = g.get_tensor_by_name(f'{input_name}:0')
File "/home/itmm/miniconda/envs/tensorflow_env_3.9/lib/python3.9/site-packages/tensorflow/python/framework/ops.py", line 2999, in get_tensor_by_name
return self.as_graph_element(name, allow_tensor=True, allow_operation=False)
File "/home/itmm/miniconda/envs/tensorflow_env_3.9/lib/python3.9/site-packages/tensorflow/python/framework/ops.py", line 2856, in as_graph_element
return self._as_graph_element_locked(obj, allow_tensor, allow_operation)
File "/home/itmm/miniconda/envs/tensorflow_env_3.9/lib/python3.9/site-packages/tensorflow/python/framework/ops.py", line 2896, in _as_graph_element_locked
raise KeyError(
KeyError: "The name 'input:0' refers to a Tensor which does not exist. The operation, 'input', does not exist in the graph."
@valentina-kustikova приложите пожалуйста файл модели или дайте сылку, откуда можно скачать
@valentina-kustikova приложите пожалуйста файл модели или дайте сылку, откуда можно скачать
@n-berezina-nn, обе модели загружаю через omz_downloader --name googlenet-v4-tf,efficientnet-b0
для efficientnet-b0 попробуйте "input_name": "sub:0", "output_names": "logits"
для efficientnet-b0 попробуйте "input_name": "sub:0", "output_names": "logits"
Спасибо, при такой комбинации вывод efficientnet-b0 заработал, в документации к модели вход называется input
:)
@valentina-kustikova лучше всего открыть файл модели через сервис https://netron.app/ и посмотреть как реально называются входы и выходы модели. для googlenet я могу посмотреть позже в течение дня, если нужно
@valentina-kustikova лучше всего открыть файл модели через сервис https://netron.app/ и посмотреть как реально называются входы и выходы модели. для googlenet я могу посмотреть позже в течение дня, если нужно
Да, спасибо, буду очень благодарна.
@valentina-kustikova для inception-v4 вход называется input:0, с ним у меня прошла конвертация. Пожалуйста попробуйте.
Название входов и выходов нужны для конвертации в saved model, если у вас уже изначально модель в saved model формате, то такая конвертация не требуется, поэтому в вашем случае инференс работал. Формат Frozen Graph объявлен как deprecated в TF2, поэтому для того чтобы производить инференс с помощью tf2 API все форматы отличные от saved model приводятся к saved model.
@valentina-kustikova для inception-v4 вход называется input:0, с ним у меня прошла конвертация. Пожалуйста попробуйте.
Название входов и выходов нужны для конвертации в saved model, если у вас уже изначально модель в saved model формате, то такая конвертация не требуется, поэтому в вашем случае инференс работал. Формат Frozen Graph объявлен как deprecated в TF2, поэтому для того чтобы производить инференс с помощью tf2 API все форматы отличные от saved model приводятся к saved model.
Поняла. Спасибо большое за помощь! Принесу попозже небольшой фикс в валидации классификационных моделей.
Запускаю скрипт вывода TensorFlow для модели inception_v4 с использованием командной строки:
В результате получаю следующую ошибку.
При этом, если запускаю ту же модель, но в формате savedmodel (командная строка ниже). Все работает нормально.
Подскажите, пожалуйста, в чем проблема?