Переобученные модели Tflite / Pb, извлеченные из одной и той же контрольной точки, дают разные результаты

#java #python #tensorflow #tensorflow-lite

#java #python #tensorflow #tensorflow-lite

Вопрос:

После того, как я переобучил предварительно подготовленную модель ssd mobilenet v1 с моим собственным набором данных изображений, используя object_detectionmodel_main.py скрипт, я экспортировал оба графика замораживания .pb (с export_inference_graph.py скрипт)

 python modelsresearchobject_detectionexport_inference_graph.py 
--input_type image_tensor 
--input_shape=1,300,300,3 
--pipeline_config_path ssd_mobilenet_v1_test.config 
--trained_checkpoint_prefix training/model.ckpt 
--output_directory exportfreeze
  

и .график tflite (с export_tflite_ssd_graph.py script и tflite_convert).

 python modelsresearchobject_detectionexport_tflite_ssd_graph.py 
--input_type image_tensor 
--pipeline_config_path ssd_mobilenet_v1_test.config 
--trained_checkpoint_prefix training/model.ckpt 
--output_directory exporttflite 
--max_detections 16 
--add_postprocessing_op=true

tflite_convert 
--output_file=exporttflitemodel.tflite 
--graph_def_file=exporttflitetflite_graph.pb 
--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=128 
--default_ranges_min=0 
--default_ranges_max=6 
--allow_custom_ops
  

График Pb, похоже, работает просто отлично, но tflite one false обнаруживает все на Android, поэтому я получаю 16 из 16 возможных обнаружений, независимо от того, какое изображение я передаю ему, даже изображение, заполненное черным цветом (я тестирую его на устройстве Android. Это хорошо работает с предварительно обученной моделью).

Изменение параметров преобразования, таких как отключение / включение квантования, std / mean изображения, ничего не изменило. Я также сравнил свой график tflite с примером графика mobilenet, и они выглядят довольно похожими. Есть идеи, что может вызвать эту проблему?

(windows 10 / cuda 9.0 / cudnn 7.0/tf-nightly-gpu/models-master)

Комментарии:

1. Вы пробовали запускать вывод на Python, чтобы убедиться, что это не проблема с интеграцией Android? Если да, можете ли вы сообщить о проблеме на странице GitHub в TensorFlow и включить все необходимое для воспроизведения проблемы, включая модель (или минимальную версию модели).

Ответ №1:

Выходные тензоры из модели tflite, похоже, возвращают некоторые экстремальные значения (например, 5e35 или -3e34). Поскольку некоторые из этих значений оценки больше 1, это считается обнаружением.

Мое решение — заменить все значения, превышающие ограничение (я сделал 1e5), на 0. (Python был быстрее.)

 tensor[tensor > 1e5] = 0
  

Странно, что этого не происходит с примером detector.tflite или экспортированным замороженным графиком вывода. Должен быть правильный способ экспорта моделей tflite.