GithubHelp home page GithubHelp logo

syed-cbot / dabnet Goto Github PK

View Code? Open in Web Editor NEW

This project forked from isyangshu/dabnet

0.0 0.0 0.0 8.59 MB

Official implementation of 'Real-time Semantic Segmentation via Densely Aggregated Bilateral Network', in Pytorch.

License: Apache License 2.0

Python 98.70% Shell 1.07% Dockerfile 0.13% Makefile 0.04% CSS 0.01% Batchfile 0.05%

dabnet's Introduction

Real-time Semantic Segmentation via Densely Aggregated Bilateral Network (DABNet)

GitHub License GitHub last commit GitHub issues

image

Note: I have executed the relevant instructions on docker myself to ensure that the code can be run correctly. I gave the training_log, with ResNet-18 as backbone and Patch size 2. (2022-03-02) I gave the training_log, with ResNet-18 as backbone and Patch size 8. (2022-03-10)

Installation

Our project is developed based on MMsegmentation. MMSegmentation is an open source semantic segmentation toolbox based on PyTorch. Please refer to get_started.md for installation and dataset_prepare.md for dataset preparation.

Documentation: https://mmsegmentation.readthedocs.io/

English | 简体中文

Due to my unfamiliarity with github, I may make mistakes (so you can use MMsegmentation and just copy my code). 
At the same time, I usually use "BiseNetV1_res" as my network name during the experiment (because DABNet is indeed improved based on BiseNetV1).
Although I made changes before uploading, there may still be some naming conflicts (eg BiseNetV1_Res vs DABNet, HFA vs PCE). 
I used the naming scheme "BiseNetV1_Res" in my public logs, hope it doesn't confuse you.

Enviroment

  • Benchmark
conda create -n open-mmlab python=3.7 -y
conda activate open-mmlab

conda install pytorch=1.6.0 torchvision cudatoolkit=10.1 -c pytorch -y
pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu101/torch1.6.0/index.html
git clone https://github.com/isyangshu/DABNet.git
cd DABNet
pip install -e .  # or "python setup.py develop"
pip install -e .[all]

mkdir data
  • Additional Dependencies
pip install einops  # used for transpose
pip install timm==0.4.12 # used for Efficientnet_B1

In order to change the BatchNorm in the Efficientnet to SydncBatchNorm, we need to modify the relevant code in timm/models/efficientnet.py:

norm_layer=kwargs.pop('norm_layer', None) or partial(nn.BatchNorm2d, **resolve_bn_args(kwargs)),

For more details, please refer to EfficientNet.

  • TensorRT

    TensorRT needs a version that strictly matches Cuda and Cudnn. Refer to TensorRT to deploy the appropriate Cuda, Cudnn, TensorRT versions, and make sure their versions match MMCV, MMsegmentation. For the specific installation method and version selection, please refer to MMSegmentation.

    We simulate inference and measure inference speed (FPS) on NVIDIA GTX 1080Ti GPU with CUDA 10.2, CUDNN 8.0.4, and TensorRT 7.2.1.6. (Just need to configure according to the above method on the machine with GTX1080ti, pay attention to modify the pytorch and mmcv corresponding to the cuda version.)

Datasets

Cityscapes

The data could be found hear after registration.

You can also test Cityscapes results in the same website.

By convention, **labelTrainIds.png are used for cityscapes training. We provided a scripts based on cityscapesscripts to generate **labelTrainIds.png.

# --nproc means 8 process for conversion, which could be omitted as well.
python tools/convert_datasets/cityscapes.py data/cityscapes --nproc 8

COCO-10k

# download
mkdir coco_stuff10k && cd coco_stuff10k
wget http://calvin.inf.ed.ac.uk/wp-content/uploads/data/cocostuffdataset/cocostuff-10k-v1.1.zip

# unzip
unzip cocostuff-10k-v1.1.zip

# --nproc means 8 process for conversion, which could be omitted as well.
python tools/convert_datasets/coco_stuff10k.py /path/to/coco_stuff10k --nproc 8

COCO-164k

# download
mkdir coco_stuff164k && cd coco_stuff164k
wget http://images.cocodataset.org/zips/train2017.zip
wget http://images.cocodataset.org/zips/val2017.zip
wget http://calvin.inf.ed.ac.uk/wp-content/uploads/data/cocostuffdataset/stuffthingmaps_trainval2017.zip

# unzip
unzip train2017.zip -d images/
unzip val2017.zip -d images/
unzip stuffthingmaps_trainval2017.zip -d annotations/

# --nproc means 8 process for conversion, which could be omitted as well.
python tools/convert_datasets/coco_stuff164k.py /path/to/coco_stuff164k --nproc 8

CamVid

The images have a resolution of 960 × 720 and 32 semantic categories, in which the subset of 11 classes are used for segmentation experiments. The original data could be found hear.

The annotations should be label index for mmsegmentation. If each mask is a specific class label for camvid, you should fuse all the masks of an image to generate the label index annotations. Use label index to represent the categories in the annotations.

I provide a script /tools/convert_datasets/camvid.py to convert the Camvid dataset, note that you need to change the path (train/val/test).

This code runs a little slow, you can get the data directly from CamVid-baidu (1snk). TrainID indicates available annotations.

Training and Testing

Please see train.md and inference.md for the basic usage of MMSegmentation. There are also tutorials for customizing dataset, designing data pipeline, customizing modules, and customizing runtime. MMSegmentation also provides many training tricks for better training and useful tools for deployment.

Train

./tools/dist_train.sh ${configs} ${GPU Nums}
nohup ./tools/dist_train.sh ${configs} ${GPU Nums} 2>&1 &
# For example, train a DABNet-Resnet18 on Cityscapes dataset with 4 GPUs
nohup ./tools/dist_train.sh configs/dabnet/dabnet_r18-d32_in1k-pre_4x8_1024x1024_80k_cityscapes.py 4 2>&1 &

More detail, please refer to Train Doc.

Test

  • Cityscapes val set

    # Test mIoU for Cityscapes
    python tools/test.py ${configs} ${checkpoints} --eval mIoU
  • Cityscapes test set

    • Test DABNet on cityscapes test split with 4 GPUs, and generate the png files to be submit to the official evaluation server.

    • First, add following to config file ${configs},

    data = dict( test=dict( img_dir='leftImg8bit/test', ann_dir='gtFine/test'))

    • Then run test.
    ./tools/dist_test.sh ${configs} ${checkpoints} 4 --format-only --eval-options "imgfile_prefix=./test_results"
    • zip and submit test_results

More detail, please refer to Test Doc.

Latency

Different from the code of MMsegmentation, we refer to FasterSeg and STDC to implement tools for testing speed.

  • If you have successfully installed TensorRT, you will automatically use TensorRT for the following latency tests (see function here).
  • Otherwise you will be switched to use Pytorch for the latency tests (see function here).
  • I fine-tune related code to fit the MMsegmentation to measure latency. For more details, see tools/print_latency.py.
CUDA_VISIBLE_DEVICES=0 python ./tools/print_latency.py ${configs} ${checkpoints}
In practice, using `torch.backends.cudnn.benchmark = True` may cause out of memory at some resolutions. 
Meanwhile, using `torch.backends.cudnn.benchmark = False` does not affect the measurement.

Results

I need more time to train and test.

Please wait.

Cityscapes

Method Crop Size Inference Size Batch size iteration set val mIoU test mIoU FPS model config
DABNet_R_P1 1024x1024 2048x1024 8 * 4 80k val 77.4 - 33.5 - config
DABNet_R_P2 1024x1024 2048x1024 8 * 4 80k val 77.8 76.1 34.9 baidu (2t0o) config
DABNet_R_P4 1024x1024 2048x1024 8 * 4 80k val 78.1 - 34.7 - config
DABNet_R_P8 1024x1024 2048x1024 8 * 4 80k val 78.8 77.3 31.1 - config
DABNet_R_P16 1024x1024 2048x1024 8 * 4 80k val 78.4 - 21.0 - config
DABNet_E 1024x1024 2048x1024 4 * 4 80k val 78.7 77.5 20.3 baidu (2t0o) config
DABNet_R_P1 1024x1024 2048x1024 8 * 4 80k train+val - - - - -
DABNet_R_P2 1024x1024 2048x1024 8 * 4 80k train+val - - - - -
DABNet_R_P4 1024x1024 2048x1024 8 * 4 80k train+val - - - - -
DABNet_R_P8 1024x1024 2048x1024 8 * 4 80k trian+val - - - - -
DABNet_R_P16 1024x1024 2048x1024 8 * 4 80k train+val - - - - -
DABNet_E 1024x1024 2048x1024 4 * 4 80k trian+val - - - - -

COCO-10k

Method Crop Size Inference Size Batch size iteration mIoU pixACC FPS model config
DABNet_R_P2 512x512 640x640 8 * 4 80k 29.5 63.1 104.6 baidu (2t0o) config
DABNet_E 512x512 640x640 8 * 4 80k 32.4 65.5 70.8 baidu (2t0o) config

CamVid

Method Crop Size Inference Size Batch size iteration set mIoU FPS config
DABNet_R_P2 960x768 960x768 2 * 4 10k train+val 74.3 92.2 config
DABNet_E 960x768 960x768 2 * 4 10k train+val 76.5 56.5 config

Pretrained weights

You can get the pretrained weights directly from baidu (2t0o).

Cityscapes test results

You can get the pretrained weights directly from baidu (vq1n).

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.