TensorFlow operatörlerini seçin

LiteRT yerleşik operatör kitaplığı yalnızca sayısı, TensorFlow operatörü sayısı, her model dönüştürülebilir değildir. Ayrıntılı bilgi için operatör uyumluluğu bölümünü inceleyin.

Dönüşüme olanak tanımak için, kullanıcılar belirli TensorFlow'un kullanımını etkinleştirebilir işlemleri karşılaştırabilirsiniz. Ancak, TensorFlow işlemleri içeren LiteRT modelleri, LiteRT yorumlayıcı ikili program boyutunu artıran TensorFlow çalışma zamanı. Android'de, yalnızca gerekli Tensorflow'u seçerek bu durumu önleyebilirsiniz. çalışma Ayrıntılar için ikili verileri azaltma boyut.

Bu belgede, nasıl dönüşüm gerçekleştirileceği ve TensorFlow işlemlerini içeren LiteRT modeli çalıştırma tercih edebilirsiniz. Ayrıca performans ve boyut metrikleri ve bilinen sınırlamalar hakkında bilgi edinin.

Model dönüştürme

Aşağıdaki örnekte, belirli bir değerle LiteRT modelinin nasıl oluşturulacağı gösterilmektedir TensorFlow operasyonları

import tensorflow as tf

converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.target_spec.supported_ops = [
  tf.lite.OpsSet.TFLITE_BUILTINS, # enable LiteRT ops.
  tf.lite.OpsSet.SELECT_TF_OPS # enable TensorFlow ops.
]
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)

Çıkarım Çalıştır

Şu destekle dönüştürülmüş bir LiteRT modeli kullanılırken: TensorFlow operasyonlarını seçerseniz istemcinin aynı zamanda TensorFlow işlemleri için gerekli kitaplığı içerir.

Android AAR

İkili program boyutunu küçültmek için lütfen aşağıda açıklandığı şekilde kendi özel AAR dosyalarınızı oluşturun: sonraki bölümde bulabilirsiniz. İkili program boyutu varsa, TensorFlow işlemleri ile önceden oluşturulmuş AAR'yi kullanmanızı barındırıldığı yer: MavenCentral.

Bunu build.gradle bağımlılığınızla birlikte ekleyerek belirtebilirsiniz. aşağıdaki gibi standart LiteRT AAR'si vardır:

dependencies {
    implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly-SNAPSHOT'
    // This dependency adds the necessary TF op support.
    implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:0.0.0-nightly-SNAPSHOT'
}

Gecelik anlık görüntüleri kullanmak için Sonatype anlık görüntüsü eklediğinizden emin olun depo.

Bağımlılığı ekledikten sonra, bu bağımlılığı yönetimi için grafiğinizin TensorFlow işlemleri oluşturabilirsiniz.

Not: TensorFlow işlemleri bağımlılığı nispeten büyüktür, bu nedenle muhtemelen ayarlayarak .gradle dosyanızdaki gereksiz x86 ABI'lerini filtrelemek istiyorsanız abiFilters cihazınız.

android {
    defaultConfig {
        ndk {
            abiFilters 'armeabi-v7a', 'arm64-v8a'
        }
    }
}

Android AAR'yi oluşturma

İkili program boyutunu veya diğer gelişmiş durumları küçültmek için manuel olarak değiştirebilirsiniz. Çalışan bir LiteRT derlemesi olduğunu varsayarsak ortamına yönelik olarak, Android AAR'yi belirli TensorFlow işlemleriyle şöyle olur:

sh tensorflow/lite/tools/build_aar.sh \
  --input_models=/a/b/model_one.tflite,/c/d/model_two.tflite \
  --target_archs=x86,x86_64,arm64-v8a,armeabi-v7a

Bu komut dosyasının AAR dosyası bazel-bin/tmp/tensorflow-lite.aar LiteRT yerleşik ve özel işlemler; oluşturup AAR dosyasını TensorFlow işlemleri için bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar Şu durumda: çalışmayan bir derleme ortamına sahip değilseniz, dosyaların üzerinde çalışma alanını kullanarak Docker'a dokunun.

Buradan, AAR dosyalarını doğrudan projenize aktarabilirsiniz ya da özel AAR dosyalarını yerel Maven deponuza yayınlayın:

mvn install:install-file \
  -Dfile=bazel-bin/tmp/tensorflow-lite.aar \
  -DgroupId=org.tensorflow \
  -DartifactId=tensorflow-lite -Dversion=0.1.100 -Dpackaging=aar
mvn install:install-file \
  -Dfile=bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar \
  -DgroupId=org.tensorflow \
  -DartifactId=tensorflow-lite-select-tf-ops -Dversion=0.1.100 -Dpackaging=aar

Son olarak, uygulamanızın build.gradle bölümünde mavenLocal() öğesinin bulunduğundan emin olun ve standart LiteRT bağımlılığını belirli TensorFlow işlemlerini destekler:

allprojects {
    repositories {
        mavenCentral()
        maven {  // Only for snapshot artifacts
            name 'ossrh-snapshot'
            url 'https://oss.sonatype.org/content/repositories/snapshots'
        }
        mavenLocal()
    }
}

dependencies {
    implementation 'org.tensorflow:tensorflow-lite:0.1.100'
    implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:0.1.100'
}

iOS

CocoaPods'u kullanma

LiteRT, her gece arm64 için önceden oluşturulmuş seçkin TF operasyonları CocoaPods sunar. Bunlara ek olarak, TensorFlowLiteSwift veya TensorFlowLiteObjC CocoaPods.

Not: x86_64 simülasyon aracında belirli TF işlemlerini kullanmanız gerekiyorsa çalışma çerçevesini kendiniz oluşturabilirsiniz. Bazel + Xcode'u kullanma bölümüne bakın. bölümüne bakın.

# In your Podfile target:
  pod 'TensorFlowLiteSwift'   # or 'TensorFlowLiteObjC'
  pod 'TensorFlowLiteSelectTfOps', '~> 0.0.1-nightly'

pod install komutunu çalıştırdıktan sonra, Select TF operasyon çerçevesini projenize zorla yükleyin. Xcode projenizde, Build Settings adresine gidin -> Other Linker Flags ve şunu ekleyin:

2.9.0 veya sonraki sürümler için:

-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.xcframework/ios-arm64/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps

< 2.9.0:

-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps

Daha sonra, SELECT_TF_OPS ile dönüştürülmüş tüm modelleri çalıştırabilirsiniz. iOS uygulamanız. Örneğin, Görüntü Sınıflandırma iOS uygulama belirli TF operasyonları özelliğini test etmek için gereklidir.

  • Model dosyasını, SELECT_TF_OPS etkin şekilde dönüştürülmüş bir model dosyasıyla değiştirin.
  • Talimatlara göre Podfile öğesine TensorFlowLiteSelectTfOps bağımlılığı ekleyin.
  • Ek bağlayıcı işaretini yukarıda olduğu gibi ekleyin.
  • Örnek uygulamayı çalıştırın ve modelin düzgün çalışıp çalışmadığını kontrol edin.

Bazel + Xcode'u kullanma

iOS için belirli TensorFlow işlemleriyle LiteRT, Bazel kullanılarak oluşturulabilir. Öncelikle iOS derleme talimatlarını uygulayarak Bazel çalışma alanı ve .bazelrc dosyası doğru.

Çalışma alanını iOS desteğini etkinleştirecek şekilde yapılandırdıktan sonra, aşağıdaki komutu çalıştırarak aylık TensorFlowLiteC.framework Seçili TF operasyonlarının çerçevesi i386 mimarisi için oluşturulamaz. Bu yüzden i386 hariç olmak üzere hedef mimarilerin listesini sağlayın.

bazel build -c opt --config=ios --ios_multi_cpus=arm64,x86_64 \
  //tensorflow/lite/ios:TensorFlowLiteSelectTfOps_framework

Bu işlem, çerçeveyi bazel-bin/tensorflow/lite/ios/ altında oluşturur dizin. Bu yeni çerçeveyi aşağıdaki adımları uygulayarak Xcode projenize ekleyebilirsiniz: Xcode projesinin altında açıklanan benzer adımlar Ayarlar bölümündeki iOS derleme kılavuzu.

Çerçeveyi uygulama projenize ekledikten sonra, ek bir bağlayıcı işareti seçili TF işlemlerini zorla yüklemek için uygulama projenizde belirtilmelidir bahsedeceğim. Xcode projenizde Build Settings -> öğesine gidin. Other Linker Flags ve şunu ekleyin:

-force_load <path/to/your/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps>

C/C++

LiteRT oluşturmak için Bazel veya CMake kullanıyorsanız bir LiteRT Flex bağlantısı oluşturarak Flex delege özelliğini erişim yetkisi verebilirsiniz. Aşağıdaki komutla Bazel kullanarak web sitesi oluşturabilirsiniz.

bazel build -c opt --config=monolithic tensorflow/lite/delegates/flex:tensorflowlite_flex

Bu komut, aşağıdaki paylaşılan kitaplığı şu konumda oluşturur: bazel-bin/tensorflow/lite/delegates/flex

Platform Kütüphanenin adı
Linux libtensorflowlite_flex.so
macOS libtensorflowlite_flex.dylib
Windows tensorflowlite_flex.dll

Gerekli TfLiteDelegate uygulamasının, şu işlemler gerçekleştirildiğinde otomatik olarak yükleneceğini unutmayın: paylaşılan kitaplık bağlı olduğu sürece çevirmeni çalışma zamanında oluşturmalıdır. Google genellikle olduğu gibi, yetki verilmiş örneği doğrudan yüklemek için gerekli değildir. diğer yetki verme türlerinde de zorunludur.

Not: Bu özellik 2.7 sürümünden itibaren kullanılabilmektedir.

Python

Belirli TensorFlow işlemleri içeren LiteRT otomatik olarak TensorFlow pip paketi. Şunları yapabilirsiniz: sadece LiteRT Çevirmen pip'ini paketindedir.

Metrikler

Performans

Hem yerleşik hem de seçili TensorFlow operasyonlarını bir arada kullanırken LiteRT optimizasyonları ve optimize edilmiş yerleşik işlemler kullanılabilir ve dönüştürülmüş modelle kullanılabilir.

Aşağıdaki tabloda, çıkarımda bulunmak için gereken ortalama süre Pixel 2'deki MobileNet. Listelenen süreler ortalama 100 çalıştırmadır. Bu şu işaretler kullanılarak Android için hedef oluşturuldu: --config=android_arm64 -c opt.

Derleme Zaman (milisaniye)
Yalnızca yerleşik işlemler (TFLITE_BUILTIN) 260,7
Yalnızca TF işlemlerini kullanma (SELECT_TF_OPS) 264,5

İkili program boyutu

Aşağıdaki tabloda her derleme için LiteRT'in ikili boyutu açıklanmaktadır. Bu hedefler Android için --config=android_arm -c opt kullanılarak oluşturulmuştur.

Derleme C++ İkili Program Boyutu Android APK Boyutu
Yalnızca yerleşik işlemler 796 KB 561 KB
Yerleşik operasyonlar + TF operasyonları 23,0 MB 8,0 MB
Yerleşik operasyonlar + TF işlemleri (1) 4,1 MB 1,8 MB

(1) Bu kitaplıklar i3d-kinetics-400 için seçici bir şekilde oluşturulmuştur modeli 8 yerleşik TFLite ve 3 Tensorflow operasyonlarıyla. Daha fazla bilgi için lütfen LiRT ikili boyutunu küçültme bölümü.

Bilinen sınırlamalar

  • Desteklenmeyen türler: Bazı TensorFlow işlemleri genellikle TensorFlow'da bulunan giriş/çıkış türlerini gösterir.

Güncellemeler