- CUDA>=11.8
- torch>=2.0.0
- torchvision>=0.15.0
- numpy
- pillow
- scikit-learn
- tqdm
- matplotlib
We use the Pascal VOC 2012 and ADE20K datasets for evaluation following the previous methods. You can download the datasets from the following links:
Download Pascal VOC 2012 dataset:
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tarDownload Additional Segmentation Class Annotations:
wget https://www.dropbox.com/s/oeu149j8qtbs1x0/SegmentationClassAug.zipDownload ADE20K dataset:
wget http://data.csail.mit.edu/places/ADEchallenge/ADEChallengeData2016.zipdata_root/
├── VOC2012/
│ ├── Annotations/
│ ├── ImageSet/
│ ├── JPEGImages/
│ ├── SegmentationClassAug/
│ └── saliency_map/
└── ADEChallengeData2016
├── annotations
│ ├── training
│ └── validation
└── images
├── training
└── validation
Run our scripts run_init.sh and run.sh for class-incremental segmentation on VOC 2012 dataset, or follow the instructions below.
Initial step:
MODEL=deeplabv3bga_resnet101
DATA_ROOT= # Your dataset root path
DATASET=voc
TASK=15-1
EPOCH=50
BATCH=16
LOSS=bce_loss
LR=0.001
THRESH=0.7
SUBPATH=BARM
CURR=0
CUDA_VISIBLE_DEVICES=0 \
python train.py --data_root ${DATA_ROOT} --model ${MODEL} --crop_val --lr ${LR} \
--batch_size ${BATCH} --train_epoch ${EPOCH} --loss_type ${LOSS} \
--dataset ${DATASET} --task ${TASK} --lr_policy poly \
--pseudo --pseudo_thresh ${THRESH} --bn_freeze --amp \
--curr_step ${CURR} --subpath ${SUBPATH} --initial --overlap Incremental steps:
MODEL=deeplabv3bga_resnet101
DATA_ROOT= # Your dataset root path
DATASET=voc
TASK=15-1
EPOCH=20
BATCH=8
LOSS=bce_loss
LR=0.001
THRESH=0.7
SUBPATH=BARM
CURR=1
CUDA_VISIBLE_DEVICES=0,1 \
torchrun --nproc_per_node=2 --master_port=11451 \
train.py --data_root ${DATA_ROOT} --model ${MODEL} --crop_val --lr ${LR} \
--batch_size ${BATCH} --train_epoch ${EPOCH} --loss_type ${LOSS} \
--dataset ${DATASET} --task ${TASK} --lr_policy poly \
--pseudo --pseudo_thresh ${THRESH} --bn_freeze --amp\
--curr_step ${CURR} --subpath ${SUBPATH} --overlapRun our scripts run_init.sh and run.sh for class-incremental segmentation on ADE20K dataset, or follow the instructions below.
Initial step:
MODEL=deeplabv3bga_resnet101
DATA_ROOT= # Your dataset root path
DATASET=ade
TASK=100-5
EPOCH=60
BATCH=8
LOSS=bce_loss
LR=0.001
THRESH=0.7
SUBPATH=BARM
CURR=0
CUDA_VISIBLE_DEVICES=0 \
python train.py --data_root ${DATA_ROOT} --model ${MODEL} --crop_val --lr ${LR} \
--batch_size ${BATCH} --train_epoch ${EPOCH} --loss_type ${LOSS} \
--dataset ${DATASET} --task ${TASK} --lr_policy poly \
--pseudo --pseudo_thresh ${THRESH} --bn_freeze --amp \
--curr_step ${CURR} --subpath ${SUBPATH} --initial --overlap Incremental steps:
MODEL=deeplabv3bga_resnet101
DATA_ROOT= # Your dataset root path
DATASET=ade
TASK=100-10
EPOCH=100
BATCH=4
LOSS=bce_loss
LR=0.01
THRESH=0.7
SUBPATH=BARM
CURR=1
CUDA_VISIBLE_DEVICES=0,1 \
torchrun --nproc_per_node=2 --master_port=19198 \
train.py --data_root ${DATA_ROOT} --model ${MODEL} --crop_val --lr ${LR} \
--batch_size ${BATCH} --train_epoch ${EPOCH} --loss_type ${LOSS} \
--dataset ${DATASET} --task ${TASK} --lr_policy poly \
--pseudo --pseudo_thresh ${THRESH} --bn_freeze --amp \
--curr_step ${CURR} --subpath ${SUBPATH} --overlapOur implementation is based on these repositories: DeepLabV3Plus-Pytorch, SSUL. Thanks for their great work!