Dengan Metadata LiteRT, developer dapat membuat kode wrapper untuk mengaktifkan integrasi di Android. Bagi sebagian besar developer, antarmuka grafis Pengikatan Model ML Android Studio adalah yang paling mudah digunakan. Jika Anda memerlukan penyesuaian lebih lanjut atau menggunakan alat command line, LiteRT Codegen juga tersedia.
Menggunakan Binding Model ML Android Studio
Untuk model LiteRT yang ditingkatkan dengan
metadata, developer dapat menggunakan Pengikatan Model ML Android Studio untuk mengonfigurasi setelan project secara otomatis dan
membuat class wrapper berdasarkan metadata model. Kode wrapper menghilangkan
kebutuhan untuk berinteraksi langsung dengan ByteBuffer. Sebagai gantinya, developer dapat berinteraksi dengan model LiteRT menggunakan objek yang diketik seperti Bitmap dan Rect.
Mengimpor model LiteRT di Android Studio
Klik kanan modul yang ingin Anda gunakan model TFLite-nya atau klik
File, laluNew>Other>LiteRT ModelPilih lokasi file TFLite Anda. Perhatikan bahwa alat ini akan mengonfigurasi dependensi modul atas nama Anda dengan binding Model ML dan semua dependensi akan otomatis dimasukkan ke file
build.gradlemodul Android Anda.Opsional: Centang kotak kedua untuk mengimpor TensorFlow GPU jika Anda ingin menggunakan akselerasi GPU.
Klik
Finish.Layar berikut akan muncul setelah impor berhasil. Untuk mulai menggunakan model, pilih Kotlin atau Java, lalu salin dan tempel kode di bagian
Sample Code. Anda dapat kembali ke layar ini dengan mengklik dua kali model TFLite di direktorimldi Android Studio.
Mempercepat inferensi model
ML Model Binding menyediakan cara bagi developer untuk mempercepat kode mereka melalui penggunaan delegasi dan jumlah thread.
Langkah 1. Periksa file build.gradle modul untuk memastikan file tersebut berisi dependensi berikut:
dependencies {
...
// For the LiteRT GPU delegate, we need
// 'com.google.ai.edge.litert:litert-gpu' version 1.*.
implementation 'com.google.ai.edge.litert:litert-gpu:1.4.1'
}
Langkah 2. Mendeteksi apakah GPU yang berjalan di perangkat kompatibel dengan delegasi GPU TensorFlow. Jika tidak, jalankan model menggunakan beberapa thread CPU:
Kotlin
import org.tensorflow.lite.gpu.CompatibilityList import org.tensorflow.lite.gpu.GpuDelegate val compatList = CompatibilityList() val options = if(compatList.isDelegateSupportedOnThisDevice) { // if the device has a supported GPU, add the GPU delegate Model.Options.Builder().setDevice(Model.Device.GPU).build() } else { // if the GPU is not supported, run on 4 threads Model.Options.Builder().setNumThreads(4).build() } // Initialize the model as usual feeding in the options object val myModel = MyModel.newInstance(context, options) // Run inference per sample code
Java
import org.tensorflow.lite.support.model.Model import org.tensorflow.lite.gpu.CompatibilityList; import org.tensorflow.lite.gpu.GpuDelegate; // Initialize interpreter with GPU delegate Model.Options options; CompatibilityList compatList = CompatibilityList(); if(compatList.isDelegateSupportedOnThisDevice()){ // if the device has a supported GPU, add the GPU delegate options = Model.Options.Builder().setDevice(Model.Device.GPU).build(); } else { // if the GPU is not supported, run on 4 threads options = Model.Options.Builder().setNumThreads(4).build(); } MyModel myModel = new MyModel.newInstance(context, options); // Run inference per sample code
Membuat antarmuka model dengan generator kode LiteRT
Untuk model LiteRT yang ditingkatkan dengan metadata,
developer dapat menggunakan generator kode wrapper Android LiteRT untuk membuat kode wrapper khusus platform. Kode wrapper menghilangkan kebutuhan untuk berinteraksi langsung dengan ByteBuffer. Sebagai gantinya, developer dapat berinteraksi dengan model TensorFlow Lite menggunakan objek yang diketik seperti Bitmap dan Rect.
Kegunaan generator kode bergantung pada kelengkapan entri metadata model LiteRT. Lihat bagian <Codegen usage> di kolom yang relevan dalam
metadata_schema.fbs,
untuk melihat cara alat codegen mengurai setiap kolom.
Buat Kode wrapper
Anda harus menginstal alat berikut di terminal:
pip install tflite-support
Setelah selesai, generator kode dapat digunakan menggunakan sintaksis berikut:
tflite_codegen --model=./model_with_metadata/mobilenet_v1_0.75_160_quantized.tflite \
--package_name=org.tensorflow.lite.classify \
--model_class_name=MyClassifierModel \
--destination=./classify_wrapper
Kode yang dihasilkan akan berada di direktori tujuan. Jika Anda menggunakan Google Colab atau lingkungan jarak jauh lainnya, mungkin lebih mudah untuk mengompresi hasil dalam arsip ZIP dan mendownloadnya ke project Android Studio Anda:
# Zip up the generated code
!zip -r classify_wrapper.zip classify_wrapper/
# Download the archive
from google.colab import files
files.download('classify_wrapper.zip')
Menggunakan kode yang dihasilkan
Langkah 1: Impor kode yang dibuat
Buka zip kode yang dihasilkan jika perlu ke dalam struktur direktori. Root dari
kode yang dihasilkan diasumsikan sebagai SRC_ROOT.
Buka project Android Studio tempat Anda ingin menggunakan model LiteRT dan
impor modul yang dihasilkan dengan: And File -> New -> Import Module -> select
SRC_ROOT
Dengan menggunakan contoh di atas, direktori dan modul yang diimpor akan disebut
classify_wrapper.
Langkah 2: Perbarui file build.gradle aplikasi
Di modul aplikasi yang akan menggunakan modul library yang dihasilkan:
Di bagian android, tambahkan kode berikut:
aaptOptions {
noCompress "tflite"
}
Di bagian dependensi, tambahkan kode berikut:
implementation project(":classify_wrapper")
Langkah 3: Menggunakan model
// 1. Initialize the model
MyClassifierModel myImageClassifier = null;
try {
myImageClassifier = new MyClassifierModel(this);
} catch (IOException io){
// Error reading the model
}
if(null != myImageClassifier) {
// 2. Set the input with a Bitmap called inputBitmap
MyClassifierModel.Inputs inputs = myImageClassifier.createInputs();
inputs.loadImage(inputBitmap));
// 3. Run the model
MyClassifierModel.Outputs outputs = myImageClassifier.run(inputs);
// 4. Retrieve the result
Map<String, Float> labeledProbability = outputs.getProbability();
}
Mempercepat inferensi model
Kode yang dihasilkan memberikan cara bagi developer untuk mempercepat kode mereka melalui penggunaan delegasi dan jumlah thread. Parameter ini dapat ditetapkan saat menginisialisasi objek model karena memerlukan tiga parameter:
Context: Konteks dari Aktivitas atau Layanan Android- (Opsional)
Device: Delegasi akselerasi TFLite. Misalnya: GPUDelegate - (Opsional)
numThreads: Jumlah thread yang digunakan untuk menjalankan model - defaultnya adalah satu.
Misalnya, untuk menggunakan delegasi GPU dan hingga tiga thread, Anda dapat menginisialisasi model seperti ini:
try {
myImageClassifier = new MyClassifierModel(this, Model.Device.GPU, 3);
} catch (IOException io){
// Error reading the model
}
Pemecahan masalah
Jika Anda mendapatkan error 'java.io.FileNotFoundException: This file can not be opened as a file descriptor; it is probably compressed', sisipkan baris berikut di bagian android pada modul aplikasi yang akan menggunakan modul library:
aaptOptions {
noCompress "tflite"
}