Я работаю над приложением обнаружения объектов на android, используя TensorflowLite C ++ API. Когда я конвертирую модель ssd_mobilenet_v2_coco_2018_03_29 в tflite, вывод преобразованной модели tflite отличается от вывода первоначально предоставленного файла .pb на тех же тестовых изображениях.
Преобразование файла .pb в. tflite
Терминальная команда (я использовал эту ссылку для помощи.):
python3 object_detection/export_tflite_ssd_graph.py --pipeline_config_path=/content/ssd_mobilenet_v2_coco_2018_03_29/pipeline.config --trained_checkpoint_prefix=/content/ssd_mobilenet_v2_coco_2018_03_29/model.ckpt --output_directory=/tmp/tflite_graph --add_postprocessing_op=true
Приведенная выше команда вызвала ошибку:
google.protobuf.text_format.ParseError: 109: 7: Тип сообщения «object_detection.protos.SsdFeatureExtractor» не имеет поля с именем «batch_norm_trainable»
Ошибка была устранена после выполнения предложенных шагов здесь . Я закомментировал тег 'batch_norm_trainable' из файла 'pipe.config'.
Но результаты обнаружения преобразованной модели tflite отличаются от результатов, предоставленных первоначально предоставленным файлом .pb. Как преобразовать файлы .pb в .tflite, чтобы файл .tflite выдает правильный вывод?
Вывод изображений:
- Использование .pb (и .pbtxt) файлы: pb_output_image1 pb_output_image2
- Использование преобразованного файла .tflite: tflite_output_image1 tflite_output_image2 * *
Используемые версии:
- ОС: Ubuntu 18.04
- Устройство: QUALCOMM MSM8996 для arm64 (Development Board) (Android 9), motorola одна сила (Android 10)
- версия TensorFlow (установлена в Ubuntu, используется для преобразования): 1.15
- версия TensorFlow (для tflite, используемого в устройстве Android, собранном из исходного кода): 2.1.0
- Python версия: 3.6.9
- Bazel версия: 2.0.0
- GCC / версия компилятора: 8.3.0
Любая помощь / руководство будет приветствоваться.
Приветствия:)