← All work

Computer vision · ADAS perception

German Traffic Sign Recognition

A compact CNN that classifies the 43 sign classes of the German Traffic Sign Recognition Benchmark. Built end to end with a data pipeline, augmentation, training, evaluation, single-image inference and a demo, and trained on a CPU.

Role
Solo project
Year
2026
Status
Open source · model checkpoint included
Links
GitHub ↗

Why this task

Traffic-sign recognition is a safety-critical piece of driver-assistance perception, and GTSRB is the standard German benchmark for it. I wanted to own the whole loop an ML engineer owns, not just call a pretrained model.

Fig. 01 Pipeline
  1. 01 data.py Load + augment GTSRB, rotation and colour jitter
  2. 02 model.py Compact CNN 3 conv blocks, BatchNorm, Dropout
  3. 03 train.py Train Adam + step LR, best checkpoint
  4. 04 predict.py Inference Top-k for a single image
  5. 05 app.py Demo Upload a sign, see confidence

Model

Inputs are 32×32 RGB. There are three convolutional blocks (32→32, 64→64, then 128 channels), each with BatchNorm and ReLU, followed by a classifier head of 2048 → 256 → 43 with dropout of 0.4 and 0.3. That’s 675,659 parameters, small enough to train on a laptop CPU in 8 epochs.

Fig. 02 Test accuracy at successive checkpoints
Checkpoint 1 90.4%
Checkpoint 2 94.4%
Checkpoint 3 96.8%
Checkpoint 4 97.4%
Best 97.7%

What I’d do for production

97.7% on a clean test set is a starting point, not a safety case. Next would be a per-class confusion analysis (speed-limit signs are easily confused with each other), robustness tests under blur, glare and night conditions, and quantisation to check accuracy and latency on embedded hardware.