Уменьшение размера модели .tflite - PullRequest
0 голосов
/ 25 октября 2019

Любая модель зоопарка .tflite, которую я вижу, имеет размер не более 3 МБ. По ребру они бегут нормально. Однако, когда я тренирую свою собственную модель обнаружения объектов, размер файла .pb составляет 60 МБ, а файла .tflite также огромен - 20 МБ! Это также квантуется согласно ниже. Конечный результат - ошибки сегментации в модели edgetpu object_detection. Что делает этот файл таким большим? Из-за того, что изображения без изменения размера, вводимые в модель, приводят к тому, что модель становится большой (некоторые фотографии имеют размер 4096 × 2160 и не имеют размера)?

Из определения объекта

Обучить модель

python train.py \
--logtostderr \
--train_dir=training \
--pipeline_config_path=training/ssd_mobilenet_v1_coco.config

Остановить график - создает файл размером 60 МБ .pb

python export_tflite_ssd_graph.py \
--pipeline_config_path=training/ssd_mobilenet_v2_coco.config \
--trained_checkpoint_prefix=training/model.ckpt-2020 \
--output_directory=inference_graph \
--add_postprocessing_op=true 

Конвертировать в .tflite - создает файл .tflite размером 20 МБ

tflite_convert 
--graph_def_file=inference_graph/tflite_graph.pb \
--output_file=inference_graph/detect.tflite \
--inference_type=QUANTIZED_UINT8 \
--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 \
--mean_values=128 \
--std_dev_values=127 \
--allow_custom_ops \
--default_ranges_min=0 \
--default_ranges_max=6

На этом этапе файл .tflite помещается в файл Google Coral Edgetpu, и модель испытываетсяна USB-камере, подключенной к TPU.

export DISPLAY=:0 && edgetpu_detect \
--source /dev/video1:YUY2:1280x720:20/1  \
--model ${DEMO_FILES}/detect.tflite

Конечным результатом является ошибка сегментации.

INFO: Initialized TensorFlow Lite runtime.
glvideomixer name=mixer background=black ! glimagesink sync=False name=glsink qos=False
v4l2src device=/dev/video1 ! video/x-raw,height=720,framerate=20/1,format=YUY2,width=1280 ! glupload ! tee name=t
t. ! glupload ! queue ! mixer.
overlaysrc name=overlay ! video/x-raw,height=720,width=1280,format=BGRA ! glupload ! queue max-size-buffers=1 ! mixer.
t. ! queue max-size-buffers=1 leaky=downstream ! glfilterbin filter=glcolorscale ! video/x-raw,height=168,width=300,format=RGBA ! videoconvert ! video/x-raw,height=168,width=300,format=RGB ! videobox autocrop=True ! video/x-raw,height=300,width=300 ! appsink max-buffers=1 sync=False emit-signals=True drop=True name=appsink
Segmentation fault

1 Ответ

0 голосов
/ 29 октября 2019

Проблема здесь может быть связана с тем, что у вас есть 2 разных файла конфигурации для каждого шага:

python train.py \
...
--pipeline_config_path=training/ssd_mobilenet_v1_coco.config
python export_tflite_ssd_graph.py \
--pipeline_config_path=training/ssd_mobilenet_v2_coco.config \
...

Это должно было быть? Кроме того, похоже, что вы развернули модель сразу после обучения без ее компиляции. Пожалуйста, обратитесь к этому документу для получения дополнительной информации о edgetpu_compiler: https://coral.withgoogle.com/docs/edgetpu/compiler/

AFAIK, модель 20 МБ должна работать очень хорошо, если она отвечает всем требованиям, перечисленным на странице:

  • Параметры тензора квантованы (8-битные числа с фиксированной запятой).
  • Размеры тензора постоянны во время компиляции (без динамических размеров).
  • Параметры модели (такие как тензоры смещения)постоянная во время компиляции.
  • Тензор может быть 1-, 2- или 3-мерным. Если тензор имеет более 3-х измерений, то только 3 самых внутренних измерения могут иметь размер больше 1.
  • В модели используются только операции, поддерживаемые Edge TPU. Перечисленные здесь операции: https://coral.withgoogle.com/docs/edgetpu/models-intro/#supported-operations

Весь ваш конвейер должен быть следующим:

1) Обучить модель

2) Преобразовать в tflite

3) Скомпилировано для EdgeTPU (шаг, который фактически делегирует работу в TPU)

Надеюсь, это поможет.

...