Model table: accuracy, size and latency¶
Generated by examples/render_model_table.py from two measured JSONs, so every
column regenerates and any disagreement is reproducible:
uv run examples/model_table.py --coco ~/datasets/coco --input-size 640 --half --nms-iou 0.70
uv run examples/model_table.py --coco ~/datasets/coco --input-size 320 --half --nms-iou 0.70
uv run examples/runtime_matrix.py --models yolo_nas_s,yolo_nas_m,yolo_nas_l --sizes 320,640 \
--calibration-dir ~/datasets/coco/images/val2017 \
--sample-image ~/datasets/coco/images/val2017/000000435081.jpg
uv run examples/render_model_table.py
Box AP on COCO val2017¶
| Model | Input | Params | GFLOPs | AP | AP50 | AP75 | AP_S | AP_M | AP_L |
|---|---|---|---|---|---|---|---|---|---|
| YOLO-NAS-S | 320 | 19.05M | 8.5 | 38.4 | 53.9 | 41.4 | 13.7 | 43.1 | 64.1 |
| YOLO-NAS-S | 640 | 19.05M | 33.9 | 47.3 | 64.4 | 51.8 | 28.5 | 52.9 | 63.6 |
| YOLO-NAS-M | 320 | 51.18M | 23.5 | 43.1 | 59.1 | 46.6 | 17.8 | 49.4 | 68.4 |
| YOLO-NAS-M | 640 | 51.18M | 94.2 | 51.3 | 68.3 | 56.0 | 33.6 | 57.0 | 68.1 |
| YOLO-NAS-L | 320 | 66.98M | 32.2 | 43.8 | 59.9 | 47.3 | 18.7 | 50.4 | 67.7 |
| YOLO-NAS-L | 640 | 66.98M | 129.0 | 52.0 | 69.1 | 56.9 | 34.5 | 57.4 | 68.5 |
With latency, per device¶
| Model | Input | Params | GFLOPs | AP | AP50 | dGPU TensorRT FP16 |
CPU OpenVINO INT8 |
iGPU OpenVINO INT8 |
|---|---|---|---|---|---|---|---|---|
| YOLO-NAS-S | 320 | 19.05M | 8.5 | 38.4 | 53.9 | 1.17 ms 855 FPS |
5.19 ms 193 FPS |
6.83 ms 146 FPS |
| YOLO-NAS-S | 640 | 19.05M | 33.9 | 47.3 | 64.4 | 2.12 ms 472 FPS |
19.87 ms 50 FPS |
12.04 ms 83 FPS |
| YOLO-NAS-M | 320 | 51.18M | 23.5 | 43.1 | 59.1 | 1.50 ms 666 FPS |
12.03 ms 83 FPS |
9.45 ms 106 FPS |
| YOLO-NAS-M | 640 | 51.18M | 94.2 | 51.3 | 68.3 | 4.19 ms 239 FPS |
47.47 ms 21 FPS |
25.49 ms 39 FPS |
| YOLO-NAS-L | 320 | 66.98M | 32.2 | 43.8 | 59.9 | 1.94 ms 515 FPS |
15.56 ms 64 FPS |
10.38 ms 96 FPS |
| YOLO-NAS-L | 640 | 66.98M | 129.0 | 52.0 | 69.1 | 5.41 ms 185 FPS |
63.00 ms 16 FPS |
32.07 ms 31 FPS |
Latency is model inference only, batch 1, on NVIDIA GeForce RTX 3060 Laptop GPU and x86_64. FPS is 1000 / latency on a single synchronous stream —
not throughput, and not a whole frame, since preprocessing and NMS are excluded.
The full grid — every runtime, precision and NMS placement — is in
the runtime matrix.
Protocol¶
- Weights: the pretrained COCO checkpoints this library downloads, which originate from Deci's super-gradients releases. Not weights trained by this project.
- Accuracy: full COCO val2017, all 5000 images,
pycocotools. Input letterboxed with aspect preserved; NMS at confidence 0.001 and IoU 0.70, which a sweep found optimal. Predictions are mapped back to original image coordinates before being compared with the ground truth — the evaluator inverts the same letterbox the dataset applied, so a non-640 input size is measured correctly rather than approximately. - Accuracy is measured in FP32 even where the latency column is FP16. Whether
quantization costs AP is a separate question with its own script,
examples/runtime_accuracy.py, which evaluates the exported artifact itself. - Parameters:
sum(p.numel() for p in model.parameters()). - FLOPs:
torch.utils.flop_counterfor one forward pass at the stated input size, multiplies and adds counted separately. Papers reporting roughly half these figures are counting multiply-accumulates; compare conventions before comparing numbers.
On comparing this with published leaderboards¶
Detection leaderboards usually report latency on an NVIDIA T4 with TensorRT at batch 1. That is not the hardware above, and a latency number is meaningless without its protocol, so the two columns should not be read side by side. The accuracy columns are directly comparable.