Bằng cách sử dụng Siêu dữ liệu TensorFlow Lite, 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, giao diện đồ hoạ của Liên kết mô hình học máy của Android Studio là giao diện dễ sử dụng nhất. Nếu cần tuỳ chỉnh nhiều hơn hoặc sử dụng công cụ dòng lệnh, bạn cũng có thể sử dụng TensorFlow Lite Codegen.
Sử dụng liên kết mô hình học máy của Android Studio
Đối với các mô hình TensorFlow Lite được tăng cường bằng siêu dữ liệu, nhà phát triển có thể sử dụ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 các lớp trình bao bọc dựa trên siêu dữ liệu của mô hình. Mã bao bọc giúp bạn không cần phải 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 TensorFlow Lite với các đối tượng đã nhập như Bitmap
và Rect
.
Thêm mô hình TensorFlow Lite trong Android Studio
Nhấp chuột phải vào mô-đun mà bạn muốn sử dụng kiểu máy TFLite hoặc nhấp vào
File
, sau đó nhấp vàoNew
>Other
>TensorFlow Lite Model
Chọn vị trí của tệp TFLite. Xin lưu ý rằng công cụ này sẽ thay mặt bạn định cấu hình phần phụ thuộc của mô-đun với tính năng liên kết mô hình học máy và tất cả các phần phụ thuộc được tự động chèn vào tệp
build.gradle
của mô-đun Android.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 nhập thành công. Để bắt đầu sử dụng mô hình, hãy chọn Kotlin hoặc Java, sao chép và dán mã trong phần
Sample Code
. Bạn có thể quay lại màn hình này bằng cách nhấp đúp vào mô hình TFLite trong thư mụcml
của Android Studio.
Tăng tốc suy luận mô hình
Liên kết mô hình học máy cung cấp cho nhà phát triển một cách để tăng tốc mã thông qua việc sử dụng thực thể đại diện và số lượng luồng.
Bước 1. Kiểm tra tệp build.gradle
của mô-đun để đảm bảo tệp đó chứa phần phụ thuộc sau:
dependencies {
...
// TFLite GPU delegate 2.3.0 or above is required.
implementation 'org.tensorflow:tensorflow-lite-gpu:2.3.0'
}
Bước 2. Phát hiện xem GPU chạy trên thiết bị có tương thích với tính năng uỷ quyền GPU của TensorFlow hay không, 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ã TensorFlow Lite
Đối với mô hình TensorFlow Lite được tăng cường bằng siêu dữ liệu, nhà phát triển có thể sử dụng trình tạo mã bao bọc Android TensorFlow Lite cho Android để tạo mã bao bọc dành riêng cho nền tảng. Mã bao bọc giúp bạn không cần phải 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 TensorFlow Lite bằng 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 tính hoàn chỉnh của mục nhập siêu dữ liệu của mô hình TensorFlow Lite. Tham khảo phần <Codegen usage>
trong 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ã bao bọc
Bạn sẽ cần cài đặt công cụ sau đây trong thiết bị đầu cuối của mình:
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 đang sử dụng Google Colab hoặc môi trường từ xa khác, bạn có thể dễ dàng nén kết quả vào tệp lưu trữ zip và tải xuống dự án Android Studio của mình:
# 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ã đã tạo
Bước 1: Nhập mã đã tạo
Giải nén mã được tạo (nếu cần) vào một cấu trúc thư mục. Gốc của mã được tạo được giả định là SRC_ROOT
.
Mở dự án Android Studio mà bạn muốn sử dụng mô hình TensorFlow lite và nhập mô-đun đã tạo bằng cách: And File -> New -> Import Module ->
chọn SRC_ROOT
Trong ví dụ trên, thư mục và mô-đun được nhập sẽ có tên là 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 mục phần phụ thuộc, hãy thêm những thành phần 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 này cung cấp cho nhà phát triển một cách để tăng tốc mã của họ thông qua việc sử dụng thực thể đại diện và số lượng luồng. Bạn có thể đặt các thuộc tính này khi khởi chạy đối tượng mô hình vì cần có 3 tham số:
Context
: Ngữ cảnh của hoạt động hoặc dịch vụ Android- (Không bắt buộc)
Device
: uỷ quyền tăng tốc TFLite. Ví dụ: GPUDelegate - (Không bắt buộc)
numThreads
: Số luồng dùng để chạy mô hình – mặc định là 1.
Ví dụ: để sử dụng đại biểu GPU và tối đa 3 luồng, bạn có thể khởi chạy 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; tệp có thể đã bị nén", 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"
}