Пример Tensorflow Lite iOS Camera не работает с переобученной моделью MobileNet
Я пытаюсь запустить пример Tensorflow Lite Camera с переобученной моделью Mobilenet.
Я успешно запустил приложение камеры iOS в соответствии с инструкциями и этим исправлением. Приложение работает, как и ожидалось с моделью mobilenet_v1_1.0_224.tflite
,
Я устанавливаю Tensorflow:
pip3 install -U virtualenv
virtualenv --system-site-packages -p python3 ./venv
source ./venv/bin/activate
pip install --upgrade pip
pip install --upgrade tensorflow==1.12.0
pip install --upgrade tensorflow-hub==40.6.2
Теперь я хочу переучить модель, используя набор цветов. Я загружаю папку с цветами и запускаю:
python retrain.py \
--bottleneck_dir=bottleneck \
--how_many_training_steps=400 \
--model_dir=model \
--output_graph=pola_retrained.pb \
--output_labels=pola_retrained_labels.txt \
--tfhub_module https://tfhub.dev/google/imagenet/mobilenet_v1_100_224/quantops/feature_vector/1 \
--image_dir=flower_photos
Примечание: я могу успешно протестировать переобученную модель, используя label_image.py
скрипт.
Я перевожу переобученную модель на свою tflite
формат:
toco \
--graph_def_file=pola_retrained.pb \
--input_format=TENSORFLOW_GRAPHDEF \
--output_format=TFLITE \
--output_file=mobilenet_v1_1.0_224.tflite \
--inference_type=FLOAT \
--input_type=FLOAT \
--input_arrays=Placeholder \
--output_arrays=final_result \
--input_shapes=1,224,224,3
Я копирую новую модель и файл меток в приложение для iOS. Я изменяю параметры приложения в CameraExampleViewController.mm
следующее:
// These dimensions need to match those the model was trained with.
const int wanted_input_width = 224;
const int wanted_input_height = 224;
const int wanted_input_channels = 3;
const float input_mean = 128.0f;
const float input_std = 128.0f;
const std::string input_layer_name = "input";
const std::string output_layer_name = "final_result";
Приложение вылетает. Индекс распознанного объекта находится за пределами диапазона обучаемых объектов. Уровень достоверности выше 1.
0 ответов
Пример Tensorflow Lite Camera жестко кодирует размер выходного тензора в 1000
, Если вы протестируете пример с переобученной моделью, имеющей меньшее количество выходов, приложение iOS вылетает. Замените следующий код в CameraExampleViewController.mm
:
const int output_size = 1000;
с:
// read output size from the output sensor
const int output_tensor_index = interpreter->outputs()[0];
TfLiteTensor* output_tensor = interpreter->tensor(output_tensor_index);
TfLiteIntArray* output_dims = output_tensor->dims;
assert(output_dims->size == 2);
const int output_size = output_dims->data[1]-output_dims->data[0];
Приведенный выше код решает проблему путем считывания выходного размера из выходных измерений модели. Соответствующий PR был представлен.