Pilih operator TensorFlow

Karena pustaka operator bawaan TensorFlow Lite hanya mendukung operator TensorFlow dalam jumlah terbatas, tidak semua model dapat dikonversi. Untuk detailnya, lihat kompatibilitas operator .

Untuk mengizinkan konversi, pengguna dapat mengaktifkan penggunaan operasi TensorFlow tertentu dalam model TensorFlow Lite mereka. Namun, menjalankan model TensorFlow Lite dengan operasi TensorFlow memerlukan penarikan runtime inti TensorFlow, yang meningkatkan ukuran biner juru bahasa TensorFlow Lite. Untuk Android, Anda dapat menghindari ini dengan secara selektif hanya membangun operasi Tensorflow yang diperlukan. Untuk detailnya, lihat pengurangan ukuran biner .

Dokumen ini menguraikan cara mengonversi dan menjalankan model TensorFlow Lite yang berisi operasi TensorFlow pada platform pilihan Anda. Ini juga membahas metrik kinerja dan ukuran serta batasan yang diketahui .

Mengonversi model

Contoh berikut menunjukkan cara membuat model TensorFlow Lite dengan operasi TensorFlow tertentu.

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)

Jalankan Inferensi

Saat menggunakan model TensorFlow Lite yang telah dikonversi dengan dukungan untuk operasi TensorFlow tertentu, klien juga harus menggunakan runtime TensorFlow Lite yang menyertakan pustaka operasi TensorFlow yang diperlukan.

AAR Android

Untuk mengurangi ukuran biner, harap buat file AAR kustom Anda sendiri seperti yang dipandu di bagian selanjutnya . Jika ukuran biner bukan masalah besar, sebaiknya gunakan AAR prebuilt dengan operasi TensorFlow yang dihosting di MavenCentral .

Anda dapat menentukan ini dalam dependensi build.gradle dengan menambahkannya bersama AAR TensorFlow Lite standar sebagai berikut:

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'
}

Untuk menggunakan snapshot malam, pastikan Anda telah menambahkan repositori snapshot Sonatype .

Setelah Anda menambahkan dependensi, delegasi yang diperlukan untuk menangani operasi TensorFlow grafik harus diinstal secara otomatis untuk grafik yang memerlukannya.

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

Membangun Android AAR

Untuk mengurangi ukuran biner atau kasus tingkat lanjut lainnya, Anda juga dapat membuat pustaka secara manual. Dengan asumsi lingkungan build TensorFlow Lite berfungsi , build Android AAR dengan operasi TensorFlow tertentu sebagai berikut:

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

Ini akan menghasilkan file AAR bazel-bin/tmp/tensorflow-lite.aar untuk TensorFlow Lite built-in dan custom ops; dan hasilkan file AAR bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar untuk operasi TensorFlow. Jika Anda tidak memiliki lingkungan build yang berfungsi, Anda juga dapat membuat file di atas dengan docker .

Dari sana, Anda dapat mengimpor file AAR langsung ke proyek Anda, atau menerbitkan file AAR khusus ke repositori Maven lokal Anda:

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

Terakhir, di build.gradle aplikasi Anda, pastikan Anda memiliki dependensi mavenLocal() dan mengganti dependensi TensorFlow Lite standar dengan yang memiliki dukungan untuk operasi TensorFlow tertentu:

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

Menggunakan CocoaPods

TensorFlow Lite menyediakan CocoaPods operasi TF prebuilt pilihan setiap malam untuk arm64 , yang dapat Anda andalkan bersama TensorFlowLiteSwift atau TensorFlowLiteObjC CocoaPods.

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

Setelah menjalankan pod install , Anda perlu memberikan flag linker tambahan untuk memaksa memuat kerangka operasi TF terpilih ke dalam proyek Anda. Dalam proyek Xcode Anda, buka Build Settings -> Other Linker Flags , dan tambahkan:

Untuk versi >= 2.9.0:

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

Untuk versi < 2.9.0:

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

Anda kemudian dapat menjalankan model apa pun yang dikonversi dengan SELECT_TF_OPS di aplikasi iOS Anda. Misalnya, Anda dapat memodifikasi aplikasi iOS Klasifikasi Gambar untuk menguji fitur operasi TF pilihan.

  • Ganti file model dengan yang dikonversi dengan SELECT_TF_OPS diaktifkan.
  • Tambahkan dependensi TensorFlowLiteSelectTfOps ke Podfile seperti yang diinstruksikan.
  • Tambahkan flag linker tambahan seperti di atas.
  • Jalankan aplikasi contoh dan lihat apakah model berfungsi dengan benar.

Menggunakan Bazel + Xcode

TensorFlow Lite dengan operasi TensorFlow tertentu untuk iOS dapat dibuat menggunakan Bazel. Pertama, ikuti petunjuk pembuatan iOS untuk mengonfigurasi ruang kerja Bazel dan file .bazelrc Anda dengan benar.

Setelah Anda mengonfigurasi ruang kerja dengan dukungan iOS diaktifkan, Anda dapat menggunakan perintah berikut untuk membuat kerangka kerja addon ops TF tertentu, yang dapat ditambahkan di atas TensorFlowLiteC.framework biasa. Perhatikan bahwa kerangka operasi TF pilihan tidak dapat dibangun untuk arsitektur i386 , jadi Anda harus secara eksplisit memberikan daftar arsitektur target yang tidak termasuk i386 .

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

Ini akan menghasilkan kerangka kerja di bawah direktori bazel-bin/tensorflow/lite/ios/ . Anda dapat menambahkan kerangka kerja baru ini ke proyek Xcode Anda dengan mengikuti langkah serupa yang dijelaskan di bawah bagian pengaturan proyek Xcode di panduan pembuatan iOS.

Setelah menambahkan framework ke dalam project aplikasi Anda, flag linker tambahan harus ditentukan di project aplikasi Anda untuk memuat paksa framework operasi TF yang dipilih. Dalam proyek Xcode Anda, buka Build Settings -> Other Linker Flags , dan tambahkan:

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

C/C++

Jika Anda menggunakan Bazel atau CMake untuk membuat juru bahasa TensorFlow Lite, Anda dapat mengaktifkan delegasi Flex dengan menautkan pustaka bersama delegasi TensorFlow Lite Flex. Anda dapat membangunnya dengan Bazel sebagai perintah berikut.

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

Perintah ini menghasilkan pustaka bersama berikut di bazel-bin/tensorflow/lite/delegates/flex .

Platform Nama perpustakaan
Linux libtensorflowlite_flex.so
macOS libtensorflowlite_flex.dylib
Windows tensorflowlite_flex.dll

Perhatikan bahwa TfLiteDelegate yang diperlukan akan diinstal secara otomatis saat membuat juru bahasa pada waktu proses selama pustaka bersama ditautkan. Tidak perlu menginstal instance delegasi secara eksplisit seperti yang biasanya diperlukan dengan tipe delegasi lainnya.

Piton

TensorFlow Lite dengan operasi TensorFlow tertentu akan diinstal secara otomatis dengan paket pip TensorFlow . Anda juga dapat memilih untuk hanya menginstal paket pip TensorFlow Lite Interpreter .

Metrik

Pertunjukan

Saat menggunakan campuran operasi TensorFlow pilihan dan bawaan, semua pengoptimalan TensorFlow Lite yang sama dan operasi bawaan yang dioptimalkan akan tersedia dan dapat digunakan dengan model yang dikonversi.

Tabel berikut menjelaskan waktu rata-rata yang dibutuhkan untuk menjalankan inferensi di MobileNet pada Pixel 2. Waktu yang tercantum adalah rata-rata 100 kali berjalan. Target ini dibuat untuk Android menggunakan flag: --config=android_arm64 -c opt .

Membangun Waktu (milidetik)
Hanya operasi bawaan ( TFLITE_BUILTIN ) 260.7
Hanya menggunakan operasi TF ( SELECT_TF_OPS ) 264.5

Ukuran biner

Tabel berikut menjelaskan ukuran biner TensorFlow Lite untuk setiap build. Target ini dibuat untuk Android menggunakan --config=android_arm -c opt .

Membangun Ukuran Biner C++ Ukuran APK Android
Hanya operasi bawaan 796KB 561KB
Operasi bawaan + operasi TF 23,0 MB 8,0 MB
Operasi bawaan + operasi TF (1) 4,1 MB 1,8MB

(1) Pustaka ini dibuat secara selektif untuk model i3d-kinetics-400 dengan 8 operasi bawaan TFLite dan 3 operasi Tensorflow. Untuk detail selengkapnya, lihat bagian Mengurangi ukuran biner TensorFlow Lite .

Batasan yang diketahui

  • Jenis yang tidak didukung: Operasi TensorFlow tertentu mungkin tidak mendukung set lengkap jenis input/output yang biasanya tersedia di TensorFlow.

Pembaruan

  • Versi 2.6
    • Dukungan untuk operator berbasis atribut GraphDef dan inisialisasi sumber daya HashTable telah ditingkatkan.
  • Versi 2.5
  • Versi 2.4
    • Kompatibilitas dengan delegasi yang dipercepat perangkat keras telah meningkat