libreyolo val

Đánh giá một mô hình trên một split của dataset rồi in ra các metric. Tập metric phụ thuộc vào tác vụ của mô hình, và các con số này chính là thứ dựng nên một dòng trong bảng benchmark.

Lệnh
libreyolo val
Bắt buộc
model, data
Đầu ra
Metric trên stdout. Biểu đồ và COCO JSON nằm trong runs/val/exp khi được yêu cầu

Cú pháp

bash
libreyolo val model=<name|path> data=<dataset.yaml> [key=value ...]

Tham số là các cặp key=value, và dạng POSIX cũng dùng được, nên batch=8--batch 8 là cùng một tham số.

Tham số

Tham sốMặc địnhÝ nghĩa
modelĐường dẫn trọng số mô hình hoặc tên CLI. Bắt buộc
dataĐường dẫn tới YAML của dataset (định dạng YOLO, ví dụ coco8.yaml). Bắt buộc
data_dirThư mục dataset trực tiếp, bỏ qua đường dẫn ghi trong YAML
splitvalSplit của dataset: val, test, train
batch16Kích thước batch
imgszKích thước ảnh: 640 (vuông) hoặc 480x640 (HxW). Dùng kích thước đầu vào của chính mô hình khi không đặt
conf0.001Ngưỡng độ tin cậy
iou0.6Ngưỡng IoU của NMS
max_det300Số dự đoán tối đa mỗi ảnh sau NMS
eval_max_detGiới hạn của bộ đánh giá COCO. Theo quy ước AP@100 của pycocotools khi không đặt
faster_coco_evaltrueDùng backend C++ faster-coco-eval cho các metric COCO khi đã cài; nếu không thì quay về pycocotools
halffalseSuy luận (inference) FP16
amp_dtypefloat16Kiểu dữ liệu autocast CUDA khi half=true: float16 hoặc bfloat16
save_jsonfalseLưu kết quả JSON theo định dạng COCO
save_plotsfalseLưu biểu đồ đánh giá: metric, AP theo từng lớp đối tượng, ma trận nhầm lẫn, ảnh mẫu
workers4Số worker của dataloader
deviceautoThiết bị
projectruns/valThư mục gốc chứa đầu ra
nameexpTên thí nghiệm
exist_okfalseDùng lại thư mục đầu ra
allow_download_scriptsfalseCho phép mã Python nhúng trong khối download của YAML dataset
jsonfalseXuất JSON ra stdout
quietfalseChặn stderr
verbosetrueĐầu ra chi tiết
help_jsonfalseIn schema của lệnh dưới dạng JSON rồi thoát

Ví dụ

Cơ bản
libreyolo val model=LibreYOLO9s.pt data=coco8.yaml
Biểu đồ và COCO JSON
libreyolo val model=LibreYOLO9s.pt data=coco8.yaml \  imgsz=640 batch=8 save_json=true save_plots=true \  project=runs/val name=yolo9s-coco8 exist_ok=true
Máy đọc được
libreyolo val model=LibreYOLO9s.pt data=coco8.yaml json=true quiet=true

Ghi chú

Các metric là gì

Tập metric được in ra phụ thuộc vào tác vụ của mô hình, và đầu ra JSON dùng đúng các khóa đó.

Phát hiện đối tượng, phân đoạn và hộp xoay (OBB) báo cáo mAP50, mAP50_95, precisionrecall. Khi một mô hình dự đoán nhiều hơn một loại đầu ra, các nhóm theo từng loại xuất hiện kèm theo dưới dạng box_metrics, mask_metricsobb_metrics, mỗi nhóm mang đúng bốn khóa đó.

Phân loại báo cáo accuracy_top1accuracy_top5. Phát hiện điểm báo cáo precision, recall, f1, MLE, MAE, RMSEmAP_sweep. Ước lượng độ sâu báo cáo abs_rel, rmse, delta1, delta2delta3. Phân đoạn ngữ nghĩa báo cáo mIoUpixel_accuracy. Phục hồi ảnh báo cáo PSNRSSIM.

Kết quả JSON còn mang theo eval_backend, cho biết thư viện đánh giá COCO và phiên bản đã tạo ra các con số, nhờ đó có thể so sánh hai lần chạy mà biết rõ liệu cùng một backend có chấm cả hai hay không.

Ngưỡng

Các giá trị mặc định ở đây là mặc định cho đánh giá, không phải mặc định cho dự đoán: conf0.001iou0.6, trong khi libreyolo predict dùng 0.250.45. Nâng conf lên mức ngưỡng hiển thị sẽ làm giảm recall và kéo theo mAP, nên một con số tạo ra theo cách đó không so sánh được với con số đã công bố.

imgsz mặc định không được đặt, nghĩa là dùng kích thước đầu vào của chính mô hình. Đặt giá trị này sẽ đánh giá ở kích thước được chỉ định, và đó là cách một checkpoint được đo ở ngoài độ phân giải gốc của nó.

Dataset tự tải về

Một YAML dataset có trường download là URL sẽ tải về ở lần dùng đầu tiên mà không cần thêm quyền gì. Loại mang theo script Python tải về nhúng sẵn thì cần allow_download_scripts=true, và lệnh sẽ cảnh báo trên stderr rằng việc thực thi mã cục bộ đã được bật. Hai tệp coco8.yamlcoco128.yaml đi kèm đều dựa trên URL, nên chúng không cần gì cả.

Đầu ra và mã thoát

stdout mang các metric; tiến trình đi ra stderr. json=true in ra một đối tượng duy nhất kèm schema_version, còn quiet=true làm im stderr.

Mã thoát là 0 khi thành công, 2 khi dùng sai hoặc lỗi cấu hình, 3 khi không tìm thấy dataset, 4 khi không tải được mô hình, và 1 cho các lỗi runtime khác.

Liên quan: libreyolo train, lệnh chạy đúng quy trình đánh giá này theo lịch riêng của nó qua eval_interval.

Đã kiểm chứng với LibreYOLO v1.5.0.