TensorFlow Lite в сервисах Google Play (БЕТА)

TensorFlow Lite доступен в API сервисов Google Play в виде общедоступной бета-версии на всех устройствах Android, на которых установлена ​​текущая версия сервисов Play. API позволяет запускать модели машинного обучения (ML) без статического связывания библиотек TensorFlow Lite с вашим приложением, что позволяет:

  • Уменьшите размер вашего приложения
  • Получите улучшенную производительность благодаря последней стабильной версии TensorFlow Lite.

На этой странице представлен краткий обзор того, как использовать новый TensorFlow Lite в API сервисов Google Play в приложении для Android.

Дополнительные сведения о службах Google Play см. на веб-сайте служб Google Play .

Добавьте TensorFlow Lite в свое приложение

Вы можете использовать TensorFlow Lite в API сервисов Google Play, внеся несколько изменений в зависимости вашего модуля приложения, инициализировав новый API и используя определенный класс в качестве объекта интерпретатора. Следующие инструкции содержат более подробную информацию о том, как реализовать API интерпретатора в сервисах Google Play.

Пример приложения

Вы можете просмотреть и протестировать пример реализации TensorFlow Lite в сервисах Google Play в приложении классификации изображений . В этом примере приложение использует TensorFlow Lite в сервисах Play для реализации классификатора изображений.

Использование TensorFlow Lite с API интерпретатора

Вы можете использовать TensorFlow Lite в сервисах Google Play с API интерпретатора. В следующих инструкциях показано, как добавить зависимости, инициализировать TensorFlow Lite, создать экземпляр InterpreterApi и выполнить выводы.

1. Добавьте зависимости проекта

Добавьте следующие зависимости в код проекта вашего приложения, чтобы получить доступ к Play Services API для TensorFlow Lite:

dependencies {
...
    // Tensorflow Lite dependencies for Google Play services
    implementation 'com.google.android.gms:play-services-tflite-java:16.0.0-beta03'
    // Optional: include Tensorflow Lite Support Library
    implementation 'com.google.android.gms:play-services-tflite-support:16.0.0-beta03'
...
}

2. Добавить инициализацию TensorFlow Lite

Инициализируйте компонент TensorFlow Lite API сервисов Google Play перед использованием API TensorFlow Lite:

Котлин

val initializeTask: Task<Void> by lazy { TfLite.initialize(this) }

Ява

Task<Void> initializeTask = TfLite.initialize(context);

3. Создайте интерпретатор и установите параметр времени выполнения

Создайте интерпретатор с помощью InterpreterApi.create() и настройте его для использования среды выполнения сервисов Google Play, вызвав InterpreterApi.Options.setRuntime() , как показано в следующем примере кода:

Котлин

import org.tensorflow.lite.InterpreterApi
import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime
...
private lateinit var interpreter: InterpreterApi
...
initializeTask.addOnSuccessListener {
  val interpreterOption =
    InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
  interpreter = InterpreterApi.create(
    modelBuffer,
    interpreterOption
  )}
  .addOnFailureListener { e ->
    Log.e("Interpreter", "Cannot initialize interpreter", e)
  }

Ява

import org.tensorflow.lite.InterpreterApi
import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime
...
private InterpreterApi interpreter;
...
initializeTask.addOnSuccessListener(a -> {
    interpreter = InterpreterApi.create(modelBuffer,
      new InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY));
  })
  .addOnFailureListener(e -> {
    Log.e("Interpreter", String.format("Cannot initialize interpreter: %s",
          e.getMessage()));
  });

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

Котлин

import androidx.lifecycle.lifecycleScope
...
lifecycleScope.launchWhenStarted { // uses coroutine
  initializeTask.await()
}

Ява

@BackgroundThread
InterpreterApi initializeInterpreter() {
    Tasks.await(initializeTask);
    return InterpreterApi.create(...);
}

4. Делайте выводы

Используя созданный вами объект interpreter , вызовите метод run() , чтобы сгенерировать вывод.

Котлин

interpreter.run(inputBuffer, outputBuffer)

Ява

interpreter.run(inputBuffer, outputBuffer);

Аппаратное ускорение

TensorFlow Lite позволяет повысить производительность вашей модели с помощью специализированных аппаратных процессоров, таких как графические процессоры (GPU). Вы можете воспользоваться преимуществами этих специализированных процессоров, используя аппаратные драйверы, называемые делегатами . Вы можете использовать следующих делегатов аппаратного ускорения с TensorFlow Lite в сервисах Google Play:

  • Делегат графического процессора (рекомендуется) . Этот делегат предоставляется через сервисы Google Play и загружается динамически, как и версии Task API и Interpreter API сервисов Play.

  • Делегат NNAPI — этот делегат доступен как включенная библиотечная зависимость в ваш проект разработки Android и включен в ваше приложение.

Чтобы использовать делегата графического процессора с TensorFlow Lite в сервисах Google Play:

  1. Обновите зависимости проекта, чтобы использовать делегат GPU из Play Services:

    implementation 'com.google.android.gms:play-services-tflite-gpu:16.0.0-beta03'
    
  2. Включите опцию делегирования графического процессора в инициализации TFlite:

    Котлин

          TfLite.initialize(context,
            TfLiteInitializationOptions.builder()
             .setEnableGpuDelegateSupport(true)
             .build())
        

    Ява

          TfLite.initialize(context,
            TfLiteInitializationOptions.builder()
             .setEnableGpuDelegateSupport(true)
             .build());
        
  3. Установите делегат GPU в параметрах интерпретатора для использования DelegateFactory , вызвав addDelegateFactory() в InterpreterApi.Options() :

    Котлин

          val interpreterOption = InterpreterApi.Options()
           .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
           .addDelegateFactory(GpuDelegateFactory())
        

    Ява

          Options interpreterOption = InterpreterApi.Options()
            .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
            .addDelegateFactory(new GpuDelegateFactory());
        

Дополнительные сведения об аппаратном ускорении с помощью TensorFlow Lite см. на странице делегатов TensorFlow Lite .

Миграция с автономного TensorFlow Lite

Если вы планируете перенести свое приложение с автономного TensorFlow Lite на API сервисов Play, ознакомьтесь со следующими дополнительными рекомендациями по обновлению кода проекта вашего приложения:

  1. Просмотрите раздел « Ограничения » на этой странице, чтобы убедиться, что ваш вариант использования поддерживается.
  2. Перед обновлением кода проверьте производительность и точность своих моделей, особенно если вы используете версии TensorFlow Lite до версии 2.1, чтобы у вас была база для сравнения с новой реализацией.
  3. Если вы перенесли весь свой код для использования API сервисов Play для TensorFlow Lite, вам следует удалить существующие зависимости библиотеки времени выполнения TensorFlow Lite (записи с org.tensorflow: tensorflow-lite :* ) из вашего файла build.gradle, чтобы вы может уменьшить размер вашего приложения.
  4. Определите все случаи создания new Interpreter в вашем коде и измените его так, чтобы он использовал вызов InterpreterApi.create(). Этот новый API является асинхронным, что означает, что в большинстве случаев он не является заменой, и вы должны зарегистрировать прослушиватель, когда вызов завершится. См. фрагмент кода в шаге 3 кода.
  5. Добавить import org.tensorflow.lite.InterpreterApi; и import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime; в любые исходные файлы с помощью классов org.tensorflow.lite.Interpreter или org.tensorflow.lite.InterpreterApi .
  6. Если какой-либо из результирующих вызовов InterpreterApi.create() имеет только один аргумент, добавьте new InterpreterApi.Options() в список аргументов.
  7. Добавьте .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) к последнему аргументу любых вызовов InterpreterApi.create() .
  8. Замените все остальные вхождения класса org.tensorflow.lite.Interpreter на org.tensorflow.lite.InterpreterApi .

Если вы хотите использовать автономный TensorFlow Lite и API сервисов Play одновременно, вы должны использовать TensorFlow Lite 2.9 (или более позднюю версию). TensorFlow Lite 2.8 и более ранние версии несовместимы с версией API сервисов Play.

Тестирование

После внедрения TensorFlow Lite в сервисы Google Play обязательно протестируйте свое приложение и опробуйте функции модели машинного обучения вашего приложения. Если вы столкнулись с ошибками или проблемами, которые не можете решить, сообщите о них, используя каналы, указанные в разделе « Поддержка и обратная связь » ниже.

LoadingException: нет приемлемого модуля

При тестировании вашего приложения в среде разработки в период запуска бета-версии вы можете получить исключение, когда ваше приложение попытается инициализировать класс TensorFlow Lite ( TfLite.intialize(context) ):

com.google.android.gms.dynamite.DynamiteModule$LoadingException:
  No acceptable module com.google.android.gms.tflite_dynamite found.
  Local version is 0 and remote version is 0.

Эта ошибка означает, что TensorFlow Lite в API сервисов Google Play еще недоступен на вашем тестовом устройстве. Вы можете устранить это исключение, присоединившись к этой группе Google tflite-play-services-beta-access с учетной записью пользователя, которую вы используете для тестирования на своем устройстве. После того, как вы были добавлены в группу доступа к бета-версии, это исключение должно быть устранено.

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

Ограничения

TensorFlow Lite в сервисах Google Play имеет следующие ограничения:

  • Поддержка делегатов аппаратного ускорения ограничена делегатами, перечисленными в разделе « Аппаратное ускорение ». Никакие другие делегаты ускорения не поддерживаются.
  • Доступ к TensorFlow Lite через собственные API не поддерживается. Через сервисы Google Play доступны только Java-API TensorFlow Lite.
  • Экспериментальные или устаревшие API-интерфейсы TensorFlow Lite, включая пользовательские операции, не поддерживаются.

Поддержка и обратная связь

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

Условия и политика конфиденциальности

Использование TensorFlow Lite в сервисах Google Play регулируется Условиями обслуживания Google API . Обратите внимание, что TensorFlow Lite в сервисах Google Play находится в стадии бета-тестирования, поэтому его функциональность, а также связанные с ним API-интерфейсы могут изменяться без предварительного уведомления.

Когда вы используете TensorFlow Lite в API сервисов Google Play, обработка входных данных, таких как изображения, видео, текст, полностью происходит на устройстве, и TensorFlow Lite в сервисах Google Play не отправляет эти данные на серверы Google. В результате вы можете использовать наши API для обработки данных, которые не должны покидать устройство.

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

Вы несете ответственность за информирование пользователей вашего приложения об обработке Google данных показателей TensorFlow Lite в сервисах Google Play в соответствии с требованиями действующего законодательства.

Данные, которые мы собираем, включают следующее:

  • Информация об устройстве (например, производитель, модель, версия ОС и сборка) и доступные аппаратные ускорители машинного обучения (GPU и DSP). Используется для диагностики и анализа использования.
  • Идентификатор устройства, используемый для диагностики и анализа использования.
  • Информация о приложении (имя пакета, версия приложения). Используется для диагностики и анализа использования.
  • Конфигурация API (например, какие делегаты используются). Используется для диагностики и анализа использования.
  • Тип события (например, создание интерпретатора, вывод). Используется для диагностики и анализа использования.
  • Коды ошибок. Используется для диагностики.
  • Показатели эффективности. Используется для диагностики.

Следующие шаги

Дополнительные сведения о реализации машинного обучения в мобильном приложении с помощью TensorFlow Lite см. в Руководстве разработчика TensorFlow Lite . Вы можете найти дополнительные модели TensorFlow Lite для классификации изображений, обнаружения объектов и других приложений на TensorFlow Hub .