VBLC: Visibility Boosting and Logit-Constraint Learning for Domain Adaptive Semantic Segmentation under Adverse Conditions. AAAI 2023 Oral.
by Mingjia Li, Binhui Xie, Shuang Li, Chi Harold Liu and Xinjing Cheng
Update on 2023/01/31: Project page available.
Update on 2023/01/16: We are happy to announce that VBLC was accepted for Oral Presentation at AAAI 2023. 🎉🎉🎉
Update on 2023/01/12: Video and poster available.
- Overview
- Installation
- Datasets Preparation
- Model Zoo
- VBLC Evaluation
- VBLC Training
- How to Add VBLC to your Self-Training UDA Code
- Acknowledgments
- Citation
We propose VBLC to tackle the problem of domain adaptive semantic segmentation under adverse conditions. VBLC explores the potential of getting rid of reference images and resolving the mixture of adverse conditions simultaneously.
The visibility boost module is introduced in the input space to narrow the gap brought about by poor visibility, while the logit constraint learning loss is devised to relieve the pain of overconfidence common in self-training schemes.
Extensive analysis and visualizations can be found in our paper.
This code is implemented with Python 3.8.5
and PyTorch 1.10.2
on CUDA 11.3
.
To try out this project, it is recommended to set up a virtual environment first:
# create and activate the environment
conda create --name vblc -y python=3.8.5
conda activate vblc
# install the right pip and dependencies for the fresh python
conda install -y ipython pip
Then, the dependencies can be installed by:
# install required packages
pip install -r requirements.txt
# install mmcv-full, this command compiles mmcv locally and may take some time
pip install mmcv-full==1.5.0 # requires other packeges to be installed first
Alternatively, the mmcv-full
package can be installed faster with official pre-built packages, for instance:
# another way to install mmcv-full, faster
pip install mmcv-full==1.5.0 -f https://download.openmmlab.com/mmcv/dist/cu113/torch1.10.0/index.html
The environment is now fully prepared.
- Cityscapes: Download leftImg8bit_trainvaltest.zip and gtFine_trainvaltest.zip from here and extract them to a custom directory.
- ACDC: Download rgb_anon_trainvaltest.zip and gt_trainval.zip from here and extract them to a custom directory.
- FoggyCityscapes: Download leftImg8bit_trainvaltest_foggy.zip from here and extract them to the same directory as Cityscapes dataset.
- RainCityscapes: Download leftImg8bit_trainval_rain.zip from here and extract them to the same directory as Cityscapes dataset.
Symlink the required datasets:
ln -s /path/to/cityscapes/dataset data/cityscapes
ln -s /path/to/acdc/dataset data/acdc
Perform preprocessing to convert label IDs to the train IDs and gather dataset statistics:
python tools/convert_datasets/cityscapes.py data/cityscapes --nproc 8
Ultimately, the data structure should look like this:
VBLC
├── ...
├── data
│ ├── acdc
│ │ ├── gt
│ │ └── rgb_anon
│ ├── cityscapes
│ │ ├── gtFine
│ │ ├── leftImg8bit
│ │ ├── leftImg8bit_foggy
│ │ ├── leftImg8bit_rain
├── ...
We provide pretrained models of both Domain Adaptive Semantic Segmentation tasks through Google Drive and Baidu Netdisk (access code: VBLC
).
model name | backbone | mIoU (test) | mIoU (val) | checkpoint download |
---|---|---|---|---|
vblc_city2acdc_dlv2.pth | ResNet-101 | 47.8 | 46.0 | Google / Baidu (acc: VBLC ) |
vblc_city2acdc_daformer.pth | MiT-B5 | 64.2 | 63.7 | Google / Baidu (acc: VBLC ) |
model name | backbone | mIoU (val) | checkpoint download |
---|---|---|---|
vblc_city2foggyrain_dlv2.pth | ResNet-101 | 74.9 | Google / Baidu (acc: VBLC ) |
vblc_city2foggyrain_daformer.pth | MiT-B5 | 79.8 | Google / Baidu (acc: VBLC ) |
To evaluate the pretrained models on the validation set, please run as follows:
python -m tools.test /path/to/config /path/to/checkpoint --eval mIoU --val
Example
For example, if you download vblc_city2acdc_daformer.pth
along with its config json file vblc_city2acdc_daformer.json
into folder ./checkpoints/vblc_city2acdc_daformer/
, then the evaluation script should be like:
python -m tools.test ./checkpoints/vblc_city2acdc_daformer/vblc_city2acdc_daformer.json ./checkpoints/vblc_city2acdc_daformer/vblc_city2acdc_daformer.pth --eval mIoU --val
Additionally, for ACDC Dataset, you can also obtain the test results through:
python -m tools.test /path/to/config /path/to/checkpoint --format-only --eval-options imgfile_prefix=/path/prefix/labelTrainIds do_palette=False
Example
For the aforementioned example, the corresponding script is:
python -m tools.test ./checkpoints/vblc_city2acdc_daformer/vblc_city2acdc_daformer.json ./checkpoints/vblc_city2acdc_daformer/vblc_city2acdc_daformer.pth --format-only --eval-options imgfile_prefix=./test_results/labelTrainIds do_palette=False
The test results should be under folder /path/prefix/labelTrainIds
, and can then be zipped and submitted to ACDC test server for the test score.
To begin with, download SegFormer's official MiT-B5 weights (i.e., mit_b5.pth
) pretrained on ImageNet-1k from here and put it into a new folder ./pretrained
.
The training entrance is at run_experiments.py
. To examine the setting for a specific task, please take a look at experiments.py
for more details. Generally, the training script is given as:
python run_experiments.py --exp <exp_id>
The mapping between <exp_id>
and tasks:
<exp_id> |
task | backbone |
---|---|---|
0 |
Test the setup of the environment | All |
1 |
Cityscapes → ACDC | MiT-B5 |
2 |
Cityscapes → ACDC | ResNet-101 |
3 |
Cityscapes → FoggyCityscapes + RainCityscapes | MiT-B5 |
4 |
Cityscapes → FoggyCityscapes + RainCityscapes | ResNet-101 |
After training, the models can be validated and tested following VBLC Evaluation. Note that the training results are located in ./work_dirs
. The config filename should look like: 220824_2303_city2acdc_vblc_rcs001_daformer_sepaspp_logit_constraint_mitb5_poly10warm_s0_4b56d.json
, and the model file has suffix .pth
.
- To include the visibility boost module, take a look at
night_fog_filter
method inmmseg/models/utils/night_fog_filter.py
. - To include the logit constraint learning loss, take a look at
mmseg/models/losses/logit_constraint_loss.py
for implementation details.
This project is based on the following open-source projects. We thank their authors for making the source code publicly available.
- MMSegmentation (Apache License 2.0, license)
- SegFormer (NVIDIA Source Code License, license)
- DAFormer (Apache License 2.0, license)
- DACS (MIT License, license)
- IA-YOLO (Apache License 2.0, license)
⭐ Also see our SePiCo ⭐
If you find this work helpful to your research, please consider citing the paper:
@inproceedings{li2023vblc,
title={VBLC: Visibility Boosting and Logit-Constraint Learning for Domain Adaptive Semantic Segmentation under Adverse Conditions},
author={Li, Mingjia and Xie, Binhui and Li, Shuang and Liu, Chi Harold and Cheng, Xinjing},
booktitle={Proceedings of the AAAI Conference on Artificial Intelligence},
pages={},
year={2023}
}