Giter Club home page Giter Club logo

enet-sad_pytorch's Introduction

ENet-SAD Pytorch

Pytorch implementation of "Learning Lightweight Lane Detection CNNs by Self Attention Distillation (ICCV 2019)"

drawing

Demo

Video

demo_gif

Demo trained with CULane dataset & tested with \driver_193_90frame\06051123_0635.MP4

gpu_runtime: 0.016253232955932617 FPS: 61

total_runtime: 0.017553091049194336 FPS: 56 on RTX 2080 TI

Comparison

Category 40k episode (before SAD) 60k episode (after SAD)
Image img1 img2
Lane img3 img4

Train

Requirements

  • pytorch
  • tensorflow (for tensorboard)
  • opencv

Datasets

  • CULane

    CULane dataset path (click to expand)
    CULane_path
    ├─ driver_100_30frame
    ├─ driver_161_90frame
    ├─ driver_182_30frame
    ├─ driver_193_90frame
    ├─ driver_23_30frame
    ├─ driver_37_30frame
    ├─ laneseg_label_w16
    ├─ laneseg_label_w16_test
    └─ list
    
  • TuSimple

    TuSimple dataset path (click to expand)
    Tusimple_path
    ├─ clips
    ├─ label_data_0313.json
    ├─ label_data_0531.json
    ├─ label_data_0601.json
    └─ test_label.json
    
  • BDD100K

    • Download modified labels and lists generated by author's method (train, val and list) and put the BDD100K dataset in the desired folder.
    BDD100K dataset path (click to expand)
    BDD100K_path
    ├─ images
    │  ├─ 10k
    │  └─ 100k
    ├─ list
    │  ├─ test_gt_bdd.txt
    │  ├─ train_gt_bdd.txt
    │  └─ val_gt_bdd.txt
    ├─ train_label
    │  └─ final_train
    └─ val_label
       └─ final_val
    

You need to change the correct dataset path in ./config.py

Dataset_Path = dict(
    CULane = "/workspace/CULANE_DATASET",
    Tusimple = "/workspace/TUSIMPLE_DATASET",
    BDD100K = "/workspace/BDD100K_DATASET",
    VPGNet = "/workspace/VPGNet_DATASET"
)

Training

First, change some hyperparameters in ./experiments/*/cfg.json

{
  "model": "enet_sad",               <- "scnn" or "enet_sad"
  "dataset": {
    "dataset_name": "CULane",        <- "CULane" or "Tusimple"
    "batch_size": 12,
    "resize_shape": [800, 288]       <- [800, 288] with CULane, [640, 368] with Tusimple, and [640, 360] with BDD100K
                                        This size is defined in the ENet-SAD paper, any size is fine if it is a multiple of 8.
  },
  ...
}

And then, start training with train.py

python train.py --exp_dir ./experiments/exp1
Optional

If you write your own code using ENet-SAD model, you can init ENet_SAD with some parameters.

class ENet_SAD(nn.Module):
    """
    Generate the ENet-SAD model.
    Keyword arguments:
    - input_size (tuple): Size of the input image to segment.
    - encoder_relu (bool, optional): When ``True`` ReLU is used as the
    activation function in the encoder blocks/layers; otherwise, PReLU
    is used. Default: False.
    - decoder_relu (bool, optional): When ``True`` ReLU is used as the
    activation function in the decoder blocks/layers; otherwise, PReLU
    is used. Default: True.
    - sad (bool, optional): When ``True``, SAD is added to model;
    otherwise, SAD is removed. Default: False.
    - weight_share (bool, optional): When ``True``, weights are shared
    with encoder blocks (E2, E3 and E4); otherwise, encoders will each
    learn with their own weights. Default: True.
    """

Performance

Will continue to be updated.

  • TuSimple dataset

    Category ENet-SAD Pytorch ENet-SAD paper
    Accuracy 93.93% 96.64%
    FP 0.2279 0.0602
    FN 0.0838 0.0205
  • CULane dataset (F1-measure, FP measure for crossroad)

    Category ENet-SAD Pytorch ENet-SAD paper
    Normal 86.8 90.1
    Crowded 65.3 68.8
    Night 54.0 66.0
    No line 37.3 41.6
    Shadow 52.4 65.9
    Arrow 78.2 84.0
    Dazzle light 51.0 60.2
    Curve 58.6 65.7
    Crossroad 2278 1995
    Total 65.5 70.8
  • BDD100K

    Category ENet-SAD Pytorch ENet-SAD paper
    Accuracy 37.09% 36.56%
    IoU 15.14 16.02

Acknowledgement

This repo is built upon official implementation ENet-SAD and based on PyTorch-ENet, SCNN_Pytorch.

enet-sad_pytorch's People

Contributors

inhwanbae avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.