Внедрение модели машинного обучения для мобильных устройств на Android
Следуя моему сообщению в блоге об обучении модели TensorFlow Lite с помощью AutoML Vision Edge, это сообщение в блоге направлено на то, чтобы научить вас, как загрузить эту модель .tflite в приложение для Android и выполнить логический вывод (т. Е. Прогнозы) на нем.
Если вы не читали предыдущий блог об обучении вашей собственной модели TensorFlow Lite, я настоятельно рекомендую вам сделать это, прежде чем продолжить этот блог:
Пролог
В настоящее время я обучаю несколько моделей машинного обучения, чтобы использовать их в моем приложении AfterShoot, и хотя AutoML Vision Edge позволяет нам загружать изображения и видеть, насколько хорошо модель работает, мне все равно нужно загрузить и встроить обученную модель в мобильное устройство для практического использования.
В этом блоге я расскажу, как это сделать в приложении для Android. В частности, мы загрузим квантованную версию модели TFLite (подробнее об этом позже). Давайте начнем!
Шаг 1. Загрузите обученную модель из AutoML Vision Edge
Первый шаг - загрузить обученную .tflite
модель в вашу локальную систему. Вы можете сделать это в консоли Firebase, нажав кнопку «Использовать модель» на странице своей модели, а затем выбрав вариант «Загрузить» обученную модель.
После нажатия кнопки "Загрузить" у вас будет zip-файл, содержащий ваш .tflite
файл, и файл dict.txt
, содержащий метки, на которых обучается ваша модель.
Шаг 2: Узнайте входные и выходные параметры модели
Следующий шаг - выяснить, какой тип ввода ожидает ваша модель и какой результат она вернет в конечном итоге после обработки входного изображения.
Самый простой способ сделать это - перейти в Netron и загрузить туда свою модель.
Входные и выходные данные для моей модели выглядят следующим образом:
По сути, это означает, что моя модель ожидает на входе изображение RGB размером 224x224 пикселей и возвращает двумерный массив, содержащий одну строку, которая сама имеет массив из 3 элементов, каждый из которых содержит целое число.
Шаг 3. Добавьте модель и TensorFlow в свое приложение r
На шаге 3 добавьте в приложение файл модели и зависимость TensorFlow.
Чтобы добавить модель, откройте Android Studio и выберите «Файл -› Новая папка - ›Папка с активами». Это должно создать папку ресурсов в вашем приложении - переместите модель tflite
в эту папку вместе с файлом dict.txt
, содержащим ваши ярлыки.
После этого он должен выглядеть так:
После этого откройте файл build.gradle
вашего приложения и добавьте следующую зависимость в свой dependencies
блок:
Шаг 4. Загрузите файл модели из ресурсов
Чтобы действительно использовать модель, вам сначала нужно загрузить ее из папки с ресурсами. Для этого можно использовать следующий метод:
Вышеупомянутый метод считывает нашу модель tflite
и возвращает объект MappedByteBuffer
. Затем мы можем использовать этот объект для создания нашего интерпретатора следующим образом:
Шаг 5: Подготовка ввода
Прежде чем передать какое-либо изображение этому интерпретатору, важно соответствующим образом подготовить входные данные.
Поскольку модель здесь принимает одно изображение RGB с размерами 224 x 224 pixels
, нам нужно изменить размер наших входных растровых изображений, прежде чем мы выполним для них какой-либо вывод.
Прежде чем мы продолжим, давайте сначала инициализируем несколько переменных (необходимость в этих переменных объясняется в комментариях ниже):
Теперь давайте создадим вспомогательную функцию, которая преобразует входное изображение в ByteBuffer, что по сути является более оптимизированным способом хранения байтовых массивов. Вы можете узнать больше о ByteBuffers здесь:
Вот как выглядит метод:
Обратите внимание, что этот метод немного отличается от того, что вы найдете в других руководствах по загрузке и запуску модели TensorFlow Lite.
Это связано с тем, что AutoML Vision Edge генерирует квантованные модели TFLite вместо стандартной модели .tflite. Так как квантование преобразует 32-битные числа с плавающей запятой в 8-битные целые числа, результирующая модель потребляет меньше памяти и ЦП. Следовательно, квантованные модели меньше по размеру и работают лучше, чем типичные модели TensorFlow Lite, с минимальным ухудшением точности модели.
Вы можете узнать больше о преимуществах использования квантованной модели ниже:
Наконец, давайте также изменим размер растрового изображения, чтобы оно составляло 224 x 224
пикселей. Это можно сделать, как показано в приведенном ниже коде:
Шаг 6: передайте ввод интерпретатору и получите вывод
Последний шаг - передать подготовленный выше ввод интерпретатору и извлечь из него вывод:
Чтобы распечатать результат, вы можете сделать следующее:
Поскольку вывод должен был быть двухмерным массивом, в приведенном выше операторе Log
заключены двойные квадратные скобки []
.
Однако обратите внимание, что вывод, который вы здесь получаете, подписан, поэтому вы можете получить здесь некоторые отрицательные значения.
Чтобы преобразовать эти отрицательные значения в положительные, вы можете просто преобразовать байты в их положительное представление следующим образом:
resultArray[0][0] & 0xFF
После этого мы должны получить число от 0 до 255 в байтовой форме. Вот как может выглядеть ваша вероятность:
val value = labelProbArray[0][i] & 0xFF
Если вы хотите получить вероятности предсказания, вы можете разделить каждый из выходных данных на 255, и это должно дать вам число от 0 до 1, то есть вероятность того, что каждое изображение будет либо переэкспонированным, либо хорошим, либо недоэкспонированным.
Вы можете найти весь код в репозитории GitHub для приложения AfterShoot здесь:
Найдите файл ProgressActivity.kt
, чтобы найти приведенный выше код.
Вот и все! Теперь вы знаете, как обучать, загружать и запускать квантованную модель TFLite, если ваше приложение. Нет ничего проще, чем добавить функции машинного обучения в ваши приложения, поэтому смело смотрите, как ваше существующее приложение может использовать TensorFlow в своих интересах.
Спасибо за внимание! Если вам понравилась эта история, пожалуйста, нажмите 👏 кнопку и поделитесь ею, чтобы помочь другим найти ее! Не стесняйтесь оставлять комментарии 💬 ниже.
Есть отзывы? Подключим в Twitter.
Примечание редактора. Heartbeat - это онлайн-издание и сообщество, созданное авторами и посвященное предоставлению первоклассных образовательных ресурсов для специалистов по науке о данных, машинному обучению и глубокому обучению. Мы стремимся поддерживать и вдохновлять разработчиков и инженеров из всех слоев общества.
Являясь независимой редакцией, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по данным и группам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим участникам и не продаем рекламу.
Если вы хотите внести свой вклад, отправляйтесь на наш призыв к участникам. Вы также можете подписаться на наши еженедельные информационные бюллетени (Deep Learning Weekly и Comet Newsletter), присоединиться к нам в » «Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов, событий и гораздо больше, что поможет вам быстрее создавать лучшие модели машинного обучения.