Home

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">

Requirements

Before Start

  1. Clone the SCNN repository

    git clone https://github.com/XingangPan/SCNN.git
    

    We'll call the directory that you cloned SCNN as $SCNN_ROOT

  2. 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

  1. Download our pre-trained models to ./experiments/pretrained

    cd $SCNN_ROOT/experiments/pretrained
    

    Download our best performed model here.

  2. Run test script

    cd $SCNN_ROOT
    sh ./experiments/test.sh
    

    Testing results (probability map of lane markings) are saved in experiments/predicts/ by default.

  3. 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.

  4. 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 while run.sh evaluate the whole. You may use calTotal.m to calculate overall performance from all senarios.
    By now, you should be able to reproduce our result in the paper.

Training

  1. Download VGG16 pretrained on ImageNet
    cd $SCNN_ROOT/experiments/models
    
    Download VGG16 model here and move it to $SCNN_ROOT/experiments/models/vgg.
  2. Generate SCNN model
    th SCNN-gen.lua
    
    The generated model will be saved in ./vgg_SCNN_DULR9_w9 by default.
  3. Training SCNN
    cd $SCNN_ROOT
    sh ./experiments/train.sh
    
    The training process should start and trained models would be saved in $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.