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.
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:
- Android – Ví dụ về mã – Hướng dẫn
- Python – Ví dụ về mã – Hướng dẫn
- Web – Ví dụ về mã – Hướng dẫn
- iOS – Ví dụ về mã – Hướng dẫn
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:
|
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:
|
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 (Nên dùng)
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 |