С каждым днем ​​наш мир становится все более мобильным, по всему миру распространяется более 2 миллиардов смартфонов. Таким образом, мобильная разработка может охватить все уголки и аспекты современного мира. Это в равной степени верно и в отношении машинного обучения. Создание моделей машинного обучения, которые мы можем использовать на мобильных устройствах, откроет бесконечные возможности для творчества, автоматизации и эффективности. Но между мобильной разработкой и машинным обучением существует значительный разрыв в знаниях.

Не беспокоиться! Немного познакомившись с TensorFlow и понимая, как использовать такие инструменты, как ML Kit Firebase, вы можете довольно легко создавать собственные модели машинного обучения для мобильных устройств.

Представьте себе предложения в приложении, медицинские изображения на устройстве или фото / видео редакторы на базе машинного обучения. Чтобы раскрыть эти возможности (и многие другие потенциально), давайте начнем с интеграции модели машинного обучения в мобильное приложение.

ML Kit: обзор

В 2018 году Google выпустил ML Kit, свою платформу для поддержки моделей машинного обучения для мобильных устройств. Просто интегрировав ML Kit, можно довольно легко получить доступ к возможностям предварительно обученных моделей в приложениях для Android и iOS.

ML Kit является частью экосистемы Firebase и содержит набор API-интерфейсов моделей машинного обучения, которые предлагают готовые модели для обнаружения лиц, сканирования штрих-кода, распознавания текста, маркировки изображений, интеллектуального ответа и идентификации языка. ML Kit также поддерживает интеграцию пользовательских моделей (модели TensorFlow Lite).

Все эти API-интерфейсы могут работать в автономном режиме, который предоставляет вам функции модели машинного обучения без постоянного подключения к Интернету. Чтобы подробнее узнать о других преимуществах машинного обучения на устройстве, ознакомьтесь с этим подробным обзором:



Несмотря на то, что ML Kit поставляется с этими предварительно обученными моделями, могут быть некоторые особые варианты использования, которые вы хотите реализовать, или, возможно, вы уже обучили модель на TensorFlow, которую хотите развернуть на мобильном устройстве.

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

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

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

Машинное обучение способно по-настоящему изменить использование такого приложения (или приложений), как это. Прежде чем мы перейдем к коду, давайте более подробно рассмотрим некоторые из конкретных преимуществ.

Интеграция модели машинного обучения с мобильными приложениями обеспечивает:

Более низкая стоимость

Машинное обучение на устройстве может сэкономить тысячи долларов как разработчикам, так и пользователям. Для внешней консультации по вопросам здоровья пациентам, возможно, не придется обращаться к врачу по определенным вопросам и условиям, что может сэкономить много денег. Разработчику не нужно поддерживать облако или сервер для обработки машинного обучения. Это беспроигрышная ситуация.

Конфиденциальность данных

Одной из наиболее важных проблем, связанных с решениями AI в сфере здравоохранения, сейчас является Конфиденциальность данных. При обработке данных на устройстве данные не отправляются на сервер или в облако для обработки. Таким образом, меньше шансов утечки и потери данных. Это может иметь большое значение для обеспечения соответствия HIPAA и другим правилам конфиденциальности.

Меньшая задержка

На устройстве модель машинного обучения может обеспечить более быстрые (и при этом точные) результаты. Высокая задержка может снизить использование приложения, поскольку пользователи могут потерять интерес. Поскольку удаленная обработка модели может быть временами медленной, а с помощью чего-то вроде диагностики в реальном времени, практикующим специалистам может потребоваться мгновенная обратная связь. Эта комбинация точности и беспрепятственного вывода может привести к лучшему взаимодействию с UI / UX.

Не требуется подключение к Интернету

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

Более актуальные предложения

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

Для такого рода пользовательских сценариев использования разработчики, работающие с ML Kit, могут использовать TensorFlow Lite для интеграции пользовательских моделей в мобильные устройства. Давайте сами построим его.

Что такое TensorFlow Lite?

TensorFlow Lite - это платформа глубокого обучения с открытым исходным кодом, предоставляемая TensorFlow для создания облегченных моделей для мобильных устройств. Он позволяет запускать обученные модели как на iOS, так и на Android.

Как обучить собственную модель

В этом процессе есть несколько основных шагов, которые нам необходимо реализовать, чтобы построить нашу собственную модель TensorFlow Lite.

Примечание. Обучение модели может занять много времени и потребовать большого количества данных. К счастью, мы можем сократить этот процесс. Нам на помощь приходит трансферное обучение.

Что такое трансферное обучение?

Трансферное обучение - это метод машинного обучения, при котором модель, разработанная для одной задачи, повторно используется в качестве отправной точки для модели для второй задачи.

Давайте посмотрим на пример:

В нашем случае мы будем использовать классификацию изображений, чтобы предсказать породы собак. Для этого мы будем использовать предварительно обученную модель. Архитектура MobileNet и InceptionV3 хорошо подходят для мобильных устройств. Чтобы обучить и протестировать нашу модель, я предоставлю набор данных о собаках, загруженный из Интернета.

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

Предварительные требования:

Установите TensorFlow, чтобы запустить этот пример. Вам также необходимо убедиться, что PILLOW установлен:

pip3 install --user --upgrade tensorflow
pip3 install PILLOW

Шаг 1. Загрузка набора данных

Набор данных: http://vision.stanford.edu/aditya86/ImageNetDogs/

К счастью, мне не пришлось рисковать и делать тысячи фотографий разных пород собак, чтобы начать работу. Вместо этого я загрузил набор данных по указанному выше URL-адресу, который содержит 20 850 изображений 120 пород собак со всего мира. Набор данных был построен с использованием изображений и аннотаций из ImageNet.

Шаг 2. Переобучение модели

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

  1. MobileNet_2.0
  2. Inception_v3

С MobileNet_2.0 мне потребовалось около 30 минут на MacBook Pro с 8 ГБ ОЗУ, а точность модели составила 83%; однако с Inception V3 обучение длилось около 45 минут, а точность составила 89,5%.

Почему я выбрал модель MobileNet_v2 вместо Inception_v3.

1. Он легкий. Размер модели MobileNet: 24,9 МБ; Размер Inception_v3: 88,0 МБ

2. Это быстро. Скорость обнаружения MobileNet: 203 мс; Скорость обнаружения Inception_v3: 2304 мс

Два основных скрипта, которые нам понадобятся для переобучения и тестирования модели, можно найти в TensorFlow Hub. Получите сценарии, выполнив следующее:

У нас есть оба сценария, поэтому мы готовы переобучить нашу модель MobileNet и протестировать только что сгенерированный график.

В tfhub_module, указанном в команде, используется реализация mobilenet_v2 в TF-Slim с множителем глубины 1,4 и размером ввода 224x224 пикселей. Поэтому мы будем указывать размер изображения 224x224 при использовании модели TensorFlow Lite в нашем мобильном приложении.

Шаг 3. Протестируйте нашу модель с изображением

Шаг 4: (Самый важный шаг) Преобразование нашей модели в TensorFlow Lite с помощью tflite_convert

Начиная с TensorFlow 1.9 преобразование модели работает через TFLiteConverter. До этого он назывался TOCO или «Оптимизирующий конвертер TensorFlow Lite». Этот инструмент используется для оптимизации графиков TensorFlow для работы на мобильных устройствах.

Модели TensorFlow работают с protobuff, тогда как модели TensorFlow Lite работают с FlatBuffers. Вот почему нам нужен инструмент преобразования.

Примечание. При выполнении этого шага я обнаружил ошибку с input_array и output_array. Я решил это, определив тип ввода и вывода с помощью TensorBoard. Добавлены шаги на StackOverflow: Ответить

Может быть два типа вывода: QUANTIZED_UNIT8 и FLOAT. Флаг обычно используется для взятия растрового изображения в качестве ввода, но требует вывода с плавающей запятой.

Визуализация производительности модели

Теперь, когда наша модель готова, давайте визуализируем, как наша модель работает:

Шаг 5. Встраивание модели .tflite / .lite в наше приложение

Теперь, когда наша пользовательская модель TensorFlow Lite готова, давайте интегрировать ее в приложение для Android и использовать с ML Kit. Чтобы использовать ML Kit, нам нужно создать проект Firebase (Firebase console).

Чтобы начать работу с приложением для Android, нам нужно выполнить несколько шагов:

1. Добавьте google_services.json, созданный из консоли firebase, в приложение.

2. Добавьте следующие зависимости.

3. Включите API ML Kit из Google Cloud Platform для своего проекта.

4. Добавьте mobilenet_v2.tflite и labels.txt в каталог ресурсов.

5. Инициализируйте переменные Firebase:

6. Чтобы классифицировать изображение, нам нужно преобразовать Bitmap в ByteBuffer и передать его нашей базе firebase interpreter, которую мы инициализировали выше, а затем она будет обрабатываться с помощью локальной модели TensorFlow Lite.

Чтобы опробовать эту и другие функции ML Kit, загляните в этот репозиторий. На этот код есть ссылка в пользовательском классификаторе быстрого запуска Firebase.

Результаты и идеи, полученные мной во время обучения модели:

  1. Вы должны хорошо знать набор данных, который собираетесь классифицировать. Обязательно обратите внимание на размер изображения, тип ввода, тип вывода, т.е. FLOAT or QUANTIZED_UINT8.
  2. Обязательно используйте тот же размер изображения в коде приложения и при повторном обучении модели.
  3. Помните о своем tflite_convert пути, потому что иногда он конфликтует с предыдущей версией TensorFlow (если она установлена).
  4. Если ваша модель Inception_v3, то размер вашего изображения будет 299, а ваш input_layer будет «Mul»

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

Использованная литература:







Примечание редактора. Heartbeat - это онлайн-публикация и сообщество, созданное авторами и посвященное предоставлению первоклассных образовательных ресурсов для специалистов по науке о данных, машинному обучению и глубокому обучению. Мы стремимся поддерживать и вдохновлять разработчиков и инженеров из всех слоев общества.

Являясь независимой редакцией, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по данным и группам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим участникам и не продаем рекламу.

Если вы хотите внести свой вклад, отправляйтесь на наш призыв к участникам. Вы также можете подписаться на наши еженедельные информационные бюллетени (Deep Learning Weekly и Comet Newsletter), присоединиться к нам в » «Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов, событий и гораздо больше, что поможет вам быстрее создавать лучшие модели машинного обучения.