Semantic Segmentation on PyTorch
English | ็ฎไฝไธญๆ
This project aims at providing a concise, easy-to-use, modifiable reference implementation for semantic segmentation models using PyTorch.
Installation
# semantic-segmentation-pytorch dependencies
pip install ninja tqdm
# follow PyTorch installation in https://pytorch.org/get-started/locally/
conda install pytorch torchvision -c pytorch
# install PyTorch Segmentation
git clone https://github.com/Tramac/awesome-semantic-segmentation-pytorch.git
Usage
Train
- Single GPU training
# for example, train fcn32_vgg16_pascal_voc:
python train.py --model fcn32s --backbone vgg16 --dataset pascal_voc --lr 0.0001 --epochs 50
- Multi-GPU training
# for example, train fcn32_vgg16_pascal_voc with 4 GPUs:
export NGPUS=4
python -m torch.distributed.launch --nproc_per_node=$NGPUS train.py --model fcn32s --backbone vgg16 --dataset pascal_voc --lr 0.0001 --epochs 50
Evaluation
- Single GPU evaluating
# for example, evaluate fcn32_vgg16_pascal_voc
python eval.py --model fcn32s --backbone vgg16 --dataset pascal_voc
- Multi-GPU evaluating
# for example, evaluate fcn32_vgg16_pascal_voc with 4 GPUs:
export NGPUS=4
python -m torch.distributed.launch --nproc_per_node=$NGPUS eval.py --model fcn32s --backbone vgg16 --dataset pascal_voc
Demo
cd ./scripts
#for new users:
python demo.py --model fcn32s_vgg16_voc --input-pic ../tests/test_img.jpg
#you should add 'test.jpg' by yourself
python demo.py --model fcn32s_vgg16_voc --input-pic ../datasets/test.jpg
.{SEG_ROOT}
โโโ scripts
โย ย โโโ demo.py
โย ย โโโ eval.py
โย ย โโโ train.py
Support
Model
- FCN
- ENet
- PSPNet
- ICNet
- DeepLabv3
- DeepLabv3+
- DenseASPP
- EncNet
- BiSeNet
- PSANet
- DANet
- OCNet
- CGNet
- ESPNetv2
- DUNet(DUpsampling)
- FastFCN(JPU)
- LEDNet
- Fast-SCNN
- LightSeg
- DFANet
DETAILS for model & backbone.
.{SEG_ROOT}
โโโ core
โย ย โโโ models
โย ย โย ย โโโ bisenet.py
โย ย โย ย โโโ danet.py
โย ย โย ย โโโ deeplabv3.py
โ โ โโโ deeplabv3+.py
โย ย โย ย โโโ denseaspp.py
โย ย โย ย โโโ dunet.py
โย ย โย ย โโโ encnet.py
โย ย โย ย โโโ fcn.py
โย ย โย ย โโโ pspnet.py
โย ย โย ย โโโ icnet.py
โย ย โย ย โโโ enet.py
โย ย โย ย โโโ ocnet.py
โย ย โย ย โโโ psanet.py
โย ย โย ย โโโ cgnet.py
โย ย โย ย โโโ espnet.py
โย ย โย ย โโโ lednet.py
โย ย โย ย โโโ dfanet.py
โย ย โย ย โโโ ......
Dataset
You can run script to download dataset, such as:
cd ./core/data/downloader
python ade20k.py --download-dir ../datasets/ade
Dataset | training set | validation set | testing set |
---|---|---|---|
VOC2012 | 1464 | 1449 | โ |
VOCAug | 11355 | 2857 | โ |
ADK20K | 20210 | 2000 | โ |
Cityscapes | 2975 | 500 | โ |
COCO | |||
SBU-shadow | 4085 | 638 | โ |
LIP(Look into Person) | 30462 | 10000 | 10000 |
.{SEG_ROOT}
โโโ core
โย ย โโโ data
โย ย โย ย โโโ dataloader
โย ย โย ย โย ย โโโ ade.py
โย ย โย ย โย ย โโโ cityscapes.py
โย ย โย ย โย ย โโโ mscoco.py
โย ย โย ย โย ย โโโ pascal_aug.py
โย ย โย ย โย ย โโโ pascal_voc.py
โย ย โย ย โย ย โโโ sbu_shadow.py
โย ย โย ย โโโ downloader
โย ย โย ย โโโ ade20k.py
โย ย โย ย โโโ cityscapes.py
โย ย โย ย โโโ mscoco.py
โย ย โย ย โโโ pascal_voc.py
โย ย โย ย โโโ sbu_shadow.py
Result
- PASCAL VOC 2012
Methods | Backbone | TrainSet | EvalSet | crops_size | epochs | JPU | Mean IoU | pixAcc |
---|---|---|---|---|---|---|---|---|
FCN32s | vgg16 | train | val | 480 | 60 | โ | 47.50 | 85.39 |
FCN16s | vgg16 | train | val | 480 | 60 | โ | 49.16 | 85.98 |
FCN8s | vgg16 | train | val | 480 | 60 | โ | 48.87 | 85.02 |
FCN32s | resnet50 | train | val | 480 | 50 | โ | 54.60 | 88.57 |
PSPNet | resnet50 | train | val | 480 | 60 | โ | 63.44 | 89.78 |
DeepLabv3 | resnet50 | train | val | 480 | 60 | โ | 60.15 | 88.36 |
Note: lr=1e-4, batch_size=4, epochs=80
.
Overfitting Test
See TEST for details.
.{SEG_ROOT}
โโโ tests
โย ย โโโ test_model.py
To Do
- add train script
- remove syncbn
- train & evaluate
- test distributed training
- fix syncbn (Why SyncBN?)
- add distributed (How DIST?)