Внедрение модели машинного обучения для мобильных устройств на 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 для получения ресурсов, событий и гораздо больше, что поможет вам быстрее создавать лучшие модели машинного обучения.