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

Tích hợp trình phân đoạn hình ảnh

Các trình phân đoạn hình ảnh dự đoán liệu mỗi pixel của hình ảnh có được liên kết với một lớp nhất định hay không. Điều này trái ngược để phát hiện đối tượng , trong đó phát hiện các đối tượng trong khu vực hình chữ nhật, và phân loại hình ảnh , trong đó phân loại các hình ảnh tổng thể. Xem giới thiệu của phân vùng ảnh để biết thêm thông tin về segmenters hình ảnh.

Sử dụng Task Thư viện ImageSegmenter API để triển khai segmenters 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 ImageSegmenter

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

  • Hai loại đầu ra, mặt nạ danh mục và mặt nạ tin cậy.

  • Nhãn màu cho mục đích hiển thị.

Các mô hình phân đoạn 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 ImageSegmenter API.

Chạy suy luận trong Java

Xem hình ảnh ứng dụng tài liệu tham khảo Phân đoạn cho một ví dụ về cách sử dụng ImageSegmenter 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
ImageSegmenterOptions options =
    ImageSegmenterOptions.builder()
        .setBaseOptions(BaseOptions.builder().useGpu().build())
        .setOutputType(OutputType.CONFIDENCE_MASK)
        .build();
ImageSegmenter imageSegmenter =
    ImageSegmenter.createFromFileAndOptions(context, modelFile, options);

// Run inference
List<Segmentation> results = imageSegmenter.segment(image);

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

Chạy suy luận trong C ++

// Initialization
ImageSegmenterOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_file);
std::unique_ptr<ImageSegmenter> image_segmenter = ImageSegmenter::CreateFromOptions(options).value();

// Run inference
const SegmentationResult result = image_segmenter->Segment(*frame_buffer).value();

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

Kết quả ví dụ

Dưới đây là một ví dụ về kết quả phân hóa giữa các deeplab_v3 , một mô hình Phân khúc chung có sẵn trên TensorFlow Hub.

chiếc máy bay

Color Legend:
 (r: 000, g: 000, b: 000):
  index       : 0
  class name  : background
 (r: 128, g: 000, b: 000):
  index       : 1
  class name  : aeroplane

# (omitting multiple lines for conciseness) ...

 (r: 128, g: 192, b: 000):
  index       : 19
  class name  : train
 (r: 000, g: 064, b: 128):
  index       : 20
  class name  : tv
Tip: use a color picker on the output PNG file to inspect the output mask with
this legend.

Mặt nạ danh mục phân đoạn sẽ trông giống như sau:

phân đoạn-đầu ra

Hãy thử đơn giản công cụ CLI demo cho ImageSegmenter 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 ImageSegmenter 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 segmenters hình ảnh bằng cách sử dụng Writer API TensorFlow Lite Metadata .

  • 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.
  • Mặt nạ đầu ra tensor: (kTfLiteUInt8 / kTfLiteFloat32)

    • tensor kích thước [batch x mask_height x mask_width x num_classes] , nơi batch phải là 1, mask_widthmask_height là kích thước của mặt nạ Phân khúc sản xuất bởi các mô hình, và num_classes là số lớp học được hỗ trợ bởi mô hình.
    • (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_AXIS_LABELS, chứa một nhãn trên mỗi dòng. 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 ImageSegmenterOptions 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.