iOS için TensorFlow Lite'ı oluşturun

Bu belge, TensorFlow Lite iOS kitaplığını kendi başınıza nasıl oluşturacağınızı açıklar. Normalde TensorFlow Lite iOS kitaplığını yerel olarak oluşturmanız gerekmez. Sadece kullanmak istiyorsanız, en kolay yol TensorFlow Lite CocoaPod'ların önceden oluşturulmuş kararlı veya gecelik sürümlerini kullanmaktır. Bunları iOS projelerinizde nasıl kullanacağınızla ilgili daha fazla ayrıntı için iOS hızlı başlangıcına bakın.

Yerel olarak inşa etmek

Bazı durumlarda, örneğin TensorFlow Lite'ta yerel değişiklikler yapmak ve bu değişiklikleri iOS uygulamanızda test etmek istediğinizde veya sağlanan dinamik çerçeve yerine statik çerçeve kullanmayı tercih ettiğinizde, yerel bir TensorFlow Lite yapısı kullanmak isteyebilirsiniz. Yerel olarak TensorFlow Lite için evrensel bir iOS çerçevesi oluşturmak için bunu bir macOS makinesinde Bazel kullanarak oluşturmanız gerekir.

Xcode'u yükleyin

Henüz yapmadıysanız, Xcode 8 veya üstünü ve xcode-select kullanarak araçları yüklemeniz gerekir:

xcode-select --install

Bu yeni bir kurulumsa, aşağıdaki komutla tüm kullanıcılar için lisans sözleşmesini kabul etmeniz gerekir:

sudo xcodebuild -license accept

Bazel'i yükleyin

Bazel, TensorFlow için birincil yapı sistemidir. Bazel web sitesindeki talimatlara göre Bazel'i yükleyin. tensorflow deposunun kökündeki configure.py dosyasında _TF_MIN_BAZEL_VERSION ve _TF_MAX_BAZEL_VERSION arasında bir sürüm seçtiğinizden emin olun.

WORKSPACE ve .bazelrc'yi yapılandırın

Kök TensorFlow ödeme dizininde ./configure komut dosyasını çalıştırın ve komut dosyası TensorFlow'u iOS desteğiyle oluşturmak isteyip istemediğinizi sorduğunda "Evet" yanıtını verin.

Bazel, iOS desteğiyle düzgün bir şekilde yapılandırıldıktan sonra, aşağıdaki komutla TensorFlowLiteC çerçevesini oluşturabilirsiniz.

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

Bu komut, TensorFlow kök dizininizin altındaki bazel-bin/tensorflow/lite/ios/ dizini altındaki TensorFlowLiteC_framework.zip dosyasını oluşturacaktır. Varsayılan olarak oluşturulan çerçeve, armv7, arm64 ve x86_64 içeren bir "fat" ikili dosyası içerir (ancak i386 içermez). --config=ios_fat belirttiğinizde kullanılan derleme bayraklarının tam listesini görmek için lütfen .bazelrc dosyasındaki iOS yapılandırmaları bölümüne bakın.

TensorFlowLiteC statik çerçevesini oluşturun

Varsayılan olarak, dinamik çerçeveyi yalnızca Cocoapod'lar aracılığıyla dağıtırız. Bunun yerine statik çerçeveyi kullanmak istiyorsanız, aşağıdaki komutla TensorFlowLiteC statik çerçevesini oluşturabilirsiniz:

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

Komut, TensorFlow kök dizininizin altındaki bazel-bin/tensorflow/lite/ios/ dizini altında TensorFlowLiteC_static_framework.zip adlı bir dosya oluşturacaktır. Bu statik çerçeve, dinamik çerçeveyle tamamen aynı şekilde kullanılabilir.

TFLite çerçevelerini seçici olarak oluşturun

Seçici derlemeyi kullanarak yalnızca bir dizi modeli hedefleyen daha küçük çerçeveler oluşturabilirsiniz; bu, model kümenizde kullanılmayan işlemleri atlar ve yalnızca verilen model kümesini çalıştırmak için gereken op çekirdeklerini içerir. Komut aşağıdaki gibidir:

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

Yukarıdaki komut, yerleşik TensorFlow Lite ve özel işlemler için bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteC_framework.zip statik çerçevesini oluşturacaktır; ve isteğe bağlı olarak, modelleriniz Select TensorFlow işlemlerini içeriyorsa, bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip statik çerçevesini oluşturur. Dağıtım mimarilerinizi belirtmek için --target_archs bayrağının kullanılabileceğini unutmayın.

Kendi uygulamanızda kullanın

CocoaPod geliştiricileri

TensorFlow Lite için üç CocoaPod vardır:

  • TensorFlowLiteSwift : TensorFlow Lite için Swift API'lerini sağlar.
  • TensorFlowLiteObjC : TensorFlow Lite için Objective-C API'lerini sağlar.
  • TensorFlowLiteC : TensorFlow Lite çekirdek çalışma zamanını yerleştiren ve yukarıdaki iki bölme tarafından kullanılan temel C API'lerini ortaya çıkaran ortak temel bölme. Doğrudan kullanıcılar tarafından kullanılması amaçlanmamıştır.

Bir geliştirici olarak, uygulamanızın yazıldığı dile bağlı olarak TensorFlowLiteSwift veya TensorFlowLiteObjC bölmesini seçmelisiniz, ancak ikisini birden değil. TensorFlow Lite'ın yerel yapılarını kullanmanın tam adımları, tam olarak hangi parçayı oluşturmak istediğinize bağlı olarak farklılık gösterir.

Yerel Swift veya Objective-C API'lerini kullanma

CocoaPods kullanıyorsanız ve yalnızca TensorFlow Lite'ın Swift API'lerinde veya Objective-C API'lerinde bazı yerel değişiklikleri test etmek istiyorsanız, buradaki adımları izleyin.

  1. tensorflow ödeme işleminizde Swift veya Objective-C API'lerinde değişiklik yapın.

  2. TensorFlowLite(Swift|ObjC).podspec dosyasını açın ve şu satırı güncelleyin:
    s.dependency 'TensorFlowLiteC', "#{s.version}"
    olmak:
    s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly"
    Bu, Swift veya Objective-C API'lerinizi, yerel tensorflow kıyasla eski olabilecek kararlı sürüm yerine TensorFlowLiteC API'lerinin (her gece 1-4AM Pasifik Saati arasında oluşturulur) mevcut en son gece sürümüne göre oluşturmanızı sağlamak içindir. ödeme. Alternatif olarak, kendi TensorFlowLiteC sürümünüzü yayınlamayı ve bu sürümü kullanmayı seçebilirsiniz (aşağıdaki Yerel TensorFlow Lite çekirdeğini kullanma bölümüne bakın).

  3. iOS projenizin Pod tensorflow Podfile dizininizin yerel yolunu işaret etmek için bağımlılığı aşağıdaki gibi değiştirin.
    Swift için:
    pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
    Amaç-C için:
    pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'

  4. Pod kurulumunuzu iOS projenizin kök dizininden güncelleyin.
    $ pod update

  5. Oluşturulan çalışma alanını ( <project>.xcworkspace ) yeniden açın ve uygulamanızı Xcode içinde yeniden oluşturun.

Yerel TensorFlow Lite çekirdeğini kullanma

Özel bir CocoaPods teknik özellik deposu kurabilir ve özel TensorFlowLiteC çerçevenizi özel deponuzda yayınlayabilirsiniz. Bu podspec dosyasını kopyalayabilir ve birkaç değeri değiştirebilirsiniz:

  ...
  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'
  ...

Kendi TensorFlowLiteC.podspec dosyanızı oluşturduktan sonra, kendi projenizde kullanmak için özel CocoaPod'ları kullanma talimatlarını takip edebilirsiniz. Ayrıca, TensorFlowLite(Swift|ObjC).podspec özel TensorFlowLiteC bölmenize işaret edecek şekilde değiştirebilir ve uygulama projenizde Swift veya Objective-C bölmesini kullanabilirsiniz.

Bazel geliştiricileri

Bazel'i ana derleme aracı olarak kullanıyorsanız, BUILD dosyanızdaki hedefinize TensorFlowLite bağımlılığını eklemeniz yeterlidir.

Swift için:

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

Amaç-C için:

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

Uygulama projenizi oluşturduğunuzda, TensorFlow Lite kitaplığındaki tüm değişiklikler alınır ve uygulamanıza eklenir.

Xcode proje ayarlarını doğrudan değiştirin

Projenize TensorFlow Lite bağımlılığı eklemek için CocoaPods veya Bazel kullanmanız şiddetle tavsiye edilir. Yine de TensorFlowLiteC çerçevesini manuel olarak eklemek istiyorsanız, TensorFlowLiteC çerçevesini uygulama projenize gömülü bir çerçeve olarak eklemeniz gerekir. TensorFlowLiteC.framework dizinini almak için yukarıdaki derlemeden oluşturulan TensorFlowLiteC_framework.zip dosyasını açın. Bu dizin, Xcode'un anlayabileceği gerçek çerçevedir.

TensorFlowLiteC.framework hazırladıktan sonra, önce onu uygulama hedefinize gömülü bir ikili dosya olarak eklemeniz gerekir. Bunun için tam proje ayarları bölümü, Xcode sürümünüze bağlı olarak farklılık gösterebilir.

  • Xcode 11: Uygulama hedefiniz için proje düzenleyicinin 'Genel' sekmesine gidin ve 'Çerçeveler, Kitaplıklar ve Gömülü İçerik' bölümünün altına TensorFlowLiteC.framework ekleyin.
  • Xcode 10 ve altı: Uygulama hedefiniz için proje düzenleyicinin 'Genel' sekmesine gidin ve 'Gömülü İkili Dosyalar' altına TensorFlowLiteC.framework ekleyin. Çerçeve ayrıca 'Bağlantılı Çerçeveler ve Kitaplıklar' bölümünün altına otomatik olarak eklenmelidir.

Çerçeveyi gömülü bir ikili dosya olarak eklediğinizde, Xcode ayrıca 'Yapı Ayarları' sekmesi altındaki 'Çerçeve Arama Yolları' girişini çerçevenizin üst dizinini içerecek şekilde günceller. Bunun otomatik olarak gerçekleşmemesi durumunda, TensorFlowLiteC.framework dizininin üst dizinini manuel olarak eklemelisiniz.

Bu iki ayar yapıldıktan sonra, TensorFlowLiteC.framework/Headers dizini altındaki başlık dosyaları tarafından tanımlanan TensorFlow Lite'ın C API'sini içe aktarabilmeli ve çağırabilmelisiniz.