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

Tích hợp bộ phát hiện đối tượng

Bộ phát hiện đối tượng có thể xác định tập hợp đối tượng nào trong số các đối tượng đã biết có thể có mặt và cung cấp thông tin về vị trí của chúng trong hình ảnh nhất định hoặc luồng video. Một máy dò đối tượng được đào tạo để phát hiện sự hiện diện và vị trí của nhiều lớp đối tượng. Ví dụ, một mô hình có thể được đào tạo với những hình ảnh có chứa phần khác nhau của trái cây, cùng với một nhãn mà quy định cụ thể các loại hoa quả mà họ đại diện (ví dụ như một quả táo, một quả chuối, hoặc dâu tây), và dữ liệu xác định trong đó mỗi đối tượng xuất hiện trong bức hình. Xem giới thiệu phát hiện đối tượng để biết thêm thông tin về máy dò đối tượng.

Sử dụng Task Thư viện ObjectDetector API để triển khai dò đối tượng 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 ObjectDetector

  • 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.

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

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

  • Kết quả phát hiện top-k.

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

Các mô hình phát hiện đối tượng được hỗ trợ

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

Chạy suy luận trong Java

Xem các đối tượng ứng dụng tham khảo Detection cho một ví dụ về cách sử dụng ObjectDetector 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
ObjectDetectorOptions options =
    ObjectDetectorOptions.builder()
        .setBaseOptions(BaseOptions.builder().useGpu().build())
        .setMaxResults(1)
        .build();
ObjectDetector objectDetector =
    ObjectDetector.createFromFileAndOptions(
        context, modelFile, options);

// Run inference
List<Detection> results = objectDetector.detect(image);

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

Chạy suy luận trong C ++

// Initialization
ObjectDetectorOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_file);
std::unique_ptr<ObjectDetector> object_detector = ObjectDetector::CreateFromOptions(options).value();

// Run inference
const DetectionResult result = object_detector->Detect(*frame_buffer).value();

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

Kết quả ví dụ

Dưới đây là một ví dụ về kết quả phát hiện ssd mobilenet v1 từ TensorFlow Hub.

loài chó

Results:
 Detection #0 (red):
  Box: (x: 355, y: 133, w: 190, h: 206)
  Top-1 class:
   index       : 17
   score       : 0.73828
   class name  : dog
 Detection #1 (green):
  Box: (x: 103, y: 15, w: 138, h: 369)
  Top-1 class:
   index       : 17
   score       : 0.73047
   class name  : dog

Kết xuất các hộp giới hạn lên hình ảnh đầu vào:

đầu ra phát hiện

Hãy thử đơn giản công cụ CLI demo cho ObjectDetector 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 ObjectDetector 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 máy dò đối tượng sử dụng Writer API TensorFlow Lite Metadata .

Các mô hình máy dò đối tượng 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.
  • Tensors đầu ra phải được 4 kết quả đầu ra của một DetectionPostProcess op, ví dụ:

    • Teo vị trí (kTfLiteFloat32)
      • tensor kích thước [1 x num_results x 4] , mảng bên trong đại diện cho hộp bounding dưới dạng [hàng đầu, trái, phải, dưới].
      • BoundingBoxProperties được yêu cầu phải được gắn liền với các siêu dữ liệu và phải xác định type=BOUNDARIES và 'coordinate_type = TỶ LỆ.
    • Các lớp tensor (kTfLiteFloat32)

      • tensor kích thước [1 x num_results] , mỗi giá trị đại diện cho các chỉ số nguyên của một lớp.
      • (các) bản đồ nhãn tùy chọn (nhưng được khuyến nghị) có thể được đính kèm dưới dạng AssociatedFile-s với loại TENSOR_VALUE_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 class_name lĩnh vự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 ObjectDetectorOptions 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.
    • Điểm tensor (kTfLiteFloat32)

      • tensor kích thước [1 x num_results] , mỗi giá trị đại diện cho số điểm của đối tượng phát hiện.
    • Số tensor phát hiện (kTfLiteFloat32)

      • NUM_RESULTS số nguyên như một tensor kích thước [1] .