Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

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 modellerinde belirli TensorFlow işlemlerinin kullanımını etkinleştirebilir. Ancak TensorFlow işlemleriyle TensorFlow Lite modellerini çalıştırmak, TensorFlow Lite yorumlayıcının 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 bunu önleyebilirsiniz. Ayrıntılar için ikili boyutu küçültme konusuna bakın.

Bu belge, seçtiğiniz bir platformda TensorFlow işlemlerini içeren bir TensorFlow Lite modelinin nasıl dönüştürüleceğini ve çalıştırılacağını açıklar. Ayrıca performans ve boyut ölçütlerini ve bilinen sınırlamaları tartışır.

Bir modeli dönüştürün

Aşağıdaki örnek, belirli 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

Belirli TensorFlow operasyonları için destekle dönüştürülmüş bir TensorFlow Lite modeli kullanılırken, istemcinin ayrıca TensorFlow işlemlerinin gerekli 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, önceden oluşturulmuş AAR'yi JCenter'da barındırılan TensorFlow işlemleriyle kullanmanızı öneririz .

Bunu, aşağıdaki gibi standart TensorFlow Lite AAR ile birlikte ekleyerek build.gradle bağımlılıklarınızda belirtebilirsiniz:

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

Bağımlılığı ekledikten sonra, grafiğin TensorFlow işlemlerini işlemek için gerekli temsilci, bunları gerektiren grafikler için otomatik olarak kurulmalıdır.

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

Android AAR'yi Oluşturma

İkili boyutu veya diğer gelişmiş durumları küçültmek için kitaplığı manuel olarak da oluşturabilirsiniz. Çalışan bir TensorFlow Lite derleme ortamı varsayarak, Android AAR'yi aşağıdaki gibi belirli TensorFlow işlemleriyle 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 docker ile yukarıdaki dosyaları da 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 mavenLocal() bağımlılığına sahip olduğunuzdan emin olun ve standart TensorFlow Lite bağımlılığını belirli TensorFlow işlemlerini destekleyen bir bağımlılıkla değiştirin:

allprojects {
    repositories {
        jcenter()
        mavenLocal()
    }
}

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

iOS

CocoaPods Kullanımı

TensorFlowLiteSwift veya TensorFlowLiteObjC CocoaPod'ların yanı sıra güvenebileceğiniz gecelik önceden oluşturulmuş seçili TF operasyonları TensorFlowLiteObjC sağlıyoruz.

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

pod install çalıştırdıktan sonra, seçilen TF işlem ç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 ve şunu ekleyin:

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

Ardından, iOS uygulamanızda SELECT_TF_OPS ile dönüştürülmüş herhangi bir modeli çalıştırabilmelisiniz. Örneğin, seçili TF işlemleri ö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 etkinken dönüştürülmüş SELECT_TF_OPS .
  • TensorFlowLiteSelectTfOps bağımlılığını Podfile gibi TensorFlowLiteSelectTfOps ekleyin.
  • Ek bağlayıcı işaretini yukarıdaki gibi ekleyin.
  • Örnek uygulamayı çalıştırın ve modelin doğru çalışıp çalışmadığını görün.

Bazel + Xcode kullanma

İOS için belirli TensorFlow işlemlerine 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 olarak yapılandırdıktan sonra, normal TensorFlowLiteC.framework üzerine eklenebilecek seçili TF ops eklenti çerçevesini oluşturmak için aşağıdaki komutu kullanabilirsiniz. Seçilmiş TF işlem çerçevesinin i386 mimarisi için oluşturulamayacağını, bu nedenle 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=armv7,arm64,x86_64 \
  //tensorflow/lite/experimental/ios:TensorFlowLiteSelectTfOps_framework

Bu, çerçeveyi bazel-bin/tensorflow/lite/experimental/ios/ dizini altında 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 işlem çerçevesini yüklemeye zorlamak için uygulama projenizde ek bir bağlayıcı bayrağı belirtilmelidir. Xcode projenizde, Build Settings -> Other Linker Flags ve şunu ekleyin:

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

C ++

Bazel ardışık düzenini kullanarak TensorFlow Lite kitaplıkları oluştururken, ek TensorFlow işlem kitaplığı aşağıdaki şekilde dahil edilebilir ve etkinleştirilebilir:

  • Gerekirse --config=monolithic build bayrağı ekleyerek monolitik yapıları etkinleştirin.
  • TensorFlow ops delege kitaplık bağımlılığını derleme bağımlılıklarına tensorflow/lite/delegates/flex:delegate : tensorflow/lite/delegates/flex:delegate .

Temsilci istemci kitaplığına bağlı olduğu sürece yorumlayıcıyı çalışma zamanında oluştururken gerekli TfLiteDelegate otomatik olarak kurulacağını unutmayın. Diğer temsilci türlerinde tipik olarak gerekli olduğu gibi, temsilci örneğini açıkça yüklemek gerekli değildir.

Python

Belirli TensorFlow işlemlerine sahip TensorFlow Lite, TensorFlow pip paketiyle otomatik olarak kurulacaktır. Ayrıca sadece TensorFlow Lite Interpreter pip paketini kurmayı da seçebilirsiniz.

Metrikler

Verim

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 tümü mevcut olacak ve dönüştürülen modelle kullanılabilir olacaktır.

Aşağıdaki tablo, bir Pixel 2'de MobileNet üzerinde çıkarım yapmak için geçen ortalama süreyi açıklamaktadır. Listelenen süreler ortalama 100 çalıştırmadır. Bu hedefler, --config=android_arm64 -c opt . Bayraklar kullanılarak Android için oluşturulmuştur.

İnşa etmek Zaman (milisaniye)
Yalnızca yerleşik operasyonlar ( TFLITE_BUILTIN ) 260.7
Yalnızca TF işlemlerini kullanma ( SELECT_TF_OPS ) 264.5

İkili boyut

Aşağıdaki tablo, her yapı için TensorFlow Lite'ın ikili boyutunu açıklamaktadır. Bu hedefler, --config=android_arm -c opt kullanılarak Android için oluşturulmuştur.

İnşa etmek C ++ İkili Boyut Android APK Boyutu
Yalnızca yerleşik operasyonlar 796 KB 561 KB
Yerleşik operasyonlar + TF operasyonları 23.0 MB 8.0 MB
Yerleşik 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çilerek oluşturulmuştur . Daha fazla ayrıntı için lütfen TensorFlow Lite ikili boyutunu Azaltma bölümüne bakın.

Bilinen sınırlamalar

  • Desteklenmeyen türler: Belirli TensorFlow işlemleri, tipik olarak TensorFlow'da bulunan giriş / çıkış türlerinin tamamını desteklemeyebilir.
  • Desteklenmeyen operasyonlar: HashTableV2 gibi kaynaklardan açık başlatma gerektiren kontrol akışı operasyonları ve operasyonları henüz desteklenmemektedir.
  • Desteklenmeyen optimizasyonlar: Eğitim sonrası niceleme olarak bilinen bir optimizasyonu uygularsanız, yalnızca TensorFlow Lite operasyonları nicelleştirilir (veya optimize edilir), ancak TensorFlow operasyonları kayan (veya optimize edilmemiş) olarak kalır.

Gelecek planları

Aşağıda, bu ardışık düzen için devam etmekte olan iyileştirmelerin bir listesi verilmiştir:

  • İyileştirilmiş performans - TensorFlow operasyonlu TensorFlow Lite'ın donanım hızlandırmalı delegelerle, örneğin NNAPI ve GPU delegeleri ile güzel bir şekilde işbirliği yapmasını sağlamak için çalışmalar yapılmaktadır.