Deep Dual-resolution Networks for Real-time and Accurate Semantic Segmentation of Road Scenes

February 25, 2021 · View on GitHub

Introduction

This is the unofficial code of Deep Dual-resolution Networks for Real-time and Accurate Semantic Segmentation of Road Scenes. which achieve state-of-the-art trade-off between accuracy and speed on cityscapes and camvid, without using inference acceleration and extra data!on single 2080Ti GPU, DDRNet-23-slim yields 77.4% mIoU at 109 FPS on Cityscapes test set and 74.4% mIoU at 230 FPS on CamVid test set.

The code mainly borrows from HRNet-Semantic-Segmentation OCR and the official repository, thanks for their work.

hrnet

requirements

Here I list the software and hardware used in my experiment

  • pytorch==1.7.0
  • 3080*2
  • cuda==11.1

Quick start

0. Data preparation

You need to download the Cityscapesdatasets. and rename the folder cityscapes, then put the data under data folder.

└── data
  ├── cityscapes
  └── list

1. Pretrained model

download the pretrained model on imagenet or the segmentation model from the official,and put the files in ${PROJECT}/pretrained_models folder

VAL

use the official pretrained model and our eval.py code. with ydhongHIT's advice now can reach the same accuracy in the paper. Thanks.

cd ${PROJECT}
python tools/eval.py --cfg experiments/cityscapes/ddrnet23_slim.yaml
modelTrain SetTest SetOHEMMulti-scaleFlipmIoULink
DDRNet23_slimunknownevalYesNoNo77.83official
DDRNet23_slimunknownevalYesNoYes78.42official
DDRNet23unknownevalYesNoNo79.51official
DDRNet23unknownevalYesNoYes79.98official

Note

  • with the ALIGN_CORNERS: false in ***.yaml will reach higher accuracy.

TRAIN

download the imagenet pretrained model, and then train the model with 2 nvidia-3080

cd ${PROJECT}
python -m torch.distributed.launch --nproc_per_node=2 tools/train.py --cfg experiments/cityscapes/ddrnet23_slim.yaml

the own trained model coming soon

OWN model

modelTrain SetTest SetOHEMMulti-scaleFlipmIoULink
DDRNet23_slimtrainevalYesNoYes77.77Baidu/password:it2s
DDRNet23_slimtrainevalYesYesYes79.57Baidu/password:it2s
DDRNet23trainevalYesNoYes~None
DDRNet39trainevalYesNoYes~None

Note

  • set the ALIGN_CORNERS: true in ***.yaml, because i use the default setting in HRNet-Semantic-Segmentation OCR.
  • Multi-scale with scales: 0.5,0.75,1.0,1.25,1.5,1.75. it runs too slow.
  • from ydhongHIT, can change the align_corners=True with better performance, the default option is False

Reference

[1] HRNet-Semantic-Segmentation OCR branch

[2] the official repository