Paper · 2024-10-31 · cs.CV
YOLO Evolution: A Comprehensive Benchmark and Architectural Review of YOLOv12, YOLO11, and Their Previous Versions
Benchmarks 33 Ultralytics YOLO checkpoints (YOLOv3u to YOLOv12) fine-tuned with one shared setting on traffic signs, African wildlife and ships. Reports precision, recall, mAP50, mAP50-95, per-image time, GFLOPs and size. Author-reported: YOLO11 balances accuracy and speed best; YOLOv12 is slower with no clear accuracy gain. The linked repo holds traffic-sign notebooks only.
Object detectionBenchmark validityobject-detectionbenchmarkyolo
arXivPDFCodeMarkdown17 min read
AI-compiled by claude-haiku-5-5 on 2026-10-19, not yet reviewed by a human. Every claim cites its source; check it when a detail matters.
In plain words
YOLO is a family of fast object detectors: one network looks at a picture once and reports what objects are where. Over several years the family grew many versions and sizes, and the newest versions had not yet been measured across the whole family on the same data with the same settings. This paper takes the models that the Ultralytics library offers, from the oldest version to the newest, trains each one on three different image collections using identical settings, and measures how accurate each one is and how long it takes to run.
The three collections were picked to differ from each other: traffic signs, wildlife in Africa, and ships. They differ in object size, aspect ratio, rotation and overlap. Because every model gets the same training settings, the results compare the models themselves rather than how well each one was tuned. The main findings are that the YOLO11 models give the best mix of accuracy and speed, and that YOLOv12 is slower without being clearly more accurate.
TL;DR
- This is a benchmark, not a new architecture: 33 Ultralytics checkpoints from 7 YOLO versions, fine-tuned with one shared setting §3.2 tab. 3.
- Three datasets: traffic signs (24 classes), African wildlife (4 classes), ships (1 class) §3.1.
- Author-reported headline: YOLO11 gives the most balanced accuracy and efficiency; YOLOv12 is slow without a clear accuracy gain §5 §7.
- The linked repository contains training notebooks for traffic signs only. Several numbers in the text disagree with the paper's own tables (see Paper vs code).
- No repeated runs or variance are reported, so treat small gaps as ties.
Problem
Earlier YOLO reviews, as the paper describes them, judge versions mainly on mAP and FPS, leave out precision and recall, leave out the newest versions, or do not benchmark at all §2. Without one common protocol, numbers from different papers mix datasets, settings and metrics, so they cannot be ranked against each other.
The paper also has to deal with a source problem. Several YOLO versions (YOLOv4, YOLOv6, YOLOv7) have no Ultralytics support, and the authors argue that Ultralytics ports and original releases give different numbers on the same data. They therefore benchmark only the Ultralytics-supported models §3.2.1 tab. 1 tab. 2.
Method
This is an experimental protocol, not a new model. Each pretrained Ultralytics checkpoint is fine-tuned on the training split of each dataset with the shared settings in tab. 3, then evaluated with the metrics in §3.4. The paper states that all 33 models from 7 versions were trained on the three datasets §3.2 fig. 4.
Models and scale suffixes. The suffixes are n (nano), s (small), m (medium), l (large), x (extra-large), t (tiny), c (compact), b (balanced) and e (extended) §3.2. The variants that appear in the result tables are: YOLOv3u (plus a tiny variant), YOLOv5u (n, s, m, l, x), YOLOv8 (n, s, m, l, x), YOLOv9 (t, s, m, c, e), YOLOv10 (n, s, m, b, l, x), YOLO11 (n, s, m, l, x) and YOLOv12 (n, s, m, l, x) fig. 12 fig. 16 fig. 20.
Architectural notes that the paper gives for each version (its own description, not verified here):
- YOLOv3u: an anchor-free detection head, which the paper says later appears in YOLOv8 §3.2.2.
- YOLOv5u: anchor-free detection on a YOLOv5-style backbone with CSP connections and SPPF §3.2.3 fig. 6.
- YOLOv8: C2f blocks in place of CSP layers; the Ultralytics model also covers segmentation, pose and OBB tasks §3.2.4 fig. 7.
- YOLOv9: programmable gradient information (PGI) and GELAN blocks §3.2.5 fig. 8.
- YOLOv10: NMS-free training with a one-to-many head for training and a one-to-one head for inference §3.2.6 fig. 9.
- YOLO11: C3k2 blocks in place of C2f, and a C2PSA module for spatial attention §3.2.7 fig. 10.
- YOLOv12: Area Attention (A2), R-ELAN blocks, FlashAttention, MLP ratio reduced from 4 to 1.2, no positional encodings, one R-ELAN block in the last backbone stage, and convolution plus batch normalisation in place of linear layers §3.2.8 fig. 11.
Metrics §3.4:
- Precision: correct predictions divided by all predictions.
- Recall: correct predictions divided by all actual objects.
- mAP50: mean average precision at an IoU threshold of 0.50.
- mAP50-95: mean average precision averaged over IoU thresholds from 0.50 to 0.95 in steps of 0.05.
- Preprocessing, inference and postprocessing time, GFLOPs, and model size.
Protocol, as a sketch of the paper's procedure with the code's calls noted:
# Benchmark protocol [§3] [tab. 3]
# Input: three datasets (train/val/test), 33 pretrained checkpoints
# Output: per model and dataset: P, R, mAP50, mAP50-95, times, GFLOPs, size
def run_benchmark(datasets, checkpoints):
# One shared training setting for every model [§3.2] [tab. 3]
settings = shared_training_settings()
results = []
for dataset in datasets:
for checkpoint in checkpoints:
# Start from the pretrained weights [§1]
# [code: traffic-sign-detection-yolov8m.ipynb#L1346]
model = load_pretrained(checkpoint)
# Fine-tune on the training split [§3.1] [tab. 3]
model.train(dataset.train, settings)
# Score on the validation split (the code calls .val())
# [code: traffic-sign-detection-yolov8m.ipynb#L4309]
metrics = model.evaluate(dataset.val)
results.append(metrics)
return resultsmAP50-95 for one model. The paper gives the thresholds but not how classes are averaged §3.4:
# mAP50-95 for one model [§3.4]
# Input: average precision per class at each IoU threshold
# Output: one scalar
def map_50_95(ap_by_class_and_iou):
# IoU thresholds 0.50, 0.55, ..., 0.95 [§3.4]
thresholds = [0.50 + 0.05 * step for step in range(10)]
# Mean over classes at each threshold; class averaging not stated [§3.4]
per_threshold = [
mean_over_classes(ap_by_class_and_iou, threshold)
for threshold in thresholds
]
# Mean over thresholds [§3.4]
return mean(per_threshold)Ranking. For the discussion, the paper ranks models by mAP50-95 for accuracy and by total processing time for speed. Models are first grouped by scale (nano, small, medium, large, extra-large) so that like is compared with like. Family rankings are averages of those ranks across scales and datasets §5 tab. 4 fig. 24. The exact rank procedure is not spelled out; see Pitfalls.
Hyperparameters
Values from tab. 3 and §3.1 are the paper's. The "code" entries are the values the notebooks actually pass or log, for the traffic-sign runs only. Paths are relative to the repository at code_commit.
| Name | Value | Where | Notes |
|---|---|---|---|
| Epochs | 100 | tab. 3 traffic-sign-detection-yolov8m.ipynb | Agrees in code. |
| Optimizer | AdamW | tab. 3 | Code passes optimizer=auto, which logged AdamW(lr=0.000169, momentum=0.9) traffic-sign-detection-yolov8m.ipynb. See Paper vs code. |
| Batch size | 16 | tab. 3 traffic-sign-detection-yolov8m.ipynb | Agrees in code. |
| Image size | 640 × 640 | tab. 3 traffic-sign-detection-yolov8m.ipynb | Agrees in code. |
| Learning rate | paper: "initial & final" (0.0001, 0.01) | tab. 3 traffic-sign-detection-yolov8m.ipynb | Code passes lr0=0.0001 and lrf=0.01, but the auto optimizer ignored lr0. Paper does not say which is which. |
| Momentum | not stated | traffic-sign-detection-yolov8m.ipynb | Code passes 0.937; the auto optimizer logged 0.9. |
| Weight decay | not stated | traffic-sign-detection-yolov8m.ipynb | Code passes 0.0005; the optimizer log shows decay 0.0005 on 84 parameter groups. |
| Warm-up | not stated | traffic-sign-detection-yolov8m.ipynb | Code passes warmup_epochs=3.0, warmup_bias_lr=0.1, warmup_momentum=0.8. |
| Dropout | 0.15 | tab. 3 traffic-sign-detection-yolov8m.ipynb | Agrees in code. |
| Augmentation | "None" | tab. 3 §3.1.1 | Code shows mosaic=1.0, mixup=0.0, copy_paste=0.0, auto_augment=randaugment, erasing=0.4 traffic-sign-detection-yolov8m.ipynb. See Paper vs code. |
| Loss gains | not stated | traffic-sign-detection-yolov8m.ipynb | box=7.5, cls=0.5, dfl=1.5. |
| Early stopping | not stated | traffic-sign-detection-yolov8m.ipynb | patience=100, equal to the epoch count. |
| Seed | not stated | traffic-sign-detection-yolov8m.ipynb | seed=0, deterministic=True. |
| Initialisation | "pre-trained models", fine-tuned §1 | traffic-sign-detection-yolov8m.ipynb | pretrained=True; YOLO('yolov8m.pt'). |
| Data split | 70 / 20 / 10 (train / val / test) | tab. 3 §3.1 | The split files are not in the repository. The Kaggle data.yaml is loaded from an external path traffic-sign-detection-yolov8m.ipynb. |
| Augmentation at test time | not stated | traffic-sign-detection-yolov8m.ipynb | augment=False. |
| Hardware | 2 × NVIDIA RTX 4090 §3.3 | §3.3 | Notebook logs show a single device, CUDA:0 traffic-sign-detection-yolov8m.ipynb. |
| Software | Python 3.12, Ubuntu 22.04, CUDA 12.4, cuDNN 8.9.7, Ultralytics 8.2.55, WandB 0.17.4 §3.3 | §3.3 | Notebook logs show Python-3.10.13 and torch-2.1.2 traffic-sign-detection-yolov8m.ipynb. Ultralytics is installed unpinned traffic-sign-detection-yolov8m.ipynb. |
Results
Author-reported. Setup: three datasets, each with one run per model under tab. 3 settings, on 2 × RTX 4090 §3.3. The comparison baselines are the other YOLO versions and scales in the same tables. tab. 2 is the only comparison with non-Ultralytics (original) implementations, and it is on traffic signs only. The paper does not say which split the reported metrics come from; see Pitfalls.
Headline numbers, as stated in the text and checked against the figure tables:
- Traffic signs: YOLO11m is named the most consistently strong model §4.1.1. Its figures are mAP50 0.893, mAP50-95 0.795, total time 4 ms, 67.9 GFLOPs and size 38.8 fig. 12. YOLOv5ul has the highest mAP50-95, at 0.799 fig. 12. YOLOv10n is the fastest at total time 2 ms and 8.3 GFLOPs §4.1.1 fig. 12.
- African wildlife: YOLOv9s has mAP50-95 0.832 and mAP50 0.956 §4.1.2 fig. 16. YOLO11l has the highest mAP50, at 0.965 fig. 16. YOLOv12x is the slowest, at total time 12.8 ms fig. 16.
- Ships: YOLO11x has the highest mAP50-95, at 0.327 §4.1.3 fig. 20. YOLOv12x is the slowest, at total time 10.9 ms fig. 20.
- Family ranking by the authors: YOLO11 and YOLOv12 rank first on accuracy, YOLO11 first on GFLOPs, YOLOv3u first on speed and YOLOv10 first on size. YOLOv12 ranks last on speed tab. 4 fig. 24.
Table: Ultralytics vs original implementations, traffic signs (author-reported, one run each) tab. 2:
| Version | Source | mAP50 | mAP50-95 |
|---|---|---|---|
| YOLOv9c | Ultralytics | 0.845 | 0.748 |
| YOLOv9c | GitHub (original) | 0.881 | 0.786 |
| YOLOv5n | Ultralytics | 0.756 | 0.663 |
| YOLOv5n | GitHub (original) | 0.429 | 0.367 |
| YOLOv3 | Ultralytics | 0.766 | 0.67 |
| YOLOv3 | GitHub (original) | 0.562 | 0.471 |
Table: family ranking, averaged over scales and datasets (rank 1 is best) tab. 4:
| Version | Accuracy | Speed | GFLOPs | Size |
|---|---|---|---|---|
| YOLOv3u | 7 | 1 | 4 | 7 |
| YOLOv5u | 6 | 4 | 4 | 5 |
| YOLOv8 | 5 | 5 | 7 | 6 |
| YOLOv9 | 3 | 6 | 6 | 4 |
| YOLOv10 | 4 | 2 | 3 | 1 |
| YOLO11 | 1 | 3 | 1 | 2 |
| YOLOv12 | 1 | 7 | 2 | 3 |
Units: the paper's text gives processing time in milliseconds per image §4.1.1. The figure tables give no units. Size units are not stated. Total time is preprocessing plus inference plus postprocessing; this was spot-checked on several rows and appears to hold.
Traffic signs, all 33 models fig. 12. Columns: precision, recall, mAP50, mAP50-95, preprocess time, inference time, postprocess time, total time, GFLOPs, size:
| Model | P | R | mAP50 | mAP50-95 | Pre | Inf | Post | Total | GFLOPs | Size |
|---|---|---|---|---|---|---|---|---|---|---|
| YOLOv3u | 0.75 | 0.849 | 0.874 | 0.781 | 0.7 | 8.5 | 0.4 | 9.6 | 282.4 | 207.86 |
| YOLOv3u tiny | 0.845 | 0.667 | 0.772 | 0.682 | 1.4 | 0.7 | 0.3 | 2.4 | 19 | 24.44 |
| YOLOv5un | 0.805 | 0.679 | 0.749 | 0.665 | 0.6 | 6.6 | 0.4 | 7.6 | 7.1 | 5.65 |
| YOLOv5us | 0.85 | 0.777 | 0.827 | 0.744 | 0.5 | 7.8 | 0.4 | 8.7 | 23.9 | 18.58 |
| YOLOv5um | 0.849 | 0.701 | 0.83 | 0.744 | 1.1 | 9.5 | 0.4 | 11 | 64.1 | 50.54 |
| YOLOv5ul | 0.831 | 0.836 | 0.886 | 0.799 | 0.6 | 9.7 | 0.4 | 10.7 | 134.9 | 106.85 |
| YOLOv5ux | 0.863 | 0.795 | 0.867 | 0.777 | 1.1 | 9.8 | 0.4 | 11.3 | 246.3 | 195.2 |
| YOLOv8n | 0.749 | 0.688 | 0.777 | 0.689 | 0.6 | 6.8 | 0.4 | 7.8 | 8.1 | 6.55 |
| YOLOv8s | 0.766 | 0.788 | 0.806 | 0.718 | 0.6 | 7.8 | 0.4 | 8.8 | 28.6 | 22.59 |
| YOLOv8m | 0.838 | 0.805 | 0.845 | 0.763 | 1.6 | 9.1 | 0.4 | 11.1 | 78.9 | 52.12 |
| YOLOv8l | 0.771 | 0.789 | 0.853 | 0.767 | 0.6 | 9.2 | 0.4 | 10.2 | 165 | 87.77 |
| YOLOv8x | 0.902 | 0.744 | 0.874 | 0.78 | 0.6 | 9.4 | 0.4 | 10.4 | 257.7 | 136.9 |
| YOLOv9t | 0.792 | 0.748 | 0.812 | 0.731 | 0.5 | 10 | 0.4 | 10.9 | 7.7 | 4.93 |
| YOLOv9s | 0.763 | 0.81 | 0.828 | 0.75 | 0.6 | 11.1 | 0.4 | 12.1 | 26.8 | 15.33 |
| YOLOv9m | 0.864 | 0.796 | 0.864 | 0.784 | 1 | 12.1 | 0.4 | 13.5 | 76.7 | 40.98 |
| YOLOv9c | 0.827 | 0.807 | 0.852 | 0.769 | 1.3 | 11.6 | 0.4 | 13.3 | 102.6 | 51.8 |
| YOLOv9e | 0.819 | 0.824 | 0.854 | 0.764 | 0.8 | 16.1 | 0.4 | 17.3 | 189.4 | 117.5 |
| YOLOv10n | 0.722 | 0.602 | 0.722 | 0.64 | 1 | 0.8 | 0.2 | 2 | 8.3 | 5.59 |
| YOLOv10s | 0.823 | 0.742 | 0.834 | 0.744 | 1.2 | 1.1 | 0.2 | 2.5 | 24.7 | 15.9 |
| YOLOv10m | 0.834 | 0.843 | 0.88 | 0.781 | 1.2 | 2.4 | 0.2 | 3.8 | 63.8 | 32.1 |
| YOLOv10b | 0.836 | 0.764 | 0.859 | 0.765 | 1 | 3.1 | 0.2 | 4.3 | 98.4 | 39.7 |
| YOLOv10l | 0.873 | 0.807 | 0.866 | 0.771 | 1.1 | 3.8 | 0.2 | 5.1 | 126.8 | 50 |
| YOLOv10x | 0.773 | 0.854 | 0.88 | 0.787 | 1 | 6.3 | 0.2 | 7.5 | 170.4 | 61.4 |
| YOLO11n | 0.768 | 0.695 | 0.757 | 0.668 | 1.2 | 0.6 | 0.4 | 2.2 | 6.4 | 5.35 |
| YOLO11s | 0.819 | 0.758 | 0.838 | 0.742 | 1.2 | 1 | 0.4 | 2.6 | 21.4 | 18.4 |
| YOLO11m | 0.898 | 0.826 | 0.893 | 0.795 | 1.2 | 2.4 | 0.4 | 4 | 67.9 | 38.8 |
| YOLO11l | 0.862 | 0.839 | 0.889 | 0.794 | 1.2 | 3 | 0.4 | 4.6 | 86.8 | 49 |
| YOLO11x | 0.819 | 0.816 | 0.885 | 0.784 | 0.9 | 6.1 | 0.4 | 7.4 | 194.8 | 109 |
| YOLOv12n | 0.883 | 0.684 | 0.802 | 0.708 | 1.2 | 4.6 | 0.4 | 6.2 | 6.4 | 5.34 |
| YOLOv12s | 0.761 | 0.839 | 0.877 | 0.78 | 1.6 | 4.3 | 0.5 | 6.4 | 21.4 | 18.1 |
| YOLOv12m | 0.868 | 0.811 | 0.89 | 0.79 | 0.9 | 4.9 | 0.4 | 6.2 | 67.3 | 39 |
| YOLOv12l | 0.826 | 0.836 | 0.877 | 0.781 | 0.9 | 5.5 | 0.4 | 6.8 | 89.6 | 51.2 |
| YOLOv12x | 0.832 | 0.849 | 0.889 | 0.793 | 1 | 9.5 | 0.5 | 11 | 198.9 | 114 |
African wildlife, all 33 models fig. 16:
| Model | P | R | mAP50 | mAP50-95 | Pre | Inf | Post | Total | GFLOPs | Size |
|---|---|---|---|---|---|---|---|---|---|---|
| YOLOv3u | 0.91 | 0.88 | 0.943 | 0.803 | 0.5 | 6.2 | 0.4 | 7.1 | 282.2 | 207.86 |
| YOLOv3u tiny | 0.897 | 0.866 | 0.921 | 0.725 | 0.7 | 0.7 | 0.4 | 1.8 | 19.1 | 24.44 |
| YOLOv5un | 0.949 | 0.862 | 0.948 | 0.791 | 1.1 | 0.5 | 0.4 | 2 | 7 | 5.65 |
| YOLOv5us | 0.924 | 0.882 | 0.853 | 0.804 | 1 | 0.8 | 0.4 | 2.2 | 23.8 | 18.58 |
| YOLOv5um | 0.935 | 0.887 | 0.947 | 0.807 | 0.6 | 2.1 | 0.4 | 3.1 | 64 | 50.54 |
| YOLOv5ul | 0.916 | 0.881 | 0.948 | 0.797 | 0.7 | 3.3 | 0.4 | 4.4 | 135 | 106.85 |
| YOLOv5ux | 0.932 | 0.867 | 0.946 | 0.797 | 0.5 | 6.6 | 0.4 | 7.5 | 246.2 | 195.2 |
| YOLOv8n | 0.932 | 0.908 | 0.953 | 0.794 | 1.1 | 0.5 | 0.4 | 2 | 8.2 | 6.55 |
| YOLOv8s | 0.962 | 0.88 | 0.943 | 0.812 | 0.9 | 1 | 0.4 | 2.3 | 28.7 | 22.59 |
| YOLOv8m | 0.928 | 0.909 | 0.953 | 0.822 | 0.8 | 2.5 | 0.4 | 3.7 | 78.9 | 52.12 |
| YOLOv8l | 0.942 | 0.898 | 0.957 | 0.817 | 0.9 | 3.9 | 0.4 | 5.2 | 165.1 | 87.77 |
| YOLOv8x | 0.912 | 0.906 | 0.953 | 0.819 | 0.5 | 7.1 | 0.4 | 8 | 257.6 | 136.9 |
| YOLOv9t | 0.944 | 0.875 | 0.948 | 0.825 | 1.3 | 1.1 | 0.4 | 2.8 | 7.7 | 4.93 |
| YOLOv9s | 0.921 | 0.897 | 0.956 | 0.832 | 1 | 1.2 | 0.4 | 2.6 | 26.9 | 15.33 |
| YOLOv9m | 0.924 | 0.901 | 0.952 | 0.823 | 0.9 | 2.8 | 0.4 | 4.1 | 76.5 | 40.98 |
| YOLOv9c | 0.934 | 0.897 | 0.96 | 0.83 | 0.9 | 3.4 | 0.4 | 4.7 | 102.7 | 51.8 |
| YOLOv9e | 0.932 | 0.864 | 0.944 | 0.809 | 0.5 | 7.6 | 0.4 | 8.5 | 189.3 | 117.5 |
| YOLOv10n | 0.901 | 0.9 | 0.936 | 0.786 | 1.1 | 0.7 | 0.2 | 2 | 8.2 | 5.59 |
| YOLOv10s | 0.929 | 0.888 | 0.947 | 0.799 | 0.9 | 1.1 | 0.2 | 2.2 | 24.5 | 15.9 |
| YOLOv10m | 0.91 | 0.88 | 0.945 | 0.8 | 1 | 2.4 | 0.2 | 3.6 | 63.4 | 32.1 |
| YOLOv10b | 0.905 | 0.899 | 0.944 | 0.809 | 0.8 | 3.2 | 0.2 | 4.2 | 98 | 39.7 |
| YOLOv10l | 0.922 | 0.894 | 0.944 | 0.8 | 0.7 | 3.8 | 0.2 | 4.7 | 126.3 | 50 |
| YOLOv10x | 0.96 | 0.862 | 0.949 | 0.819 | 0.8 | 6.3 | 0.2 | 7.3 | 169.8 | 61.4 |
| YOLO11n | 0.964 | 0.877 | 0.964 | 0.802 | 1.1 | 0.7 | 0.4 | 2.2 | 6.3 | 5.35 |
| YOLO11s | 0.952 | 0.892 | 0.959 | 0.8 | 1.1 | 1 | 0.4 | 2.5 | 21.3 | 18.4 |
| YOLO11m | 0.922 | 0.906 | 0.96 | 0.81 | 0.9 | 2.4 | 0.4 | 3.7 | 67.7 | 38.8 |
| YOLO11l | 0.937 | 0.896 | 0.965 | 0.805 | 0.9 | 3 | 0.4 | 4.3 | 86.6 | 49 |
| YOLO11x | 0.908 | 0.886 | 0.945 | 0.795 | 0.6 | 6.1 | 0.4 | 7.1 | 194.4 | 109 |
| YOLOv12n | 0.95 | 0.887 | 0.96 | 0.804 | 0.9 | 4.8 | 0.5 | 6.2 | 6.3 | 5.34 |
| YOLOv12s | 0.948 | 0.888 | 0.956 | 0.809 | 1.1 | 5.4 | 1.1 | 7.6 | 21.2 | 18.1 |
| YOLOv12m | 0.945 | 0.875 | 0.952 | 0.799 | 1.1 | 5 | 0.8 | 6.9 | 67.1 | 39 |
| YOLOv12l | 0.92 | 0.89 | 0.952 | 0.807 | 1 | 6 | 0.6 | 7.6 | 88.6 | 51.2 |
| YOLOv12x | 0.935 | 0.858 | 0.945 | 0.788 | 2.9 | 9.4 | 0.5 | 12.8 | 198.5 | 114 |
Ships, all 33 models fig. 20:
| Model | P | R | mAP50 | mAP50-95 | Pre | Inf | Post | Total | GFLOPs | Size |
|---|---|---|---|---|---|---|---|---|---|---|
| YOLOv3u | 0.679 | 0.534 | 0.519 | 0.298 | 0.8 | 6.2 | 0.3 | 7.3 | 282.5 | 207.86 |
| YOLOv3u tiny | 0.647 | 0.511 | 0.489 | 0.273 | 1 | 0.7 | 0.3 | 2 | 18.9 | 24.44 |
| YOLOv5un | 0.635 | 0.532 | 0.514 | 0.298 | 1.5 | 0.6 | 0.3 | 2.4 | 7.2 | 5.65 |
| YOLOv5us | 0.653 | 0.541 | 0.518 | 0.299 | 1.2 | 0.8 | 0.3 | 2.3 | 24 | 18.58 |
| YOLOv5um | 0.667 | 0.541 | 0.526 | 0.308 | 0.9 | 2.1 | 0.3 | 3.3 | 64 | 50.54 |
| YOLOv5ul | 0.654 | 0.545 | 0.525 | 0.305 | 0.9 | 3.3 | 0.3 | 4.5 | 134.8 | 106.85 |
| YOLOv5ux | 0.668 | 0.555 | 0.531 | 0.309 | 0.8 | 6.7 | 0.3 | 7.8 | 246.2 | 195.2 |
| YOLOv8n | 0.655 | 0.533 | 0.515 | 0.297 | 1.5 | 0.5 | 0.3 | 2.3 | 8 | 6.55 |
| YOLOv8s | 0.647 | 0.545 | 0.518 | 0.301 | 1.1 | 1 | 0.3 | 2.4 | 28.5 | 22.59 |
| YOLOv8m | 0.669 | 0.547 | 0.525 | 0.302 | 0.8 | 2.5 | 0.3 | 3.6 | 79 | 52.12 |
| YOLOv8l | 0.659 | 0.551 | 0.526 | 0.303 | 0.9 | 3.9 | 0.3 | 5.1 | 165 | 87.77 |
| YOLOv8x | 0.655 | 0.55 | 0.529 | 0.306 | 0.8 | 7.1 | 0.3 | 8.2 | 257.7 | 136.9 |
| YOLOv9t | 0.647 | 0.516 | 0.512 | 0.3 | 1.4 | 1.1 | 0.3 | 2.8 | 7.5 | 4.93 |
| YOLOv9s | 0.655 | 0.552 | 0.522 | 0.308 | 1.4 | 1.2 | 0.3 | 2.9 | 26.9 | 15.33 |
| YOLOv9m | 0.668 | 0.551 | 0.529 | 0.307 | 1.1 | 2.7 | 0.3 | 4.1 | 76.8 | 40.98 |
| YOLOv9c | 0.663 | 0.547 | 0.523 | 0.303 | 1.2 | 3.4 | 0.3 | 4.9 | 102.4 | 51.8 |
| YOLOv9e | 0.667 | 0.537 | 0.524 | 0.308 | 1.1 | 7.6 | 0.3 | 9 | 189.5 | 117.5 |
| YOLOv10n | 0.584 | 0.487 | 0.506 | 0.31 | 1.4 | 0.8 | 0.2 | 2.4 | 8.2 | 5.59 |
| YOLOv10s | 0.586 | 0.511 | 0.515 | 0.319 | 1.1 | 1.1 | 0.2 | 2.4 | 24.4 | 15.9 |
| YOLOv10m | 0.588 | 0.517 | 0.522 | 0.322 | 1 | 2.4 | 0.1 | 3.5 | 63.4 | 32.1 |
| YOLOv10b | 0.603 | 0.509 | 0.523 | 0.319 | 1.1 | 3.2 | 0.1 | 4.4 | 97.9 | 39.7 |
| YOLOv10l | 0.601 | 0.511 | 0.522 | 0.322 | 1.1 | 3.8 | 0.1 | 5 | 126.3 | 50 |
| YOLOv10x | 0.6 | 0.523 | 0.526 | 0.321 | 1 | 6.3 | 0.2 | 7.5 | 169.8 | 61.4 |
| YOLO11n | 0.574 | 0.51 | 0.505 | 0.311 | 1.5 | 0.7 | 0.3 | 2.5 | 6.3 | 5.35 |
| YOLO11s | 0.585 | 0.535 | 0.521 | 0.323 | 1.3 | 1 | 0.3 | 2.6 | 21.3 | 18.4 |
| YOLO11m | 0.588 | 0.541 | 0.53 | 0.325 | 1 | 2.4 | 0.3 | 3.7 | 67.6 | 38.8 |
| YOLO11l | 0.596 | 0.531 | 0.528 | 0.325 | 1.1 | 3 | 0.4 | 4.5 | 86.6 | 49 |
| YOLO11x | 0.596 | 0.538 | 0.529 | 0.327 | 0.8 | 6.1 | 0.3 | 7.2 | 194.4 | 109 |
| YOLOv12n | 0.571 | 0.505 | 0.505 | 0.307 | 1.1 | 4.7 | 0.4 | 6.2 | 6.3 | 5.34 |
| YOLOv12s | 0.58 | 0.529 | 0.516 | 0.319 | 1.6 | 5 | 0.4 | 7 | 21.2 | 18.1 |
| YOLOv12m | 0.584 | 0.543 | 0.525 | 0.325 | 1.1 | 4.6 | 0.4 | 6.1 | 67.1 | 39 |
| YOLOv12l | 0.588 | 0.532 | 0.522 | 0.323 | 2.6 | 5.2 | 0.4 | 8.2 | 88.5 | 51.2 |
| YOLOv12x | 0.586 | 0.538 | 0.52 | 0.321 | 1.2 | 9.3 | 0.4 | 10.9 | 198.5 | 114 |
Paper vs code
The repository is Nidhal-Jegham/YOLO-Benchmark-Paper, owned by the first author's GitHub account. The paper's Declarations say the code will be public on publication. Code paths below are relative to the repository root at code_commit. The repository has no LICENSE file, so its license is "not stated" and no code may be quoted verbatim.
- Scope. The repository has three notebooks, all for traffic signs:
traffic-sign-detection-yolov8m.ipynb,traffic-sign-detection-yolov5mu.ipynbandtraffic-sign-detection-yolov5.ipynb. No training code for the African wildlife or ships datasets is included. Their figures exist only in the paper and in CSV sheets Comparative Analysis YOLO African Animals - Sheet1.csv Comparative Analysis YOLO Ships - Sheet1.csv. - Results files. The traffic-sign CSV has no YOLO11 or YOLOv12 rows Comparative Analysis YOLO - Sheet1.csv. Its YOLOv10 rows differ from fig. 12; for example YOLOv10n has mAP50 0.756 in the CSV and 0.722 in fig. 12. The timings also differ for every dataset; YOLOv3u inference on traffic signs is 7.2 ms in the CSV Comparative Analysis YOLO - Sheet1.csv and 8.5 ms in fig. 12. The repository does not say which run produced the CSVs or the figures.
- Optimizer and learning rate. tab. 3 lists AdamW with initial and final rates (0.0001, 0.01). The code passes
optimizer=autotogether withlr0=0.0001andmomentum=0.937. The log says the auto setting ignored those two values and used AdamW(lr=0.000169, momentum=0.9) traffic-sign-detection-yolov8m.ipynb traffic-sign-detection-yolov8m.ipynb. The effective learning rate therefore differs from tab. 3. The same happens in the YOLOv5mu notebook traffic-sign-detection-yolov5mu.ipynb. - Augmentation. tab. 3 lists "None", and §3.1.1 says no augmentation was applied. The printed training arguments show mosaic=1.0, mixup=0.0, copy_paste=0.0, auto_augment=randaugment and erasing=0.4 traffic-sign-detection-yolov8m.ipynb. augment=False refers to test-time augmentation, not training. The paper's "no augmentation" statement therefore does not match the code, at least for traffic signs.
- Evaluation split. §3.1 gives a 70 / 20 / 10 train / val / test split. The code calls
.val(), and the printed arguments set split=val traffic-sign-detection-yolov8m.ipynb traffic-sign-detection-yolov8m.ipynb. The code therefore reports validation-split metrics. The paper does not say which split its tables use. - Software and hardware. §3.3 states Python 3.12, CUDA 12.4 and Ultralytics 8.2.55 on two RTX 4090s. The notebook logs show Python-3.10.13 and a single device, CUDA:0 traffic-sign-detection-yolov8m.ipynb. Ultralytics is installed unpinned traffic-sign-detection-yolov8m.ipynb.
- Agreement. These values match the code: 100 epochs, batch 16, image size 640, dropout 0.15 tab. 3 traffic-sign-detection-yolov8m.ipynb traffic-sign-detection-yolov8m.ipynb.
- Original implementations (tab. 2). No code in this repository produces the "GitHub" rows. The closest notebook,
traffic-sign-detection-yolov5.ipynb, loads the Ultralytics checkpointYOLO('yolov5m.pt')traffic-sign-detection-yolov5.ipynb. - Text against figures. The text and figures disagree in several places:
- §4.1.1 gives YOLOv5ul mAP50 as 0.866; fig. 12 shows 0.886.
- §4.1.3 says YOLO11x has the highest accuracy at mAP50 0.529, but fig. 20 shows YOLOv5ux at 0.531, with YOLO11x best only on mAP50-95 (0.327).
- §4.1.3 gives YOLOv12x an inference time of 10.9 ms; in fig. 20 10.9 ms is the total and inference is 9.3 ms.
- §4.1.3 labels a row "YOLOv5n"; fig. 20 labels it YOLOv5un.
- Training cost. The log for one YOLOv8m traffic-sign run reports 3.332 hours traffic-sign-detection-yolov8m.ipynb. The paper gives no training time.
Pitfalls
- One run per model, no variance. Each model gets one training run, and no repeats or intervals are reported. Gaps of a few thousandths, such as YOLO11m (0.795) against YOLO11l (0.794) on traffic-sign mAP50-95 fig. 12, should not be read as a ranking.
- Which split the numbers come from. The paper lists a 10% test split §3.1, but the code reports validation metrics traffic-sign-detection-yolov8m.ipynb. Whether the test split was scored at all is not stated.
- Effective settings differ from the table. On traffic signs, the optimizer, learning rate and augmentation that actually ran differ from tab. 3 (see Paper vs code). Any re-run that follows the table will not reproduce the numbers.
- Augmentation on the other datasets is unknown. Only the traffic-sign notebooks exist, so the augmentation for African wildlife and ships is not stated. The paper's "no augmentation" claim is the only source for them.
- Scale grouping is inconsistent. §5 lists YOLOv9c as medium and also as large. The ranking is described as "by scale", but the group boundaries and the averaging across datasets are not given, so the family ranks in tab. 4 are hard to reproduce exactly.
- Scale count. §3.2.6 says YOLOv10 has five scaled versions. fig. 12 shows six (n, s, m, b, l, x).
- Timing conditions. The tables give no units. The text uses milliseconds per image §4.1.1. Batch size for timing, numerical precision, warm-up, and whether timing includes the same preprocessing as training are not stated. Size units are not stated.
- Ranking method. The paper ranks by mAP50-95 for accuracy and total time for speed, but the rule for combining ranks across scales and datasets is not stated. The overall ranking figure fig. 24 is not transcribed here.
- Dataset construction. The traffic-sign set starts with about 55 classes; the authors remove classes with fewer than 50 observations and keep 24 §3.1.1. The list of the kept classes is not given, and the undersampling procedure is not described.
- Dataset size. The Africa set has at least 376 images per class §3.1.2. Results on such a small set are noisy. The authors attribute weak large-model results to overfitting §4.1.2 §5.3, but no training-curve evidence is given in the paper.
- Ships dataset. Its size is given as approximately 13.5k images §3.1.3, and the number used for each split is not stated.
- Latency explanation. The paper attributes YOLOv12's latency to FlashAttention and to model complexity §5.2. These are the authors' explanations; no ablation isolates them.
- Training cost. The traffic-sign notebooks log per-run training times of about 3.3 hours traffic-sign-detection-yolov8m.ipynb. The paper gives no training time, so budget a re-run from this figure.
- Ultralytics ports. The "u" models (for example YOLOv5u, YOLOv3u) are Ultralytics versions with an anchor-free head, not the original releases §3.2.1. Conclusions about "YOLOv5" in this paper apply to these ports.
Lineage
- Builds on: the YOLO versions described in §1 and §3.2, from YOLOv1 to YOLOv12. The paper gives its references by name, but no arXiv ids appear in its text, so no cards are linked here.
- Compared against: the other Ultralytics checkpoints in the same tables. Original implementations are compared only in tab. 2, on traffic signs.
- Related card: What is YOLOv8 covers YOLOv8 internals. This paper uses YOLOv8 checkpoints as baselines §3.2.4.
- Superseded by: not stated.
Source and license
Adapted from “YOLO Evolution: A Comprehensive Benchmark and Architectural Review of YOLOv12, YOLO11, and Their Previous Versions” by Nidhal Jegham, Chan Young Koh, Marwan Abdelatti, Abdeltawab Hendawi (arXiv:2411.00201), used under CC BY 4.0. Changes: condensed and restructured for implementation, with tables, equations and algorithms taken from the paper and its code, each cited to its source. Not affiliated with or endorsed by the authors. Code citations refer to https://github.com/Nidhal-Jegham/YOLO-Benchmark-Paper at commit c30bde3b5607 (not stated (no LICENSE file in the repository)). Any quoted code is shown under that license.