"Машинное обучение"
Тестирование модели классификации изображений TensorFlow Lite
Убедитесь, что ваша модель машинного обучения правильно работает в мобильном приложении (часть 1)
Изначально этот пост был опубликован в thinkmobile.dev - блоге о внедрении интеллектуальных решений в мобильные приложения (ссылка на статью).
Ищете, как автоматически протестировать модель TensorFlow Lite на мобильном устройстве? Проверьте 2-ю часть этой статьи.
Построение моделей TensorFlow Lite и их развертывание в мобильных приложениях со временем становится проще. Но даже несмотря на то, что библиотеки и API-интерфейсы проще реализовать, необходимо выполнить как минимум три основных шага:
- Построить модель TensorFlow,
- Преобразуйте его в модель TensorFlow Lite,
- Реализуйте в мобильном приложении.
Существует набор информации, которую необходимо передать между этими шагами - форма ввода / вывода модели, формат значений и т. Д. Если вы их знаете (например, благодаря методам и инструментам визуализации, описанным в этом сообщении блога), есть еще один проблема, с которой борются многие инженеры-программисты.
Почему модель, реализованная в мобильном приложении, работает иначе, чем ее аналог в среде 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 - блоге о внедрении интеллектуальных решений в мобильные приложения (ссылка на статью).