Lane detection that runs 10× faster with 20× fewer parameters
A 2019 ICCV paper distills self-attention into tiny ENet models so your car can actually afford to find lane markings.

What it does
This repo trains and tests lightweight CNNs for lane detection on three driving datasets: CULane, TuSimple, and BDD100K. It also includes a full TensorFlow reimplementation of the earlier SCNN architecture, mostly for comparison purposes.
The interesting bit
The trick is “self attention distillation” (SAD): the network learns to mimic its own attention maps from deeper layers, squeezing knowledge into a smaller model without a separate teacher. The result is an ENet-based detector with 0.98M parameters that beats SCNN’s 20.72M-parameter model on accuracy while running in 13.4ms vs. 133.5ms on CULane.
Key highlights
- ENet-Label-Torch: 72.0 F1 on CULane, 96.64% accuracy on TuSimple, 36.56% on BDD100K — all edging out SCNN
- ERFNet-CULane-PyTorch pushes further to 73.1 F1 and 10.2ms runtime
- Multi-GPU training supported via simple config changes
- Also includes SCNN-TensorFlow implementation (VGG-16 based) with pre-trained weights available
Caveats
- Several pre-trained models marked “coming soon!” in the README, including TuSimple and BDD100K ENet variants
- SCNN-TensorFlow results for TuSimple and BDD100K still listed as untested (empty cells in performance tables)
- TensorFlow 1.3.0 and Python 3.5 in install instructions date the codebase to 2017-era tooling
- Image preprocessing gotchas: must swap RGB→BGR and reorder VGG-MEAN values for the pre-trained model
Verdict
Worth a look if you’re building lane detection for resource-constrained systems or need a solid baseline on CULane. Skip if you want a modern, maintained framework — this is research code with 2019-era dependencies and some missing artifacts.