Благодарим за настройку Google I/O. Посмотреть все сеансы по запросу Смотреть по запросу

Сборка TensorFlow Lite для iOS

В этом документе описывается, как самостоятельно собрать библиотеку TensorFlow Lite для iOS. Обычно вам не нужно локально собирать библиотеку TensorFlow Lite для iOS. Если вы просто хотите использовать его, проще всего использовать готовые стабильные или ночные выпуски TensorFlow Lite CocoaPods. См. краткий обзор iOS для получения дополнительной информации о том, как использовать их в своих проектах iOS.

Локальное строительство

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

Установить Xcode

Если вы еще этого не сделали, вам нужно будет установить Xcode 8 или более позднюю версию и инструменты, использующие xcode-select :

xcode-select --install

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

sudo xcodebuild -license accept

Установить Базель

Bazel — это основная система сборки для TensorFlow. Установите Bazel в соответствии с инструкциями на веб-сайте Bazel . Обязательно выберите версию между _TF_MIN_BAZEL_VERSION и _TF_MAX_BAZEL_VERSION в файле configure.py в корне репозитория tensorflow .

Настройте WORKSPACE и .bazelrc

Запустите скрипт ./configure в корневом каталоге проверки TensorFlow и ответьте «Да», когда скрипт спросит, хотите ли вы собрать TensorFlow с поддержкой iOS.

Как только Bazel правильно настроен с поддержкой iOS, вы можете создать платформу TensorFlowLiteC с помощью следующей команды.

bazel build --config=ios_fat -c opt --cxxopt=--std=c++17 \
  //tensorflow/lite/ios:TensorFlowLiteC_framework

Эта команда создаст файл TensorFlowLiteC_framework.zip в bazel-bin/tensorflow/lite/ios/ вашего корневого каталога TensorFlow. По умолчанию сгенерированный фреймворк содержит «толстый» двоичный файл, содержащий armv7, arm64 и x86_64 (но не i386). Полный список флагов сборки, используемых при указании --config=ios_fat , см. в разделе конфигурации iOS в файле .bazelrc .

Создайте статическую структуру TensorFlowLiteC.

По умолчанию мы распространяем динамический фреймворк только через Cocoapods. Если вы хотите вместо этого использовать статическую структуру, вы можете создать статическую структуру TensorFlowLiteC с помощью следующей команды:

bazel build --config=ios_fat -c opt --cxxopt=--std=c++17 \
  //tensorflow/lite/ios:TensorFlowLiteC_static_framework

Команда создаст файл с именем TensorFlowLiteC_static_framework.zip в bazel-bin/tensorflow/lite/ios/ вашего корневого каталога TensorFlow. Этот статический фреймворк можно использовать точно так же, как и динамический.

Выборочное создание фреймворков TFLite

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

bash tensorflow/lite/ios/build_frameworks.sh \
  --input_models=model1.tflite,model2.tflite \
  --target_archs=x86_64,armv7,arm64

Приведенная выше команда создаст статическую структуру bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteC_framework.zip для встроенных и пользовательских операций TensorFlow Lite; и, при необходимости, создает статическую структуру bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip , если ваши модели содержат операции Select TensorFlow. Обратите внимание, что флаг --target_archs можно использовать для указания архитектуры развертывания.

Используйте в своем приложении

Разработчики CocoaPods

Есть три CocoaPods для TensorFlow Lite:

  • TensorFlowLiteSwift : предоставляет API-интерфейсы Swift для TensorFlow Lite.
  • TensorFlowLiteObjC : предоставляет API-интерфейсы Objective-C для TensorFlow Lite.
  • TensorFlowLiteC : общий базовый модуль, который включает в себя основную среду выполнения TensorFlow Lite и предоставляет базовые API-интерфейсы C, используемые двумя вышеуказанными модулями. Не предназначен для непосредственного использования пользователями.

Как разработчик, вы должны выбрать модуль TensorFlowLiteSwift или TensorFlowLiteObjC в зависимости от языка, на котором написано ваше приложение, но не оба сразу. Точные шаги по использованию локальных сборок TensorFlow Lite различаются в зависимости от того, какую именно часть вы хотите построить.

Использование локальных API Swift или Objective-C

Если вы используете CocoaPods и хотите протестировать только некоторые локальные изменения в API-интерфейсах Swift или Objective-C TensorFlow Lite, выполните действия, описанные здесь.

  1. Внесите изменения в API Swift или Objective-C в кассе tensorflow .

  2. Откройте файл TensorFlowLite(Swift|ObjC).podspec и обновите эту строку:
    s.dependency 'TensorFlowLiteC', "#{s.version}"
    быть:
    s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly"
    Это делается для того, чтобы вы создавали свои API-интерфейсы Swift или Objective-C на основе последней доступной ночной версии API-интерфейсов TensorFlowLiteC (создается каждую ночь с 1 до 4:00 по тихоокеанскому времени), а не стабильной версии, которая может быть устаревшей по сравнению с вашим локальным tensorflow проверить. Кроме того, вы можете опубликовать свою собственную версию TensorFlowLiteC и использовать эту версию (см. раздел « Использование локального ядра TensorFlow Lite » ниже).

  3. В Podfile вашего проекта iOS измените зависимость следующим образом, чтобы указать локальный путь к корневому каталогу вашего tensorflow .
    Для Свифта:
    pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
    Для цели-C:
    pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'

  4. Обновите установку модуля из корневого каталога проекта iOS.
    $ pod update

  5. Снова откройте сгенерированное рабочее пространство ( <project>.xcworkspace ) и перестройте свое приложение в Xcode.

Использование локального ядра TensorFlow Lite

Вы можете настроить частный репозиторий спецификаций CocoaPods и опубликовать свою пользовательскую платформу TensorFlowLiteC в своем частном репозитории. Вы можете скопировать этот файл podspec и изменить несколько значений:

  ...
  s.version      = <your_desired_version_tag>
  ...
  # Note the `///`, two from the `file://` and one from the `/path`.
  s.source       = { :http => "file:///path/to/TensorFlowLiteC_framework.zip" }
  ...
  s.vendored_frameworks = 'TensorFlowLiteC.framework'
  ...

После создания собственного файла TensorFlowLiteC.podspec вы можете следовать инструкциям по использованию частных CocoaPods , чтобы использовать его в своем собственном проекте. Вы также можете изменить TensorFlowLite(Swift|ObjC).podspec , чтобы она указывала на ваш собственный модуль TensorFlowLiteC , и использовать модуль Swift или Objective-C в своем проекте приложения.

Разработчики Базель

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

Для Свифта:

swift_library(
  deps = [
      "//tensorflow/lite/swift:TensorFlowLite",
  ],
)

Для цели-C:

objc_library(
  deps = [
      "//tensorflow/lite/objc:TensorFlowLite",
  ],
)

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

Измените настройки проекта Xcode напрямую

Настоятельно рекомендуется использовать CocoaPods или Bazel для добавления зависимости TensorFlow Lite в ваш проект. Если вы по-прежнему хотите добавить инфраструктуру TensorFlowLiteC вручную, вам потребуется добавить инфраструктуру TensorFlowLiteC в качестве встроенной платформы в проект вашего приложения. Разархивируйте TensorFlowLiteC_framework.zip , созданный из приведенной выше сборки, чтобы получить каталог TensorFlowLiteC.framework . Этот каталог является фактической структурой, которую Xcode может понять.

После того, как вы подготовили TensorFlowLiteC.framework , сначала вам нужно добавить его как встроенный двоичный файл в целевое приложение. Точный раздел настроек проекта для этого может отличаться в зависимости от вашей версии Xcode.

  • Xcode 11: перейдите на вкладку «Общие» редактора проекта для вашего целевого приложения и добавьте TensorFlowLiteC.framework в раздел «Фреймворки, библиотеки и встроенный контент».
  • Xcode 10 и ниже: перейдите на вкладку «Общие» редактора проекта для вашего целевого приложения и добавьте TensorFlowLiteC.framework в разделе «Встроенные двоичные файлы». Фреймворк также должен быть добавлен автоматически в разделе «Связанные фреймворки и библиотеки».

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

После того, как эти две настройки будут выполнены, вы сможете импортировать и вызывать C API TensorFlow Lite, определяемый файлами заголовков в каталоге TensorFlowLiteC.framework/Headers .