Хотите узнать, как создать модель машинного обучения и запустить ее на телефоне? В первой части поста показано, как легко создать модель Keras с использованием TensorFlow. В следующей части рассказывается, как обучить модель и преобразовать ее в TensorFlow Lite. В последней части рассказывается о создании простого Android-приложения, которое запускает модель.

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

Настройка Keras

Для использования Keras вам понадобится Python. Я бы рекомендовал использовать Python3, но в целом все, что мы собираемся делать, может работать даже с Python2.

brew install python3

После того, как вы установили Python, я бы рекомендовал установить pipenv, который упрощает работу с виртуальными средами Python.

pip install pipenv

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

mkdir keras_sample
cd keras_sample
pipenv --three
pipenv shell

Если все прошло хорошо, вы должны увидеть в командной строке вывод, аналогичный этому.

Creating a Pipfile for this project…
Launching subshell in virtual environment…
bash-3.2$  . ~/.local/share/virtualenvs/keras_sample-uJxZiIeS/bin/activate
(keras_sample) bash-3.2$

Прежде чем мы продолжим, необходимо установить еще несколько библиотек. Я использую записную книжку Jupyter для следующих примеров. Тем не менее, примеры должны легко запускаться из командной строки или PyCharm.

pip install jupyter
pip install pandas
pip install matplotlib
pip install sklearn
pip install keras
pip install tensorflow
pip install toco

На всякий случай, если вы тоже хотите использовать записную книжку Jupyter, вот команда, как ее запустить.

jupyter notebook &

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

Ограничения на операции TensorFlow Lite

Темная сторона стремления к использованию TensorFlow lite заключается в том, что вам нужно использовать ограниченное подмножество операций Tensorflow. Возможно, вам придется переписать свои модели таким образом, чтобы они не использовали RNN или LSTM. Полный список совместимости доступен здесь. Если вы хотите, чтобы ваша модель была ускорена с помощью GPU как на iOS, так и на Android, то, к сожалению, существует еще больше ограничений на удобные операции. С другой стороны, если вы полностью заполните ограничения для графического процессора, результатом будет на 20–50% более быстрое выполнение логических выводов как на Android, так и на iOS.

Модель Кераса

Надеюсь, эта часть будет очень простой, так как пример модели, который я делюсь здесь, представляет собой своего рода «Hello World!» один. Первоначально я думал об использовании некоторых хорошо известных наборов данных, но понял, что это отнимет у меня немного удовольствия от первоначальной настройки.

Мы можем создать простую модель с сгенерированными данными. Это будет предсказывать результаты только на основе этих данных, поэтому «реальные» результаты могут не сработать.

У этой модели есть возможности для улучшения, но она показывает достаточно того, что я хочу продемонстрировать. Несмотря на неточность модели, я считаю, что она предоставит вам достаточно места для игры. Вы можете использовать его, чтобы лучше понять, как небольшие изменения могут повлиять на модель. Примеры задач, которые вы можете попробовать, чтобы увидеть, как можно повлиять на точность модели:

  • уменьшить размер сгенерированного обучающего набора с 50К до 10К
  • увеличить количество единиц с 16 до 128
  • добавить еще один слой к модели

Конверсия модели

Мы настроили нашу среду, создали инструмент для генерации данных и создали модель в предыдущих главах. Файл сохраненной модели «training_model.h5» должен быть доступен в вашей папке. Я рекомендую вам взглянуть на файл, несмотря на то, что он является двоичным файлом, поскольку вы увидите, что определение графа обычно читается. Это может быть полезно, если вы хотите узнать что-нибудь о модели, полученной вами от другой команды, например. независимо от того, является ли ввод числа с плавающей точкой или целым числом.

Команда для преобразования модели Keras в модель TensorFlow lite:

toco \
  --output_file=trained_model.tflite\
  --keras_model_file=trained_model.h5

Я использую toco, но вы можете получить те же результаты с помощью инструмента tflite_convert или python API. Также верю, что вы будете очень удивлены размерами переделанной модели. Исходная модель Keras simple имеет размер 14 КБ, а версия tflite - только 1,4 КБ.

Я настоятельно рекомендую проверить также другие параметры toco / tflite_convert_tool. Особенно интересным может быть квантование, которое, проще говоря, меняет веса FLOAT на UINT. Этот шаг снизит точность в среднем на 1–8%. В то же время это уменьшит размер вашей модели примерно на 50–75%. Это может быть особенно полезно на мобильном телефоне, где вы загружаете в память всю модель.

Приложение для Android

Руководство по установке Android Studio (AS) можно найти здесь: https://developer.android.com/studio/install.

  • После того, как вы установили AS, откройте его, выберите «Создать новый проект» и выберите «Пустое действие».
  • Выберите «Пустое занятие».

После открытия проекта перейдите к app / build.gradle и следующей зависимости. Со временем вы можете заменить версию «1.13.1» на «0.0.0-nightly», что приведет к загрузке последней доступной ночной сборки.

implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly'

Следующим шагом является создание папки «assets», в которую мы поместим наш файл модели training_model.tflite.

<project folder>/app/src/main/assets

Когда у нас есть модель в нашем каталоге ресурсов, все, что остается, - это добавить код, который будет ее запускать. Для этого просто перейдите к макету вашего основного действия, который в моем случае является «activity_main.xml», и убедитесь, что у вас есть Textview с идентификатором android: id = «@ + id / результат». Следующий шаг - это сам код активности, который вы можете взять отсюда:

Настройка вызова проста, если вы знаете, какова форма ввода и было ли применено квантование. Форма ввода означает количество строк, столбцов, размеров (например, RGB для изображений) или типов. Основные выходные данные представлены в виде значения прогноза и оценки прогноза. Образец приложения доступен в моем репозитории G itHub. После того, как вы закончите настройку и приложение будет запущено, вы должны увидеть на своем экране точно такой же результат, который вы видели в питоне непосредственно перед сохранением модели.

Я показал вам в упрощенной форме, как определить модель машинного обучения и процессы, необходимые для подготовки модели к запуску на мобильном телефоне. Я постарался сохранить примеры тестирования как можно более похожими, чтобы вам было легко распознать сопоставление модели Keras с настройкой приложения Android. Да, существуют некоторые ограничения / компромиссы, чтобы упростить процесс. Тем не менее, если вы можете вписать свою модель в эти ограничения, вам должно понравиться запускать модели в своем приложении. В следующем посте я покажу вам, как справляться с ситуациями, когда TF Lite слишком ограничивает.