#python-3.x #tensorflow2.0 #tensorflow-lite
#python-3.x #tensorflow2.0 #tensorflow-lite
Вопрос:
Я обучил предварительную модель (ssd_mobilenet_v2_fpnlite_640x640) с использованием TF2 Object Detection API, затем экспортировал в промежуточную сохраненную модель, чтобы затем преобразовать ее в TFlite model, используя следующие учебные пособия: TF2 Object Detection API, запуск моделей TF2 Detection API на мобильных устройствах, руководство по API для Python Converter и, Edge TF Lite iOS tutorial.
После многих часов работы мне удалось настроить мою модель для прогнозирования в среде Python и запустить в готовом приложении iOS из TF lite.
Однако, перепробовав множество способов экспорта и преобразования модели, я не могу заставить модель обнаруживать объекты, для обнаружения которых я ее обучил.
Ниже приведена инструкция по обучению модели с использованием TF2 API:
python3 model_main_tf2.py
--pipeline_config_path={pipeline_path}
--model_dir={output_model_dir}
--alsologtostderr
Это инструкции по экспорту сохраненной модели с использованием TF2 API:
python export_tflite_graph_tf2.py
--pipeline_config_path {pipeline_path}
--trained_checkpoint_dir {output_model_dir}
--output_directory {exported_models_dir}
И следующий код для преобразования модели в tflite из Python API:
converter = tf.lite.TFLiteConverter.from_saved_model(export_dir)
tflite_model = converter.convert()
Я также попробовал некоторые другие альтернативы для преобразования в TF1, такие как:
converter = tf.compat.v1.lite.TFLiteConverter.from_saved_model(export_dir)
converter.inference_type = tf.compat.v1.lite.constants.QUANTIZED_UINT8
input_arrays = converter.get_input_arrays()
converter.quantized_input_stats = {input_arrays[0] : (0., 1.)} # mean_value, std_dev
tflite_model = converter.convert()
и с помощью командной строки:
tflite_convert
--saved_model_dir={saved_model}
--output_file={output_dir}
--output_format=TFLITE
--input_shapes=1,640,640,3
--input_arrays='normalized_input_image_tensor'
--output_arrays='TFLite_Detection_PostProcess','TFLite_Detection_PostProcess:1','TFLite_Detection_PostProcess:2','TFLite_Detection_PostProcess:3'
--inference_type=QUANTIZED_UINT8
--mean_values=128
--std_dev_values=127
--change_concat_input_ranges=false
--allow_custom_ops
результатом является файл объемом 500 байт. Эта модель tflite выглядит следующим образом (в Neutron):
В приложении IOS я скорректировал код таким образом:
// MARK: Model parameters
let batchSize = 1
let inputChannels = 3
let inputWidth = 640
let inputHeight = 640
// image mean and std for floating model, should be consistent with parameters used in model training
let imageMean: Float = 128
let imageStd: Float = 127
Я также безуспешно пробовал использовать некоторые другие модели SSD Mobilenet. Я застрял уже несколько дней, я был бы признателен за вашу помощь.
Комментарии:
1. Ваша saved_model работает нормально для вывода? Я имею в виду, если вы загрузите ее на Python и попытаетесь обслуживать.
converter = tf.lite.TFLiteConverter.from_saved_model(export_dir)
должно работать просто отлично, если вы правильно сохранили модель. Не могли бы вы поделиться строкой, как вы создаете save_model?2. Да, она отлично работает для вывода, код, который я использовал для экспорта saved_model для вывода, является:
python3 exporter_main_v2.py --input_type=image_tensor --pipeline_config_path={pipeline_path} --trained_checkpoint_dir={output_model_dir} --output_directory={exported_models_dir}
3. Есть ли какое-либо публичное хранилище, где я могу проверить эти скрипты, особенно exporter_main_v2.py ?
4. Я использовал Tensorflow object detection API , там вы можете найти exporter_main_v2.py (для проверки вывода), model_main_tf2.py (тренер) и export_tflite_graph_tf2.py скрипты (экспортер tflite). Я также создал репозиторий с записными книжками COLAB , которые я создал для этого примера.
5. У меня нет доступа к вашим данным, хранящимся на диске. Я возьму ваши записные книжки в качестве входных данных, чтобы попытаться преобразовать стандартную модель. Вы успешно преобразовали стандартные модели из model zoo в tflite?
Ответ №1:
Установите tf-nighly и преобразуйте saved_model в файл tflitehttps://pypi.org/project/tf-nightly /