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 modellerinde belirli TensorFlow işlemlerinin kullanımını etkinleştirebilir. Ancak, TensorFlow Lite modellerini TensorFlow operasyonlarıyla çalıştırmak, TensorFlow Lite yorumlayıcı ikili boyutunu artıran çekirdek TensorFlow çalışma zamanını çekmeyi gerektirir. Android için, yalnızca gerekli Tensorflow işlemlerini seçerek oluşturarak bundan kaçınabilirsiniz. Ayrıntılar için ikili boyutu küçültme konusuna bakın.
Bu belge, seçtiğiniz bir platformda TensorFlow operasyonlarını içeren bir TensorFlow Lite modelinin nasıl dönüştürüleceğini ve çalıştırılacağını özetlemektedir. Ayrıca performans ve boyut ölçümleri ile bilinen sınırlamaları da tartışır.
Bir modeli dönüştür
Aşağıdaki örnek, belirli TensorFlow operasyonlarıyla bir TensorFlow Lite modelinin nasıl oluşturulacağını gösterir.
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
Seçili TensorFlow operasyonları için destekle dönüştürülmüş bir TensorFlow Lite modeli kullanırken, istemci ayrıca gerekli TensorFlow operasyonları kitaplığını içeren bir TensorFlow Lite çalışma zamanı kullanmalıdır.
Android AAR'ı
İkili boyutu azaltmak için lütfen bir sonraki bölümde belirtildiği gibi kendi özel AAR dosyalarınızı oluşturun. İkili boyut önemli bir sorun değilse, MavenCentral'da barındırılan TensorFlow operasyonları ile önceden oluşturulmuş AAR'yi kullanmanızı öneririz.
Bunu standart TensorFlow Lite AAR'ın yanına aşağıdaki gibi ekleyerek build.gradle
bağımlılıklarınızda 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ü deposunu eklediğinizden emin olun.
Bağımlılığı ekledikten sonra, grafiğin TensorFlow işlemlerini yönetmek için gerekli temsilci, bunları gerektiren grafikler için otomatik olarak kurulmalıdır.
android {
defaultConfig {
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
}
Android AAR'ı oluşturma
İkili boyutu veya diğer gelişmiş durumları azaltmak için kitaplığı manuel olarak da oluşturabilirsiniz. Çalışan bir TensorFlow Lite yapı ortamı varsayarsak, Android AAR'ı aşağıdaki gibi belirli TensorFlow operasyonlarıyla 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, TensorFlow Lite yerleşik ve özel operasyonlar için bazel-bin/tmp/tensorflow-lite.aar
AAR dosyasını üretecektir; ve TensorFlow operasyonları için bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar
AAR dosyasını oluşturun. Çalışan bir oluşturma ortamınız yoksa, yukarıdaki dosyaları docker ile de oluşturabilirsiniz.
Oradan, 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
dosyasında, mavenLocal()
bağımlılığına sahip olduğunuzdan emin olun ve standart TensorFlow Lite bağımlılığını, belirli TensorFlow operasyonlarını destekleyen bir bağımlılıkla 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
CocoaPod'ları Kullanma
TensorFlow Lite, TensorFlowLiteSwift
veya TensorFlowLiteObjC
CocoaPod'ların yanında güvenebileceğiniz arm64
için her gece önceden oluşturulmuş seçkin TF operasyonları CocoaPod'lar sağlar.
# In your Podfile target:
pod 'TensorFlowLiteSwift' # or 'TensorFlowLiteObjC'
pod 'TensorFlowLiteSelectTfOps', '~> 0.0.1-nightly'
pod install
çalıştırdıktan sonra, seçilen TF ops çerçevesini projenize yüklemeye zorlamak için ek bir linker bayrağı sağlamanız gerekir. Xcode projenizde Build Settings
-> Other Linker Flags
gidin ve şunu ekleyin:
>= 2.9.0 sürümleri için:
-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.xcframework/ios-arm64/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps
< 2.9.0 sürümleri için:
-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps
Ardından, iOS uygulamanızda SELECT_TF_OPS
ile dönüştürülen tüm modelleri çalıştırabilmeniz gerekir. Örneğin, seçili TF operasyonları özelliğini test etmek için Görüntü Sınıflandırma iOS uygulamasını değiştirebilirsiniz.
- Model dosyasını,
SELECT_TF_OPS
etkinleştirilmiş olarak dönüştürülmüş olanla değiştirin. -
TensorFlowLiteSelectTfOps
bağımlılığını anlatıldığı gibiPodfile
ekleyin. - Ek bağlayıcı bayrağını yukarıdaki gibi ekleyin.
- Örnek uygulamayı çalıştırın ve modelin doğru çalışıp çalışmadığına bakın.
Bazel + Xcode'u Kullanma
iOS için belirli TensorFlow operasyonlarına sahip TensorFlow Lite, Bazel kullanılarak oluşturulabilir. Öncelikle, Bazel çalışma alanınızı ve .bazelrc
dosyanızı doğru bir şekilde yapılandırmak için iOS derleme yönergelerini izleyin.
Çalışma alanını iOS desteği etkin olarak yapılandırdıktan sonra, normal TensorFlowLiteC.framework
üstüne eklenebilecek seçili TF ops eklenti çerçevesini oluşturmak için aşağıdaki komutu kullanabilirsiniz. Select TF ops ç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 bazel-bin/tensorflow/lite/ios/
dizini altında çerçeveyi oluşturacaktır. Bu yeni çerçeveyi, iOS oluşturma kılavuzundaki Xcode proje ayarları bölümünde açıklanan benzer adımları izleyerek Xcode projenize ekleyebilirsiniz.
Çerçeveyi uygulama projenize ekledikten sonra, seçilen TF operasyon çerçevesini yüklemeye zorlamak için uygulama projenizde ek bir bağlayıcı bayrağı belirtilmelidir. Xcode projenizde Build Settings
-> Other Linker Flags
gidin ve şunu ekleyin:
-force_load <path/to/your/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps>
C/C++
TensorFlow Lite yorumlayıcı oluşturmak için Bazel veya CMake kullanıyorsanız, bir TensorFlow Lite Flex temsilci paylaşımlı kitaplığını bağlayarak Flex temsilcisini etkinleştirebilirsiniz. Aşağıdaki komut olarak Bazel ile oluşturabilirsiniz.
bazel build -c opt --config=monolithic tensorflow/lite/delegates/flex:tensorflowlite_flex
Bu komut bazel-bin/tensorflow/lite/delegates/flex
içinde aşağıdaki paylaşılan kitaplığı oluşturur.
platformu | kitaplık adı |
---|---|
linux | libtensorflowlite_flex.so |
Mac os işletim sistemi | libtensorflowlite_flex.dylib |
pencereler | tensorflowlite_flex.dll |
Paylaşılan kitaplık bağlı olduğu sürece çalışma zamanında yorumlayıcı oluşturulurken gerekli TfLiteDelegate
otomatik olarak kurulacağını unutmayın. Diğer temsilci türlerinde genellikle gerekli olduğu gibi, temsilci örneğini açıkça yüklemek gerekli değildir.
Piton
Seçili TensorFlow operasyonlarına sahip TensorFlow Lite, TensorFlow pip paketi ile otomatik olarak kurulacaktır. Yalnızca TensorFlow Lite Interpreter pip paketini kurmayı da seçebilirsiniz.
Metrikler
Verim
Hem yerleşik hem de seçili TensorFlow operasyonlarının bir karışımını kullanırken, aynı TensorFlow Lite optimizasyonlarının ve optimize edilmiş yerleşik operasyonların tümü mevcut olacak ve dönüştürülen modelle birlikte kullanılabilir.
Aşağıdaki tabloda, bir Pixel 2 üzerinde MobileNet üzerinde çı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
.
İnşa etmek | Zaman (milisaniye) |
---|---|
Yalnızca yerleşik işlemler ( TFLITE_BUILTIN ) | 260.7 |
Yalnızca TF operasyonlarını kullanma ( SELECT_TF_OPS ) | 264.5 |
İkili boyut
Aşağıdaki tablo, her derleme için TensorFlow Lite'ın ikili boyutunu açıklar. Bu hedefler --config=android_arm -c opt
kullanılarak Android için oluşturuldu.
İnşa etmek | C++ İkili Boyut | Android APK Boyutu |
---|---|---|
Yalnızca yerleşik işlemler | 796 KB | 561 KB |
Yerleşik operasyonlar + TF operasyonları | 23.0MB | 8.0MB |
Yerleşik operasyonlar + TF operasyonları (1) | 4.1MB | 1,8 MB |
(1) Bu kitaplıklar, 8 TFLite yerleşik ops ve 3 Tensorflow ops ile i3d-kinetics-400 modeli için özel olarak oluşturulmuştur. Daha fazla ayrıntı için lütfen TensorFlow Lite ikili boyutunu azalt bölümüne bakın.
Bilinen sınırlamalar
- Desteklenmeyen türler: Belirli TensorFlow işlemleri, TensorFlow'da tipik olarak bulunan giriş/çıkış türlerinin tamamını desteklemeyebilir.
Güncellemeler
- Sürüm 2.6
- GraphDef öznitelik tabanlı işleçler ve HashTable kaynak başlatmaları için destek geliştirildi.
- Sürüm 2.5
- Eğitim sonrası niceleme olarak bilinen bir optimizasyon uygulayabilirsiniz.
- Sürüm 2.4
- Donanım hızlandırmalı delegelerle uyumluluk iyileştirildi