#!/usr/bin/env python3 """Evaluate one or more face-detector weights (.pt / .onnx) on the converted WIDER FACE val split. Usage: python eval_model.py export/face_yolo11n.pt export/face_yolo11n_fp32.onnx export/face_yolo11n_fp16.onnx """ import argparse from ultralytics import YOLO def main(): ap = argparse.ArgumentParser() ap.add_argument("models", nargs="+") ap.add_argument("--data", default="dataset/data.yaml") ap.add_argument("--imgsz", type=int, default=640) ap.add_argument("--workers", type=int, default=4) a = ap.parse_args() for path in a.models: r = YOLO(path, task="detect").val(data=a.data, imgsz=a.imgsz, batch=1, device=0, workers=a.workers, plots=False, verbose=False) print(f"RES {path}: mAP50={r.box.map50:.4f} mAP50-95={r.box.map:.4f} P={r.box.mp:.3f} R={r.box.mr:.3f} " f"| {r.speed['preprocess']:.2f}+{r.speed['inference']:.2f}+{r.speed['postprocess']:.2f} ms/img", flush=True) if __name__ == "__main__": main()