Обнаружение объекта Tensorflow - Преобразование файла.pb в tflite
Я пытаюсь преобразовать замороженную модель SSD mobilenet v2 в формат TFLITE для использования Android. Вот все мои шаги:
Я переучиваюсь с помощью файла train.py API TF Object Detection, используя модель ssd_mobilenet_v2_coco_2018_03_29 для модельного зоопарка. (ХОРОШО)
Экспортируйте обученный файл model.ckpt в замороженный файл модели, используя export_inference_graph.p y, также предоставляемый API обнаружения объектов TF. (ХОРОШО)
Протестируйте замороженный граф на python с помощью GPU, а также только с разрешенным процессором. Оно работает. (ХОРОШО)
Здесь есть обратная сторона, я пытаюсь использовать следующий код:
import tensorflow as tf
tf.enable_eager_execution()
saved_model_dir = 'inference_graph/saved_model/'
converter = tf.contrib.lite.TFLiteConverter.from_saved_model(saved_model_dir,input_arrays=input_arrays,output_arrays=output_arrays,input_shapes={"image_tensor": [1, 832, 832, 3]})
converter.post_training_quantize = True
Сначала я попытался без добавления параметра входных фигур в функцию, но это не сработало. С тех пор я прочитал, что вы можете написать там все, что не имеет значения.
Выход до этой строки:
INFO:tensorflow:Saver not created because there are no variables in the graph to restore
INFO:tensorflow:The specified SavedModel has no variables; no checkpoints were restored.
INFO:tensorflow:The given SavedModel MetaGraphDef contains SignatureDefs with the following keys: {'serving_default'}
INFO:tensorflow:input tensors info:
INFO:tensorflow:Tensor's key in saved_model's tensor_map: inputs
INFO:tensorflow: tensor name: image_tensor:0, shape: (-1, -1, -1, 3), type: DT_UINT8
INFO:tensorflow:output tensors info:
INFO:tensorflow:Tensor's key in saved_model's tensor_map: num_detections
INFO:tensorflow: tensor name: num_detections:0, shape: (-1), type: DT_FLOAT
INFO:tensorflow:Tensor's key in saved_model's tensor_map: detection_boxes
INFO:tensorflow: tensor name: detection_boxes:0, shape: (-1, 100, 4), type: DT_FLOAT
INFO:tensorflow:Tensor's key in saved_model's tensor_map: detection_scores
INFO:tensorflow: tensor name: detection_scores:0, shape: (-1, 100), type: DT_FLOAT
INFO:tensorflow:Tensor's key in saved_model's tensor_map: detection_classes
INFO:tensorflow: tensor name: detection_classes:0, shape: (-1, 100), type: DT_FLOAT
INFO:tensorflow:Saver not created because there are no variables in the graph to restore
INFO:tensorflow:The specified SavedModel has no variables; no checkpoints were restored.
INFO:tensorflow:Froze 0 variables.
INFO:tensorflow:Converted 0 variables to const ops.
Тогда я хочу преобразовать:
tflite_quantized_model = converter.convert()
Это вывод:
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
<ipython-input-6-61a136476642> in <module>
----> 1 tflite_quantized_model = converter.convert()
~/.local/lib/python3.5/site-packages/tensorflow/contrib/lite/python/lite.py in convert(self)
451 input_tensors=self._input_tensors,
452 output_tensors=self._output_tensors,
--> 453 **converter_kwargs)
454 else:
455 # Graphs without valid tensors cannot be loaded into tf.Session since they
~/.local/lib/python3.5/site-packages/tensorflow/contrib/lite/python/convert.py in toco_convert_impl(input_data, input_tensors, output_tensors, *args, **kwargs)
340 data = toco_convert_protos(model_flags.SerializeToString(),
341 toco_flags.SerializeToString(),
--> 342 input_data.SerializeToString())
343 return data
344
~/.local/lib/python3.5/site-packages/tensorflow/contrib/lite/python/convert.py in toco_convert_protos(model_flags_str, toco_flags_str, input_data_str)
133 else:
134 raise RuntimeError("TOCO failed see console for info.\n%s\n%s\n" %
--> 135 (stdout, stderr))
136
137
RuntimeError: TOCO failed see console for info.
Я не могу скопировать здесь вывод консоли, следовательно, он превышает ограничение в 30000 символов, но здесь вы можете увидеть его: https://pastebin.com/UyT2x2Vk
Пожалуйста, помогите пожалуйста, на этом этапе, что я должен сделать, чтобы это работало:(
Мой конфиг: Ubuntu 16.04, Tensorflow-GPU 1.12
Спасибо В andvance!
1 ответ
Если бы на прошлой неделе возникла та же проблема, решите ее, выполнив шаги, описанные здесь.
В основном проблема заключается в том, что их основной скрипт не поддерживает модели SSD. Я не пользовалась bazel
сделать это, но tflite_convert
полезность.
Осторожнее с export_tflite_ssd_graph.py
Сценарий, прочитайте все его опции перед использованием (главным образом --max_detections, которые спасли мою жизнь).
Надеюсь это поможет.
Изменить: ваш шаг 2 недействителен. Сохраненная_модель не может быть преобразована в модель tflite, если она содержит SSD. Вам необходимо экспортировать обученный model.ckpt, используя export_tflite_ssd_graph.py
сценарий и использовать .pb
файл, созданный для преобразования его в tflite с tflite_convert
инструмент.