Yashmit Katekar
← All projects
ML·Shipped

Road Damage Detection (YOLO11)

A YOLO11 pothole and road-damage detector with measured scores and a dashcam video demo

0.413
pothole AP50, India test
View on GitHub ↗
Role
Solo, end to end. Everything was trained and run on free Google Colab (T4).
Team
Solo
When
Nov 2026

Problem

Build a baseline road-damage detector (mainly potholes) with honestly measured scores, plus a small decision layer on a dashcam video demo. The limits are stated on purpose: not field-tested on Indian roads, not real time, and no accuracy claim on video.

Approach

Trained a YOLO11n baseline, then YOLO11s, on the RDD2022 India data (4 classes: longitudinal, transverse and alligator cracks, and potholes). The India-only model barely worked on UK pothole photos (Kent dataset), so I fine-tuned on India + Kent. A confidence cutoff of 0.35 was chosen on validation, because a wrong box seemed worse than a missed pothole. The video demo adds ByteTrack tracking, an editable road-area filter, duplicate-ID merging and a transparent 0-100 severity score.

Result

YOLO11s on the India test set: mAP50 0.332 and pothole AP50 0.453. The default India + Kent model scores pothole AP50 0.413 on the India test and 0.218 on a held-out Kent test, up from 0.020 before fine-tuning. At the 0.35 cutoff about 4 in 10 potholes are found (recall 0.366 on India, 0.305 on Kent). Single runs, and the scores are slightly optimistic because the split comes from the Kaggle upload.

How it fits together

  1. Dashcam video
    UK footage
  2. YOLO11 + ByteTrack
    every 2nd frame, min 3 hits
  3. Road-area filter
    editable polygon, duplicate IDs merged
  4. Severity score
    0-100, my own scales
  5. Contact sheet + map
    approximate GPS

Features

  • Detects 4 road-damage classes: longitudinal, transverse and alligator cracks, and potholes
  • Video demo with tracking, a road-area filter and duplicate-ID merging
  • Transparent severity score from 0 to 100 (size 50, confidence 30, persistence 20; the scales are my own assumptions)
  • Best-frame contact sheet and an approximate map (about 20-30 m) from the on-screen GPS overlay
  • Public repo with 5 Colab notebooks, result CSVs and figures; weights in a GitHub Release

Challenges

A domain gap: the India-only model scored 0.020 pothole AP50 on UK photos. Early false alarms on a brick wall, kerbs and road markings had confidences of 0.41-0.62, above the cutoff, so I added a road-area filter instead of just raising the cutoff. Transverse cracks can't be judged (only 7 test boxes). The video is UK footage, with no confirmed pothole count or false-alarm rate, and one clear false alarm on a white road marking.

What I learned

Only claim what is built, a lesson carried over from the AnnaDaan demo. A road-area filter beats a higher cutoff when false alarms score high, and a test photo that was also in the training data makes a check unfair (leakage).

Tech

PythonYOLO11UltralyticsByteTrackGoogle Colabfolium