Эта страница была переведа с помощью Cloud Translation API.
Switch to English

Выберите операторы TensorFlow

Поскольку встроенная библиотека операторов TensorFlow Lite поддерживает только ограниченное количество операторов TensorFlow, не каждая модель может быть преобразована. Подробнее см. Совместимость операторов .

Чтобы разрешить преобразование, пользователи могут включить использование определенных операций TensorFlow в своей модели TensorFlow Lite. Однако для запуска моделей TensorFlow Lite с операциями TensorFlow требуется задействовать основную среду выполнения TensorFlow, что увеличивает двоичный размер интерпретатора TensorFlow Lite. Для Android этого можно избежать, выборочно создавая только необходимые операторы Tensorflow. Для получения подробной информации см. Уменьшение двоичного размера .

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

Преобразовать модель

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

import tensorflow as tf

converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.target_spec.supported_ops = [
  tf.lite.OpsSet.TFLITE_BUILTINS, # enable TensorFlow Lite ops.
  tf.lite.OpsSet.SELECT_TF_OPS # enable TensorFlow ops.
]
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)

Выполнить вывод

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

Android AAR

Чтобы уменьшить двоичный размер, создайте свои собственные файлы AAR, как описано в следующем разделе . Если размер двоичного файла не вызывает особого беспокойства, мы рекомендуем использовать предварительно созданный AAR с операциями TensorFlow, размещенными в JCenter .

Вы можете указать это в своих зависимостях build.gradle , добавив его вместе со стандартным TensorFlow Lite AAR следующим образом:

dependencies {
    implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly'
    // This dependency adds the necessary TF op support.
    implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:0.0.0-nightly'
}

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

android {
    defaultConfig {
        ndk {
            abiFilters 'armeabi-v7a', 'arm64-v8a'
        }
    }
}

Сборка Android AAR

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

sh tensorflow/lite/tools/build_aar.sh \
  --input_models=/a/b/model_one.tflite,/c/d/model_two.tflite \
  --target_archs=x86,x86_64,arm64-v8a,armeabi-v7a

Это сгенерирует файл AAR bazel-bin/tmp/tensorflow-lite.aar для встроенных и настраиваемых операций bazel-bin/tmp/tensorflow-lite.aar Lite; и сгенерируйте файл AAR bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar для bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar ops. Если у вас нет рабочей среды сборки, вы также можете собрать указанные выше файлы с помощью docker .

Оттуда вы можете либо импортировать файлы AAR непосредственно в свой проект, либо опубликовать пользовательские файлы AAR в локальном репозитории Maven:

mvn install:install-file \
  -Dfile=bazel-bin/tmp/tensorflow-lite.aar \
  -DgroupId=org.tensorflow \
  -DartifactId=tensorflow-lite -Dversion=0.1.100 -Dpackaging=aar
mvn install:install-file \
  -Dfile=bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar \
  -DgroupId=org.tensorflow \
  -DartifactId=tensorflow-lite-select-tf-ops -Dversion=0.1.100 -Dpackaging=aar

Наконец, в build.gradle вашего приложения build.gradle , что у вас есть зависимость mavenLocal() и замените стандартную зависимость TensorFlow Lite той, которая поддерживает выбранные операции TensorFlow:

allprojects {
    repositories {
        jcenter()
        mavenLocal()
    }
}

dependencies {
    implementation 'org.tensorflow:tensorflow-lite:0.1.100'
    implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:0.1.100'
}

iOS

Использование CocoaPods

Мы предоставляем услуги по ночам прекомпилированных выберите OPS TF CocoaPods, которые вы можете положиться на наряду с TensorFlowLiteSwift или TensorFlowLiteObjC CocoaPods.

# In your Podfile target:
  pod 'TensorFlowLiteSwift'   # or 'TensorFlowLiteObjC'
  pod 'TensorFlowLiteSelectTfOps', '~> 0.0.1-nightly'

После запуска pod install вам необходимо предоставить дополнительный флаг компоновщика, чтобы принудительно загрузить выбранную платформу TF ops в ваш проект. В своем проекте Xcode перейдите в Build Settings -> Other Linker Flags и добавьте:

-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps

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

  • Замените файл модели на файл, преобразованный с включенным SELECT_TF_OPS .
  • Добавить TensorFlowLiteSelectTfOps зависимость от Podfile в соответствии с инструкциями.
  • Добавьте дополнительный флаг компоновщика, как указано выше.
  • Запустите пример приложения и посмотрите, правильно ли работает модель.

Использование Bazel + Xcode

TensorFlow Lite с выбранными операциями TensorFlow для iOS можно создать с помощью Bazel. Во-первых, следуйте инструкциям по сборке iOS, чтобы правильно настроить рабочее пространство .bazelrc файл .bazelrc .

После того, как вы настроили рабочую область с включенной поддержкой iOS, вы можете использовать следующую команду для создания выбранной инфраструктуры надстройки TF ops, которую можно добавить поверх обычного TensorFlowLiteC.framework . Обратите внимание, что выбранная платформа TF ops не может быть создана для архитектуры i386 , поэтому вам необходимо явно указать список целевых архитектур, за исключением i386 .

bazel build -c opt --config=ios --ios_multi_cpus=armv7,arm64,x86_64 \
  //tensorflow/lite/experimental/ios:TensorFlowLiteSelectTfOps_framework

Это создаст фреймворк в bazel-bin/tensorflow/lite/experimental/ios/ . Вы можете добавить эту новую структуру в свой проект Xcode, выполнив аналогичные шаги, описанные в разделе настроек проекта Xcode в руководстве по сборке iOS.

После добавления фреймворка в проект приложения необходимо указать дополнительный флаг компоновщика в проекте приложения, чтобы принудительно загрузить выбранный фреймворк TF ops. В своем проекте Xcode перейдите в Build Settings -> Other Linker Flags и добавьте:

-force_load <path/to/your/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps>

C ++

При сборке библиотек TensorFlow Lite с использованием конвейера bazel можно включить и включить дополнительную библиотеку операций TensorFlow следующим образом:

  • При необходимости включите монолитную сборку, добавив флаг --config=monolithic build.
  • Добавьте зависимость библиотеки делегатов TensorFlow ops к зависимостям сборки: tensorflow/lite/delegates/flex:delegate .

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

Python

TensorFlow Lite с выбранными операциями TensorFlow будет установлен автоматически вместе с пакетом pip TensorFlow . Вы также можете выбрать установку только pip-пакета TensorFlow Lite Interpreter .

Метрики

Производительность

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

В следующей таблице описывается среднее время, необходимое для выполнения логического вывода в MobileNet на Pixel 2. Указанное время составляет в среднем 100 запусков. Эти цели были созданы для Android с использованием флагов: --config=android_arm64 -c opt .

Построить Время (миллисекунды)
Только встроенные TFLITE_BUILTIN ( TFLITE_BUILTIN ) 260,7
Использование только операций TF ( SELECT_TF_OPS ) 264,5

Двоичный размер

В следующей таблице описан двоичный размер TensorFlow Lite для каждой сборки. Эти цели были созданы для Android с использованием --config=android_arm -c opt .

Построить Размер двоичного файла C ++ Размер Android APK
Только встроенные операции 796 КБ 561 КБ
Встроенные операции + операции TF 23,0 МБ 8,0 МБ
Встроенные операторы + операторы TF (1) 4,1 МБ 1,8 МБ

(1) Эти библиотеки выборочно созданы для модели i3d-kinetics-400 с 8 встроенными операциями TFLite и 3 операциями Tensorflow. Дополнительные сведения см. В разделе « Уменьшение размера двоичного файла TensorFlow Lite ».

Известные ограничения

  • Неподдерживаемые типы: некоторые операции TensorFlow могут не поддерживать полный набор типов ввода / вывода, которые обычно доступны в TensorFlow.
  • Неподдерживаемые операции: операции и операции потока управления, требующие явной инициализации из ресурсов, таких как HashTableV2 , еще не поддерживаются.
  • Неподдерживаемые оптимизации: если вы примените оптимизацию, известную как квантование после обучения , только операции TensorFlow Lite будут квантованы (или оптимизированы), но операции TensorFlow останутся как плавающие (или неоптимизированные).

Планы на будущее

Ниже приводится список текущих улучшений этого конвейера:

  • Повышенная производительность - ведется работа, чтобы обеспечить хорошее взаимодействие TensorFlow Lite с операциями TensorFlow с делегатами с аппаратным ускорением, например делегатами NNAPI и GPU.