"Машинное обучение"

Тестирование модели классификации изображений TensorFlow Lite

Убедитесь, что ваша модель машинного обучения правильно работает в мобильном приложении (часть 1)

Изначально этот пост был опубликован в thinkmobile.dev - блоге о внедрении интеллектуальных решений в мобильные приложения (ссылка на статью).

Ищете, как автоматически протестировать модель TensorFlow Lite на мобильном устройстве? Проверьте 2-ю часть этой статьи.

Построение моделей TensorFlow Lite и их развертывание в мобильных приложениях со временем становится проще. Но даже несмотря на то, что библиотеки и API-интерфейсы проще реализовать, необходимо выполнить как минимум три основных шага:

  1. Построить модель TensorFlow,
  2. Преобразуйте его в модель TensorFlow Lite,
  3. Реализуйте в мобильном приложении.

Существует набор информации, которую необходимо передать между этими шагами - форма ввода / вывода модели, формат значений и т. Д. Если вы их знаете (например, благодаря методам и инструментам визуализации, описанным в этом сообщении блога), есть еще один проблема, с которой борются многие инженеры-программисты.

Почему модель, реализованная в мобильном приложении, работает иначе, чем ее аналог в среде Python?

Инженер-программист

В этом посте мы попытаемся визуализировать различия между TensorFlow, TensorFlow Lite и квантованным TensorFlow Liteпосттренировочным квантованием). модели. Это должно помочь нам при отладке ранних моделей, когда что-то действительно идет не так.
Здесь мы сосредоточимся только на стороне TensorFlow. Следует помнить, что он не касается правильности реализации мобильного приложения (например, предварительной обработки растровых изображений и преобразования данных). Об этом будет рассказано в одном из будущих постов.

Важное замечание - код, представленный здесь и в записной книжке Colab, демонстрирует лишь некоторые основные идеи для визуального сравнения моделей TensorFlow и TensorFlow Lite (на небольшом пакете данных). Он не проверяет их на скорость и другие факторы производительности, а также не выполняет каких-либо точных параллельных перекрестных сравнений.

Подготовка модели TensorFlow

Если у вас уже есть модель TF как SavedModel , вы можете пропустить этот абзац и перейти непосредственно к разделу Загрузить модель TensorFlow из SavedModel.

В качестве примера мы построим простую модель TensorFlow, которая классифицирует цветы и построена на основе MobileNet v2 благодаря технике передачи обучения. Код был взят из бесплатного курса TensorFlow от Udacity, который я настоятельно рекомендую всем, кто хочет начать работать с этим фреймворком машинного обучения (независимо от того, является ли его инженер по машинному обучению или инженер-программист, реализующий решения машинного обучения на стороне клиента). .

Вот структура модели:

Для обучения мы будем использовать Keras ImageDataGenerators и пример набора данных, предоставленный Google:

Точность после 10 эпох обучения ~ 87%. Для наших нужд это нормально 👌.

Когда модель будет готова, мы экспортируем ее в формат SavedModel:

Загрузить модель TensorFlow из SavedModel

Теперь, когда у нас есть модель TensorFlow, сохраненная в формате SavedModel, давайте загрузим ее. Если вы не хотите тратить время на построение и обучение своей модели, вы можете начать отсюда.

Проверить прогноз модели

Теперь мы сделаем пакет из 32 изображений из набора данных проверки и запустим процесс вывода для загруженной модели:

Для визуализации данных воспользуемся библиотекой Pandas. Вот что мы можем увидеть, когда печатаем значения через tf_pred_dataframe.head().

Каждая строка здесь представляет результаты прогноза для отдельного изображения (в нашем DataFrame 32 строки). Каждая ячейка содержит метку достоверности этого изображения. Сумма всех значений в строке равна 1 (поскольку последний слой нашей модели использует функцию активации Softmax).

Мы также можем распечатать эти изображения и прогнозы:

Код сверху покажет:

Модели TensorFlow Lite

Преобразуйте модель в TensorFlow Lite

Теперь мы создадим две модели TensorFlow Lite - неквантованную и квантованную, на основе созданной нами.
Из-за характера TensorFlow 2.0 нам нужно будет преобразовать модель TensorFlow в конкретную функцию, а затем выполнить преобразование в TensorFlow Lite (подробнее об этом здесь).

В результате мы получим два файла: flowers. tflite (стандартная модель TensorFlow Lite) и flowers_quant.tflite (квантованная модель TensorFlow Lite с квантованием после обучения).

Запускайте модели TFLite

Теперь давайте загрузим модели TFLite в представление интерпретатора (tf.lite.Interpreter), чтобы мы могли запустить на нем процесс вывода.

Прежде чем мы выполним вывод, нам нужно изменить размеры входных и выходных тензоров, чтобы принять пакет из 32 изображений:

Мы снова помещаем данные в Pandas DataFrame.
Вот что мы видим для tflite_pred_dataframe.head():

Точно такие же операции проделаем и для второй модели - flowers_quant.tflite.
Предварительный просмотр DataFrame для нее:

Сравнение результатов

Теперь мы можем объединить DataFrames из квантовых моделей TF, TF Lite и TF Lite, чтобы провести визуальное сравнение между таблицами. Вдохновение для этого кода было взято из StackOverflow (ссылка на ответ). 🙂

В результате мы видим DataFrame с выделенными строками, которые различаются между моделями TF / TF Lite.

Как мы видим, в большинстве случаев прогнозы различаются между всеми моделями, обычно небольшими факторами.
Прогнозы с высокой степенью достоверности между моделями TensorFlow и TensorFlow Lite очень близки друг к другу (в некоторых случаях они даже похожи). Квантованная модель выделяется больше всего, но это затраты на оптимизацию (вес модели в 3–4 раза меньше).

Чтобы сделать результаты прогнозов еще более удобочитаемыми, давайте упростим DataFrames, чтобы отображать только прогноз с наивысшим баллом и соответствующий ярлык.

Теперь каждый квант DataFrame - TF, TFLite и TFLite показывает только индекс метки и достоверность для этой метки.

Давайте объединим DataFrames и выделим различия между ними:

Как видите, несмотря на различия, модель TFLite обычно указывает на одну и ту же метку для изображения (в нашем пакете изображений для проверки). Различия в достоверности обычно очень малы.
Квантованная модель TF Lite здесь не так хороша. Есть большие различия в некоторых оценках достоверности, а также в некоторых случаях эта модель указывает на разные метки.

Вот параллельное сравнение квантовых моделей TFLite и TFLite для нашей партии изображений:

Теперь нам решать, стоит ли уменьшение размера модели (в нашем случае в 3–4 раза).

Следующие шаги

В этом сообщении в блоге мы провели параллельное сравнение моделей TensorFlow, TensorFlow Lite и квантованных моделей TensorFlow Lite. Мы могли заметить небольшие различия между TF и ​​TFLite и немного больше на TFLite Quant. Но это еще не все, что мы можем проверить.

Эти модели были проверены в одной среде (ноутбук Colab или Jupyter), но проблемы могут возникнуть и в дальнейшем - при реализации мобильного приложения. Например. при обработке изображений или преобразовании данных.

В будущих публикациях блога мы подробно рассмотрим, что мы можем сделать для проверки правильности реализации модели TF Lite непосредственно на мобильном устройстве.

Исходный код

Исходный код этого сообщения в блоге доступен на Github (блокнот Colab и мобильное приложение в будущем): https://github.com/frogermcs/TFLite-Tester

Записную книжку со всем кодом, представленным в этом посте, можно запустить здесь: https://colab.research.google.com/github/frogermcs/TFLite-Tester/blob/master/notebooks/Testing_TFLite_model.ipynb



Спасибо за прочтение! 🙂

Пожалуйста, поделитесь своим мнением ниже. 👇

Ищете, как автоматически протестировать модель TensorFlow Lite на мобильном устройстве? Проверьте 2-ю часть этой статьи.



Автоматизируйте тестирование реализации модели TensorFlow Lite« Подумайте, мобильно!
Убедитесь, что ваша модель машинного обучения правильно работает в мобильном приложении (часть 2) Это вторая статья о тестовой машине … thinkmobile.dev »



Изначально этот пост был опубликован в thinkmobile.dev - блоге о внедрении интеллектуальных решений в мобильные приложения (ссылка на статью).