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, sehingga meningkatkan ukuran biner penafsir TensorFlow Lite. Untuk Android, Anda dapat menghindari hal ini dengan secara selektif hanya membangun operasi Tensorflow yang diperlukan. Untuk detailnya, lihat mengurangi 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 .
Konversi 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 perpustakaan operasi TensorFlow yang diperlukan.
Android AAR
Untuk mengurangi ukuran biner, buatlah file AAR kustom Anda sendiri seperti yang dipandu di bagian selanjutnya . Jika ukuran biner tidak terlalu menjadi perhatian, sebaiknya gunakan AAR bawaan dengan operasi TensorFlow yang dihosting di MavenCentral .
Anda dapat menentukan ini dalam dependensi build.gradle
dengan menambahkannya bersama TensorFlow Lite AAR 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 ketergantungan, 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 lanjutan lainnya, Anda juga dapat membuat perpustakaan secara manual. Dengan asumsi lingkungan build TensorFlow Lite berfungsi , buat 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 operasi bawaan dan kustom TensorFlow Lite; dan buat 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 ganti dependensi TensorFlow Lite standar dengan dependensi yang mendukung 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 CocoaPod
TensorFlow Lite menyediakan operasi TF pilihan CocoaPods pilihan prebuilt 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 tanda linker tambahan untuk memuat paksa kerangka kerja operasi TF yang dipilih ke dalam proyek Anda. Di 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 yang dipilih.
- Ganti file model dengan file yang dikonversi dengan
SELECT_TF_OPS
diaktifkan. - Tambahkan dependensi
TensorFlowLiteSelectTfOps
kePodfile
seperti yang diinstruksikan. - Tambahkan tanda linker tambahan seperti di atas.
- Jalankan aplikasi contoh dan lihat apakah modelnya 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 yang diaktifkan, Anda dapat menggunakan perintah berikut untuk membangun kerangka kerja tambahan operasi TF pilihan, yang dapat ditambahkan di atas TensorFlowLiteC.framework
reguler. Perhatikan bahwa kerangka kerja operasi TF yang dipilih tidak dapat dibuat untuk arsitektur i386
, jadi Anda perlu secara eksplisit memberikan daftar arsitektur target kecuali 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 bagian pengaturan proyek Xcode di panduan pembuatan iOS.
Setelah menambahkan kerangka kerja ke dalam proyek aplikasi Anda, tanda tautan tambahan harus ditentukan dalam proyek aplikasi Anda untuk memuat paksa kerangka kerja operasi TF yang dipilih. Di 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 penerjemah 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 |
jendela | tensorflowlite_flex.dll |
Perhatikan bahwa TfLiteDelegate
yang diperlukan akan diinstal secara otomatis saat membuat penerjemah saat runtime selama perpustakaan bersama terhubung. Tidak perlu menginstal instance delegasi secara eksplisit seperti yang biasanya diperlukan pada tipe delegasi lainnya.
ular 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 bawaan dan operasi TensorFlow tertentu, 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 diperlukan untuk menjalankan inferensi di MobileNet pada Pixel 2. Waktu yang tercantum adalah rata-rata 100 proses. 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 | 796 KB | 561 KB |
Operasi bawaan + operasi TF | 23,0 MB | 8,0 MB |
Operasi bawaan + Operasi TF (1) | 4,1 MB | 1,8 MB |
(1) Pustaka ini dibuat secara selektif untuk model i3d-kinetics-400 dengan 8 operasi bawaan TFLite dan 3 operasi Tensorflow. Untuk lebih jelasnya, silakan lihat bagian Mengurangi ukuran biner TensorFlow Lite .
Keterbatasan yang diketahui
- Jenis yang tidak didukung: Operasi TensorFlow tertentu mungkin tidak mendukung seluruh 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
- Anda dapat menerapkan pengoptimalan yang dikenal sebagai kuantisasi pasca pelatihan
- Versi 2.4
- Kompatibilitas dengan delegasi yang dipercepat perangkat keras telah meningkat