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. Bkz iOS hızlı başlangıç iOS projelerde bunların nasıl kullanılacağı hakkında daha fazla ayrıntı için.

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 varsa, Xcode 8 veya daha yeni ve kullanan araçları yüklemeniz gerekir xcode-select :

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. Gereğince Bazel takın Bazel web sitesinde talimatlar . Arasında bir sürümünü seçmek için emin olun _TF_MIN_BAZEL_VERSION ve _TF_MAX_BAZEL_VERSION içinde configure.py dosyanın kökünde tensorflow depo.

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

Run ./configure kök TensorFlow çıkış dizinde komut ve cevap "Evet" iOS desteğiyle TensorFlow inşa etmek isteyen komut sorduğunda.

Bazel düzgün iOS desteği ile yapılandırılmış sonra, inşa edebilirsiniz TensorFlowLiteC aşağıdaki komutla çerçeve.

bazel build --config=ios_fat -c opt \
  //tensorflow/lite/ios:TensorFlowLiteC_framework

Bu komut üretecektir TensorFlowLiteC_framework.zip altında dosya bazel-bin/tensorflow/lite/ios/ sizin TensorFlow kök dizin altında dizin. Varsayılan olarak oluşturulan çerçeve, armv7, arm64 ve x86_64 içeren bir "fat" ikili dosyası içerir (ancak i386 içermez). Belirttiğiniz kullanılan yapı bayrakları tam listesini görmek için --config=ios_fat , içinde iOS yapılandırmaları bölümüne bakın .bazelrc dosyası .

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çevesini kullanmak istiyorsanız, inşa edebilirsiniz TensorFlowLiteC aşağıdaki komutla statik çerçevesini:

bazel build --config=ios_fat -c opt \
  //tensorflow/lite/ios:TensorFlowLiteC_static_framework

Komut adlı bir dosya oluşturur TensorFlowLiteC_static_framework.zip altında bazel-bin/tensorflow/lite/ios/ sizin TensorFlow kök dizin altında dizin. 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 statik çerçeve oluşturacaktır bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteC_framework.zip TensorFlow Lite için yerleşik OPS ve özel; ve isteğe bağlı olarak, üretir statik çerçeve bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip Modellerinizin Seç TensorFlow ops içeriyorsa. O Not --target_archs bayrak Dağıtım mimarileri belirtmek için kullanılabilir.

Kendi uygulamanızda kullanın

CocoaPod geliştiricileri

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

  • TensorFlowLiteSwift : TensorFlow Lite için Swift API'leri sağlar.
  • TensorFlowLiteObjC : TensorFlow Lite için Objective-C API'leri sağlar.
  • TensorFlowLiteC : Genel baz bakla, TensorFlow Lite çekirdek çalışma zamanı, yerleştirmeler ve iki bakla tarafından kullanılan baz Cı API'leri ortaya çıkarır. Doğrudan kullanıcılar tarafından kullanılması amaçlanmamıştır.

Bir geliştirici olarak, ya seçmeliyim TensorFlowLiteSwift veya TensorFlowLiteObjC uygulama yazıldığı dile dayalı, ancak ikisini pod. 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

Eğer CocoaPods kullanarak ve sadece TensorFlow Lite için bazı yerel değişiklikleri test etmek isteyen varsa Swift API'leri veya Objective-C API'ler , buradaki adımları uygulayın.

  1. Senin içinde Swift veya Objective-C API'leri değişiklik yapın tensorflow kasada.

  2. TensorFlowLite(Swift|ObjC).podspec dosyası ve bu satırı güncellemek:
    s.dependency 'TensorFlowLiteC', "#{s.version}"
    olmak:
    s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly"
    Bu en son kullanılabilir gece sürümünüze karşı Swift veya Objective-C API'leri inşa ediyoruz sağlamaktır TensorFlowLiteC ziyade yerel kıyasla eski olabilir kararlı sürümü, daha (1-4AM Pasifik Saati arasında her gece inşa edilmiş) API'leri tensorflow Çıkış yapmak. Alternatif olarak, kendi versiyonunu yayınlamayı tercih olabilir TensorFlowLiteC ve (bunun sürümünü kullanmak yerel TensorFlow Lite çekirdek kullanma aşağıdaki bölümü).

  3. In Podfile sizin yerel yolunu gösterecek şekilde aşağıdaki gibi iOS projesinin, bağımlılığını değiştirmek tensorflow kök dizin.
    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ı (Yeniden <project>.xcworkspace ) ve Xcode içinde uygulamanızı yeniden.

Yerel TensorFlow Lite çekirdeğini kullanma

Özel bir CocoaPods gözlük depo kurmak ve özel yayınlayabilirsiniz TensorFlowLiteC özel repo için bir çerçeve. Bunu kopyalayabilirsiniz podspec dosyasını ve birkaç değerleri değiştirin:

  ...
  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 oluşturduktan sonra TensorFlowLiteC.podspec dosyasını takip edebilirsiniz özel CocoaPods kullanımıyla ilgili talimatlar kendi projede kullanmak. Ayrıca değiştirebilir TensorFlowLite(Swift|ObjC).podspec özel işaret edecek TensorFlowLiteC uygulama projesinde pod ve kullanım ya Swift veya Objective-C pod.

Bazel geliştiricileri

Ana yapı aracı olarak Bazel kullanıyorsanız, sadece ekleyebilir TensorFlowLite sizin içinde hedefe bağımlılığı BUILD dosyası.

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. Hala eklemek isterseniz TensorFlowLiteC elle çerçeveyi, eklemek gerekir TensorFlowLiteC Başvurunuz projeye gömülü çerçeve olarak çerçeve. Sıkıştırılmış TensorFlowLiteC_framework.zip yukarıdaki yapı üretilen almak için TensorFlowLiteC.framework dizini. Bu dizin, Xcode'un anlayabileceği gerçek çerçevedir.

Eğer hazırladıktan sonra TensorFlowLiteC.framework öncelikle uygulama hedefine gömülü ikili olarak eklemek gerekir. Bunun için tam proje ayarları bölümü, Xcode sürümünüze bağlı olarak farklılık gösterebilir.

  • Uygulama hedefi için proje editörü 'Genel' sekmesine gidin ve ekleyin: Xcode 11 TensorFlowLiteC.framework 'Çerçeveleri, Kütüphaneler ve Gömülü İçerik' bölümünde.
  • Xcode 10 ve aşağıda: Go uygulama hedefi için proje editörü 'Genel' sekmesine ve eklemek TensorFlowLiteC.framework 'Gömülü Örten' başlığı altında. Ç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. Bu kendi kendine olmaz durumda, el ana dizini eklemek gerekir TensorFlowLiteC.framework dizininde.

Bu iki ayar bitirdikten sonra, içe ve altında başlık dosyaları tarafından tanımlanan TensorFlow Lite C API, çağrı gerekir TensorFlowLiteC.framework/Headers dizininde.