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 işlemleriyle çalıştırmak, çekirdek TensorFlow çalışma zamanının çekilmesini gerektirir, bu da TensorFlow Lite yorumlayıcısının ikili boyutunu artırır. Android için, yalnızca gerekli Tensorflow operasyonlarını seçerek oluşturarak bunu önleyebilirsiniz. Ayrıntılar için ikili boyutu azaltma konusuna bakın.
Bu belge, TensorFlow operasyonlarını içeren bir TensorFlow Lite modelinin seçtiğiniz bir platformda 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ışılmaktadır.
Bir modeli dönüştürme
Aşağıdaki örnek, seçilen TensorFlow işlemleriyle 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ı desteğiyle dönüştürülmüş bir TensorFlow Lite modeli kullanılırken, istemcinin ayrıca gerekli TensorFlow operasyonları kitaplığını içeren bir TensorFlow Lite çalışma zamanı kullanması gerekir.
Android AAR'ı
İkili boyutu azaltmak için lütfen bir sonraki bölümde anlatıldığı gibi kendi özel AAR dosyalarınızı oluşturun. İkili boyut önemli bir sorun değilse, MavenCentral'da barındırılan TensorFlow işlemleriyle önceden oluşturulmuş AAR'ı kullanmanızı öneririz.
Bunu build.gradle
bağımlılıklarınızda standart TensorFlow Lite AAR'ın yanına aşağıdaki şekilde ekleyerek 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 oluşturma ortamı olduğunu varsayarsak, Android AAR'ı seçilen 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, TensorFlow Lite yerleşik ve özel operasyonlar için bazel-bin/tmp/tensorflow-lite.aar
AAR dosyasını oluşturacaktır; ve TensorFlow operasyonları için bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar
AAR dosyasını oluşturun. Çalışan bir derleme ortamınız yoksa, yukarıdaki dosyaları docker ile 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
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 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ı sıra güvenebileceğiniz, arm64
için her gece önceden oluşturulmuş seçkin TF ops 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 operasyon çerçevesini projenize yüklemeye zorlamak için ek bir bağlayıcı bayrağı sağlamanız gerekir. Xcode projenizde Build Settings
-> Other Linker Flags
seçeneğine 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
Daha sonra iOS uygulamanızda SELECT_TF_OPS
ile dönüştürülen tüm modelleri çalıştırabilmeniz gerekir. Örneğin, belirli 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. - Talimatlarda belirtildiği gibi
TensorFlowLiteSelectTfOps
bağımlılığınıPodfile
ekleyin. - Ek bağlayıcı bayrağını yukarıdaki gibi ekleyin.
- Örnek uygulamayı çalıştırın ve modelin düzgün çalışıp çalışmadığını görün.
Bazel + Xcode'u kullanma
İOS 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 şekilde yapılandırmak için iOS oluşturma talimatlarını izleyin.
Çalışma alanını iOS desteği etkin olacak şekilde yapılandırdıktan sonra, normal TensorFlowLiteC.framework
üzerine eklenebilecek select TF ops addon çerçevesini oluşturmak için aşağıdaki komutu kullanabilirsiniz. Select TF operasyon çerçevesinin i386
mimarisi için oluşturulamayacağını, dolayısıyla i386
dışındaki hedef mimarilerin listesini açıkça sağlamanız gerektiğini unutmayın.
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 derleme 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
seçeneğine gidin ve şunu ekleyin:
-force_load <path/to/your/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps>
C/C++
TensorFlow Lite yorumlayıcısını oluşturmak için Bazel veya CMake kullanıyorsanız, bir TensorFlow Lite Flex temsilcisi paylaşılan kitaplığını bağlayarak Flex temsilcisini etkinleştirebilirsiniz. Bazel ile aşağıdaki komutla build edebilirsiniz.
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 | Kütüphane 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ıyı oluştururken 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üklemeniz gerekmez.
Python
Seçilen TensorFlow operasyonlarına sahip TensorFlow Lite, TensorFlow pip paketiyle otomatik olarak kurulacaktır. Ayrıca yalnızca TensorFlow Lite Interpreter pip paketini kurmayı da seçebilirsiniz.
Metrikler
Verim
Hem yerleşik hem de seçilmiş 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ü, dönüştürülen modelde mevcut olacak ve kullanılabilir olacaktır.
Aşağıdaki tablo, Pixel 2'de MobileNet'te çıkarımın çalıştırılması için geçen ortalama süreyi açıklamaktadır. Listelenen süreler ortalama 100 çalıştırmadır. Bu hedefler Android için şu bayraklar kullanılarak oluşturuldu: --config=android_arm64 -c opt
.
İnşa etmek | Zaman (milisaniye) |
---|---|
Yalnızca yerleşik işlemler ( TFLITE_BUILTIN ) | 260.7 |
Yalnızca TF işlemlerini kullanma ( SELECT_TF_OPS ) | 264,5 |
İkili boyut
Aşağıdaki tabloda her yapı için TensorFlow Lite'ın ikili boyutu açıklanmaktadır. 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,0 MB | 8,0 MB |
Dahili operasyonlar + TF operasyonları (1) | 4,1 MB | 1,8 MB |
(1) Bu kitaplıklar, 8 TFLite yerleşik işlem ve 3 Tensorflow işlemiyle i3d-kinetics-400 modeli için seçici olarak oluşturulmuştur. Daha fazla ayrıntı için lütfen TensorFlow Lite ikili boyutunu azaltın bölümüne bakın.
Bilinen sınırlamalar
- Desteklenmeyen türler: Bazı TensorFlow işlemleri, genellikle TensorFlow'da bulunan giriş/çıkış türlerinin tamamını desteklemeyebilir.
Güncellemeler
- Sürüm 2.6
- GraphDef özniteliği tabanlı operatörler ve HashTable kaynak başlatmalarına yönelik destekler iyileştirildi.
- Sürüm 2.5
- Eğitim sonrası niceleme olarak bilinen bir optimizasyonu uygulayabilirsiniz.
- Sürüm 2.4
- Donanım hızlandırmalı delegelerle uyumluluk iyileştirildi