Пример Tensorflow Lite iOS Camera не работает с переобученной моделью MobileNet - PullRequest
0 голосов
/ 18 ноября 2018

Я пытаюсь запустить пример камеры Tensorflow Lite с переобученной моделью 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.

1 Ответ

0 голосов
/ 05 декабря 2018

Пример камеры Tensorflow Lite жестко кодирует размер выходного тензора до 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 отправлен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...