Используйте .tflite с iOS и графическим процессором - PullRequest
0 голосов
/ 01 мая 2020

Я создал новую модель tflite на основе MobilenetV2 . Он хорошо работает без квантования с использованием процессора на iOS. Должен сказать, что команда TensorFlow проделала отличную работу, большое спасибо.

К сожалению, существует проблема с задержкой. Я использую iPhone5s для тестирования моей модели, поэтому у меня есть следующие результаты для CPU:

  1. 500 мс для MobilenetV2 с входным изображением 224 * 224.

  2. 250-300 мс для MobilenetV2 с входным изображением 160 * 160.

Я использовал следующий модуль 'TensorFlowLite', '~> 1.13.1'

Этого недостаточно Итак, я прочитал документацию TF, связанную с оптимизацией (квантование после обучения). Я полагаю, мне нужно использовать квантование Float16 или UInt8 и делегат GPU (см. https://www.tensorflow.org/lite/performance/post_training_quantization). Я использовал Tensorflow v2.1.0 для обучения и квантования моих моделей.

  1. Квантование весов Float16 (я использовал модель MobilenetV2 после квантования Float16)

https://github.com/tensorflow/examples/tree/master/lite/examples/image_segmentation/ios

  • pod 'TensorFlowLiteSwift', '0.0.1-nightly'

Нет ошибок, но модель не работает

  • pod 'TensorFlowLiteSwift', '2.1.0'

2020-05-01 21: 36: 13.578369 + Сегментация TFL 0300 [6367: 330410 ] Инициализированная среда выполнения TensorFlow Lite. 2020-05-01 21: 36: 20.877393 + 0300 Сегментация TFL [6367: 330397] Выполнение буфера команд было прервано из-за ошибки во время выполнения. Вызванная ошибка зависания графического процессора (код IOAF 3)

Полное целочисленное квантование весов и активаций

pod 'TensorFlowLiteGpuExperimental'

Пример кода: https://github.com/makeml-app/MakeML-Nails/tree/master/Segmentation%20Nails

Я использовал модель MobilenetV2 после квантования uint8.

GpuDelegateOptions options;
    options.allow_precision_loss = true;
    options.wait_type = GpuDelegateOptions::WaitType::kActive;

    //delegate = NewGpuDelegate(nullptr);
    delegate = NewGpuDelegate(&options);

    if (interpreter->ModifyGraphWithDelegate(delegate) != kTfLiteOk)

Сегментация Live [6411: 331887] [DYMTLInitPlatform] инициализация платформы выполнена успешно. Загруженная модель 1, разрешенный репортер. 2 '

Можно ли как-то использовать квантованную модель MObilenetV2 на IOS? Надеюсь, я допустил ошибку :) и это возможно.

С уважением, Дмитрий

Ответы [ 2 ]

0 голосов
/ 10 мая 2020

Это ссылка на выпуск GITHUB с ответами: https://github.com/tensorflow/tensorflow/issues/39101

0 голосов
/ 09 мая 2020

извините за устаревшую документацию - делегат GPU должен быть включен в TensorFlowLiteSwift 2.1.0. Однако похоже, что вы используете C API, поэтому в зависимости от TensorFlowLiteC будет достаточно.

MobileNetV2 работает со средой выполнения TFLite в iOS, и, если я правильно помню, у него нет PAD op. Можете ли вы прикрепить файл вашей модели? С предоставленной информацией немного трудно понять, что является причиной ошибки. В качестве проверки работоспособности вы можете получить квантовую / неквантовую версию MobileNetV2 отсюда: https://www.tensorflow.org/lite/guide/hosted_models

Для квантованной модели int8 - делегат GPA afaik работает только для FP32 и (возможно) Входы FP16.

...