Giúp bảo vệ Great Barrier Reef với TensorFlow trên Kaggle Tham Challenge

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 , các nhà phát triển có thể tạo mã trình 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 đồ họa của Android Studio ML Model Binding là dễ sử dụng nhất. Nếu bạn yêu cầu nhiều tùy chỉnh 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 Android Studio ML Model Binding

Đối với các mô hình TensorFlow Lite được tăng cườ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 Nhấp chuột phải vào menu để truy cập chức năng nhập TensorFlow Lite

  2. Chọn vị trí của tệp TFLite của bạn. Lưu ý rằng công cụ sẽ thay mặt bạn định cấu hình phần phụ thuộc của mô-đun với ràng buộc Mô hình ML 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 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 tính năng tăng tốc GPU. Hộp thoại nhập cho mô hình TFLite

  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. Trang chi tiết mô hình 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 diện và số lượng các luồng.

Bước 1. Kiểm tra tệp build.gradle 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 đang chạy trên thiết bị có tương thích với đại biểu GPU TensorFlow 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 bằng trình tạo mã TensorFlow Lite

Đối với mô hình TensorFlow Lite được tăng cường siêu dữ liệu , các nhà phát triển có thể sử dụng trình tạo mã trình bao bọc TensorFlow Lite Android để 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 dụng 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 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 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, có thể dễ dàng nén kết quả trong một kho lưu trữ zip và tải nó xuống 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ã đã tạo

Bước 1: Nhập mã đã tạo

Giải nén mã được tạo nếu cần thiết 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 nơi bạn muốn sử dụng mô hình TensorFlow lite và nhập mô-đun đã 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 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 phần sau:

aaptOptions {
   noCompress "tflite"
}

Trong phần phụ thuộc, hãy thêm 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 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 các 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 : Bối cảnh từ Hoạt động hoặc Dịch vụ Android
  • (Tùy chọn) Device : Đại biểu tăng tốc TFLite, ví dụ như GPUDelegate hoặc NNAPIDelegate
  • (Tùy chọn) numThreads : Số luồng được sử dụng để chạy mô hình - mặc định là một.

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

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

Xử lý sự cố

Nếu bạn nhận được 'java.io.FileNotFoundException: Không thể mở tệp này dưới dạng trình mô tả tệp; nó có thể là lỗi 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"
}