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

Tích hợp bộ phân loại hình ảnh

Phân loại hình ảnh là một cách sử dụng máy học phổ biến để xác định những gì một hình ảnh đại diện. Ví dụ, chúng ta có thể muốn biết loại động vật nào xuất hiện trong một bức tranh nhất định. Nhiệm vụ của dự đoán những gì một hình ảnh đại diện được gọi là phân loại ảnh. Một bộ phân loại hình ảnh được đào tạo để nhận ra các lớp hình ảnh khác nhau. Ví dụ: một người mẫu có thể được đào tạo để nhận ra các bức ảnh đại diện cho ba loại động vật khác nhau: thỏ, chuột đồng và chó. Xem giới thiệu về phân loại hình ảnh để biết thêm thông tin về phân loại hình ảnh.

Sử dụng Task Thư viện ImageClassifier API để triển khai phân loại hình ảnh tùy chỉnh của bạn hoặc những người pretrained vào ứng dụng di động của bạn.

Các tính năng chính của API ImageClassifier

  • Xử lý hình ảnh đầu vào, bao gồm xoay, thay đổi kích thước và chuyển đổi không gian màu.

  • Khu vực quan tâm của hình ảnh đầu vào.

  • Nhãn bản đồ địa phương.

  • Ngưỡng điểm để lọc kết quả.

  • Kết quả phân loại top-k.

  • Nhãn danh sách cho phép và danh sách từ chối.

Các mô hình phân loại hình ảnh được hỗ trợ

Các mô hình sau đây chắc chắn sẽ rất phù hợp với ImageClassifier API.

Chạy suy luận trong Java

Xem hình ảnh ứng dụng tài liệu tham khảo Phân loại cho một ví dụ về cách sử dụng ImageClassifier trong một ứng dụng Android.

Bước 1: Nhập phần phụ thuộc Gradle và các cài đặt khác

Sao chép .tflite tập mô hình để các tài sản thư mục của module Android nơi mô hình sẽ được chạy. Xác định rằng các tập tin không nên nén, và thêm thư viện TensorFlow Lite để của mô-đun build.gradle file:

android {
    // Other settings

    // Specify tflite file should not be compressed for the app apk
    aaptOptions {
        noCompress "tflite"
    }

}

dependencies {
    // Other dependencies

    // Import the Task Vision Library dependency (NNAPI is included)
    implementation 'org.tensorflow:tensorflow-lite-task-vision:0.3.0'
    // Import the GPU delegate plugin Library for GPU inference
    implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin:0.3.0'
}

Bước 2: Sử dụng mô hình

// Initialization
ImageClassifierOptions options =
    ImageClassifierOptions.builder()
        .setBaseOptions(BaseOptions.builder().useGpu().build())
        .setMaxResults(1)
        .build();
ImageClassifier imageClassifier =
    ImageClassifier.createFromFileAndOptions(
        context, modelFile, options);

// Run inference
List<Classifications> results = imageClassifier.classify(image);

Xem mã nguồn và javadoc cho các tùy chọn hơn để cấu hình ImageClassifier .

Chạy suy luận trong C ++

// Initialization
ImageClassifierOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_file);
std::unique_ptr<ImageClassifier> image_classifier = ImageClassifier::CreateFromOptions(options).value();

// Run inference
const ClassificationResult result = image_classifier->Classify(*frame_buffer).value();

Xem mã nguồn cho các tùy chọn hơn để cấu hình ImageClassifier .

Kết quả ví dụ

Dưới đây là một ví dụ về kết quả phân loại của một phân chim .

chim sẻ

Results:
  Rank #0:
   index       : 671
   score       : 0.91406
   class name  : /m/01bwb9
   display name: Passer domesticus
  Rank #1:
   index       : 670
   score       : 0.00391
   class name  : /m/01bwbt
   display name: Passer montanus
  Rank #2:
   index       : 495
   score       : 0.00391
   class name  : /m/0bwm6m
   display name: Passer italiae

Hãy thử đơn giản công cụ CLI demo cho ImageClassifier với mô hình và thử nghiệm riêng dữ liệu của bạn.

Yêu cầu về tính tương thích của mô hình

Các ImageClassifier API hy vọng một mô hình TFLite với bắt buộc TFLite Mẫu Metadata . Xem ví dụ về việc tạo ra siêu dữ liệu cho phân loại hình ảnh bằng cách sử dụng Writer API TensorFlow Lite Metadata .

Các mô hình phân loại hình ảnh tương thích phải đáp ứng các yêu cầu sau:

  • Bộ căng hình ảnh đầu vào (kTfLiteUInt8 / kTfLiteFloat32)

    • hình ảnh đầu vào kích thước [batch x height x width x channels] .
    • đợt suy luận không được hỗ trợ ( batch phải là 1).
    • chỉ có đầu vào RGB được hỗ trợ ( channels được yêu cầu phải có 3).
    • nếu loại là kTfLiteFloat32, NormalizationOptions bắt buộc phải được đính kèm vào siêu dữ liệu để chuẩn hóa đầu vào.
  • Điểm số đầu ra tensor (kTfLiteUInt8 / kTfLiteFloat32)

    • với N lớp và 2 hoặc 4 chiều, tức là [1 x N] hoặc [1 x 1 x 1 x N]
    • (các) bản đồ nhãn tùy chọn (nhưng được khuyến nghị) dưới dạng AssociatedFile-s với loại TENSOR_AXIS_LABELS, chứa một nhãn trên mỗi dòng. Xem các tập tin ví dụ nhãn . Các AssociatedFile ví dụ đầu tiên (nếu có) được sử dụng để lấp đầy label trường (có tên là class_name trong C ++) của các kết quả. Các display_name trường được điền từ AssociatedFile (nếu có) mà locale phù hợp với display_names_locale lĩnh vực ImageClassifierOptions sử dụng vào thời điểm sáng tạo ( "en" theo mặc định, tức là tiếng Anh). Nếu không ai trong số đó là có sẵn, chỉ có index lĩnh vực kết quả sẽ được lấp đầy.