Переработанные модели Tflite / Pb, извлеченные из одной и той же контрольной точки, дают разные результаты - PullRequest
0 голосов
/ 17 марта 2019

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

python models\research\object_detection\export_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 export\freeze\

иГрафик .tflite (с помощью сценария export_tflite_ssd_graph.py и tflite_convert).

python models\research\object_detection\export_tflite_ssd_graph.py 
--input_type image_tensor 
--pipeline_config_path ssd_mobilenet_v1_test.config 
--trained_checkpoint_prefix training/model.ckpt 
--output_directory export\tflite\ 
--max_detections 16 
--add_postprocessing_op=true

tflite_convert 
--output_file=export\tflite\model.tflite 
--graph_def_file=export\tflite\tflite_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. Он хорошо работает с предварительно обученной моделью).

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

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

1 Ответ

0 голосов
/ 19 июля 2019

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

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

tensor[tensor > 1e5] = 0

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

...