Mean Average Precision (mAP)
Độ chính xác trung bình trung bình (mAP) đánh giá các bộ phát hiện bằng cách lấy trung bình precision trên recall, các lớp và ngưỡng IoU. Tìm hiểu cách tính mAP50 và mAP50-95.
Độ chính xác trung bình trung bình (mAP) là metric đánh giá tiêu chuẩn cho phát hiện đối tượng; phương pháp tương tự cũng đánh giá phân đoạn instance, ước tính pose và phát hiện đối tượng định hướng. Metric này đánh giá model dựa trên khả năng tìm thấy mọi đối tượng, tránh phát hiện sai và định vị chính xác từng bounding box, rồi gộp cả ba yếu tố thành một giá trị từ 0 đến 1, thường được biểu thị dưới dạng phần trăm. Độ chính xác trung bình (AP) là diện tích bên dưới đường cong precision-recall của một class; mAP là trung bình AP trên các class; dạng được báo cáo rộng rãi nhất, mAP50-95, còn lấy trung bình trên 10 ngưỡng giao trên hợp (IoU).
Các thành phần cơ bản#
- IoU: mức độ chồng lấp giữa box dự đoán và box được gắn nhãn, từ 0 đến 1. Một dự đoán chỉ là true positive khi IoU với nhãn cùng class chưa được ghép đạt đến ngưỡng, chẳng hạn 0.5.
- Precision: tỷ lệ dự đoán chính xác trên tổng số dự đoán, TP / (TP + FP).
- Recall: tỷ lệ đối tượng được gắn nhãn mà model tìm thấy, TP / (TP + FN).
- Confidence: điểm dùng để xếp hạng các phát hiện. Mỗi ngưỡng confidence tạo ra một cặp precision-recall; toàn bộ các ngưỡng kết hợp tạo thành đường cong precision-recall.
Cách tính mAP#
Quá trình đánh giá gộp mọi phát hiện của một class trên toàn bộ dataset rồi sắp xếp theo confidence. Duyệt lần lượt danh sách này, mỗi phát hiện hoặc khớp với nhãn chưa được ghép có độ chồng lấp cao nhất của cùng class và trở thành true positive, hoặc trở thành false positive. Mỗi nhãn chỉ được khớp một lần, vì vậy box thứ hai trên một đối tượng đã được tìm thấy sẽ làm giảm precision. Sau mỗi bước, precision và recall được tính lại, tạo thành đường cong precision-recall từ phát hiện có confidence cao nhất đến thấp nhất.
AP là diện tích bên dưới đường cong đó. Trước khi tích phân, đường cong được thay bằng đường bao của nó — precision cao nhất tìm thấy tại mỗi mức recall hoặc cao hơn — để các đoạn gấp khúc nhỏ không làm thay đổi điểm số. Phép đánh giá COCO lấy mẫu đường bao tại 101 điểm recall từ 0 đến 1; trong khi benchmark PASCAL VOC ban đầu sử dụng 11 điểm. Các mức recall mà model không đạt được đóng góp precision bằng 0, vì vậy mỗi đối tượng bị bỏ sót đều làm giảm AP.
import numpy as np
# One class: 8 detections sorted by confidence (1 = matched a label, 0 = false positive)
tp = np.array([1, 1, 0, 1, 0, 1, 0, 0])
num_labels = 5 # ground-truth objects of this class in the dataset
# Precision and recall after each detection in the ranked list
tp_cum = np.cumsum(tp)
precision = tp_cum / np.arange(1, len(tp) + 1)
recall = tp_cum / num_labels
# Precision envelope: best precision at this recall or any higher recall
envelope = np.maximum.accumulate(precision[::-1])[::-1]
# COCO-style AP: average the envelope at 101 recall points (0 beyond the highest recall reached)
points = np.linspace(0, 1, 101)
idx = np.searchsorted(recall, points, side="left")
ap = np.mean([envelope[i] if i < len(envelope) else 0.0 for i in idx])
print(f"Max recall: {recall[-1]:.1f}, AP: {ap:.3f}")Script in ra Max recall: 0.8, AP: 0.686. Một trong năm đối tượng được gắn nhãn không bao giờ được phát hiện, vì vậy một phần năm cuối của trục recall không đóng góp gì vào diện tích; AP vẫn ở mức 0.686 dù hai phát hiện có confidence cao nhất đều chính xác.
mAP và các metric liên quan#
- Độ chính xác lấy số dự đoán đúng chia cho tổng số dự đoán, đòi hỏi phải đếm true negative. Với bộ phát hiện, true negative sẽ là mọi vùng nền trống; do đó, độ chính xác không có ý nghĩa thực tiễn trong phát hiện đối tượng.
- Điểm F1 kết hợp precision và recall tại một ngưỡng confidence, mô tả một điểm vận hành duy nhất, chẳng hạn ngưỡng mà model đã triển khai sử dụng.
- Ma trận nhầm lẫn đếm những class mà bộ phát hiện nhầm lẫn tại một ngưỡng, thể hiện chi tiết bị che khuất bởi một giá trị mAP duy nhất.
mAP50, mAP75 và mAP50-95#
Vì mAP là giá trị trung bình đơn giản trên các lớp, một lớp hiếm có trọng số ngang với một lớp phổ biến. Ngưỡng IoU xác định mức độ chặt của bounding box để được tính là đúng:
- mAP50: một detection được xem là đúng khi IoU đạt 0.5, theo quy tắc PASCAL VOC.
- mAP75: ngưỡng tăng lên 0.75, tạo thành phép kiểm tra định vị nghiêm ngặt.
- mAP50-95: mAP được tính trung bình trên mười ngưỡng, từ 0.50 đến 0.95 với bước 0.05. COCO gọi giá trị này đơn giản là "AP", không phân biệt AP với mAP và dùng nó làm metric chính của cuộc thi.
Training Ultralytics YOLO26 giữ best.pt từ epoch có mAP50-95 validation cao nhất, còn validation báo cáo cả ba biến thể trong mỗi lần chạy.
from ultralytics import YOLO
# Load a pretrained YOLO26 nano detector
model = YOLO("yolo26n.pt")
# Validate on the small COCO8 dataset to compute mAP
metrics = model.val(data="coco8.yaml")
# The same detections scored at three IoU thresholds
print(f"mAP50: {metrics.box.map50:.3f}")
print(f"mAP75: {metrics.box.map75:.3f}")
print(f"mAP50-95: {metrics.box.map:.3f}")Ngưỡng IoU càng thấp thì càng nhiều detection được tính là đúng, vì vậy mAP50 có giá trị cao nhất, còn mAP50-95 thấp hơn. COCO cũng chia AP theo kích thước đối tượng: đối tượng nhỏ có diện tích dưới 32 × 32 pixel, đối tượng cỡ trung bình có diện tích đến 96 × 96, còn đối tượng lớn có diện tích cao hơn mức đó.










