iOS için TensorFlow Lite'ı oluşturun

Bu belgede TensorFlow Lite iOS kütüphanesini kendi başınıza nasıl oluşturacağınız açıklanmaktadır. Normalde TensorFlow Lite iOS kitaplığını yerel olarak oluşturmanıza gerek yoktur. 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, TensorFlow Lite'ın yerel bir yapısını kullanmak isteyebilirsiniz, örneğin TensorFlow Lite'ta yerel değişiklikler yapmak ve bu değişiklikleri iOS uygulamanızda test etmek istediğinizde veya sağladığımız dinamik çerçeve yerine statik çerçeve kullanmayı tercih ettiğinizde. 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 kullanan araçları yüklemeniz gerekecektir:

xcode-select --install

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

sudo xcodebuild -license accept

Bazel'i yükleyin

Bazel, TensorFlow'un birincil yapı sistemidir. Bazel'i Bazel web sitesindeki talimatlara göre yükleyin. tensorflow deposunun kökündeki 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'yi yapılandırma

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 uygun ş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şturacaktır. Varsayılan olarak, oluşturulan çerçeve armv7, arm64 ve x86_64'ü içeren (ancak i386'yı içermeyen) bir "yağ" ikili dosyası içerir. --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çevesi oluşturun

Varsayılan olarak dinamik çerçeveyi yalnızca Cocoapod'lar aracılığıyla dağıtıyoruz. Bunun yerine statik çerçeveyi kullanmak istiyorsanız TensorFlowLiteC statik çerçevesini aşağıdaki komutla 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 adında bir dosya oluşturacaktır. Bu statik çerçeve, dinamik olanla tamamen aynı şekilde kullanılabilir.

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

Model kümenizde kullanılmayan işlemleri atlayacak ve yalnızca belirli model kümesini çalıştırmak için gereken op çekirdeklerini içerecek seçici yapıyı kullanarak yalnızca bir dizi modeli hedefleyen daha küçük çerçeveler oluşturabilirsiniz. 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, TensorFlow Lite yerleşik ve özel operasyonlar 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 operasyonlarını içeriyorsa bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip statik çerçevesini oluşturur. --target_archs bayrağının dağıtım mimarilerinizi belirtmek için 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ı içeren ve yukarıdaki iki bölme tarafından kullanılan temel C API'lerini ortaya çıkaran ortak temel bölme. Kullanıcılar tarafından doğrudan kullanılması amaçlanmamıştır.

Bir geliştirici olarak, uygulamanızın yazıldığı dile göre TensorFlowLiteSwift veya TensorFlowLiteObjC podunu seçmelisiniz, ancak ikisini birden seçmelisiniz. TensorFlow Lite'ın yerel yapılarını kullanmanın kesin 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

CocoaPod 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 ödemenizde 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 güncelliğini kaybetmiş olabilecek sabit sürüm yerine, TensorFlowLiteC API'lerinin (her gece 1-4:00 Pasifik Saati arasında oluşturulur) mevcut en son gecelik sürümüne göre oluşturduğunuzdan emin olmak içindir. Çıkış yapmak. 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. İOS projenizin Podfile dosyasında, tensorflow kök dizininizin yerel yolunu işaret edecek ş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. 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 özellikler deposu oluşturabilir 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, özel CocoaPod'ları kendi projenizde kullanmak için kullanma talimatlarını takip edebilirsiniz. Ayrıca TensorFlowLite(Swift|ObjC).podspec özel TensorFlowLiteC bölmenizi 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ı kolayca ekleyebilirsiniz.

Swift için:

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

Objective-C için:

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

Uygulama projenizi oluşturduğunuzda TensorFlow Lite kitaplığında yapılan herhangi bir değişiklik alınıp uygulamanıza yerleştirilecektir.

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 gömülü bir çerçeve olarak eklemeniz gerekecektir. TensorFlowLiteC.framework dizinini almak için yukarıdaki yapıdan 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, öncelikle 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 çerçevesini ekleyin. Çerçeve ayrıca 'Bağlantılı Çerçeveler ve Kütüphaneler' bölümünün altına otomatik olarak eklenmelidir.

Çerçeveyi gömülü bir ikili dosya olarak eklediğinizde, Xcode ayrıca çerçevenizin ana dizinini içerecek şekilde 'Yapı Ayarları' sekmesi altındaki 'Çerçeve Arama Yolları' girişini de günceller. Bunun otomatik olarak gerçekleşmemesi durumunda TensorFlowLiteC.framework dizininin ana 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 aktarabilmeniz ve çağırabilmeniz gerekir.