Tạo giao diện mô hình bằng siêu dữ liệu

Sử dụng Siêu dữ liệu TensorFlow Lite , nhà phát triển có thể tạo mã trình bao bọc để kích hoạt tích hợp trên Android. Đối với hầu hết các nhà phát triển, giao diện đồ họa của Android Studio ML Model Binding là dễ sử dụng nhất. Nếu bạn cần tùy chỉnh nhiều hơn hoặc đang sử dụng công cụ dòng lệnh, TensorFlow Lite Codegen cũng có sẵn.

Sử dụng liên kết mô hình Android Studio ML

Đối với các mô hình TensorFlow Lite được cải tiến bằng siêu dữ liệu , nhà phát triển có thể sử dụng Android Studio ML Model Binding để tự động định cấu hình 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 mô hình. Mã trình bao bọc loại bỏ nhu cầu tương tác trực tiếp với ByteBuffer . Thay vào đó, các 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 được nhập như BitmapRect .

Nhập mô hình TensorFlow Lite trong Android Studio

  1. Nhấp chuột phải vào mô-đun bạn muốn sử dụng mô hình TFLite hoặc nhấp vào File , sau đó nhấp vào New > Other > TensorFlow Lite Model

  2. Chọn vị trí tệp TFLite của bạn. 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 bằng liên kết Mô hình ML và tất cả các phần phụ thuộc sẽ tự động được chèn vào tệp build.gradle của mô-đun Android của bạn.

    Tùy chọn: Chọn hộp kiểm thứ hai để nhập GPU TensorFlow nếu bạn muốn sử dụng khả năng tăng tốc GPU.

  3. Nhấp vào Finish .

  4. Màn hình sau 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ục ml trong Android Studio.

Tăng tốc suy luận mô hình

ML Model Binding cung cấp một cách để các nhà phát triển tăng tốc mã của họ thông qua việc sử dụng các đại biểu và số lượng luồng.

Bước 1. Kiểm tra tệp build.gradle của mô-đun xem nó có chứa phần phụ thuộc sau không:

    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 TensorFlow GPU delegate hay không, nếu không chạy mô hình sử dụ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 với trình tạo mã TensorFlow Lite

Đối với mô hình TensorFlow Lite được cải tiến bằng siêu dữ liệu , nhà phát triển có thể sử dụng trình tạo mã trình bao bọc Android TensorFlow Lite để tạo mã trình bao bọc dành riêng cho nền tảng. Mã trình bao bọc loại bỏ nhu cầu tương tác trực tiếp với ByteBuffer . Thay vào đó, các 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 được nhập như BitmapRect .

Tính hữu ích của trình tạo mã phụ thuộc vào tính đầy đủ 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 siêu dữ liệu_schema.fbs để xem cách công cụ codegen phân tích từng trường.

Tạo mã bao bọc

Bạn sẽ cần cài đặt công cụ sau trong thiết bị đầu cuối của mình:

pip install tflite-support

Sau khi hoàn thành, trình tạo mã có thể được sử dụng 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 đang sử dụng Google Colab hoặc môi trường từ xa khác, việc nén kết quả vào kho lưu trữ zip và tải nó xuống dự án Android Studio của bạn có thể dễ dàng hơ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ã được tạo

Giải nén mã được tạo nếu cần thiết vào cấu trúc thư mục. Gốc của mã được tạo được giả sử là SRC_ROOT .

Mở dự án Android Studio nơi bạn muốn sử dụng mô hình TensorFlow lite 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 được 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 được tạo:

Trong phần Android, thêm vào như sau:

aaptOptions {
   noCompress "tflite"
}

Trong phần phụ thuộc, thêm vào như 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 cung cấp một cách để các nhà phát triển tăng tốc mã của họ thông qua việc sử dụng các đại biểu và số lượng luồng. Chúng có thể được đặt khi khởi tạo đối tượng mô hình vì nó có ba tham số:

  • Context : Ngữ cảnh từ Hoạt động hoặc Dịch vụ của Android
  • (Tùy chọn) Device : Đại biểu tăng tốc TFLite, ví dụ GPUDelegate hoặc NNAPIDelegate
  • (Tùy chọn) numThreads : Số lượng luồng được sử dụng để chạy mô hình - mặc định là một.

Ví dụ: để sử dụng đại biểu NNAPI và tối đa ba luồng, bạn có thể khởi tạo mô hình như thế này:

try {
    myImageClassifier = new MyClassifierModel(this, Model.Device.NNAPI, 3);
} catch (IOException io){
    // Error reading the model
}

Xử lý 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 mô tả tệp; có thể đó là lỗi do nén, hãy chèn các dòng sau vào phần Android của mô-đun ứng dụng sẽ sử dụng mô-đun thư viện:

aaptOptions {
   noCompress "tflite"
}