iOS için TensorFlow Lite'ı oluşturma

Bu belgede, TensorFlow Lite iOS kitaplığını kendi başınıza nasıl oluşturacağınız açıklanmaktadır. Normalde, yerel olarak TensorFlow Lite iOS kitaplığı oluşturmanız gerekmez. Yalnızca kullanmak istiyorsanız en kolay yol TensorFlow Lite CocoaPods'un önceden oluşturulmuş kararlı veya gecelik sürümlerini kullanmaktır. iOS projelerinizde bunları nasıl kullanacağınıza ilişkin daha fazla ayrıntı için iOS hızlı başlangıç kılavuzunu inceleyin.

Yerel olarak geliştirme

Bazı durumlarda, TensorFlow Lite'ın yerel bir derlemesini kullanmak isteyebilirsiniz. Örneğin, TensorFlow Lite'ta yerel değişiklikler yapıp bu değişiklikleri iOS uygulamanızda test etmek istediğinizde veya sağladığımız dinamik çerçeveye statik çerçeve kullanmayı tercih edebilirsiniz. Yerel olarak TensorFlow Lite için evrensel bir iOS çerçevesi oluşturmak istiyorsanız bunu macOS makinesinde Bazel kullanarak oluşturmanız gerekir.

Xcode'u yükleyin

Henüz yapmadıysanız Xcode 8 veya sonraki bir sürümü ve xcode-select ile araçları yüklemeniz gerekir:

xcode-select --install

Bu yeni bir yüklemeyse aşağıdaki komutu kullanarak tüm kullanıcılar için lisans sözleşmesini kabul etmeniz gerekir:

sudo xcodebuild -license accept

Bazel'ı yükleme

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

WORKSPACE ve .bazelrc dosyalarını yapılandırma

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

Bazel, iOS desteği ile 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ında TensorFlowLiteC_framework.zip dosyasını oluşturur. Oluşturulan çerçeve, varsayılan olarak armv7, arm64 ve x86_64 (i386 içermeyen) içeren bir "fat" ikili programı içerir. --config=ios_fat değerini belirttiğinizde kullanılan derleme işaretlerinin tam listesini görmek için lütfen .bazelrc dosyasındaki iOS yapılandırmaları bölümüne bakın.

TensorFlowLiteC statik çerçevesi oluşturma

Varsayılan olarak dinamik çerçeveyi yalnızca Cocoapods aracılığıyla dağıtırız. Bunun yerine statik çerçeveyi kullanmak isterseniz 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

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

TFLite çerçevelerini seçerek oluşturun

Seçmeli derleme kullanarak yalnızca bir grup modeli hedefleyen daha küçük çerçeveler oluşturabilirsiniz. Böylece, model kümenizdeki kullanılmayan işlemler atlanır ve yalnızca belirtilen model kümesini çalıştırmak için gereken işlem çekirdekleri dahil edilir. Komut şu şekildedir:

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

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

Kendi uygulamanızda kullanın

CocoaPods 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 temel çalışma zamanını yerleştiren ve yukarıdaki iki kapsül tarafından kullanılan temel C API'lerini açığa çıkaran ortak temel kapsül. Doğrudan kullanıcılar tarafından kullanılmak üzere tasarlanmamıştır.

Geliştirici olarak, uygulamanızın yazıldığı dile bağlı olarak TensorFlowLiteSwift veya TensorFlowLiteObjC kapsülünü seçmeniz gerekir. TensorFlow Lite'ın yerel derlemelerini kullanmak için uygulanacak 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'leri veya Objective-C API'leri için yapılan bazı yerel değişiklikleri test etmek istiyorsanız buradaki adımları uygulayın.

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

  2. TensorFlowLite(Swift|ObjC).podspec dosyasını açın ve bu satırı şu şekilde güncelleyin:
    s.dependency 'TensorFlowLiteC', "#{s.version}"
    şu şekilde:
    s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly"
    Bunun amacı, Swift veya Objective-C API'lerinizi TensorFlowLiteC API'lerinin mevcut en son gecelik sürümüne (Pasifik Saati ile 01:00 arasında her gece 1-4:00 arasında her gece oluşturulur) derlemektir. Bu sürüm, yerel tensorflow ödeme işleminize kıyasla güncelliğini yitirmiş olabilir. Alternatif olarak, kendi TensorFlowLiteC sürümünüzü yayınlayıp bu sürümü kullanmayı da seçebilirsiniz (aşağıdaki Yerel TensorFlow Lite çekirdeğini kullanma bölümüne bakın).

  3. iOS projenizin Podfile öğesinde, tensorflow kök dizininizin yerel yolunu gösterecek şekilde bağımlılığı aşağıdaki gibi değiştirin.
    Swift için:
    pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
    Objective-C için:
    pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'

  4. Kapsül yüklemenizi, iOS projenizin kök dizininden güncelleyin.
    $ pod update

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

Yerel TensorFlow Lite Core'u kullanma

Özel bir CocoaPods spesifikasyon deposu oluşturabilir ve özel TensorFlowLiteC çerçevenizi özel deponuzda yayınlayabilirsiniz. Bu podspec dosyasını kopyalayıp 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, bu dosyayı kendi projenizde kullanmak için özel CocoaPods kullanma talimatlarını uygulayabilirsiniz. Ayrıca TensorFlowLite(Swift|ObjC).podspec öğesini, özel TensorFlowLiteC kapsülünüze işaret edecek şekilde değiştirebilir ve uygulama projenizde Swift veya Objective-C kapsülünü kullanabilirsiniz.

Bazel geliştiricileri

Ana derleme aracı olarak Bazel kullanıyorsanız BUILD dosyanızdaki hedefinize TensorFlowLite bağımlılığı eklemeniz yeterlidir.

Swift için:

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

Objective-C için:

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

Uygulama projenizi derlediğinizde, TensorFlow Lite kitaplığında yapılan tüm değişiklikler alınır ve uygulamanıza derlenir.

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

Projenize TensorFlow Lite bağımlılığı eklemek için CocoaPods veya Bazel kullanmanız önemle tavsiye edilir. Yine de TensorFlowLiteC çerçevesini manuel olarak eklemek istiyorsanız TensorFlowLiteC çerçevesini uygulama projenize yerleştirilmiş bir çerçeve olarak eklemeniz gerekir. TensorFlowLiteC.framework dizinini elde etmek 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 dosyasını hazırladıktan sonra ilk olarak bunu uygulama hedefinize yerleştirilmiş bir ikili program 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 hedefinize ait proje düzenleyicinin "Genel" sekmesine gidin ve "Çerçeveler, Kitaplıklar ve Yerleştirilmiş İçerik" bölümünün altına TensorFlowLiteC.framework öğesini ekleyin.
  • Xcode 10 ve altı: Uygulama hedefiniz için proje düzenleyicinin "Genel" sekmesine gidin ve TensorFlowLiteC.framework kodunu "Yerleşik İkili Programlar"ın altına ekleyin. Çerçeve ayrıca "Bağlı Çerçeveler ve Kitaplıklar" bölümüne otomatik olarak eklenmelidir.

Çerçeveyi yerleşik ikili program olarak eklediğinizde Xcode, çerçevenizin ana dizinini eklemek için "Derleme Ayarları" sekmesinin altındaki "Çerçeve Arama Yolları" girişini de günceller. Bu işlem otomatik olarak gerçekleşmezse TensorFlowLiteC.framework dizininin üst dizinini manuel olarak eklemeniz gerekir.

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