Преобразование Mobilenet SSD в TensorFlow Lite с квантованием

Думаю, моя цель проста. Я хочу преобразовать предварительно обученную модель 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, чтобы сделать то же самое и оптимизировать (сжимать, квантовать) модель. Я не справлялся с этим. Какие-либо предложения?

Мои вопросы можно резюмировать следующим образом:

  1. Как преобразовать предварительно обученную модель ssd mobilenetv2 (или v1) в TFLite с квантованием и оптимизацией с использованием кода Python, аналогичного приведенному выше блоку кода.
  2. Как преобразовать предварительно обученную модель ssd mobilenetv2 (или v1) в TFLite с квантованием и оптимизацией с помощью командных строк (API обнаружения объектов и API TFLite, если есть)

person jackyvr    schedule 29.04.2020    source источник
comment
Вы использовали квантованные версии моделей? Я использую эти команды в блокноте Google Colab, чтобы получить квантованные модели TFLite: gist.github.com/drajsel/0961486c468a80aac   -  person Waddles    schedule 30.04.2020
comment
Это хорошее предложение. Большое спасибо! Я все еще ищу решение с несколькими строками кода.   -  person jackyvr    schedule 02.05.2020


Ответы (1)


Похоже, в этой модели есть неподдерживаемые операции.

Предварительно обученную модель tflite "COCO SSD MobileNet v1" можно найти здесь

person Yuqi Li    schedule 04.05.2020
comment
Спасибо. Я все еще надеюсь построить модель с моим собственным набором данных. - person jackyvr; 06.05.2020
comment
где я могу найти ту же модель em v2 версии?. мне нужно больше точности - person Jasar Orion; 02.01.2021