Awesome
Spatial CNN for Traffic Lane Detection
Paper
Xingang Pan, Jianping Shi, Ping Luo, Xiaogang Wang, Xiaoou Tang. "Spatial As Deep: Spatial CNN for Traffic Scene Understanding", AAAI2018
This code is modified from fb.resnet.torch.
Introduction
Demo video is available here.
<img align="middle" width="700" height="280" src="CNNvsSCNN.jpg">- Spatial CNN enables explicit and effective spatial information propagation between neurons in the same layer of a CNN.
- It is extremly effective in cases where objects have strong shape priors like the long thin continuous property of lane lines.
VGG16+SCNN outperforms ResNet101 on lane detection.
Requirements
- Torch, please follow the installation instructions at fb.resnet.torch.
- Matlab (for tools/prob2lines), version R2014a or later.
- Opencv (for tools/lane_evaluation), version 2.4.8 (later 2.4.x should also work).
- Hardware: For testing, GPU with 3G memory suffices. For training, we recommend 4xGPU with 12G memory.
Before Start
-
Clone the SCNN repository
git clone https://github.com/XingangPan/SCNN.git
We'll call the directory that you cloned SCNN as
$SCNN_ROOT
-
Download CULane dataset
mkdir -p data/CULane cd data/CULane
Download CULane dataset and extract here. (Note: If you have downloaded the dataset before 16th April 2018, please update the raw annotations of train&val set as described in the dataset website.)
You should have structure like this:$SCNN_ROOT/data/CULane/driver_xx_xxframe # data folders x6 $SCNN_ROOT/data/CULane/laneseg_label_w16 # lane segmentation labels $SCNN_ROOT/data/CULane/list # data lists
Testing
-
Download our pre-trained models to
./experiments/pretrained
cd $SCNN_ROOT/experiments/pretrained
Download our best performed model here.
-
Run test script
cd $SCNN_ROOT sh ./experiments/test.sh
Testing results (probability map of lane markings) are saved in
experiments/predicts/
by default. -
Get curve line from probability map
cd tools/prob2lines matlab -nodisplay -r "main;exit" # or you may simply run main.m from matlab interface
The generated line coordinates would be saved in
tools/prob2lines/output/
by default. -
Calculate precision, recall, and F-measure
cd $SCNN_ROOT/tools/lane_evaluation make sh Run.sh # it may take over 30min to evaluate
Note:
Run.sh
evaluate each scenario separately whilerun.sh
evaluate the whole. You may usecalTotal.m
to calculate overall performance from all senarios.
By now, you should be able to reproduce our result in the paper.
Training
- Download VGG16 pretrained on ImageNet
Download VGG16 model here and move it tocd $SCNN_ROOT/experiments/models
$SCNN_ROOT/experiments/models/vgg
. - Generate SCNN model
The generated model will be saved inth SCNN-gen.lua
./vgg_SCNN_DULR9_w9
by default. - Training SCNN
The training process should start and trained models would be saved incd $SCNN_ROOT sh ./experiments/train.sh
$SCNN_ROOT/experiments/models/vgg_SCNN_DULR_w9
by default.
Then you can test the trained model following the Testing steps above. If your model position or name is changed, remember to set them to yours accordingly.
Other Implementations
Tensorflow implementation reproduced by cardwing: https://github.com/cardwing/Codes-for-Lane-Detection.
[new!] Pytorch implementation reproduced by voldemortX: https://github.com/voldemortX/pytorch-auto-drive.
Citing SCNN or CULane
@inproceedings{pan2018SCNN,
author = {Xingang Pan, Jianping Shi, Ping Luo, Xiaogang Wang, and Xiaoou Tang},
title = {Spatial As Deep: Spatial CNN for Traffic Scene Understanding},
booktitle = {AAAI Conference on Artificial Intelligence (AAAI)},
month = {February},
year = {2018}
}
Acknowledgment
Most work for building CULane dataset is done by Xiaohang Zhan, Jun Li, and Xudong Cao. We thank them for their helpful contribution.