Первоначально написано для блога TechMagic: https://blog.techmagic.co/custom-image-labeling-is-getting-easier-than-ever/

Самая новая и одна из самых интересных функций Firebase - AutoML.

За последние несколько месяцев Firebase предоставила 2 варианта использования маркировки изображений в мобильных клиентах:

  1. Используйте их собственную предварительно созданную модель, которая может распознавать около 400 категорий, которые работают достаточно хорошо, пока вы не захотите конкретизировать.
  2. Создайте свою собственную модель с помощью TensorFlow Lite и используйте ее в Firebase ML. Подробнее о TensorFlow Lite вы можете прочитать здесь.

Более подробное сравнение можно найти здесь: https://medium.com/@TechMagic/is-firebase-ml-kit-your-choice-42546f24e9a9

Хорошо, если вы здесь, потому что заранее созданная модель - это не совсем то, что нужно вашему бизнесу, а второй вариант с построением вашей собственной модели слишком сложен, и тогда AutoML появляется на сцене. Или AutoML Vision Edge, чтобы быть точным для мобильного использования.

Использование AutoML Vision Edge состоит из двух этапов:

  1. Получение обученной модели из изображений.
  2. Используйте его на устройстве iOS / Android.

Шаг 1. Получение обученной модели из изображений

Чтобы начать работу с AutoML, откройте консоль firebase на вкладке ML Kit. В нем вы можете найти AutoML с пометкой новый. В зависимости от вашего плана вы можете создать один или несколько наборов данных. Кроме того, наборы данных Spark и Flame по-разному хранятся внутри платформы, поэтому, если ваш проект изменит план на Blaze, и вы хотите получить от него все преимущества, рассмотрите возможность использования этого официального руководства по миграции.

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

Первые подводные камни при импорте изображений - в документации указано, что каждое отдельное изображение должно быть меньше 30 МБ, но на самом деле только 5 МБ, иначе вы получите «Внутреннюю ошибку сервера при импорте данных в набор данных». (для архивного подхода) и более описательная ошибка, если вы загружаете изображение.

Кроме того, мне не удалось начать обучение модели с 10 изображениями для каждой метки - появилась ошибка «Загрузите больше изображений, чтобы начать обучение». Собственно, пока я не обновил страницу без кеша.

Итак, у вас есть все необходимые изображения и метки, и вы готовы обучать модель. Действительно интересная особенность - это оценка задержки и размера построенной модели, особенно когда iPhone 8 является самым быстрым из списка, опережая другие устройства Android почти в 3 раза.

Пусть начнется обучение - 1 набор данных, 3 метки, 169 изображений, общего назначения, продолжительность обучения 30 минут.

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

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

Шаг 2. Использование AutoML на мобильных устройствах (Android)

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

Затем нам нужно добавить две зависимости:

dependencies {
  // other dependencies
  implementation 'com.google.firebase:firebase-ml-vision:21.0.0'
  implementation 'com.google.firebase:firebase-ml-vision-automl:17.0.0'
}

В зависимости от вашего пользовательского интерфейса и целей вы можете использовать локальный, удаленный или локальный + удаленный подход.

Для локальной части вы должны были загрузить архив с панели управления Firebase AutoML с этими 3 файлами model.tflite, dict.txt и manifest.json и поместить их в /assets/<model name>.

Для удаленного использования - используйте опцию «Опубликовать» через панель управления Firebase AutoMl.

Тогда вы готовы добавить код:

  1. Зарегистрируйте локальные / удаленные модели в FirebaseModelManager.getInstance()
  2. Создайте экземпляр FirebaseVisionImage из Bitmap, media.Image, ByteBuffer или пути к файлу.
  3. Настроить изображение labelerFirebaseVision.getInstance().getOnDeviceAutoMLImageLabeler(labelerOptions)
  4. (НЕОБЯЗАТЕЛЬНО, но рекомендуется для удаленного доступа) Проверьте, загружена ли удаленная модельFirebaseModelManager.getInstance().downloadRemoteModelIfNeeded(remoteModel)
  5. Предоставьте изображение этикетировщику и подождите несколько миллисекунд, пока не произойдет волшебство labeler.processImage(image)
    .addOnSuccessListener {labels}
    .addOnFailureListener {exception}

Подробный пример кода можно найти на официальной странице.

Резюме

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