DSSN
DSSN copied to clipboard
ACM MM 2023: Improving semi-supervised semantic segmentation with dual-level Siamese structure network
DSSN
Semi-supervised semantic segmentation (SSS) is an important task that utilizes both labeled and unlabeled data to reduce expenses on labeling training examples. However, the effectiveness of SSS algorithms is limited by the difficulty of fully exploiting the potential of unlabeled data. To address this, we propose a dual-level Siamese structure network (DSSN) for pixel-wise contrastive learning. By aligning positive pairs with a pixel-wise contrastive loss using strong augmented views in both low-level image space and high-level feature space, the proposed DSSN is designed to maximize the utilization of available unlabeled data. Additionally, we introduce a novel class-aware pseudo-label selection strategy for weak-to-strong supervision, which addresses the limitations of most existing methods that do not perform selection or apply a predefined threshold for all classes. Specifically, our strategy selects the top high-confidence prediction of the weak view for each class to generate pseudo labels that supervise the strong augmented views. This strategy is capable of taking into account the class imbalance and improving the performance of long-tailed classes. Our proposed method achieves state-of-the-art results on two datasets, PASCAL VOC 2012 and Cityscapes, outperforming other SSS algorithms by a significant margin.
Getting Started
Installation
Pascal VOC
pip install -r env181.txt
Cityscapes
pip install -r env200.txt
Parts of this code are borrowed from the baseline ST++
Pretrained Backbone
ResNet-50 | ResNet-101 | Xception-65
├── ./pretrained
├── resnet50.pth
├── resnet101.pth
└── xception.pth
Dataset
- Pascal: JPEGImages | SegmentationClass
- Cityscapes: leftImg8bit | gtFine
- COCO: train2017 | val2017 | masks
Please modify your dataset path in configuration files.
The groundtruth masks have already been pre-processed by us. You can use them directly.
├── [Your Pascal Path]
├── JPEGImages
└── SegmentationClass
├── [Your Cityscapes Path]
├── leftImg8bit
└── gtFine
├── [Your COCO Path]
├── train2017
├── val2017
└── masks
Usage
DSSN
# use torch.distributed.launch
sh scripts/train.sh <num_gpu> <port>
# or use slurm
# sh scripts/slurm_train.sh <num_gpu> <port> <partition>
To train on other datasets or splits, please modify
dataset
and split
in train.sh.
Supervised Baseline
Modify the method
from 'DSSN'
to 'supervised'
in train.sh, and double the batch_size
in configuration file if you use the same number of GPUs as semi-supervised setting (no need to change lr
).
Citation
If you find this project useful, please consider citing:
@InProceedings{DSSN2023,
author = {Tian, Zhibo and Zhang, Xiaolin and Zhang, Peng and Zhan, Kun},
booktitle = {ACM Multimedia},
title = {Improving semi-supervised semantic segmentation with dual-level Siamese structure network},
year = {2023},
}