Bằng cách sử dụng Siêu dữ liệu LiteRT, nhà phát triển có thể tạo mã bao bọc để cho phép tích hợp trên Android. Đối với hầu hết các nhà phát triển, việc giao diện đồ hoạ Liên kết mô hình học máy của Android Studio là dễ sử dụng nhất. Nếu bạn cần tuỳ chỉnh thêm hoặc đang sử dụng dòng lệnh Trình tạo mã LiteRT cũng được cung cấp.
Sử dụng tính năng liên kết mô hình học máy của Android Studio
Đối với các mô hình LiteRT được nâng cao bằng siêu dữ liệu,
nhà phát triển có thể sử dụng tính năng Liên kết mô hình học máy của Android Studio để tự động định cấu hình
các chế độ cài đặt cho dự án và tạo lớp trình bao bọc dựa trên mô hình
siêu dữ liệu. Mã bao bọc giúp loại bỏ nhu cầu tương tác trực tiếp với
ByteBuffer
. Thay vào đó, nhà phát triển có thể tương tác với mô hình LiteRT
bằng các đối tượng đã nhập như Bitmap
và Rect
.
Nhập mô hình LiteRT trong Android Studio
Nhấp chuột phải vào mô-đun mà bạn muốn sử dụng mô hình TFLite hoặc nhấp vào
File
, sau đó làNew
>Other
>LiteRT Model
Chọn vị trí của tệp TFLite. Xin lưu ý rằng công cụ này sẽ định cấu hình phần phụ thuộc của mô-đun thay cho bạn bằng liên kết Mô hình học máy và tất cả phần phụ thuộc được tự động chèn vào Tệp
build.gradle
.Không bắt buộc: Chọn hộp đánh dấu thứ hai để nhập GPU TensorFlow nếu bạn muốn sử dụng tính năng tăng tốc GPU.
Nhấp vào
Finish
.Màn hình sau đây sẽ xuất hiện sau khi quá trình nhập thành công. Để bắt đầu bằng cách sử dụng mô hình, chọn Kotlin hoặc Java, sao chép và dán mã vào bên dưới
Sample Code
. Bạn có thể quay lại màn hình này bằng cách nhấp đúp mô hình TFLite trong thư mụcml
trong Android Studio.
Tăng tốc suy luận mô hình
Liên kết mô hình học máy giúp nhà phát triển tăng tốc mã thông qua việc sử dụng đại biểu và số lượng luồng.
Bước 1. Kiểm tra tệp build.gradle
của mô-đun xem có chứa nội dung sau hay không
phần phụ thuộc:
dependencies {
...
// TFLite GPU delegate 2.3.0 or above is required.
implementation 'com.google.ai.edge.litert:litert-gpu:2.3.0'
}
Bước 2. Phát hiện xem GPU đang chạy trên thiết bị có tương thích với GPU TensorFlow hay không uỷ quyền, nếu không chạy mô hình bằng nhiều luồng 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
Tạo giao diện mô hình bằng trình tạo mã LiteRT
Đối với mô hình LiteRT được nâng cao bằng siêu dữ liệu,
nhà phát triển có thể dùng trình tạo mã trình bao bọc Android LiteRT để tạo
mã trình bao bọc dành riêng cho nền tảng. Mã bao bọc giúp loại bỏ nhu cầu tương tác
trực tiếp với ByteBuffer
. Thay vào đó, nhà phát triển có thể tương tác với TensorFlow
Mô hình thu gọn với các đối tượng đã nhập như Bitmap
và Rect
.
Tính hữu ích của trình tạo mã phụ thuộc vào mức độ hoàn chỉnh của
Mục siêu dữ liệu của mô hình LiteRT. Tham khảo phần <Codegen usage>
vào các trường có liên quan trong
metadata_schema.fbs,
để xem cách công cụ tạo mã phân tích cú pháp từng trường.
Tạo mã trình bao bọc
Bạn sẽ cần cài đặt công cụ sau đây trong thiết bị đầu cuối:
pip install tflite-support
Sau khi hoàn tất, bạn có thể sử dụng trình tạo mã theo cú pháp sau:
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
Mã kết quả sẽ nằm trong thư mục đích. Nếu bạn bằng Google Colab hoặc các thiết bị điều khiển từ xa khác có thể dễ dàng hơn khi nén kết quả vào một tệp lưu trữ zip và tải xuống vào dự án Android Studio của bạn:
# 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')
Sử dụng mã được tạo
Bước 1: Nhập mã đã tạo
Giải nén mã đã tạo vào một cấu trúc thư mục (nếu cần). Căn của
mã tạo ra được giả định là SRC_ROOT
.
Mở dự án Android Studio mà bạn muốn dùng LiteRT
mô hình và nhập mô-đun được tạo bằng cách: Và tệp -> Mới -> Nhập mô-đun ->
chọn SRC_ROOT
Sử dụng ví dụ trên, thư mục và mô-đun đã nhập sẽ được gọi
classify_wrapper
.
Bước 2: Cập nhật tệp build.gradle
của ứng dụng
Trong mô-đun ứng dụng sẽ sử dụng mô-đun thư viện đã tạo:
Trong phần Android, hãy thêm đoạn mã sau:
aaptOptions {
noCompress "tflite"
}
Trong phần phần phụ thuộc, hãy thêm đoạn mã sau:
implementation project(":classify_wrapper")
Bước 3: Sử dụng mô hình
// 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();
}
Tăng tốc suy luận mô hình
Mã được tạo giúp nhà phát triển tăng tốc mã thông qua việc sử dụng người được uỷ quyền và số lượng luồng. Bạn có thể thiết lập các giá trị này khi khởi tạo đối tượng mô hình vì cần 3 thông số:
Context
: Ngữ cảnh từ Hoạt động hoặc Dịch vụ Android- (Không bắt buộc)
Device
: Tính năng uỷ quyền tăng tốc TFLite. Ví dụ: GPUDelegate - (Không bắt buộc)
numThreads
: Số lượng luồng dùng để chạy mô hình – mặc định là một.
Ví dụ: để sử dụng một GPU uỷ quyền và tối đa 3 luồng, bạn có thể khởi tạo mô hình như sau:
try {
myImageClassifier = new MyClassifierModel(this, Model.Device.GPU, 3);
} catch (IOException io){
// Error reading the model
}
Khắc phục sự cố
Nếu bạn gặp lỗi "java.io.FileNotFoundException: Không thể mở tệp này dưới dạng chỉ số mô tả tệp; nó có thể được nén lỗi, hãy chèn các dòng sau trong phần Android của mô-đun ứng dụng sẽ sử dụng mô-đun thư viện:
aaptOptions {
noCompress "tflite"
}