Hướng dẫn về tác vụ phát hiện đối tượng

Một con mèo và một con chó được làm nổi bật bằng các hộp giới hạn được gắn nhãn chính xác

Tác vụ Trình phát hiện đối tượng MediaPipe cho phép bạn phát hiện sự hiện diện và vị trí của nhiều lớp đối tượng trong hình ảnh hoặc video. Ví dụ: trình phát hiện đối tượng có thể xác định vị trí của chó trong hình ảnh. Tác vụ này hoạt động trên dữ liệu hình ảnh bằng mô hình học máy (ML), chấp nhận dữ liệu tĩnh hoặc luồng video liên tục làm dữ liệu đầu vào và xuất ra danh sách kết quả phát hiện. Mỗi kết quả phát hiện đại diện cho một đối tượng xuất hiện trong hình ảnh hoặc video.

Hãy dùng thử!

Bắt đầu

Bắt đầu sử dụng tác vụ này bằng cách làm theo một trong các hướng dẫn triển khai sau đây cho nền tảng bạn đang sử dụng:

Các hướng dẫn dành riêng cho nền tảng này sẽ hướng dẫn bạn cách triển khai cơ bản cho nhiệm vụ này, bao gồm cả mô hình được đề xuất và ví dụ về mã với các tuỳ chọn cấu hình được đề xuất.

Thông tin chi tiết về việc cần làm

Phần này mô tả các chức năng, dữ liệu đầu vào và đầu ra của tác vụ này.

Tính năng

  • Xử lý hình ảnh đầu vào – Quá trình xử lý bao gồm xoay hình ảnh, đổi kích thước, chuẩn hoá và chuyển đổi không gian màu.
  • Ngôn ngữ bản đồ nhãn – Đặt ngôn ngữ dùng cho tên hiển thị
  • Ngưỡng điểm – Lọc kết quả dựa trên điểm dự đoán.
  • Phát hiện top-k – Lọc kết quả phát hiện số.
  • Gắn nhãn danh sách cho phép và danh sách từ chối – Chỉ định các danh mục đã phát hiện.
Dữ liệu đầu vào của việc cần làm Kết quả của tác vụ
API Trình phát hiện đối tượng chấp nhận dữ liệu đầu vào thuộc một trong các loại dữ liệu sau:
  • Hình ảnh tĩnh
  • Khung hình video đã giải mã
  • Nguồn cấp dữ liệu video trực tiếp
API Trình phát hiện đối tượng sẽ xuất ra các kết quả sau đây cho các đối tượng được phát hiện:
  • Danh mục đối tượng
  • Điểm xác suất
  • Toạ độ hộp giới hạn

Tuỳ chọn cấu hình

Tác vụ này có các tuỳ chọn cấu hình sau:

Tên tuỳ chọn Mô tả Phạm vi giá trị Giá trị mặc định
running_mode Đặt chế độ chạy cho tác vụ. Có 3 chế độ:

HÌNH ẢNH: Chế độ cho dữ liệu đầu vào là một hình ảnh.

VIDEO: Chế độ cho các khung hình đã giải mã của video.

LIVE_STREAM: Chế độ phát trực tiếp dữ liệu đầu vào, chẳng hạn như từ máy ảnh. Ở chế độ này, bạn phải gọi resultListener để thiết lập trình nghe nhận kết quả một cách không đồng bộ.
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
display_names Đặt ngôn ngữ của nhãn để sử dụng cho tên hiển thị được cung cấp trong siêu dữ liệu của mô hình tác vụ, nếu có. Mặc định là en đối với tiếng Anh. Bạn có thể thêm nhãn đã bản địa hoá vào siêu dữ liệu của mô hình tuỳ chỉnh bằng cách sử dụng API Trình ghi siêu dữ liệu TensorFlow Lite Mã ngôn ngữ vi
max_results Đặt số lượng tối đa kết quả phát hiện có điểm số cao nhất (không bắt buộc) để trả về. Bất kỳ số dương nào -1 (tất cả kết quả đều được trả về)
score_threshold Đặt ngưỡng điểm số dự đoán sẽ ghi đè ngưỡng được cung cấp trong siêu dữ liệu mô hình (nếu có). Kết quả thấp hơn giá trị này sẽ bị từ chối. Bất kỳ float nào Chưa đặt
category_allowlist Đặt danh sách tên danh mục được phép (không bắt buộc). Nếu không trống, kết quả phát hiện có tên danh mục không có trong tập hợp này sẽ bị lọc ra. Hệ thống sẽ bỏ qua tên danh mục trùng lặp hoặc không xác định. Tuỳ chọn này không thể dùng cùng với category_denylist và việc sử dụng cả hai sẽ dẫn đến lỗi. Chuỗi bất kỳ Chưa đặt
category_denylist Đặt danh sách tên danh mục không được phép (không bắt buộc). Nếu không trống, các kết quả phát hiện có tên danh mục nằm trong tập hợp này sẽ bị lọc ra. Hệ thống sẽ bỏ qua tên danh mục trùng lặp hoặc không xác định. Tuỳ chọn này tương đối độc lập với category_allowlist và việc sử dụng cả hai sẽ dẫn đến lỗi. Chuỗi bất kỳ Chưa đặt

Mô hình

API Trình phát hiện đối tượng yêu cầu tải mô hình phát hiện đối tượng xuống và lưu trữ trong thư mục dự án. Nếu bạn chưa có mô hình, hãy bắt đầu với mô hình mặc định được đề xuất. Các mô hình khác được trình bày trong phần này sẽ đánh đổi giữa độ trễ và độ chính xác.

Mô hình EfficientDet-Lite0 sử dụng một xương sống EfficientNet-Lite0 với kích thước đầu vào 320x320 và mạng đặc điểm BiFPN. Mô hình này được huấn luyện bằng tập dữ liệu COCO, một tập dữ liệu phát hiện đối tượng trên quy mô lớn chứa 1,5 triệu thực thể đối tượng và 80 nhãn đối tượng. Xem danh sách đầy đủ các nhãn được hỗ trợ. EfficientDet-Lite0 có sẵn dưới dạng int8, float16 hoặc float32. Bạn nên sử dụng mô hình này vì nó tạo ra sự cân bằng giữa độ trễ và độ chính xác. Phương thức này vừa chính xác vừa đủ nhẹ cho nhiều trường hợp sử dụng.

Tên mẫu thiết bị Hình dạng đầu vào Loại lượng tử hoá Phiên bản
EfficientDet-Lite0 (int8) 320 x 320 int8 Mới nhất
EfficientDet-Lite0 (float 16) 320 x 320 float 16 Mới nhất
EfficientDet-Lite0 (float 32) 320 x 320 Không có (float32) Mới nhất

Mô hình EfficientDet-Lite2

Mô hình EfficientDet-Lite2 sử dụng một xương sống EfficientNet-Lite2 với kích thước đầu vào 448x448 và mạng tính năng BiFPN. Mô hình này được huấn luyện bằng tập dữ liệu COCO, một tập dữ liệu phát hiện đối tượng trên quy mô lớn chứa 1,5 triệu thực thể đối tượng và 80 nhãn đối tượng. Xem danh sách đầy đủ các nhãn được hỗ trợ. EfficientDet-Lite2 có sẵn dưới dạng mô hình int8, float16 hoặc float32. Mô hình này thường chính xác hơn EfficientDet-Lite0, nhưng cũng chậm hơn và tốn nhiều bộ nhớ hơn. Mô hình này phù hợp với các trường hợp sử dụng mà độ chính xác được ưu tiên hơn tốc độ và kích thước.

Tên mẫu thiết bị Hình dạng đầu vào Loại lượng tử hoá Phiên bản
EfficientDet-Lite2 (int8) 448 x 448 int8 Mới nhất
EfficientDet-Lite2 (float 16) 448 x 448 float 16 Mới nhất
EfficientDet-Lite2 (float 32) 448 x 448 Không có (float32) Mới nhất

Mô hình SSD MobileNetV2

Mô hình SSD MobileNetV2 sử dụng một xương sống MobileNetV2 với kích thước đầu vào 256x256 và mạng tính năng SSD. Mô hình này được huấn luyện bằng tập dữ liệu COCO, một tập dữ liệu phát hiện đối tượng trên quy mô lớn chứa 1,5 triệu thực thể đối tượng và 80 nhãn đối tượng. Xem danh sách đầy đủ các nhãn được hỗ trợ. SSD MobileNetV2 có sẵn dưới dạng mô hình int8 và float 32. Mô hình này nhanh và nhẹ hơn EfficientDet-Lite0, nhưng cũng thường kém chính xác hơn. Mô hình này phù hợp với các trường hợp sử dụng yêu cầu mô hình nhanh, nhẹ và có thể hy sinh một số độ chính xác.

Tên mẫu thiết bị Hình dạng đầu vào Loại lượng tử hoá Phiên bản
SSDMobileNet-V2 (int8) 256 x 256 int8 Mới nhất
SSDMobileNet-V2 (float 32) 256 x 256 Không có (float32) Mới nhất

Yêu cầu về mô hình và siêu dữ liệu

Phần này mô tả các yêu cầu đối với mô hình tuỳ chỉnh nếu bạn quyết định tạo một mô hình để sử dụng với tác vụ này. Mô hình tuỳ chỉnh phải ở định dạng TensorFlow Lite và phải bao gồm metadata mô tả các tham số hoạt động của mô hình.

Yêu cầu về thiết kế

Đầu vào Hình dạng Mô tả
Nhập hình ảnh Tensor Float32 có hình dạng[1, height, width, 3] Hình ảnh đầu vào được chuẩn hoá.
Đầu ra Hình dạng Mô tả
detection_boxes Tensor Float32 có hình dạng [1, num_boxes, 4] Vị trí hộp của từng đối tượng được phát hiện.
detection_classes Tensor Float32 có hình dạng [1, num_boxes] Chỉ mục của tên lớp cho từng đối tượng được phát hiện.
detection_scores Tensor float32 có hình dạng [1, num_boxes] Điểm dự đoán cho từng đối tượng được phát hiện.
num_boxes Tensor Float32 có kích thước 1 Số lượng hộp được phát hiện.

Yêu cầu về siêu dữ liệu

Thông số Mô tả Mô tả
input_norm_mean Giá trị trung bình được dùng trong quá trình chuẩn hoá tensor đầu vào. Hình ảnh đầu vào được chuẩn hoá.
input_norm_std Quy tắc chuẩn hoá trường được dùng trong quá trình chuẩn hoá tensor đầu vào. Vị trí hộp của từng đối tượng được phát hiện.
label_file_paths Đường dẫn đến các tệp nhãn tensor danh mục. Nếu mô hình không có tệp nhãn nào, hãy truyền một danh sách trống. Chỉ mục của tên lớp cho từng đối tượng được phát hiện.
score_calibration_md Thông tin về phép hiệu chỉnh điểm trong tensor phân loại. Bạn không bắt buộc phải sử dụng thông số này nếu mô hình không sử dụng tính năng hiệu chỉnh điểm số
.
Điểm dự đoán cho từng đối tượng được phát hiện.
num_boxes Tensor Float32 có kích thước 1 Số lượng hộp được phát hiện.

Điểm chuẩn tác vụ

Dưới đây là điểm chuẩn tác vụ cho các mô hình được huấn luyện trước ở trên. Kết quả về độ trễ là độ trễ trung bình trên Pixel 6 khi sử dụng CPU / GPU.

Tên mô hình Độ trễ CPU Độ trễ GPU
Mô hình float32 EfficientDet-Lite0 61,30 mili giây 27,83 mili giây
Mô hình float16 EfficientDet-Lite0 53,97 mili giây 27,97 mili giây
Mô hình EfficientDet-Lite0 int8 29,31 mili giây -
Mô hình float32 EfficientDet-Lite2 197,98 mili giây 41,15 mili giây
Mô hình float16 EfficientDet-Lite2 198,77 mili giây 47,31 mili giây
Mô hình EfficientDet-Lite2 int8 70,91 mili giây -
Mô hình SSD MobileNetV2 float32 36,30 mili giây 24,01 mili giây
Mô hình SSD MobileNetV2 float16 37,35 mili giây 28,16 mili giây