Karena library operator bawaan TensorFlow Lite hanya mendukung operator TensorFlow dalam jumlah terbatas, tidak semua model dapat dikonversi. Untuk mengetahui 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 TensorFlow inti, yang akan meningkatkan ukuran biner penafsir TensorFlow Lite. Untuk Android, Anda dapat menghindari hal ini dengan secara selektif hanya membangun operasi Tensorflow yang diperlukan. Untuk mengetahui detailnya, lihat mengurangi ukuran biner.
Dokumen ini menjelaskan cara mengonversi dan run model TensorFlow Lite yang berisi operasi TensorFlow pada platform pilihan Anda. Kursus ini juga membahas metrik performa dan ukuran serta batasan umum.
Mengonversi model
Contoh berikut menunjukkan cara menghasilkan 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 library operasi TensorFlow yang diperlukan.
AAR Android
Untuk mengurangi ukuran biner, buat file AAR kustom Anda sendiri seperti yang dipandu di bagian berikutnya. Jika ukuran biner tidak menjadi masalah, sebaiknya gunakan operasi AAR dengan TensorFlow yang dihosting di MavenCentral yang telah dibangun sebelumnya.
Anda dapat menentukannya 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 setiap 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.
Catatan: Dependensi operasi TensorFlow relatif besar, sehingga Anda mungkin perlu memfilter ABI x86 yang tidak diperlukan di file .gradle
dengan menyiapkan abiFilters
.
android {
defaultConfig {
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
}
Membangun AAR Android
Untuk mengurangi ukuran biner atau kasus lanjutan lainnya, Anda juga dapat membangun library secara manual. Dengan asumsi bahwa lingkungan build TensorFlow Lite yang berfungsi, build AAR Android 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
Tindakan ini akan menghasilkan file AAR bazel-bin/tmp/tensorflow-lite.aar
untuk operasi kustom dan bawaan TensorFlow Lite; serta menghasilkan file AAR bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar
untuk operasi TensorFlow. Jika
tidak memiliki lingkungan build yang berfungsi, Anda juga dapat mem-build file di atas dengan
docker.
Dari sana, Anda dapat mengimpor file AAR langsung ke project, atau memublikasikan file AAR kustom 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, pastikan Anda memiliki dependensi mavenLocal()
dan ganti dependensi TensorFlow Lite standar dengan dependensi 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 TF ops tertentu setiap malam untuk arm64
, yang dapat Anda andalkan bersama CocoaPods TensorFlowLiteSwift
atau TensorFlowLiteObjC
.
Catatan: Jika perlu menggunakan TF Ops tertentu dalam simulator x86_64
, Anda dapat mem-build
framework operasi tertentu sendiri. Lihat bagian Menggunakan Bazel + Xcode untuk mengetahui detail selengkapnya.
# In your Podfile target:
pod 'TensorFlowLiteSwift' # or 'TensorFlowLiteObjC'
pod 'TensorFlowLiteSelectTfOps', '~> 0.0.1-nightly'
Setelah menjalankan pod install
, Anda harus menyediakan flag linker tambahan untuk
memuat secara paksa framework operasi TF yang dipilih ke dalam project Anda. Di project 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
Selanjutnya, Anda dapat menjalankan model apa pun yang dikonversi dengan SELECT_TF_OPS
di aplikasi iOS. Misalnya, Anda dapat memodifikasi aplikasi iOS Klasifikasi Gambar untuk menguji fitur operasi TF tertentu.
- Ganti file model dengan file yang dikonversi dengan
SELECT_TF_OPS
yang diaktifkan. - Tambahkan dependensi
TensorFlowLiteSelectTfOps
kePodfile
seperti yang ditunjukkan. - Tambahkan tanda penaut tambahan seperti di atas.
- Jalankan aplikasi contoh dan lihat apakah model tersebut berfungsi dengan benar.
Menggunakan Bazel + Xcode
TensorFlow Lite dengan operasi TensorFlow tertentu untuk iOS dapat dibangun menggunakan Bazel.
Pertama, ikuti petunjuk build iOS untuk mengonfigurasi
ruang kerja Bazel dan file .bazelrc
dengan benar.
Setelah mengonfigurasi ruang kerja dengan dukungan iOS yang diaktifkan, Anda dapat menggunakan perintah berikut untuk mem-build framework add-on operasi TF tertentu, yang dapat ditambahkan di atas TensorFlowLiteC.framework
biasa. Perhatikan bahwa framework operasi TF
yang dipilih tidak dapat dibuat untuk arsitektur i386
, sehingga Anda harus secara eksplisit
menyediakan daftar arsitektur target yang tidak mencakup i386
.
bazel build -c opt --config=ios --ios_multi_cpus=arm64,x86_64 \
//tensorflow/lite/ios:TensorFlowLiteSelectTfOps_framework
Tindakan ini akan membuat framework di direktori bazel-bin/tensorflow/lite/ios/
. Anda dapat menambahkan framework baru ini ke project Xcode dengan mengikuti langkah-langkah serupa yang dijelaskan di bagian Setelan project Xcode dalam panduan build iOS.
Setelah menambahkan framework ke project aplikasi Anda, tanda penaut tambahan
harus ditentukan di project aplikasi Anda untuk memuat otomatis framework operasi
TF tertentu. Di project Xcode Anda, buka Build Settings
-> Other Linker
Flags
, dan tambahkan:
-force_load <path/to/your/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps>
C/C++
Jika menggunakan Bazel atau CMake untuk membangun penafsir TensorFlow Lite, Anda dapat mengaktifkan delegasi Flex dengan menautkan library bersama delegasi TensorFlow Lite Flex. Anda dapat membuatnya dengan Bazel sebagai perintah berikut.
bazel build -c opt --config=monolithic tensorflow/lite/delegates/flex:tensorflowlite_flex
Perintah ini menghasilkan library 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 otomatis diinstal saat
membuat penafsir pada runtime, selama library bersama ditautkan. Anda tidak perlu menginstal instance delegasi secara eksplisit seperti yang biasanya diperlukan dengan jenis delegasi lainnya.
Catatan: Fitur ini tersedia mulai versi 2.7.
Python
TensorFlow Lite dengan operasi TensorFlow tertentu akan otomatis diinstal dengan paket pip TensorFlow. Anda juga dapat memilih untuk hanya menginstal paket pip TensorFlow Lite Interpreter.
Regresi
Performa
Saat menggunakan kombinasi operasi TensorFlow bawaan dan tertentu, semua pengoptimalan TensorFlow Lite 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 sesi. Target
ini dibuat untuk Android menggunakan tanda: --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) Library ini dibuat secara selektif untuk model i3d-kinetics-400 dengan 8 operasi bawaan TFLite dan 3 operasi Tensorflow. Untuk mengetahui detail selengkapnya, baca bagian Mengurangi ukuran biner TensorFlow Lite.
Batasan umum
- Jenis yang tidak didukung: Operasi TensorFlow tertentu mungkin tidak mendukung kumpulan lengkap jenis input/output yang biasanya tersedia di TensorFlow.
Info terbaru
- Versi 2.6
- Dukungan untuk operator berbasis atribut GraphDef dan inisialisasi resource HashTable telah meningkat.
- Versi 2.5
- Anda dapat menerapkan pengoptimalan yang dikenal sebagai kuantisasi pascapelatihan
- Versi 2.4
- Kompatibilitas dengan delegasi yang diakselerasi hardware telah meningkat