Я пытаюсь получить наименьший возможный файл tflite из модели обнаружения объектов Tensorflow, которая будет использоваться в микроконтроллере (ESP32 с 4 МБ флэш-памяти) ( guide ). То, что я делаю, просто следую этому руководству , чтобы обучить модель распознавать только один класс (конкретный объект на изображении).
Я обучил много моделей (нахост-компьютер), но конечные выходные данные (файлы .cc, полученные с помощью файлов tflite) слишком велики (> 4 МБ при компиляции с помощью xtensa) для развертывания в микроконтроллере (не более 4 МБ флэш-памяти).
Я также провел тест с использованием конфигурации ssd_mobilenet_v3_small_coco , и он создает 1 МБ tflite, что действительно хорошо, и я могу развернуть его на ESP32, но я не могу использовать v3, потому что Tensorflow Lite для C ++не имеет операции MUL, из журналов ESP32:
Не нашел опцию для встроенного кода операции 'MUL' версия '1'
Итак,если я хорошо понял, я думаю, что я застрял в использовании только мобильных сетей v2, потому что существует ограниченное подмножество операций, которые могут использоваться до сих пор с Tensorflow lite ( отсюда ).
Следующие шаги по обучению, конвертации и развертыванию моделей:
ПОЕЗД:
python train.py --logtostderr --train_dir=training/
--pipeline_config_path=training/my_extractor.config
ПРЕОБРАЗОВАНИЕ В TFLITE:
python export_tflite_ssd_graph.py
--pipeline_config_path="training/pipeline.config"
--trained_checkpoint_prefix="training/model.ckpt-xxx"
--output_directory="tflite_output"
--add_postprocessing_op=true
Тогда
tflite_convert --graph_def_file=tflite_output/tflite_graph.pb
--output_file=tflite_output/detect.tflite --output_format=TFLITE
--input_shapes=1,300,300,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 --default_ranges_min=0
--default_ranges_max=6 --quantize_weights
НАКОНЕЦ (чтобы получить доступ к модели из C ++):
xxd -i model.tflite > model_data.cc
Заключительные вопросы:
- Как я могуу вас есть модель обнаружения объектов с минимальным размером, использующая mobilenet v2 (если строго необходимо застрять в v2)?
- Если я застрял в использовании мобильной сети v3, как я могу реализовать операцию MUL?
- Я что-то упускаю в процессе?
Очень признателен, если вы можете дать мне совет по этому поводу.