Думаю, моя цель проста. Я хочу преобразовать предварительно обученную модель ssd mobilenetv2 (или v1) в TFLite с квантованием и оптимизацией, как описано ЗДЕСЬ. Но даже без какого-либо квантования я получаю ошибки при преобразовании модели в модель TFLite.
model = tf.saved_model.load(detection_model_dir)
concrete_func = model.signatures[tf.saved_model.DEFAULT_SERVING_SIGNATURE_DEF_KEY]
concrete_func.inputs[0].set_shape([1,300,300,3])
converter = tf.lite.TFLiteConverter.from_concrete_functions([concrete_func])
#converter = tf.compat.v1.lite.TFLiteConverter.from_saved_model(detection_model_dir, input_shapes={"image_tensor" : [1,300,300,3]})
tflite_model = converter.convert()
Сообщения об ошибках:
2020-04-29 13: 23: 58.432192: I tensorflow / lite / toco / import_tensorflow.cc: 659] Преобразование неподдерживаемой операции: TensorArrayWriteV3 2020-04-29 13: 23: 58.432342: I tensorflow / lite / toco / import_tensorflow.cc : 659] Преобразование неподдерживаемой операции: TensorArrayWriteV3 2020-04-29 13: 23: 58.782402: I tensorflow / lite / toco / graph_transformations / graph_transformations.cc: 39] Перед удалением неиспользуемых операций: 4058 операторов, 6882 массивов (0 квантованных) 2020- 04-29 13: 23: 59.302999: I tensorflow / lite / toco / graph_transformations / graph_transformations.cc: 39] После удаления неиспользуемых операций проходит 1: 4005 операторов, 6778 массивов (0 квантованных) 2020-04-29 13: 23: 59.925648 : I tensorflow / lite / toco / graph_transformations / graph_transformations.cc: 39] До общих преобразований графа: 4005 операторов, 6778 массивов (0 квантованных) 2020-04-29 13: 24: 00.227644: F. \ Tensorflow / lite / toco / toco_tooling.h: 38] Ошибка проверки: s.ok () Найден StridedSlice как невыбранный выход из Switch, но поддерживается только Merge. Операции потока управления, такие как Switch и Merge, обычно не поддерживаются. Мы работаем над решением этой проблемы. См. Проблему с Github на странице https://github.com/tensorflow/tensorflow/issues/28485. Неустранимая ошибка Python: прервано
Я потратил дни на преобразование предварительно обученной модели ssd mobilenetv2 в TFLite. Я знаю, что решение командной строки (export_tflite_ssd_graph.py) работает для преобразования, но не для квалификационной части. Я также хотел бы написать код на Python, чтобы сделать то же самое и оптимизировать (сжимать, квантовать) модель. Я не справлялся с этим. Какие-либо предложения?
Мои вопросы можно резюмировать следующим образом:
- Как преобразовать предварительно обученную модель ssd mobilenetv2 (или v1) в TFLite с квантованием и оптимизацией с использованием кода Python, аналогичного приведенному выше блоку кода.
- Как преобразовать предварительно обученную модель ssd mobilenetv2 (или v1) в TFLite с квантованием и оптимизацией с помощью командных строк (API обнаружения объектов и API TFLite, если есть)