7.12. Bộ xử lý hậu kỳ

Một mạng phát hiện không trực tiếp phát ra các hộp. Nó phát ra một hoặc nhiều tensor có bố cục phụ thuộc vào kiến trúc mà mô hình được huấn luyện -- một tensor 2-D các dự đoán ứng viên cho bộ phát hiện họ YOLO, một cặp tensor (boxes, scores) cho bộ phát hiện MediaPipe, một danh sách phẳng các tọa độ điểm đặc trưng cho mạng tư thế. Ứng dụng không thể đọc trực tiếp bất kỳ tensor nào trong số này; những gì nó muốn -- danh sách các hộp, danh sách các điểm đặc trưng, phân tích theo lớp -- phải được giải mã từ tensor thô.

Bộ giải mã đó là một bộ xử lý hậu kỳ. Module ml.postprocessing nhóm chúng theo hệ sinh thái nguồn gốc.

7.12.1. Darknet

ml.postprocessing.darknet giải mã các mô hình từ kỷ nguyên YOLO ban đầu. YOLO v2 đã giới thiệu các ý tưởng lướianchor mà hầu hết các bộ phát hiện sau này kế thừa dưới một dạng nào đó, vì vậy bố cục v2 là điểm khởi đầu rõ ràng nhất.

YOLO v2 bắt đầu bằng cách chia ảnh đầu vào thành một lưới thô -- bố cục 13x13 cho đầu vào 416 điểm ảnh chuẩn, nhỏ hơn cho các mô hình nhỏ hơn -- và huấn luyện mạng sao cho mỗi ô lưới chịu trách nhiệm phát hiện bất kỳ đối tượng nào có tâm nằm trong ô đó. Bố cục không gian của tensor đầu ra phản chiếu bố cục đầu vào: một vị trí trong đầu ra cho mỗi ô trong ảnh.

Tại mỗi ô lưới, mạng không dự đoán một hộp từ không. Nó chọn từ một số hình dạng tham chiếu được chọn trước gọi là anchor -- các cặp (width, height) cố định được xác định ngoại tuyến bằng cách phân cụm kích thước hộp trong tập huấn luyện để chúng bao phủ các đối tượng điển hình mà mô hình được kỳ vọng nhận thấy. Nhiệm vụ của mạng tại mỗi ô là dự đoán, cho từng anchor, một độ lệch nhỏ đến tâm hộp trong ô, tỷ lệ trên chiều rộng và chiều cao của anchor, điểm số objectness (xác suất có gì đó ở đó), và một vector xác suất theo lớp. Một lưới 13x13 với 5 anchor mặc định và 20 lớp do đó phát ra 13 * 13 * 5 * (4 + 1 + 20) = 21,125 con số cho mỗi lần suy luận.

YoloV2 giải mã bố cục đó: nó duyệt qua các ô, áp dụng độ lệch và tỷ lệ của từng anchor để khôi phục tọa độ hộp tuyệt đối, kết hợp objectness với xác suất lớp để có điểm số theo lớp, áp dụng ngưỡng, và đẩy các ứng viên sống sót vào NMS. Lớp này nhận tham số constructor anchors= khi mô hình được huấn luyện với bảng anchor tùy chỉnh và sử dụng mặc định tích hợp sẵn trong trường hợp khác. Các biến thể được tinh chỉnh cho các tập lớp cụ thể cũng có trong cùng submodule.

7.12.2. Ultralytics

ml.postprocessing.ultralytics giải mã các thế hệ YOLO mới hơn. YoloV8 đọc đầu ra theo cột, trong đó mỗi cột là một dự đoán anchor chứa tọa độ hộp và vector điểm số theo lớp -- kênh objectness mà các đầu ra YOLO trước đó mang theo đã bị loại bỏ trong v8, và điểm số lớp đứng độc lập. Tài liệu hướng dẫn YOLOv8 đi qua quá trình giải mã tensor theo tensor. Các phiên bản cũ hơn trong kỷ nguyên Ultralytics cũng có trong cùng submodule cho các mô hình được huấn luyện với bố cục của chúng.

7.12.3. MediaPipe

ml.postprocessing.mediapipe giải mã họ thiết bị nhẹ trên thiết bị của Google. BlazeFace là bộ phát hiện khuôn mặt được đề cập trong hello-blazeface: một bộ phát hiện dựa trên anchor nhanh phát ra các hộp và sáu tọa độ điểm đặc trưng cho mỗi khuôn mặt, được trả về dưới dạng tuple (box, score, keypoints) với các điểm đặc trưng được gắn vào từng hộp thay vì là danh sách đầu ra riêng biệt. Các mô hình phát hiện bàn tay, điểm đặc trưng và tư thế từ cùng họ cũng có và tuân theo cùng hình dạng trả về keypoint gắn liền.

7.12.4. Chọn bộ xử lý phù hợp

Bộ xử lý hậu kỳ phù hợp được xác định bởi kiến trúc mà mô hình được huấn luyện, chứ không phải bởi những gì ứng dụng muốn. Một file .tflite YOLOv8 chỉ giải mã đúng thông qua YoloV8; một file .tflite BlazeFace chỉ thông qua BlazeFace. Việc chọn bộ xử lý hậu kỳ là một phần của việc chọn mô hình. Khi kiến trúc của một mô hình không được đại diện bởi bộ xử lý hậu kỳ đi kèm, viết bộ xử lý của riêng bạn là một việc đơn giản.

Các mạng phân loại là ngoại lệ. Tensor đầu ra duy nhất của chúng đã là những gì ứng dụng muốn -- danh sách điểm số theo lớp -- và không cần bộ xử lý hậu kỳ. Tải mô hình mà không có postprocess= và đọc kết quả dự đoán dưới dạng ndarray phẳng là hướng đúng, như tensor I/O đã trình bày.