TensorFlow operatörlerini seçin

TensorFlow Lite yerleşik operatör kitaplığı yalnızca sınırlı sayıda TensorFlow operatörünü desteklediğinden her model dönüştürülebilir değildir. Ayrıntılar için operatör uyumluluğuna bakın.

Dönüşüme izin vermek için kullanıcılar, TensorFlow Lite modelinde belirli TensorFlow işlemlerinin kullanımını etkinleştirebilir. Ancak TensorFlow Lite modellerini TensorFlow işlemleri ile çalıştırmak için temel TensorFlow çalışma zamanının çekilmesi gerekir. Bu da TensorFlow Lite yorumlayıcı ikili program boyutunu artırır. Android'de, yalnızca gerekli Tensorflow işlemlerini seçerek bu durumu önleyebilirsiniz. Ayrıntılar için ikili program boyutunu azaltma konusuna bakın.

Bu belgede, seçtiğiniz bir platformda TensorFlow işlemlerini içeren TensorFlow Lite modelini nasıl dönüştürüp run özetlenmektedir. Ayrıca, performans ve boyut metrikleri ile bilinen sınırlamalar da ele alınmaktadır.

Model dönüştürme

Aşağıdaki örnekte belirli TensorFlow işlemleriyle bir TensorFlow Lite modelinin nasıl oluşturulacağı gösterilmektedir.

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 TensorFlow Lite 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

Belirli TensorFlow işlemleri için destekle dönüştürülmüş bir TensorFlow Lite modeli kullanılırken istemcinin gerekli TensorFlow işlemleri kitaplığını içeren bir TensorFlow Lite çalışma zamanı kullanması gerekir.

Android AAR

İkili program boyutunu küçültmek için lütfen sonraki bölümde açıklandığı şekilde kendi özel AAR dosyalarınızı oluşturun. İkili program boyutu önemli bir sorun değilse önceden oluşturulmuş MavenCentral'da barındırılan TensorFlow işlemleriyle AAR'yi kullanmanızı öneririz.

Bunu, standart TensorFlow Lite AAR'nin yanına ekleyerek build.gradle bağımlılıklarınızda aşağıdaki şekilde belirtebilirsiniz:

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ü deposu'nu eklediğinizden emin olun.

Bağımlılık eklendikten sonra, grafiğin TensorFlow işlemlerini yönetmek için gereken yetki verilmiş kişi, bunları gerektiren grafikler için otomatik olarak yüklenmelidir.

Not: TensorFlow işlemleri bağımlılığı nispeten büyüktür. Bu nedenle, abiFilters ayarlarınızı yaparak .gradle dosyanızdaki gereksiz x86 ABI'lerini filtrelemek isteyebilirsiniz.

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 kitaplığı manuel olarak da derleyebilirsiniz. Çalışan bir TensorFlow Lite derleme ortamı olduğunu varsayarsak Android AAR'yi belirli TensorFlow işlemleriyle aşağıdaki gibi oluşturun:

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, TensorFlow Lite yerleşik ve özel işlemler için bazel-bin/tmp/tensorflow-lite.aar AAR dosyasını, TensorFlow işlemleri için de AAR dosyasını bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar oluşturur. Çalışan bir derleme ortamınız yoksa docker ile dosyaların üzerinde de oluşturabilirsiniz.

Buradan, AAR dosyalarını doğrudan projenize aktarabilir veya özel AAR dosyalarını yerel Maven deponuzda yayınlayabilirsiniz:

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 öğesinde mavenLocal() bağımlılığına sahip olduğunuzdan emin olun ve standart TensorFlow Lite bağımlılığını belirli TensorFlow işlemleri için desteğe sahip olanla değiştirin:

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

TensorFlow Lite, arm64 için gecelik önceden oluşturulmuş seçkin TF operasyonları CocoaPods sunar. TensorFlowLiteSwift veya TensorFlowLiteObjC CocoaPods'a ek olarak bu CocoaPods'u kullanabilirsiniz.

Not: x86_64 simülasyon aracında belirli TF işlemlerini kullanmanız gerekiyorsa seçili işlem çerçevesini kendiniz oluşturabilirsiniz. Daha ayrıntılı bilgi için Bazel + Xcode kullanma bölümüne bakın.

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

pod install çalıştırdıktan sonra, seçili TF işlemleri çerçevesini projenize yüklemeyi zorunlu kılmak için ek bir bağlayıcı işareti sağlamanız gerekir. Xcode projenizde Build Settings -> Other Linker Flags bölümüne gidin 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'dan küçük sürümler için:

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

Bu işlemin ardından iOS uygulamanızda SELECT_TF_OPS ile dönüştürülmüş tüm modelleri çalıştırabilirsiniz. Örneğin, belirli TF işlemleri özelliğini test etmek için Image Classification iOS uygulamasını değiştirebilirsiniz.

  • 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 TensorFlow Lite Bazel kullanılarak oluşturulabilir. Öncelikle, Bazel çalışma alanınızı ve .bazelrc dosyanızı doğru şekilde yapılandırmak için iOS derleme talimatlarını uygulayın.

Çalışma alanını iOS desteğini etkinleştirecek şekilde yapılandırdıktan sonra, normal TensorFlowLiteC.framework öğesinin üzerine eklenebilecek seçili TF ops eklenti çerçevesini oluşturmak için aşağıdaki komutu kullanabilirsiniz. Belirli TF işlem çerçevesinin i386 mimarisi için oluşturulamayacağını unutmayın. Bu nedenle, i386 dışındaki hedef mimarilerin listesini açıkça sağlamanız gerekir.

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/ dizini altında oluşturur. iOS derleme kılavuzundaki Xcode proje ayarları bölümünde açıklanan benzer adımları uygulayarak bu yeni çerçeveyi Xcode projenize ekleyebilirsiniz.

Çerçeveyi uygulama projenize ekledikten sonra, seçili TF işlem çerçevesinin yüklenmesini zorunlu kılmak için uygulama projenizde ek bir bağlayıcı işareti belirtilmelidir. Xcode projenizde Build Settings -> Other Linker Flags bölümüne gidin ve şunu ekleyin:

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

C/C++

TensorFlow Lite yorumcusu oluşturmak için Bazel veya CMake kullanıyorsanız bir TensorFlow Lite Flex yetki verilmiş paylaşılan kitaplığı bağlayarak Flex yetki verme özelliğini etkinleştirebilirsiniz. Aşağıdaki komutla Bazel kullanarak web sitesi oluşturabilirsiniz.

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

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

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

Paylaşılan kitaplık bağlı olduğu sürece, çalışma zamanında çevirmen oluşturulurken gerekli TfLiteDelegate öğesinin otomatik olarak yükleneceğini unutmayın. Diğer yetki verme türlerinde genellikle gerekli olduğu gibi, temsilci örneğini açık bir şekilde yüklemek gerekmez.

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

Python

Belirli TensorFlow işlemlerine sahip TensorFlow Lite, TensorFlow pip paketiyle otomatik olarak yüklenir. Ayrıca, yalnızca TensorFlow Lite Çevirmen pip paketini yüklemeyi de tercih edebilirsiniz.

Metrikler

Performans

Hem yerleşik hem de seçili TensorFlow işlemlerinin bir karışımını kullanırken, aynı TensorFlow Lite optimizasyonlarının ve optimize edilmiş yerleşik işlemlerin hepsi, dönüştürülen modelle kullanılabilir ve kullanılabilir olur.

Aşağıdaki tabloda, Pixel 2'de MobileNet'te çıkarım yapmak için geçen ortalama süre açıklanmaktadır. Listelenen süreler ortalama 100 çalıştırmadır. Bu hedefler, Android için şu işaretler kullanılarak oluşturulmuştur: --config=android_arm64 -c opt.

Topluluk 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 TensorFlow Lite'ın ikili boyutu açıklanmaktadır. Bu hedefler Android için --config=android_arm -c opt kullanılarak oluşturulmuştur.

Topluluk 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, 8 TFLite yerleşik işlem ve 3 Tensorflow işlemi ile i3d-kinetics-400 modeli için özel olarak oluşturulmuştur. Daha fazla ayrıntı için lütfen TensorFlow Lite ikili program boyutunu küçültme bölümüne bakın.

Bilinen sınırlamalar

  • Desteklenmeyen türler: Belirli TensorFlow işlemleri, TensorFlow'da genellikle bulunan giriş/çıkış türlerinin tamamını desteklemeyebilir.

Güncellemeler

  • Sürüm 2.6
    • GraphDef özelliğine dayalı operatör ve HashTable kaynak başlatma desteği iyileştirildi.
  • Sürüm 2.5
  • Sürüm 2.4
    • Donanım hızlandırmalı yetkilerle uyumluluk iyileştirildi