Как получить небольшой файл tflite - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь получить наименьший возможный файл 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

Заключительные вопросы:

  1. Как я могуу вас есть модель обнаружения объектов с минимальным размером, использующая mobilenet v2 (если строго необходимо застрять в v2)?
  2. Если я застрял в использовании мобильной сети v3, как я могу реализовать операцию MUL?
  3. Я что-то упускаю в процессе?

Очень признателен, если вы можете дать мне совет по этому поводу.

...