YOLO26-RD: An End-to-End Road Damage Detection Network With Learnable Contrast Enhancement and Edge-Guided Downsampling
Organizations: AI Research Group, Department of Civil Engineering, King Mongkut’s University of Technology Thonburi, Bangkok, Thailand · Infraplus Co., Ltd., Thailand
Abstract
Pavement distress detectors are conventionally specialised for small objects, typically by adding a stride-4 detection head and replacing strided convolution with space-to-depth downsampling. This paper tests that premise against the annotation geometry of region level survey imagery and finds it fails: 1.28% of instances are small at 640 resolution while 70.37% are large, yet a stride-4 level would claim 75.3% of anchors, and complete misses rather than localisation errors dominate baseline failures. YOLO26-RD therefore reallocates the anchor budget, retaining the stride-4 branch as neck features but carrying no detection level there, and adds LearnableContrast, a 494 parameter per tile correction learned from the detection loss and active at inference, and EdgeSPD, a lossless space-to-depth downsampler gated by a fixed Sobel prior. Fifteen models were trained from scratch under one recipe, five scales each of YOLO26-RD and of matched YOLO26 and YOLOv12 families. Averaged over scales YOLO26-RD returns 0.790 mAP50 and 0.482 mAP50-95 against 0.776 and 0.471 for YOLO26 and 0.755 and 0.468 for YOLOv12; it exceeds both on mAP50 at every scale from s upward, and at m, l and x it leads on both metrics, twelve pairwise comparisons decided without exception. YOLO26-RD-l is the best of the fifteen at 0.809 mAP50 and 0.497 mAP50-95, improving on the YOLO26 reference by 0.031 and 0.030 and leading all six per class entries; every arm of a module ablation also exceeds that reference. The margin is thus a property of the architecture rather than of one tuned configuration, though three of the twelve margins lie inside the dataset 0.015 resolution limit and the held out split reproduces the ordering against YOLO26 but not YOLOv12 at scale x. As a TensorRT FP16 engine the released model sustains 98 frames per second on an entry level accelerator, against the 21 needed at 100 km/h.
Figures & tables
| Method (venue, yr) | Base | Key additions | Contrast | Downsampling | P2 head | Dataset — reported Δ mAP50 |
|---|---|---|---|---|---|---|
| YOLOv8-PD (Sci. Rep. 2024) | YOLOv8n | BOT transformer, LSKA attention, C2fGhost, shared light head | — | strided conv | no | RDD2022 — 0.706 (+1.4) |
| EMG-YOLO (Front. Neurorob. 2024) | YOLOv5 | global-context C3, decoupled head, MPDIoU | — | strided conv | no | RDD2022 — (+2.9); 2× model size |
| SRD-YOLO (AICIT 2024) | YOLOv8 | RFAConv, 4-level scale fusion for small targets | — | strided conv | yes | pavement distress — (+2.7) |
| MFF-YOLO (NNICE 2024) | YOLOv8 | BoTNet backbone, BiFPN neck, small-target focus | — | strided conv | — | road crack, complex background |
| SDFC-YOLO [14] | YOLO | dynamic downsampling module, feature-fusion compensation | — | adaptive sampling positions | — | pavement distress |
| YOLOv11n-CDL (JCEM 2026) | YOLO11n | double-stage attention, P2 small-object path | — | strided conv | yes | fine cracks / micro-potholes |
| split | images | backgrounds | alligator | crack | patching |
|---|---|---|---|---|---|
| train | 6,563 | 1,711 (26%) | 1,742 | 5,380 | 662 |
| test | 504 | 39 (8%) | 241 | 418 | 65 |
| val | 551 | 117 (21%) | 237 | 385 | 64 |
| item | setting |
|---|---|
| Hardware | 1 × NVIDIA RTX 5090 (32 GB); 2 × RTX 5090 for the scale-x arms, which do not fit one card at batch 32 |
| Framework | PyTorch 2.12 / CUDA 13; Ultralytics 8.4.115 fork containing both modules |
| Initialization | from scratch; no pretrained weights in any arm |
| Input resolution | 640 × 640 |
| Batch | 32, with gradient accumulation to a nominal batch of 64 |
| Epochs | 150 |
| baseline: YOLO26-l | YOLO26-RD-l | absolute | relative | |
|---|---|---|---|---|
| mAP50 | 0.778 | 0.809 | +0.031 | +3.98% |
| mAP50-95 | 0.467 | 0.497 | +0.030 | +6.42% |
| precision | 0.857 | 0.830 | −0.027 | −3.15% |
| recall | 0.706 | 0.717 | +0.011 | +1.56% |
| AP50, alligator | 0.821 | 0.854 | +0.033 | +4.02% |
| AP50, crack | 0.721 | 0.744 | +0.023 | +3.19% |
| # | arm | LC | EdgeSPD | mAP50 | mAP50-95 | P | R | AP50 alligator | AP50 crack | AP50 patching |
|---|---|---|---|---|---|---|---|---|---|---|
| — | YOLO26-l baseline (not the RD graph) | no | — | 0.778 | 0.467 | 0.857 | 0.706 | 0.821 | 0.721 | 0.792 |
| B1 | LearnableContrast only | yes | 0 | 0.782 | 0.487 | 0.787 | 0.744 | 0.805 | 0.737 | 0.804 |
| B2 | EdgeSPD, one location | no | 1 | 0.790 | 0.481 | 0.838 | 0.714 | 0.839 | 0.742 | 0.790 |
| B3 | EdgeSPD, two locations | no | 2 | 0.794 | 0.494 | 0.854 | 0.684 | 0.842 | 0.735 | 0.806 |
| B4 | LearnableContrast + EdgeSPD, one location | yes | 1 | 0.786 | 0.493 | 0.813 | 0.708 | 0.845 | 0.727 | 0.787 |
| — | YOLO26-RD-l (proposed, Table 4) | yes | 2 | 0.809 | 0.497 | 0.830 | 0.717 | 0.854 | 0.744 | 0.828 |
| model | params | mAP50 | mAP50-95 |
|---|---|---|---|
| YOLO26-RD (proposed) | |||
| YOLO26-RD-n | 3.13M | 0.757 | 0.460 |
| YOLO26-RD-s | 12.42M | 0.787 | 0.469 |
| YOLO26-RD-m | 31.61M | 0.794 | 0.488 |
| YOLO26-RD-l (Table 4) | 36.22M | 0.809 | 0.497 |
| YOLO26-RD-x | 81.36M | 0.801 | 0.495 |
| audit step | measurement | implication |
|---|---|---|
| Instance size (640² input) | 1.28% small, 28.34% medium, 70.37% large; smallest instance √area 14.4 px; small share 0.02% at 1024² and 0.01% at 1280² | the small-object premise fails at every resolution considered |
| Annotated box geometry | median crack box 138 × 1,476 px at aspect 9.5:1 (p95 17.2:1), spanning about 90% of frame height; alligator median √area 1,020 px; patching median aspect 0.98 | instances are thin, not small, and no class occupies a small-object regime |
| Anchor allocation (640² input) | P3, P4 and P5 supply 6,400, 1,600 and 400 anchors, 8,400 in total; a stride-4 level adds 25,600, or 75.3% of all anchors | a stride-4 detection level is not warranted on this data |
| Failure decomposition (YOLO26-l, 724 instances) | missed entirely 25 of 241 alligator (10%), 67 of 418 crack (16%), 22 of 65 patching (34%); localization error 30 of 418 crack (7%) and 0 of 65 patching; misclassified 2 in the whole split | the deficit is sensitivity, not box regression |
| Geometry shift, train to test (crack) | median crack spans 0.90 of frame height in training against 0.51 in the test split; transverse share 18.9% against 38.3% | part of the crack miss rate is a geometry difference between the splits, not a capacity limit |
| Label completeness (confidence ≥ 0.5, IoU ¡ 0.1) | the majority of confident unmatched detections are real but unlabelled distress; 74 of the 113 false positives at IoU ¡ 0.3 belong to crack | measured precision is a lower bound, depressed equally for every arm |
| # | from | module | n | c_out | params | stride | role |
|---|---|---|---|---|---|---|---|
| 0 | −1 | LearnableContrast | 1 | 3 | 494 | /1 | tile-wise contrast stem (proposed) |
| 1 | −1 | Conv 3×3 s2 | 1 | 64 | 1,856 | /2 | P1 |
| 2 | −1 | Conv 3×3 s2 | 1 | 128 | 73,984 | /4 | P2 |
| 3 | −1 | C3k2 | 2 | 256 | 173,824 | /4 | |
| 4 | −1 | EdgeSPD | 1 | 256 | 2,359,810 | /8 | P3 edge-gated lossless downsample (proposed) |
| 5 | −1 | C3k2 | 2 | 512 | 691,712 | /8 | backbone P3 out |
Object Detection
Object detection locates and classifies objects in images or video, balancing localization accuracy, robustness, and inference speed.
See all 624 papers