├── .gitignore ├── README.md ├── configs ├── cityscapes.yaml └── pascal.yaml ├── corrmatch.py ├── dataset ├── semi.py └── transform.py ├── evaluate.py ├── images └── cvpr_pipeline.png ├── model ├── backbone │ ├── resnet.py │ └── xception.py └── semseg │ ├── deeplabv3plus.py │ └── deeplabv3plus_vis.py ├── partitions ├── cityscapes │ ├── 1_16 │ │ ├── labeled.txt │ │ └── unlabeled.txt │ ├── 1_30 │ │ ├── labeled.txt │ │ └── unlabeled.txt │ ├── 1_4 │ │ ├── labeled.txt │ │ └── unlabeled.txt │ ├── 1_8 │ │ ├── labeled.txt │ │ └── unlabeled.txt │ └── val.txt ├── coco │ ├── 1_128 │ │ ├── labeled.txt │ │ └── unlabeled.txt │ ├── 1_256 │ │ ├── labeled.txt │ │ └── unlabeled.txt │ ├── 1_32 │ │ ├── labeled.txt │ │ └── unlabeled.txt │ ├── 1_512 │ │ ├── labeled.txt │ │ └── unlabeled.txt │ ├── 1_64 │ │ ├── labeled.txt │ │ └── unlabeled.txt │ ├── train.txt │ └── val.txt └── pascal │ ├── 92 │ ├── labeled.txt │ └── unlabeled.txt │ ├── 183 │ ├── labeled.txt │ └── unlabeled.txt │ ├── 366 │ ├── labeled.txt │ └── unlabeled.txt │ ├── 732 │ ├── labeled.txt │ └── unlabeled.txt │ ├── 1464 │ ├── labeled.txt │ └── unlabeled.txt │ ├── 1_16 │ ├── labeled.txt │ └── unlabeled.txt │ ├── 1_4 │ ├── labeled.txt │ └── unlabeled.txt │ ├── 1_8 │ ├── labeled.txt │ └── unlabeled.txt │ ├── train_aug.txt │ └── val.txt ├── tools ├── train.sh ├── val.sh ├── vis.sh └── vis_mask.sh ├── util ├── dist_helper.py ├── mesh_helper.py ├── ohem.py ├── thresh_helper.py └── utils.py ├── vis.py └── vis_mask.py /.gitignore: -------------------------------------------------------------------------------- 1 | /exp/ 2 | /pretrained/ 3 | /.idea/ -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CorrMatch (CVPR 2024) 2 | 3 | This repository contains the official implementation of the following paper: 4 | 5 | > **[CorrMatch: Label Propagation via Correlation Matching for Semi-Supervised Semantic Segmentation](https://arxiv.org/abs/2306.04300)**
6 | > [Boyuan Sun](https://bbbbchan.github.io), [Yuqi Yang](https://github.com/BBBBchan/CorrMatch), [Le Zhang](http://zhangleuestc.cn/), [Ming-Ming Cheng](https://mmcheng.net/cmm/), [Qibin Hou](https://houqb.github.io/)
7 | 8 | 🔥 The **Jittor vsersion implementation** of CorrMatch is available at [Jittor Version](https://github.com/BBBBchan/CorrMatch-Jittor) !!! 9 | 10 | 🔥 Our paper is accepted by IEEE Computer Vision and Pattern Recognition (CVPR) 2024 !!! 11 | ## Overview 12 | CorrMatch provides a solution for mining more high-quality regions from the unlabeled images to leverage the unlabeled data more efficiently for consistency regularization. 13 | ![avatar](./images/cvpr_pipeline.png "pipeline") 14 | 15 | Previous approaches mostly employ complicated training strategies to leverage unlabeled data but overlook the role of correlation maps in modeling the relationships between pairs of locations. Thus, we introduce two label propagation strategies (Pixel Propagation and Region Propagation) with the help of correlation maps. 16 | 17 | For technical details, please refer to our full paper on [arXiv](https://arxiv.org/abs/2306.04300). 18 | ## Getting Started 19 | 20 | ### Installation 21 | 22 | ```bash 23 | git clone git@github.com:BBBBchan/CorrMatch.git 24 | cd CorrMatch 25 | conda create -n corrmatch python=3.9 26 | conda activate corrmatch 27 | conda install pytorch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 pytorch-cuda=11.7 -c pytorch -c nvidia 28 | pip install opencv-python tqdm einops pyyaml 29 | ``` 30 | 31 | ### Pretrained Backbone: 32 | [ResNet-101](https://drive.google.com/file/d/1Rx0legsMolCWENpfvE2jUScT3ogalMO8/view?usp=sharing) 33 | ```bash 34 | mkdir pretrained 35 | ``` 36 | Please put the pretrained model under `pretrained` dictionary. 37 | 38 | 39 | ### Dataset: 40 | 41 | - Pascal VOC 2012: [JPEGImages](http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar) | [SegmentationClass](https://drive.google.com/file/d/1ikrDlsai5QSf2GiSUR3f8PZUzyTubcuF/view?usp=sharing) 42 | - Cityscapes: [leftImg8bit](https://www.cityscapes-dataset.com/file-handling/?packageID=3) | [gtFine](https://drive.google.com/file/d/1E_27g9tuHm6baBqcA7jct_jqcGA89QPm/view?usp=sharing) 43 | 44 | Please modify the dataset path in configuration files.*The groundtruth mask ids have already been pre-processed. You may use them directly.* 45 | 46 | Your dataset path may look like: 47 | ``` 48 | ├── [Your Pascal Path] 49 | ├── JPEGImages 50 | └── SegmentationClass 51 | 52 | ├── [Your Cityscapes Path] 53 | ├── leftImg8bit 54 | └── gtFine 55 | ``` 56 | 57 | ## Usage 58 | 59 | ### Training CorrMatch 60 | 61 | ```bash 62 | sh tools/train.sh 63 | ``` 64 | To run on different labeled data partitions or different datasets, please modify: 65 | 66 | ``config``, ``labeled_id_path``, ``unlabeled_id_path``, and ``save_path`` in [train.sh](https://github.com/BBBBchan/CorrMatch/blob/main/tools/train.sh). 67 | 68 | ### Evaluation 69 | ```bash 70 | sh tools/val.sh 71 | ``` 72 | To evaluate your checkpoint, please modify ``checkpoint_path`` in [val.sh](https://github.com/BBBBchan/CorrMatch/blob/main/tools/val.sh). 73 | 74 | ## Results 75 | 76 | ### Pascal VOC 2012 77 | 78 | Labeled images are sampled from the **original high-quality** training set. Results are obtained by DeepLabv3+ based on ResNet-101 with training size 321(513). 79 | 80 | | Method | 1/16 (92) | 1/8 (183) | 1/4 (366) | 1/2 (732) | Full (1464) | 81 | |:--------------------:|:---------:|:---------:|:--------------:|:---------:|:-----------:| 82 | | SupOnly | 45.1 | 55.3 | 64.8 | 69.7 | 73.5 | 83 | | ST++ | 65.2 | 71.0 | 74.6 | 77.3 | 79.1 | 84 | | PS-MT | 65.8 | 69.6 | 76.6 | 78.4 | 80.0 | 85 | | UniMatch | 75.2 | 77.2 | 78.8 | 79.9 | 81.2 | 86 | | **CorrMatch (Ours)** | **76.4** | **78.5** | **79.4** | **80.6** | **81.8** | 87 | 88 | 89 | ### Cityscapes 90 | 91 | Results are obtained by DeepLabv3+ based on ResNet-101. 92 | 93 | | Method | 1/16 (186) | 1/8 (372) | 1/4 (744) | 1/2 (1488) | 94 | |:--------------------:|:----------:|:---------:|:-----------:|:----------:| 95 | | SupOnly | 65.7 | 72.5 | 74.4 | 77.8 | 96 | | UniMatch | 76.6 | 77.9 | 79.2 | 79.5 | 97 | | **CorrMatch (Ours)** | **77.3** | **78.5** | **79.4** | **80.4** | 98 | 99 | ## Citation 100 | 101 | If you find our repo useful for your research, please consider citing our paper: 102 | 103 | ```bibtex 104 | @article{sun2023corrmatch, 105 | title={CorrMatch: Label Propagation via Correlation Matching for Semi-Supervised Semantic Segmentation}, 106 | author={Sun, Boyuan and Yang, Yuqi and Zhang, Le and Cheng, Ming-Ming and Hou, Qibin}, 107 | journal={IEEE Computer Vision and Pattern Recognition (CVPR)}, 108 | year={2024} 109 | } 110 | ``` 111 | 112 | ## License 113 | This code is licensed under the [Creative Commons Attribution-NonCommercial 4.0 International](https://creativecommons.org/licenses/by-nc/4.0/) for non-commercial use only. 114 | Please note that any commercial use of this code requires formal permission prior to use. 115 | 116 | ## Contact 117 | 118 | For technical questions, please contact `sbysbysby123[AT]gmail.com`. 119 | 120 | For commercial licensing, please contact `cmm[AT]nankai.edu.cn` or `andrewhoux@gmail.com`. 121 | 122 | ## Acknowledgement 123 | 124 | We thank [UniMatch](https://github.com/LiheYoung/UniMatch), [CPS](https://github.com/charlesCXK/TorchSemiSeg), [CutMix-Seg](https://github.com/Britefury/cutmix-semisup-seg), [DeepLabv3Plus](https://github.com/YudeWang/deeplabv3plus-pytorch), [U2PL](https://github.com/Haochen-Wang409/U2PL) and other excellent works (see this [project](https://github.com/BBBBchan/Awesome-Semi-Supervised-Semantic-Segmentation)) for their amazing projects! 125 | -------------------------------------------------------------------------------- /configs/cityscapes.yaml: -------------------------------------------------------------------------------- 1 | # arguments for dataset 2 | dataset: cityscapes 3 | nclass: 19 4 | crop_size: 801 5 | data_root: your/cityscape/path 6 | 7 | # arguments for training 8 | epochs: 240 9 | batch_size: 2 10 | lr: 0.005 # 4GPUs 11 | lr_multi: 1.0 12 | criterion: 13 | name: OHEM 14 | kwargs: 15 | ignore_index: 255 16 | thresh: 0.7 17 | min_kept: 100000 18 | conf_thresh: 0.0 19 | 20 | # arguments for model 21 | backbone: resnet101 22 | multi_grid: False 23 | replace_stride_with_dilation: [False, True, True] 24 | dilations: [12, 24, 36] 25 | -------------------------------------------------------------------------------- /configs/pascal.yaml: -------------------------------------------------------------------------------- 1 | # arguments for dataset 2 | dataset: pascal 3 | nclass: 21 4 | crop_size: 321 5 | data_root: your/pascal/path 6 | 7 | # arguments for training 8 | epochs: 80 9 | batch_size: 4 10 | lr: 0.001 # 4GPUs 11 | lr_multi: 10.0 12 | criterion: 13 | name: CELoss 14 | kwargs: 15 | ignore_index: 255 16 | thresh_init: 0.85 17 | 18 | # arguments for model 19 | backbone: resnet101 20 | pretrain: True 21 | multi_grid: False 22 | replace_stride_with_dilation: [False, True, True] 23 | #dilations: [6, 12, 18] 24 | dilations: [12, 24, 36] 25 | -------------------------------------------------------------------------------- /corrmatch.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | import logging 3 | import os 4 | import pprint 5 | 6 | from tqdm import tqdm 7 | import numpy as np 8 | import torch 9 | from torch import nn 10 | import torch.distributed as dist 11 | import torch.nn.functional as F 12 | import torch.backends.cudnn as cudnn 13 | from torch.optim import SGD 14 | from torch.utils.data import DataLoader 15 | from PIL import Image 16 | import matplotlib 17 | import matplotlib.pyplot as plt 18 | 19 | matplotlib.use('agg') 20 | import yaml 21 | 22 | from dataset.semi import SemiDataset 23 | from model.semseg.deeplabv3plus import DeepLabV3Plus 24 | from evaluate import evaluate 25 | from util.ohem import ProbOhemCrossEntropy2d 26 | from util.utils import count_params, init_log 27 | from util.dist_helper import setup_distributed 28 | from util.thresh_helper import ThreshController 29 | from einops import rearrange 30 | import random 31 | 32 | os.environ["CUDA_VISIBLE_DEVICES"] = "0,1" 33 | 34 | parser = argparse.ArgumentParser(description='Semi-Supervised Semantic Segmentation') 35 | parser.add_argument('--config', type=str, required=True) 36 | parser.add_argument('--labeled-id-path', type=str, required=True) 37 | parser.add_argument('--unlabeled-id-path', type=str, required=True) 38 | parser.add_argument('--save-path', type=str, required=True) 39 | parser.add_argument('--local_rank', default=0, type=int) 40 | parser.add_argument('--port', default=None, type=int) 41 | 42 | 43 | def init_seeds(seed=0, cuda_deterministic=False): 44 | random.seed(seed) 45 | np.random.seed(seed) 46 | torch.manual_seed(seed) 47 | cudnn.enabled = True 48 | # Speed-reproducibility tradeoff https://pytorch.org/docs/stable/notes/randomness.html 49 | if cuda_deterministic: # slower, more reproducible 50 | cudnn.deterministic = True 51 | cudnn.benchmark = False 52 | else: # faster, less reproducible 53 | cudnn.deterministic = False 54 | cudnn.benchmark = True 55 | 56 | 57 | def main(): 58 | args = parser.parse_args() 59 | 60 | cfg = yaml.load(open(args.config, "r"), Loader=yaml.Loader) 61 | 62 | logger = init_log('global', logging.INFO) 63 | logger.propagate = 0 64 | 65 | rank, word_size = setup_distributed(port=args.port) 66 | 67 | if rank == 0: 68 | logger.info('{}\n'.format(pprint.pformat(cfg))) 69 | 70 | if rank == 0: 71 | os.makedirs(args.save_path, exist_ok=True) 72 | init_seeds(0, False) 73 | 74 | model = DeepLabV3Plus(cfg) 75 | # sam = sam_model_registry["vit_b"](checkpoint="sam/checkpoints/sam_vit_b.pth") 76 | # sam.cuda() 77 | 78 | if rank == 0: 79 | logger.info('Total params: {:.1f}M\n'.format(count_params(model))) 80 | 81 | optimizer = SGD([{'params': model.backbone.parameters(), 'lr': cfg['lr']}, 82 | {'params': [param for name, param in model.named_parameters() if 'backbone' not in name], 83 | 'lr': cfg['lr'] * cfg['lr_multi']}], lr=cfg['lr'], momentum=0.9, weight_decay=1e-4) 84 | 85 | local_rank = int(os.environ["LOCAL_RANK"]) 86 | model = torch.nn.SyncBatchNorm.convert_sync_batchnorm(model) 87 | model.cuda() 88 | 89 | model = torch.nn.parallel.DistributedDataParallel(model, device_ids=[local_rank], 90 | output_device=local_rank, find_unused_parameters=False) 91 | 92 | if cfg['criterion']['name'] == 'CELoss': 93 | criterion_l = nn.CrossEntropyLoss(**cfg['criterion']['kwargs']).cuda(local_rank) 94 | elif cfg['criterion']['name'] == 'OHEM': 95 | criterion_l = ProbOhemCrossEntropy2d(**cfg['criterion']['kwargs']).cuda(local_rank) 96 | else: 97 | raise NotImplementedError('%s criterion is not implemented' % cfg['criterion']['name']) 98 | 99 | criterion_u = nn.CrossEntropyLoss(reduction='none').cuda(local_rank) 100 | criterion_kl = nn.KLDivLoss(reduction='none').cuda(local_rank) 101 | 102 | trainset_u = SemiDataset(cfg['dataset'], cfg['data_root'], 'train_u', 103 | cfg['crop_size'], args.unlabeled_id_path) 104 | trainset_l = SemiDataset(cfg['dataset'], cfg['data_root'], 'train_l', 105 | cfg['crop_size'], args.labeled_id_path, nsample=len(trainset_u.ids)) 106 | valset = SemiDataset(cfg['dataset'], cfg['data_root'], 'val') 107 | 108 | trainsampler_l = torch.utils.data.distributed.DistributedSampler(trainset_l) 109 | trainloader_l = DataLoader(trainset_l, batch_size=cfg['batch_size'], 110 | pin_memory=False, num_workers=4, drop_last=True, sampler=trainsampler_l) 111 | trainsampler_u = torch.utils.data.distributed.DistributedSampler(trainset_u) 112 | trainloader_u = DataLoader(trainset_u, batch_size=cfg['batch_size'], 113 | pin_memory=False, num_workers=4, drop_last=True, sampler=trainsampler_u) 114 | valsampler = torch.utils.data.distributed.DistributedSampler(valset) 115 | valloader = DataLoader(valset, batch_size=1, pin_memory=True, num_workers=4, 116 | drop_last=False, sampler=valsampler) 117 | 118 | total_iters = len(trainloader_u) * cfg['epochs'] 119 | previous_best = 0.0 120 | thresh_controller = ThreshController(nclass=21, momentum=0.999, thresh_init=cfg['thresh_init']) 121 | 122 | for epoch in range(cfg['epochs']): 123 | if rank == 0: 124 | logger.info('===========> Epoch: {:}, LR: {:.4f}, Previous best: {:.2f}'.format( 125 | epoch, optimizer.param_groups[0]['lr'], previous_best)) 126 | 127 | total_loss, total_loss_x, total_loss_s, total_loss_w_fp = 0.0, 0.0, 0.0, 0.0 128 | total_loss_kl = 0.0 129 | total_loss_corr_ce, total_loss_corr_u = 0.0, 0.0 130 | total_mask_ratio = 0.0 131 | 132 | trainloader_l.sampler.set_epoch(epoch) 133 | trainloader_u.sampler.set_epoch(epoch) 134 | 135 | loader = zip(trainloader_l, trainloader_u, trainloader_u) 136 | 137 | if rank == 0: 138 | tbar = tqdm(total=len(trainloader_l)) 139 | 140 | for i, ((img_x, mask_x), 141 | (img_u_w, img_u_s1, _, ignore_mask, cutmix_box1, _), 142 | (img_u_w_mix, img_u_s1_mix, _, ignore_mask_mix, _, _)) in enumerate(loader): 143 | 144 | img_x, mask_x = img_x.cuda(), mask_x.cuda() 145 | img_u_w = img_u_w.cuda() 146 | img_u_s1, ignore_mask = img_u_s1.cuda(), ignore_mask.cuda() 147 | cutmix_box1 = cutmix_box1.cuda() 148 | img_u_w_mix = img_u_w_mix.cuda() 149 | img_u_s1_mix = img_u_s1_mix.cuda() 150 | ignore_mask_mix = ignore_mask_mix.cuda() 151 | b, c, h, w = img_x.shape 152 | 153 | with torch.no_grad(): 154 | model.eval() 155 | res_u_w_mix = model(img_u_w_mix, need_fp=False, use_corr=False) 156 | pred_u_w_mix = res_u_w_mix['out'].detach() 157 | conf_u_w_mix = pred_u_w_mix.softmax(dim=1).max(dim=1)[0] 158 | mask_u_w_mix = pred_u_w_mix.argmax(dim=1) 159 | img_u_s1[cutmix_box1.unsqueeze(1).expand(img_u_s1.shape) == 1] = \ 160 | img_u_s1_mix[cutmix_box1.unsqueeze(1).expand(img_u_s1.shape) == 1] 161 | 162 | model.train() 163 | 164 | num_lb, num_ulb = img_x.shape[0], img_u_w.shape[0] 165 | 166 | res_w = model(torch.cat((img_x, img_u_w)), need_fp=True, use_corr=True) 167 | 168 | preds = res_w['out'] 169 | preds_fp = res_w['out_fp'] 170 | preds_corr = res_w['corr_out'] 171 | preds_corr_map = res_w['corr_map'].detach() 172 | pred_x_corr, pred_u_w_corr = preds_corr.split([num_lb, num_ulb]) 173 | pred_u_w_corr_map = preds_corr_map[num_lb:] 174 | pred_x, pred_u_w = preds.split([num_lb, num_ulb]) 175 | pred_u_w_fp = preds_fp[num_lb:] 176 | 177 | res_s = model(img_u_s1, need_fp=False, use_corr=True) 178 | pred_u_s1 = res_s['out'] 179 | pred_u_s1_corr = res_s['corr_out'] 180 | 181 | pred_u_w = pred_u_w.detach() 182 | conf_u_w = pred_u_w.detach().softmax(dim=1).max(dim=1)[0] 183 | mask_u_w = pred_u_w.detach().argmax(dim=1) 184 | 185 | mask_u_w_cutmixed1, conf_u_w_cutmixed1, ignore_mask_cutmixed1 = \ 186 | mask_u_w.clone(), conf_u_w.clone(), ignore_mask.clone() 187 | corr_map_u_w_cutmixed1 = pred_u_w_corr_map.clone() 188 | b_sample, c_sample, _, _ = corr_map_u_w_cutmixed1.shape 189 | 190 | cutmix_box1_map = (cutmix_box1 == 1) 191 | 192 | mask_u_w_cutmixed1[cutmix_box1_map] = mask_u_w_mix[cutmix_box1_map] 193 | mask_u_w_cutmixed1_copy = mask_u_w_cutmixed1.clone() 194 | conf_u_w_cutmixed1[cutmix_box1_map] = conf_u_w_mix[cutmix_box1_map] 195 | ignore_mask_cutmixed1[cutmix_box1_map] = ignore_mask_mix[cutmix_box1_map] 196 | cutmix_box1_sample = rearrange(cutmix_box1_map, 'n h w -> n 1 h w') 197 | ignore_mask_cutmixed1_sample = rearrange((ignore_mask_cutmixed1 != 255), 'n h w -> n 1 h w') 198 | corr_map_u_w_cutmixed1 = (corr_map_u_w_cutmixed1 * ~cutmix_box1_sample * ignore_mask_cutmixed1_sample).bool() 199 | 200 | thresh_controller.thresh_update(pred_u_w.detach(), ignore_mask_cutmixed1, update_g=True) 201 | thresh_global = thresh_controller.get_thresh_global() 202 | 203 | conf_fliter_u_w = ((conf_u_w_cutmixed1 >= thresh_global) & (ignore_mask_cutmixed1 != 255)) 204 | conf_fliter_u_w_without_cutmix = conf_fliter_u_w.clone() 205 | conf_fliter_u_w_sample = rearrange(conf_fliter_u_w_without_cutmix, 'n h w -> n 1 h w') 206 | 207 | segments = (corr_map_u_w_cutmixed1 * conf_fliter_u_w_sample).bool() 208 | 209 | for img_idx in range(b_sample): 210 | for segment_idx in range(c_sample): 211 | 212 | segment = segments[img_idx, segment_idx] 213 | segment_ori = corr_map_u_w_cutmixed1[img_idx, segment_idx] 214 | high_conf_ratio = torch.sum(segment)/torch.sum(segment_ori) 215 | if torch.sum(segment) == 0 or high_conf_ratio < thresh_global: 216 | continue 217 | unique_cls, count = torch.unique(mask_u_w_cutmixed1[img_idx][segment==1], return_counts=True) 218 | 219 | if torch.max(count) / torch.sum(count) > thresh_global: 220 | top_class = unique_cls[torch.argmax(count)] 221 | mask_u_w_cutmixed1[img_idx][segment_ori==1] = top_class 222 | conf_fliter_u_w_without_cutmix[img_idx] = conf_fliter_u_w_without_cutmix[img_idx] | segment_ori 223 | conf_fliter_u_w_without_cutmix = conf_fliter_u_w_without_cutmix | conf_fliter_u_w 224 | 225 | 226 | loss_x = criterion_l(pred_x, mask_x) 227 | loss_x_corr = criterion_l(pred_x_corr, mask_x) 228 | 229 | loss_u_s1 = criterion_u(pred_u_s1, mask_u_w_cutmixed1) 230 | loss_u_s1 = loss_u_s1 * conf_fliter_u_w_without_cutmix 231 | loss_u_s1 = torch.sum(loss_u_s1) / torch.sum(ignore_mask_cutmixed1 != 255).item() 232 | 233 | loss_u_corr_s1 = criterion_u(pred_u_s1_corr, mask_u_w_cutmixed1) 234 | loss_u_corr_s1 = loss_u_corr_s1 * conf_fliter_u_w_without_cutmix 235 | loss_u_corr_s1 = torch.sum(loss_u_corr_s1) / torch.sum(ignore_mask_cutmixed1 != 255).item() 236 | loss_u_corr_s = loss_u_corr_s1 237 | 238 | loss_u_corr_w = criterion_u(pred_u_w_corr, mask_u_w) 239 | loss_u_corr_w = loss_u_corr_w * ((conf_u_w >= thresh_global) & (ignore_mask != 255)) 240 | loss_u_corr_w = torch.sum(loss_u_corr_w) / torch.sum(ignore_mask != 255).item() 241 | loss_u_corr = 0.5 * (loss_u_corr_s + loss_u_corr_w) 242 | 243 | softmax_pred_u_w = F.softmax(pred_u_w.detach(), dim=1) 244 | logsoftmax_pred_u_s1 = F.log_softmax(pred_u_s1, dim=1) 245 | 246 | loss_u_kl_sa2wa = criterion_kl(logsoftmax_pred_u_s1, softmax_pred_u_w) 247 | loss_u_kl_sa2wa = torch.sum(loss_u_kl_sa2wa, dim=1) * conf_fliter_u_w 248 | loss_u_kl_sa2wa = torch.sum(loss_u_kl_sa2wa) / torch.sum(ignore_mask_cutmixed1 != 255).item() 249 | loss_u_kl = loss_u_kl_sa2wa 250 | 251 | loss_u_w_fp = criterion_u(pred_u_w_fp, mask_u_w) 252 | loss_u_w_fp = loss_u_w_fp * ((conf_u_w >= thresh_global) & (ignore_mask != 255)) 253 | loss_u_w_fp = torch.sum(loss_u_w_fp) / torch.sum(ignore_mask != 255).item() 254 | 255 | loss = ( 0.5 * loss_x + 0.5 * loss_x_corr + loss_u_s1 * 0.25 + loss_u_kl * 0.25 + loss_u_w_fp * 0.25 + 0.25 * loss_u_corr) / 2.0 256 | 257 | optimizer.zero_grad() 258 | loss.backward() 259 | optimizer.step() 260 | 261 | total_loss += loss.item() 262 | total_loss_x += loss_x.item() 263 | total_loss_s += loss_u_s1.item() 264 | total_loss_kl += loss_u_kl.item() 265 | total_loss_w_fp += loss_u_w_fp.item() 266 | total_loss_corr_ce += loss_x_corr.item() 267 | total_loss_corr_u += loss_u_corr.item() 268 | total_mask_ratio += ((conf_u_w >= thresh_global) & (ignore_mask != 255)).sum().item() / \ 269 | (ignore_mask != 255).sum().item() 270 | 271 | iters = epoch * len(trainloader_u) + i 272 | lr = cfg['lr'] * (1 - iters / total_iters) ** 0.9 273 | optimizer.param_groups[0]["lr"] = lr 274 | optimizer.param_groups[1]["lr"] = lr * cfg['lr_multi'] 275 | 276 | if rank == 0: 277 | tbar.set_description(' Total loss: {:.3f}, Loss x: {:.3f}, loss_corr_ce: {:.3f} ' 278 | 'Loss s: {:.3f}, Loss w_fp: {:.3f}, Mask: {:.3f}, loss_corr_u: {:.3f}'.format( 279 | total_loss / (i + 1), total_loss_x / (i + 1), total_loss_corr_ce / (i + 1), total_loss_s / (i + 1), 280 | total_loss_w_fp / (i + 1), total_mask_ratio / (i + 1), total_loss_corr_u / (i + 1))) 281 | tbar.update(1) 282 | 283 | if rank == 0: 284 | tbar.close() 285 | 286 | if cfg['dataset'] == 'cityscapes': 287 | eval_mode = 'center_crop' if epoch < cfg['epochs'] - 20 else 'sliding_window' 288 | else: 289 | eval_mode = 'original' 290 | torch.cuda.empty_cache() 291 | res_val = evaluate(model, valloader, eval_mode, cfg) 292 | mIOU = res_val['mIOU'] 293 | class_IOU = res_val['iou_class'] 294 | torch.distributed.barrier() 295 | 296 | if rank == 0: 297 | logger.info('***** Evaluation {} ***** >>>> meanIOU: {:.4f} \n'.format(eval_mode, mIOU)) 298 | logger.info('***** ClassIOU ***** >>>> \n{}\n'.format(class_IOU)) 299 | 300 | if mIOU > previous_best and rank == 0: 301 | if previous_best != 0: 302 | os.remove(os.path.join(args.save_path, '%s_%.3f.pth' % (cfg['backbone'], previous_best))) 303 | previous_best = mIOU 304 | torch.save(model.module.state_dict(), os.path.join(args.save_path, '%s_%.3f.pth' % (cfg['backbone'], mIOU))) 305 | torch.distributed.barrier() 306 | torch.cuda.empty_cache() 307 | 308 | 309 | if __name__ == '__main__': 310 | main() 311 | -------------------------------------------------------------------------------- /dataset/semi.py: -------------------------------------------------------------------------------- 1 | from dataset.transform import * 2 | 3 | from copy import deepcopy 4 | import math 5 | import numpy as np 6 | import os 7 | import random 8 | 9 | from PIL import Image 10 | import torch 11 | from torch.utils.data import Dataset 12 | from torchvision import transforms 13 | 14 | 15 | class SemiDataset(Dataset): 16 | def __init__(self, name, root, mode, size=None, id_path=None, nsample=None): 17 | self.name = name 18 | self.root = root 19 | self.mode = mode 20 | self.size = size 21 | 22 | if mode == 'train_l' or mode == 'train_u': 23 | with open(id_path, 'r') as f: 24 | self.ids = f.read().splitlines() 25 | if mode == 'train_l' and nsample is not None: 26 | self.ids *= math.ceil(nsample / len(self.ids)) 27 | random.shuffle(self.ids) 28 | self.ids = self.ids[:nsample] 29 | else: 30 | with open('partitions/%s/val.txt' % name, 'r') as f: 31 | self.ids = f.read().splitlines() 32 | 33 | def __getitem__(self, item): 34 | id = self.ids[item] 35 | img = Image.open(os.path.join(self.root, id.split(' ')[0])).convert('RGB') 36 | mask = Image.fromarray(np.array(Image.open(os.path.join(self.root, id.split(' ')[1])))) 37 | 38 | if self.mode == 'val': 39 | img_ori = np.array(img) 40 | img, mask = normalize(img, mask) 41 | return img, mask, id, img_ori 42 | 43 | img, mask = resize(img, mask, (0.5, 2.0)) 44 | ignore_value = 254 if self.mode == 'train_u' else 255 45 | img, mask = crop(img, mask, self.size, ignore_value) 46 | img, mask = hflip(img, mask, p=0.5) 47 | 48 | if self.mode == 'train_l': 49 | return normalize(img, mask) 50 | 51 | img_w, img_s1, img_ori = deepcopy(img), deepcopy(img), deepcopy(img) 52 | img_ori = np.array(img_ori) 53 | 54 | if random.random() < 0.8: 55 | img_s1 = transforms.ColorJitter(0.5, 0.5, 0.5, 0.25)(img_s1) 56 | img_s1 = transforms.RandomGrayscale(p=0.2)(img_s1) 57 | img_s1 = blur(img_s1, p=0.5) 58 | cutmix_box1 = obtain_cutmix_box(img_s1.size[0], p=0.5) 59 | 60 | 61 | ignore_mask = Image.fromarray(np.zeros((mask.size[1], mask.size[0]))) 62 | 63 | img_s1, ignore_mask = normalize(img_s1, ignore_mask) 64 | 65 | mask = torch.from_numpy(np.array(mask)).long() 66 | ignore_mask[mask == 254] = 255 67 | 68 | return normalize(img_w), img_s1, img_ori, ignore_mask, cutmix_box1, id 69 | 70 | def __len__(self): 71 | return len(self.ids) 72 | -------------------------------------------------------------------------------- /dataset/transform.py: -------------------------------------------------------------------------------- 1 | import random 2 | import math 3 | 4 | import numpy as np 5 | from PIL import Image, ImageOps, ImageFilter, ImageEnhance 6 | import torch 7 | from torchvision import transforms 8 | 9 | 10 | def crop(img, mask, size, ignore_value=255): 11 | w, h = img.size 12 | padw = size - w if w < size else 0 13 | padh = size - h if h < size else 0 14 | img = ImageOps.expand(img, border=(0, 0, padw, padh), fill=0) 15 | mask = ImageOps.expand(mask, border=(0, 0, padw, padh), fill=ignore_value) 16 | 17 | w, h = img.size 18 | x = random.randint(0, w - size) 19 | y = random.randint(0, h - size) 20 | img = img.crop((x, y, x + size, y + size)) 21 | mask = mask.crop((x, y, x + size, y + size)) 22 | 23 | return img, mask 24 | 25 | 26 | def hflip(img, mask, p=0.5): 27 | if random.random() < p: 28 | img = img.transpose(Image.FLIP_LEFT_RIGHT) 29 | mask = mask.transpose(Image.FLIP_LEFT_RIGHT) 30 | return img, mask 31 | 32 | 33 | def normalize(img, mask=None): 34 | img = transforms.Compose([ 35 | transforms.ToTensor(), 36 | transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]), 37 | ])(img) 38 | if mask is not None: 39 | mask = torch.from_numpy(np.array(mask)).long() 40 | return img, mask 41 | return img 42 | 43 | 44 | def resize_certain(img, ratio_range): 45 | w, h = img.size 46 | ow = int(w * ratio_range + 0.5) 47 | oh = int(h * ratio_range + 0.5) 48 | img = img.resize((ow, oh), Image.BILINEAR) 49 | return img 50 | 51 | def resize(img, mask, ratio_range): 52 | w, h = img.size 53 | long_side = random.randint(int(max(h, w) * ratio_range[0]), int(max(h, w) * ratio_range[1])) 54 | 55 | if h > w: 56 | oh = long_side 57 | ow = int(1.0 * w * long_side / h + 0.5) 58 | else: 59 | ow = long_side 60 | oh = int(1.0 * h * long_side / w + 0.5) 61 | 62 | img = img.resize((ow, oh), Image.BILINEAR) 63 | mask = mask.resize((ow, oh), Image.NEAREST) 64 | return img, mask 65 | 66 | 67 | def blur(img, p=0.5): 68 | if random.random() < p: 69 | sigma = np.random.uniform(0.1, 2.0) 70 | img = img.filter(ImageFilter.GaussianBlur(radius=sigma)) 71 | return img 72 | 73 | 74 | def obtain_cutmix_box(img_size, p=0.5, size_min=0.02, size_max=0.4, ratio_1=0.3, ratio_2=1/0.3): 75 | mask = torch.zeros(img_size, img_size) 76 | if random.random() > p: 77 | return mask 78 | 79 | size = np.random.uniform(size_min, size_max) * img_size * img_size 80 | while True: 81 | ratio = np.random.uniform(ratio_1, ratio_2) 82 | cutmix_w = int(np.sqrt(size / ratio)) 83 | cutmix_h = int(np.sqrt(size * ratio)) 84 | x = np.random.randint(0, img_size) 85 | y = np.random.randint(0, img_size) 86 | 87 | if x + cutmix_w <= img_size and y + cutmix_h <= img_size: 88 | break 89 | 90 | mask[y:y + cutmix_h, x:x + cutmix_w] = 1 91 | 92 | return mask 93 | 94 | def img_aug_autocontrast(img, scale=None): 95 | return ImageOps.autocontrast(img) 96 | 97 | 98 | def img_aug_equalize(img, scale=None): 99 | return ImageOps.equalize(img) 100 | 101 | 102 | def img_aug_invert(img, scale=None): 103 | return ImageOps.invert(img) 104 | 105 | 106 | def img_aug_identity(img, scale=None): 107 | return img 108 | 109 | 110 | def img_aug_blur(img, scale=[0.1, 2.0]): 111 | assert scale[0] < scale[1] 112 | sigma = np.random.uniform(scale[0], scale[1]) 113 | return img.filter(ImageFilter.GaussianBlur(radius=sigma)) 114 | 115 | 116 | def img_aug_contrast(img, scale=[0.05, 0.95], p=0.2): 117 | if random.random() < p: 118 | min_v, max_v = min(scale), max(scale) 119 | v = float(max_v - min_v) * random.random() 120 | v = max_v - v 121 | return ImageEnhance.Contrast(img).enhance(v) 122 | else: 123 | return img 124 | 125 | 126 | def img_aug_brightness(img, scale=[0.05, 0.95]): 127 | min_v, max_v = min(scale), max(scale) 128 | v = float(max_v - min_v) * random.random() 129 | v = max_v - v 130 | # print(f"final:{v}") 131 | return ImageEnhance.Brightness(img).enhance(v) 132 | 133 | 134 | def img_aug_color(img, scale=[0.05, 0.95]): 135 | min_v, max_v = min(scale), max(scale) 136 | v = float(max_v - min_v) * random.random() 137 | v = max_v - v 138 | # print(f"final:{v}") 139 | return ImageEnhance.Color(img).enhance(v) 140 | 141 | 142 | def img_aug_sharpness(img, scale=[0.05, 0.95]): 143 | min_v, max_v = min(scale), max(scale) 144 | v = float(max_v - min_v) * random.random() 145 | v = max_v - v 146 | # print(f"final:{v}") 147 | return ImageEnhance.Sharpness(img).enhance(v) 148 | 149 | 150 | def img_aug_hue(img, scale=[0, 0.5]): 151 | min_v, max_v = min(scale), max(scale) 152 | v = float(max_v - min_v) * random.random() 153 | v += min_v 154 | if np.random.random() < 0.5: 155 | hue_factor = -v 156 | else: 157 | hue_factor = v 158 | # print(f"Final-V:{hue_factor}") 159 | input_mode = img.mode 160 | if input_mode in {"L", "1", "I", "F"}: 161 | return img 162 | h, s, v = img.convert("HSV").split() 163 | np_h = np.array(h, dtype=np.uint8) 164 | # uint8 addition take cares of rotation across boundaries 165 | with np.errstate(over="ignore"): 166 | np_h += np.uint8(hue_factor * 255) 167 | h = Image.fromarray(np_h, "L") 168 | img = Image.merge("HSV", (h, s, v)).convert(input_mode) 169 | return img 170 | 171 | 172 | def img_aug_posterize(img, scale=[4, 8]): 173 | min_v, max_v = min(scale), max(scale) 174 | v = float(max_v - min_v) * random.random() 175 | # print(min_v, max_v, v) 176 | v = int(np.ceil(v)) 177 | v = max(1, v) 178 | v = max_v - v 179 | # print(f"final:{v}") 180 | return ImageOps.posterize(img, v) 181 | 182 | 183 | def img_aug_solarize(img, scale=[1, 256]): 184 | min_v, max_v = min(scale), max(scale) 185 | v = float(max_v - min_v) * random.random() 186 | # print(min_v, max_v, v) 187 | v = int(np.ceil(v)) 188 | v = max(1, v) 189 | v = max_v - v 190 | # print(f"final:{v}") 191 | return ImageOps.solarize(img, v) 192 | 193 | 194 | def get_augment_list(): 195 | l = [ 196 | (img_aug_identity, None), 197 | (img_aug_autocontrast, None), 198 | (img_aug_equalize, None), 199 | (img_aug_blur, [0.1, 2.0]), 200 | (img_aug_contrast, [0.05, 0.95]), 201 | (img_aug_brightness, [0.05, 0.95]), 202 | (img_aug_color, [0.05, 0.95]), 203 | (img_aug_sharpness, [0.05, 0.95]), 204 | (img_aug_posterize, [4, 8]), 205 | (img_aug_solarize, [1, 256]), 206 | (img_aug_hue, [0, 0.5]) 207 | ] 208 | return l 209 | 210 | 211 | class strong_img_aug: 212 | def __init__(self, num_augs=4, flag_using_random_num=True): 213 | self.n = num_augs 214 | self.augment_list = get_augment_list() 215 | self.flag_using_random_num = flag_using_random_num 216 | 217 | def __call__(self, img): 218 | if self.flag_using_random_num: 219 | max_num = np.random.randint(1, high=self.n + 1) 220 | else: 221 | max_num = self.n 222 | ops = random.choices(self.augment_list, k=max_num) 223 | for op, scales in ops: 224 | img = op(img, scales) 225 | return img -------------------------------------------------------------------------------- /evaluate.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | import os 3 | import numpy as np 4 | import torch 5 | import torch.distributed as dist 6 | from util.dist_helper import setup_distributed 7 | from model.semseg.deeplabv3plus import DeepLabV3Plus 8 | 9 | from torch.utils.data import DataLoader 10 | import yaml 11 | from dataset.semi import SemiDataset 12 | from util.utils import AverageMeter, intersectionAndUnion 13 | 14 | 15 | def evaluate(model, loader, mode, cfg): 16 | return_dict = {} 17 | model.eval() 18 | assert mode in ['original', 'center_crop', 'sliding_window'] 19 | intersection_meter = AverageMeter() 20 | union_meter = AverageMeter() 21 | 22 | with torch.no_grad(): 23 | for img, mask, ids, img_ori in loader: 24 | img = img.cuda() 25 | b, _, h, w = img.shape 26 | if mode == 'sliding_window': 27 | grid = cfg['crop_size'] 28 | final = torch.zeros(b, 19, h, w).cuda() 29 | row = 0 30 | while row < h: 31 | col = 0 32 | while col < w: 33 | res = model(img[:, :, row: min(h, row + grid), col: min(w, col + grid)]) 34 | pred = res['out'] 35 | final[:, :, row: min(h, row + grid), col: min(w, col + grid)] += pred.softmax(dim=1) 36 | col += int(grid * 2 / 3) 37 | row += int(grid * 2 / 3) 38 | 39 | pred = final.argmax(dim=1) 40 | 41 | else: 42 | if mode == 'center_crop': 43 | h, w = img.shape[-2:] 44 | start_h, start_w = (h - cfg['crop_size']) // 2, (w - cfg['crop_size']) // 2 45 | img = img[:, :, start_h:start_h + cfg['crop_size'], start_w:start_w + cfg['crop_size']] 46 | mask = mask[:, start_h:start_h + cfg['crop_size'], start_w:start_w + cfg['crop_size']] 47 | 48 | res = model(img) 49 | pred = res['out'].argmax(dim=1) 50 | 51 | intersection, union, target = \ 52 | intersectionAndUnion(pred.cpu().numpy(), mask.numpy(), cfg['nclass'], 255) 53 | 54 | reduced_intersection = torch.from_numpy(intersection).cuda() 55 | reduced_union = torch.from_numpy(union).cuda() 56 | reduced_target = torch.from_numpy(target).cuda() 57 | 58 | dist.all_reduce(reduced_intersection) 59 | dist.all_reduce(reduced_union) 60 | dist.all_reduce(reduced_target) 61 | 62 | intersection_meter.update(reduced_intersection.cpu().numpy()) 63 | union_meter.update(reduced_union.cpu().numpy()) 64 | 65 | iou_class = intersection_meter.sum / (union_meter.sum + 1e-10) 66 | mIOU = np.mean(iou_class) * 100.0 67 | return_dict['iou_class'] = iou_class 68 | return_dict['mIOU'] = mIOU 69 | 70 | return return_dict 71 | 72 | 73 | def main(): 74 | parser = argparse.ArgumentParser(description='Semi-Supervised Semantic Segmentation') 75 | parser.add_argument('--config', type=str, required=True) 76 | parser.add_argument('--checkpoint_path', type=str, required=True) 77 | parser.add_argument('--local_rank', default=0, type=int) 78 | parser.add_argument('--port', default=None, type=int) 79 | args = parser.parse_args() 80 | setup_distributed(port=args.port) 81 | cfg = yaml.load(open(args.config, "r"), Loader=yaml.Loader) 82 | 83 | model = DeepLabV3Plus(cfg) 84 | model.load_state_dict(torch.load(args.checkpoint_path)) 85 | model = torch.nn.SyncBatchNorm.convert_sync_batchnorm(model) 86 | model.cuda() 87 | 88 | local_rank = int(os.environ["LOCAL_RANK"]) 89 | model = torch.nn.parallel.DistributedDataParallel(model, device_ids=[local_rank], 90 | output_device=local_rank, find_unused_parameters=False) 91 | 92 | valset = SemiDataset(cfg['dataset'], cfg['data_root'], 'val') 93 | valsampler = torch.utils.data.distributed.DistributedSampler(valset) 94 | valloader = DataLoader(valset, batch_size=1, pin_memory=True, num_workers=4, 95 | drop_last=False, sampler=valsampler) 96 | 97 | model.eval() 98 | res_val = evaluate(model, valloader, 'original', cfg) 99 | mIOU = res_val['mIOU'] 100 | iou_class = res_val['iou_class'] 101 | print(mIOU) 102 | print(iou_class) 103 | 104 | 105 | if __name__ == '__main__': 106 | main() 107 | -------------------------------------------------------------------------------- /images/cvpr_pipeline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BBBBchan/CorrMatch/44f9f9e8648886621b1bdb4f95df9df773cf4f09/images/cvpr_pipeline.png -------------------------------------------------------------------------------- /model/backbone/resnet.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import torch.nn as nn 3 | 4 | 5 | __all__ = ['ResNet', 'resnet50', 'resnet101'] 6 | 7 | 8 | def conv3x3(in_planes, out_planes, stride=1, groups=1, dilation=1): 9 | return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, 10 | padding=dilation, groups=groups, bias=False, dilation=dilation) 11 | 12 | 13 | def conv1x1(in_planes, out_planes, stride=1): 14 | return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False) 15 | 16 | 17 | class Bottleneck(nn.Module): 18 | expansion = 4 19 | 20 | def __init__(self, inplanes, planes, stride=1, downsample=None, groups=1, 21 | base_width=64, dilation=1, norm_layer=None): 22 | super(Bottleneck, self).__init__() 23 | if norm_layer is None: 24 | norm_layer = nn.BatchNorm2d 25 | width = int(planes * (base_width / 64.)) * groups 26 | 27 | self.conv1 = conv1x1(inplanes, width) 28 | self.bn1 = norm_layer(width) 29 | self.conv2 = conv3x3(width, width, stride, groups, dilation) 30 | self.bn2 = norm_layer(width) 31 | self.conv3 = conv1x1(width, planes * self.expansion) 32 | self.bn3 = norm_layer(planes * self.expansion) 33 | self.relu = nn.ReLU(inplace=True) 34 | self.downsample = downsample 35 | self.stride = stride 36 | 37 | def forward(self, x): 38 | identity = x 39 | 40 | out = self.conv1(x) 41 | out = self.bn1(out) 42 | out = self.relu(out) 43 | 44 | out = self.conv2(out) 45 | out = self.bn2(out) 46 | out = self.relu(out) 47 | 48 | out = self.conv3(out) 49 | out = self.bn3(out) 50 | 51 | if self.downsample is not None: 52 | identity = self.downsample(x) 53 | 54 | out += identity 55 | out = self.relu(out) 56 | 57 | return out 58 | 59 | 60 | class ResNet(nn.Module): 61 | 62 | def __init__(self, block, layers, zero_init_residual=False, groups=1, 63 | width_per_group=64, multi_grid=False, replace_stride_with_dilation=None, norm_layer=None): 64 | super(ResNet, self).__init__() 65 | 66 | if norm_layer is None: 67 | norm_layer = nn.BatchNorm2d 68 | self._norm_layer = norm_layer 69 | 70 | self.inplanes = 128 71 | self.dilation = 1 72 | if replace_stride_with_dilation is None: 73 | replace_stride_with_dilation = [False, False, False] 74 | if len(replace_stride_with_dilation) != 3: 75 | raise ValueError("replace_stride_with_dilation should be None " 76 | "or a 3-element tuple, got {}".format(replace_stride_with_dilation)) 77 | self.groups = groups 78 | self.base_width = width_per_group 79 | self.conv1 = nn.Sequential( 80 | nn.Conv2d(3, 64, kernel_size=3, stride=2, padding=1, bias=False), 81 | norm_layer(64), 82 | nn.ReLU(inplace=True), 83 | nn.Conv2d(64, 64, kernel_size=3, stride=1, padding=1, bias=False), 84 | norm_layer(64), 85 | nn.ReLU(inplace=True), 86 | nn.Conv2d(64, 128, kernel_size=3, stride=1, padding=1, bias=False), 87 | ) 88 | self.bn1 = norm_layer(self.inplanes) 89 | self.relu = nn.ReLU(inplace=True) 90 | self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) 91 | self.layer1 = self._make_layer(block, 64, layers[0]) 92 | self.layer2 = self._make_layer(block, 128, layers[1], stride=2, 93 | dilate=replace_stride_with_dilation[0]) 94 | self.layer3 = self._make_layer(block, 256, layers[2], stride=2, 95 | dilate=replace_stride_with_dilation[1]) 96 | self.layer4 = self._make_layer(block, 512, layers[3], stride=2, 97 | dilate=replace_stride_with_dilation[2], multi_grid=multi_grid) 98 | 99 | for m in self.modules(): 100 | if isinstance(m, nn.Conv2d): 101 | nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu') 102 | elif isinstance(m, (nn.BatchNorm2d, nn.GroupNorm)): 103 | nn.init.constant_(m.weight, 1) 104 | nn.init.constant_(m.bias, 0) 105 | 106 | if zero_init_residual: 107 | for m in self.modules(): 108 | if isinstance(m, Bottleneck): 109 | nn.init.constant_(m.bn3.weight, 0) 110 | 111 | def _make_layer(self, block, planes, blocks, stride=1, dilate=False, multi_grid=False): 112 | norm_layer = self._norm_layer 113 | downsample = None 114 | previous_dilation = self.dilation 115 | if dilate: 116 | self.dilation *= stride 117 | stride = 1 118 | if stride != 1 or self.inplanes != planes * block.expansion: 119 | downsample = nn.Sequential( 120 | conv1x1(self.inplanes, planes * block.expansion, stride), 121 | norm_layer(planes * block.expansion), 122 | ) 123 | 124 | grids = [1] * blocks 125 | if multi_grid: 126 | grids = [2, 2, 4] 127 | 128 | layers = list() 129 | layers.append(block(self.inplanes, planes, stride, downsample, self.groups, 130 | self.base_width, previous_dilation * grids[0], norm_layer)) 131 | self.inplanes = planes * block.expansion 132 | for i in range(1, blocks): 133 | layers.append(block(self.inplanes, planes, groups=self.groups, 134 | base_width=self.base_width, dilation=self.dilation * grids[i], 135 | norm_layer=norm_layer)) 136 | 137 | return nn.Sequential(*layers) 138 | 139 | def base_forward(self, x): 140 | x = self.conv1(x) 141 | x = self.bn1(x) 142 | x = self.relu(x) 143 | x = self.maxpool(x) 144 | 145 | c1 = self.layer1(x) 146 | c2 = self.layer2(c1) 147 | c3 = self.layer3(c2) 148 | c4 = self.layer4(c3) 149 | 150 | return c1, c2, c3, c4 151 | 152 | 153 | def _resnet(arch, block, layers, pretrained, **kwargs): 154 | model = ResNet(block, layers, **kwargs) 155 | if pretrained: 156 | pretrained_path = "pretrained/%s.pth" % arch 157 | state_dict = torch.load(pretrained_path) 158 | model.load_state_dict(state_dict, strict=False) 159 | return model 160 | 161 | 162 | def resnet50(pretrained=False, **kwargs): 163 | return _resnet('resnet50', Bottleneck, [3, 4, 6, 3], pretrained, **kwargs) 164 | 165 | 166 | def resnet101(pretrained=False, **kwargs): 167 | return _resnet('resnet101', Bottleneck, [3, 4, 23, 3], pretrained, **kwargs) 168 | -------------------------------------------------------------------------------- /model/backbone/xception.py: -------------------------------------------------------------------------------- 1 | import math 2 | import torch 3 | import torch.nn as nn 4 | import torch.nn.functional as F 5 | import torch.utils.model_zoo as model_zoo 6 | from torch.nn import init 7 | 8 | bn_mom = 0.0003 9 | __all__ = ['xception'] 10 | 11 | 12 | class SeparableConv2d(nn.Module): 13 | def __init__(self, in_channels, out_channels, kernel_size=1, stride=1, padding=0, dilation=1, bias=False, 14 | activate_first=True, inplace=True): 15 | super(SeparableConv2d, self).__init__() 16 | self.relu0 = nn.ReLU(inplace=inplace) 17 | self.depthwise = nn.Conv2d(in_channels, in_channels, kernel_size, stride, padding, dilation, groups=in_channels, 18 | bias=bias) 19 | self.bn1 = nn.BatchNorm2d(in_channels, momentum=bn_mom) 20 | self.relu1 = nn.ReLU(inplace=True) 21 | self.pointwise = nn.Conv2d(in_channels, out_channels, 1, 1, 0, 1, 1, bias=bias) 22 | self.bn2 = nn.BatchNorm2d(out_channels, momentum=bn_mom) 23 | self.relu2 = nn.ReLU(inplace=True) 24 | self.activate_first = activate_first 25 | 26 | def forward(self, x): 27 | if self.activate_first: 28 | x = self.relu0(x) 29 | x = self.depthwise(x) 30 | x = self.bn1(x) 31 | if not self.activate_first: 32 | x = self.relu1(x) 33 | x = self.pointwise(x) 34 | x = self.bn2(x) 35 | if not self.activate_first: 36 | x = self.relu2(x) 37 | return x 38 | 39 | 40 | class Block(nn.Module): 41 | def __init__(self, in_filters, out_filters, strides=1, atrous=None, grow_first=True, activate_first=True, 42 | inplace=True): 43 | super(Block, self).__init__() 44 | if atrous == None: 45 | atrous = [1] * 3 46 | elif isinstance(atrous, int): 47 | atrous_list = [atrous] * 3 48 | atrous = atrous_list 49 | idx = 0 50 | self.head_relu = True 51 | if out_filters != in_filters or strides != 1: 52 | self.skip = nn.Conv2d(in_filters, out_filters, 1, stride=strides, bias=False) 53 | self.skipbn = nn.BatchNorm2d(out_filters, momentum=bn_mom) 54 | self.head_relu = False 55 | else: 56 | self.skip = None 57 | 58 | self.hook_layer = None 59 | if grow_first: 60 | filters = out_filters 61 | else: 62 | filters = in_filters 63 | self.sepconv1 = SeparableConv2d(in_filters, filters, 3, stride=1, padding=1 * atrous[0], dilation=atrous[0], 64 | bias=False, activate_first=activate_first, inplace=self.head_relu) 65 | self.sepconv2 = SeparableConv2d(filters, out_filters, 3, stride=1, padding=1 * atrous[1], dilation=atrous[1], 66 | bias=False, activate_first=activate_first) 67 | self.sepconv3 = SeparableConv2d(out_filters, out_filters, 3, stride=strides, padding=1 * atrous[2], 68 | dilation=atrous[2], bias=False, activate_first=activate_first, inplace=inplace) 69 | 70 | def forward(self, inp): 71 | 72 | if self.skip is not None: 73 | skip = self.skip(inp) 74 | skip = self.skipbn(skip) 75 | else: 76 | skip = inp 77 | 78 | x = self.sepconv1(inp) 79 | x = self.sepconv2(x) 80 | self.hook_layer = x 81 | x = self.sepconv3(x) 82 | 83 | x += skip 84 | return x 85 | 86 | 87 | class Xception(nn.Module): 88 | """ 89 | Xception optimized for the ImageNet dataset, as specified in 90 | https://arxiv.org/pdf/1610.02357.pdf 91 | """ 92 | 93 | def __init__(self, os): 94 | """ Constructor 95 | Args: 96 | num_classes: number of classes 97 | """ 98 | super(Xception, self).__init__() 99 | 100 | if os == 8: 101 | stride_list = [2, 1, 1] 102 | elif os == 16: 103 | stride_list = [2, 2, 1] 104 | else: 105 | raise ValueError('xception.py: output stride=%d is not supported.' % os) 106 | self.conv1 = nn.Conv2d(3, 32, 3, 2, 1, bias=False) 107 | self.bn1 = nn.BatchNorm2d(32, momentum=bn_mom) 108 | self.relu = nn.ReLU(inplace=True) 109 | 110 | self.conv2 = nn.Conv2d(32, 64, 3, 1, 1, bias=False) 111 | self.bn2 = nn.BatchNorm2d(64, momentum=bn_mom) 112 | 113 | self.block1 = Block(64, 128, 2) 114 | self.block2 = Block(128, 256, stride_list[0], inplace=False) 115 | self.block3 = Block(256, 728, stride_list[1]) 116 | 117 | rate = 16 // os 118 | self.block4 = Block(728, 728, 1, atrous=rate) 119 | self.block5 = Block(728, 728, 1, atrous=rate) 120 | self.block6 = Block(728, 728, 1, atrous=rate) 121 | self.block7 = Block(728, 728, 1, atrous=rate) 122 | 123 | self.block8 = Block(728, 728, 1, atrous=rate) 124 | self.block9 = Block(728, 728, 1, atrous=rate) 125 | self.block10 = Block(728, 728, 1, atrous=rate) 126 | self.block11 = Block(728, 728, 1, atrous=rate) 127 | 128 | self.block12 = Block(728, 728, 1, atrous=rate) 129 | self.block13 = Block(728, 728, 1, atrous=rate) 130 | self.block14 = Block(728, 728, 1, atrous=rate) 131 | self.block15 = Block(728, 728, 1, atrous=rate) 132 | 133 | self.block16 = Block(728, 728, 1, atrous=[1 * rate, 1 * rate, 1 * rate]) 134 | self.block17 = Block(728, 728, 1, atrous=[1 * rate, 1 * rate, 1 * rate]) 135 | self.block18 = Block(728, 728, 1, atrous=[1 * rate, 1 * rate, 1 * rate]) 136 | self.block19 = Block(728, 728, 1, atrous=[1 * rate, 1 * rate, 1 * rate]) 137 | 138 | self.block20 = Block(728, 1024, stride_list[2], atrous=rate, grow_first=False) 139 | 140 | self.conv3 = SeparableConv2d(1024, 1536, 3, 1, 1 * rate, dilation=rate, activate_first=False) 141 | 142 | self.conv4 = SeparableConv2d(1536, 1536, 3, 1, 1 * rate, dilation=rate, activate_first=False) 143 | 144 | # do relu here 145 | self.conv5 = SeparableConv2d(1536, 2048, 3, 1, 1 * rate, dilation=rate, activate_first=False) 146 | self.layers = [] 147 | 148 | # ------- init weights -------- 149 | for m in self.modules(): 150 | if isinstance(m, nn.Conv2d): 151 | n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels 152 | m.weight.data.normal_(0, math.sqrt(2. / n)) 153 | elif isinstance(m, nn.BatchNorm2d): 154 | m.weight.data.fill_(1) 155 | m.bias.data.zero_() 156 | # ----------------------------- 157 | 158 | def base_forward(self, input): 159 | self.layers = [] 160 | x = self.conv1(input) 161 | x = self.bn1(x) 162 | x = self.relu(x) 163 | # self.layers.append(x) 164 | x = self.conv2(x) 165 | x = self.bn2(x) 166 | x = self.relu(x) 167 | 168 | x = self.block1(x) 169 | x = self.block2(x) 170 | # self.layers.append(self.block2.hook_layer) 171 | c1 = self.block2.hook_layer 172 | x = self.block3(x) 173 | # self.layers.append(self.block3.hook_layer) 174 | x = self.block4(x) 175 | x = self.block5(x) 176 | x = self.block6(x) 177 | x = self.block7(x) 178 | x = self.block8(x) 179 | x = self.block9(x) 180 | x = self.block10(x) 181 | x = self.block11(x) 182 | x = self.block12(x) 183 | x = self.block13(x) 184 | x = self.block14(x) 185 | x = self.block15(x) 186 | x = self.block16(x) 187 | x = self.block17(x) 188 | x = self.block18(x) 189 | x = self.block19(x) 190 | x = self.block20(x) 191 | 192 | x = self.conv3(x) 193 | 194 | x = self.conv4(x) 195 | 196 | x = self.conv5(x) 197 | 198 | return c1, x 199 | 200 | 201 | def xception(pretrained=True, os=16): 202 | model = Xception(os=os) 203 | if pretrained: 204 | old_dict = torch.load('pretrained/xception.pth') 205 | model_dict = model.state_dict() 206 | old_dict = {k: v for k, v in old_dict.items() if ('itr' not in k and 'tmp' not in k and 'track' not in k)} 207 | model_dict.update(old_dict) 208 | 209 | model.load_state_dict(model_dict) 210 | 211 | return model 212 | -------------------------------------------------------------------------------- /model/semseg/deeplabv3plus.py: -------------------------------------------------------------------------------- 1 | import model.backbone.resnet as resnet 2 | from model.backbone.xception import xception 3 | 4 | import torch 5 | from torch import nn 6 | import torch.nn.functional as F 7 | import math 8 | from einops import rearrange 9 | 10 | 11 | class DeepLabV3Plus(nn.Module): 12 | def __init__(self, cfg): 13 | super(DeepLabV3Plus, self).__init__() 14 | self.is_corr = True 15 | 16 | if 'resnet' in cfg['backbone']: 17 | self.backbone = \ 18 | resnet.__dict__[cfg['backbone']](cfg['pretrain'], multi_grid=cfg['multi_grid'], 19 | replace_stride_with_dilation=cfg['replace_stride_with_dilation']) 20 | else: 21 | assert cfg['backbone'] == 'xception' 22 | self.backbone = xception(True) 23 | 24 | low_channels = 256 25 | high_channels = 2048 26 | 27 | self.head = ASPPModule(high_channels, cfg['dilations']) 28 | 29 | self.reduce = nn.Sequential(nn.Conv2d(low_channels, 48, 1, bias=False), 30 | nn.BatchNorm2d(48), 31 | nn.ReLU(True)) 32 | 33 | self.fuse = nn.Sequential(nn.Conv2d(high_channels // 8 + 48, 256, 3, padding=1, bias=False), 34 | nn.BatchNorm2d(256), 35 | nn.ReLU(True), 36 | nn.Conv2d(256, 256, 3, padding=1, bias=False), 37 | nn.BatchNorm2d(256), 38 | nn.ReLU(True)) 39 | 40 | self.classifier = nn.Conv2d(256, cfg['nclass'], 1, bias=True) 41 | 42 | 43 | if self.is_corr: 44 | self.corr = Corr(nclass=cfg['nclass']) 45 | self.proj = nn.Sequential( 46 | nn.Conv2d(2048, 256, kernel_size=3, stride=1, padding=1, bias=True), 47 | nn.BatchNorm2d(256), 48 | nn.ReLU(inplace=True), 49 | nn.Dropout2d(0.1), 50 | ) 51 | 52 | def forward(self, x, need_fp=False, use_corr=False): 53 | dict_return = {} 54 | h, w = x.shape[-2:] 55 | 56 | feats = self.backbone.base_forward(x) 57 | c1, c4 = feats[0], feats[-1] 58 | 59 | if need_fp: 60 | feats_decode = self._decode(torch.cat((c1, nn.Dropout2d(0.5)(c1))), torch.cat((c4, nn.Dropout2d(0.5)(c4)))) 61 | outs = self.classifier(feats_decode) 62 | outs = F.interpolate(outs, size=(h, w), mode="bilinear", align_corners=True) 63 | out, out_fp = outs.chunk(2) 64 | if use_corr: 65 | proj_feats = self.proj(c4) 66 | corr_out_dict = self.corr(proj_feats, out) 67 | dict_return['corr_map'] = corr_out_dict['corr_map'] 68 | corr_out = corr_out_dict['out'] 69 | corr_out = F.interpolate(corr_out, size=(h, w), mode="bilinear", align_corners=True) 70 | dict_return['corr_out'] = corr_out 71 | dict_return['out'] = out 72 | dict_return['out_fp'] = out_fp 73 | 74 | return dict_return 75 | 76 | feats_decode = self._decode(c1, c4) 77 | out = self.classifier(feats_decode) 78 | out = F.interpolate(out, size=(h, w), mode="bilinear", align_corners=True) 79 | if use_corr: 80 | proj_feats = self.proj(c4) 81 | corr_out_dict = self.corr(proj_feats, out) 82 | dict_return['corr_map'] = corr_out_dict['corr_map'] 83 | corr_out = corr_out_dict['out'] 84 | corr_out = F.interpolate(corr_out, size=(h, w), mode="bilinear", align_corners=True) 85 | dict_return['corr_out'] = corr_out 86 | dict_return['out'] = out 87 | return dict_return 88 | 89 | def _decode(self, c1, c4): 90 | c4 = self.head(c4) 91 | c4 = F.interpolate(c4, size=c1.shape[-2:], mode="bilinear", align_corners=True) 92 | 93 | c1 = self.reduce(c1) 94 | 95 | feature = torch.cat([c1, c4], dim=1) 96 | feature = self.fuse(feature) 97 | 98 | return feature 99 | 100 | 101 | def ASPPConv(in_channels, out_channels, atrous_rate): 102 | block = nn.Sequential(nn.Conv2d(in_channels, out_channels, 3, padding=atrous_rate, 103 | dilation=atrous_rate, bias=False), 104 | nn.BatchNorm2d(out_channels), 105 | nn.ReLU(True)) 106 | return block 107 | 108 | 109 | class ASPPPooling(nn.Module): 110 | def __init__(self, in_channels, out_channels): 111 | super(ASPPPooling, self).__init__() 112 | self.gap = nn.Sequential(nn.AdaptiveAvgPool2d(1), 113 | nn.Conv2d(in_channels, out_channels, 1, bias=False), 114 | nn.BatchNorm2d(out_channels), 115 | nn.ReLU(True)) 116 | 117 | def forward(self, x): 118 | h, w = x.shape[-2:] 119 | pool = self.gap(x) 120 | return F.interpolate(pool, (h, w), mode="bilinear", align_corners=True) 121 | 122 | 123 | class ASPPModule(nn.Module): 124 | def __init__(self, in_channels, atrous_rates): 125 | super(ASPPModule, self).__init__() 126 | out_channels = in_channels // 8 127 | rate1, rate2, rate3 = atrous_rates 128 | 129 | self.b0 = nn.Sequential(nn.Conv2d(in_channels, out_channels, 1, bias=False), 130 | nn.BatchNorm2d(out_channels), 131 | nn.ReLU(True)) 132 | self.b1 = ASPPConv(in_channels, out_channels, rate1) 133 | self.b2 = ASPPConv(in_channels, out_channels, rate2) 134 | self.b3 = ASPPConv(in_channels, out_channels, rate3) 135 | self.b4 = ASPPPooling(in_channels, out_channels) 136 | 137 | self.project = nn.Sequential(nn.Conv2d(5 * out_channels, out_channels, 1, bias=False), 138 | nn.BatchNorm2d(out_channels), 139 | nn.ReLU(True)) 140 | 141 | def forward(self, x): 142 | feat0 = self.b0(x) 143 | feat1 = self.b1(x) 144 | feat2 = self.b2(x) 145 | feat3 = self.b3(x) 146 | feat4 = self.b4(x) 147 | y = torch.cat((feat0, feat1, feat2, feat3, feat4), 1) 148 | return self.project(y) 149 | 150 | 151 | class Corr(nn.Module): 152 | def __init__(self, nclass=21): 153 | super(Corr, self).__init__() 154 | self.nclass = nclass 155 | self.conv1 = nn.Conv2d(256, self.nclass, kernel_size=1, stride=1, padding=0, bias=True) 156 | self.conv2 = nn.Conv2d(256, self.nclass, kernel_size=1, stride=1, padding=0, bias=True) 157 | 158 | def forward(self, feature_in, out): 159 | dict_return = {} 160 | h_in, w_in = math.ceil(feature_in.shape[2] / (1)), math.ceil(feature_in.shape[3] / (1)) 161 | h_out, w_out = out.shape[2], out.shape[3] 162 | out = F.interpolate(out.detach(), (h_in, w_in), mode='bilinear', align_corners=True) 163 | feature = F.interpolate(feature_in, (h_in, w_in), mode='bilinear', align_corners=True) 164 | f1 = rearrange(self.conv1(feature), 'n c h w -> n c (h w)') 165 | f2 = rearrange(self.conv2(feature), 'n c h w -> n c (h w)') 166 | out_temp = rearrange(out, 'n c h w -> n c (h w)') 167 | corr_map = torch.matmul(f1.transpose(1, 2), f2) / torch.sqrt(torch.tensor(f1.shape[1]).float()) 168 | corr_map = F.softmax(corr_map, dim=-1) 169 | corr_map_sample = self.sample(corr_map.detach(), h_in, w_in) 170 | dict_return['corr_map'] = self.normalize_corr_map(corr_map_sample, h_in, w_in, h_out, w_out) 171 | dict_return['out'] = rearrange(torch.matmul(out_temp, corr_map), 'n c (h w) -> n c h w', h=h_in, w=w_in) 172 | return dict_return 173 | 174 | def sample(self, corr_map, h_in, w_in): 175 | index = torch.randint(0, h_in * w_in - 1, [128]) 176 | corr_map_sample = corr_map[:, index.long(), :] 177 | return corr_map_sample 178 | 179 | def normalize_corr_map(self, corr_map, h_in, w_in, h_out, w_out): 180 | n, m, hw = corr_map.shape 181 | corr_map = rearrange(corr_map, 'n m (h w) -> (n m) 1 h w', h=h_in, w=w_in) 182 | corr_map = F.interpolate(corr_map, (h_out, w_out), mode='bilinear', align_corners=True) 183 | 184 | corr_map = rearrange(corr_map, '(n m) 1 h w -> (n m) (h w)', n=n, m=m) 185 | range_ = torch.max(corr_map, dim=1, keepdim=True)[0] - torch.min(corr_map, dim=1, keepdim=True)[0] 186 | temp_map = ((- torch.min(corr_map, dim=1, keepdim=True)[0]) + corr_map) / range_ 187 | corr_map = (temp_map > 0.5) 188 | norm_corr_map = rearrange(corr_map, '(n m) (h w) -> n m h w', n=n, m=m, h=h_out, w=w_out) 189 | return norm_corr_map 190 | 191 | 192 | -------------------------------------------------------------------------------- /model/semseg/deeplabv3plus_vis.py: -------------------------------------------------------------------------------- 1 | import model.backbone.resnet as resnet 2 | from model.backbone.xception import xception 3 | 4 | import torch 5 | from torch import nn 6 | import torch.nn.functional as F 7 | import math 8 | from einops import rearrange 9 | 10 | 11 | class DeepLabV3Plus(nn.Module): 12 | def __init__(self, cfg): 13 | super(DeepLabV3Plus, self).__init__() 14 | self.is_corr = True 15 | 16 | if 'resnet' in cfg['backbone']: 17 | self.backbone = \ 18 | resnet.__dict__[cfg['backbone']](cfg['pretrain'], multi_grid=cfg['multi_grid'], 19 | replace_stride_with_dilation=cfg['replace_stride_with_dilation']) 20 | else: 21 | assert cfg['backbone'] == 'xception' 22 | self.backbone = xception(True) 23 | 24 | low_channels = 256 25 | high_channels = 2048 26 | 27 | self.head = ASPPModule(high_channels, cfg['dilations']) 28 | 29 | self.reduce = nn.Sequential(nn.Conv2d(low_channels, 48, 1, bias=False), 30 | nn.BatchNorm2d(48), 31 | nn.ReLU(True)) 32 | 33 | self.fuse = nn.Sequential(nn.Conv2d(high_channels // 8 + 48, 256, 3, padding=1, bias=False), 34 | nn.BatchNorm2d(256), 35 | nn.ReLU(True), 36 | nn.Conv2d(256, 256, 3, padding=1, bias=False), 37 | nn.BatchNorm2d(256), 38 | nn.ReLU(True)) 39 | 40 | self.classifier = nn.Conv2d(256, cfg['nclass'], 1, bias=True) 41 | 42 | if self.is_corr: 43 | self.corr = Corr(nclass=cfg['nclass']) 44 | self.proj = nn.Sequential( 45 | nn.Conv2d(2048, 256, kernel_size=3, stride=1, padding=1, bias=True), 46 | nn.BatchNorm2d(256), 47 | nn.ReLU(inplace=True), 48 | nn.Dropout2d(0.1), 49 | ) 50 | 51 | def forward(self, x, need_fp=False, use_corr=False): 52 | dict_return = {} 53 | h, w = x.shape[-2:] 54 | 55 | feats = self.backbone.base_forward(x) 56 | c1, c4 = feats[0], feats[-1] 57 | 58 | if need_fp: 59 | feats_decode = self._decode(torch.cat((c1, nn.Dropout2d(0.5)(c1))), torch.cat((c4, nn.Dropout2d(0.5)(c4)))) 60 | outs = self.classifier(feats_decode) 61 | outs = F.interpolate(outs, size=(h, w), mode="bilinear", align_corners=True) 62 | out, out_fp = outs.chunk(2) 63 | if use_corr: 64 | proj_feats = self.proj(c4) 65 | corr_out, corr_map = self.corr(proj_feats, out) 66 | corr_out = F.interpolate(corr_out, size=(h, w), mode="bilinear", align_corners=True) 67 | dict_return['corr_out'] = corr_out 68 | dict_return['corr_map'] = corr_map 69 | dict_return['c4'] = c4 70 | dict_return['out'] = out 71 | dict_return['out_fp'] = out_fp 72 | 73 | return dict_return 74 | 75 | feats_decode = self._decode(c1, c4) 76 | out = self.classifier(feats_decode) 77 | out = F.interpolate(out, size=(h, w), mode="bilinear", align_corners=True) 78 | if use_corr: 79 | proj_feats = self.proj(c4) 80 | corr_out, corr_map = self.corr(proj_feats, out) 81 | corr_out = F.interpolate(corr_out, size=(h, w), mode="bilinear", align_corners=True) 82 | dict_return['corr_out'] = corr_out 83 | dict_return['corr_map'] = corr_map 84 | dict_return['c4'] = c4 85 | dict_return['out'] = out 86 | return dict_return 87 | 88 | def _decode(self, c1, c4): 89 | c4 = self.head(c4) 90 | c4 = F.interpolate(c4, size=c1.shape[-2:], mode="bilinear", align_corners=True) 91 | 92 | c1 = self.reduce(c1) 93 | 94 | feature = torch.cat([c1, c4], dim=1) 95 | feature = self.fuse(feature) 96 | 97 | return feature 98 | 99 | 100 | def ASPPConv(in_channels, out_channels, atrous_rate): 101 | block = nn.Sequential(nn.Conv2d(in_channels, out_channels, 3, padding=atrous_rate, 102 | dilation=atrous_rate, bias=False), 103 | nn.BatchNorm2d(out_channels), 104 | nn.ReLU(True)) 105 | return block 106 | 107 | 108 | class ASPPPooling(nn.Module): 109 | def __init__(self, in_channels, out_channels): 110 | super(ASPPPooling, self).__init__() 111 | self.gap = nn.Sequential(nn.AdaptiveAvgPool2d(1), 112 | nn.Conv2d(in_channels, out_channels, 1, bias=False), 113 | nn.BatchNorm2d(out_channels), 114 | nn.ReLU(True)) 115 | 116 | def forward(self, x): 117 | h, w = x.shape[-2:] 118 | pool = self.gap(x) 119 | return F.interpolate(pool, (h, w), mode="bilinear", align_corners=True) 120 | 121 | 122 | class ASPPModule(nn.Module): 123 | def __init__(self, in_channels, atrous_rates): 124 | super(ASPPModule, self).__init__() 125 | out_channels = in_channels // 8 126 | rate1, rate2, rate3 = atrous_rates 127 | 128 | self.b0 = nn.Sequential(nn.Conv2d(in_channels, out_channels, 1, bias=False), 129 | nn.BatchNorm2d(out_channels), 130 | nn.ReLU(True)) 131 | self.b1 = ASPPConv(in_channels, out_channels, rate1) 132 | self.b2 = ASPPConv(in_channels, out_channels, rate2) 133 | self.b3 = ASPPConv(in_channels, out_channels, rate3) 134 | self.b4 = ASPPPooling(in_channels, out_channels) 135 | 136 | self.project = nn.Sequential(nn.Conv2d(5 * out_channels, out_channels, 1, bias=False), 137 | nn.BatchNorm2d(out_channels), 138 | nn.ReLU(True)) 139 | 140 | def forward(self, x): 141 | feat0 = self.b0(x) 142 | feat1 = self.b1(x) 143 | feat2 = self.b2(x) 144 | feat3 = self.b3(x) 145 | feat4 = self.b4(x) 146 | y = torch.cat((feat0, feat1, feat2, feat3, feat4), 1) 147 | return self.project(y) 148 | 149 | 150 | class Corr(nn.Module): 151 | def __init__(self, nclass=21): 152 | super(Corr, self).__init__() 153 | self.nclass = nclass 154 | self.conv1 = nn.Conv2d(256, self.nclass, kernel_size=1, stride=1, padding=0, bias=True) 155 | self.conv2 = nn.Conv2d(256, self.nclass, kernel_size=1, stride=1, padding=0, bias=True) 156 | 157 | def forward(self, feature_in, out): 158 | h_in, w_in = math.ceil(feature_in.shape[2] / (1)), math.ceil(feature_in.shape[3] / (1)) 159 | out = F.interpolate(out.detach(), (h_in, w_in), mode='bilinear', align_corners=True) 160 | feature = F.interpolate(feature_in, (h_in, w_in), mode='bilinear', align_corners=True) 161 | f1 = rearrange(self.conv1(feature), 'n c h w -> n c (h w)') 162 | f2 = rearrange(self.conv2(feature), 'n c h w -> n c (h w)') 163 | out_temp = rearrange(out, 'n c h w -> n c (h w)') 164 | corr_map = torch.matmul(f1.transpose(1, 2), f2) / torch.sqrt(torch.tensor(f1.shape[1]).float()) 165 | corr_map = F.softmax(corr_map, dim=-1) 166 | out = rearrange(torch.matmul(out_temp, corr_map), 'n c (h w) -> n c h w', h=h_in, w=w_in) 167 | return out, corr_map.detach() 168 | 169 | -------------------------------------------------------------------------------- /partitions/cityscapes/1_16/labeled.txt: -------------------------------------------------------------------------------- 1 | leftImg8bit/train/jena/jena_000078_000019_leftImg8bit.png gtFine/train/jena/jena_000078_000019_gtFine_labelTrainIds.png 2 | leftImg8bit/train/jena/jena_000065_000019_leftImg8bit.png gtFine/train/jena/jena_000065_000019_gtFine_labelTrainIds.png 3 | leftImg8bit/train/jena/jena_000005_000019_leftImg8bit.png gtFine/train/jena/jena_000005_000019_gtFine_labelTrainIds.png 4 | leftImg8bit/train/jena/jena_000102_000019_leftImg8bit.png gtFine/train/jena/jena_000102_000019_gtFine_labelTrainIds.png 5 | leftImg8bit/train/jena/jena_000022_000019_leftImg8bit.png gtFine/train/jena/jena_000022_000019_gtFine_labelTrainIds.png 6 | leftImg8bit/train/jena/jena_000011_000019_leftImg8bit.png gtFine/train/jena/jena_000011_000019_gtFine_labelTrainIds.png 7 | leftImg8bit/train/jena/jena_000108_000019_leftImg8bit.png gtFine/train/jena/jena_000108_000019_gtFine_labelTrainIds.png 8 | leftImg8bit/train/jena/jena_000025_000019_leftImg8bit.png gtFine/train/jena/jena_000025_000019_gtFine_labelTrainIds.png 9 | leftImg8bit/train/stuttgart/stuttgart_000191_000019_leftImg8bit.png gtFine/train/stuttgart/stuttgart_000191_000019_gtFine_labelTrainIds.png 10 | leftImg8bit/train/stuttgart/stuttgart_000067_000019_leftImg8bit.png gtFine/train/stuttgart/stuttgart_000067_000019_gtFine_labelTrainIds.png 11 | leftImg8bit/train/stuttgart/stuttgart_000037_000019_leftImg8bit.png gtFine/train/stuttgart/stuttgart_000037_000019_gtFine_labelTrainIds.png 12 | leftImg8bit/train/stuttgart/stuttgart_000046_000019_leftImg8bit.png gtFine/train/stuttgart/stuttgart_000046_000019_gtFine_labelTrainIds.png 13 | leftImg8bit/train/stuttgart/stuttgart_000028_000019_leftImg8bit.png gtFine/train/stuttgart/stuttgart_000028_000019_gtFine_labelTrainIds.png 14 | leftImg8bit/train/stuttgart/stuttgart_000016_000019_leftImg8bit.png gtFine/train/stuttgart/stuttgart_000016_000019_gtFine_labelTrainIds.png 15 | leftImg8bit/train/stuttgart/stuttgart_000004_000019_leftImg8bit.png gtFine/train/stuttgart/stuttgart_000004_000019_gtFine_labelTrainIds.png 16 | leftImg8bit/train/stuttgart/stuttgart_000005_000019_leftImg8bit.png gtFine/train/stuttgart/stuttgart_000005_000019_gtFine_labelTrainIds.png 17 | leftImg8bit/train/stuttgart/stuttgart_000159_000019_leftImg8bit.png gtFine/train/stuttgart/stuttgart_000159_000019_gtFine_labelTrainIds.png 18 | leftImg8bit/train/stuttgart/stuttgart_000068_000019_leftImg8bit.png gtFine/train/stuttgart/stuttgart_000068_000019_gtFine_labelTrainIds.png 19 | leftImg8bit/train/stuttgart/stuttgart_000180_000019_leftImg8bit.png gtFine/train/stuttgart/stuttgart_000180_000019_gtFine_labelTrainIds.png 20 | leftImg8bit/train/stuttgart/stuttgart_000109_000019_leftImg8bit.png gtFine/train/stuttgart/stuttgart_000109_000019_gtFine_labelTrainIds.png 21 | leftImg8bit/train/ulm/ulm_000001_000019_leftImg8bit.png gtFine/train/ulm/ulm_000001_000019_gtFine_labelTrainIds.png 22 | leftImg8bit/train/ulm/ulm_000027_000019_leftImg8bit.png gtFine/train/ulm/ulm_000027_000019_gtFine_labelTrainIds.png 23 | leftImg8bit/train/ulm/ulm_000076_000019_leftImg8bit.png gtFine/train/ulm/ulm_000076_000019_gtFine_labelTrainIds.png 24 | leftImg8bit/train/ulm/ulm_000053_000019_leftImg8bit.png gtFine/train/ulm/ulm_000053_000019_gtFine_labelTrainIds.png 25 | leftImg8bit/train/ulm/ulm_000060_000019_leftImg8bit.png gtFine/train/ulm/ulm_000060_000019_gtFine_labelTrainIds.png 26 | leftImg8bit/train/ulm/ulm_000051_000019_leftImg8bit.png gtFine/train/ulm/ulm_000051_000019_gtFine_labelTrainIds.png 27 | leftImg8bit/train/dusseldorf/dusseldorf_000194_000019_leftImg8bit.png gtFine/train/dusseldorf/dusseldorf_000194_000019_gtFine_labelTrainIds.png 28 | leftImg8bit/train/dusseldorf/dusseldorf_000077_000019_leftImg8bit.png gtFine/train/dusseldorf/dusseldorf_000077_000019_gtFine_labelTrainIds.png 29 | leftImg8bit/train/dusseldorf/dusseldorf_000103_000019_leftImg8bit.png gtFine/train/dusseldorf/dusseldorf_000103_000019_gtFine_labelTrainIds.png 30 | leftImg8bit/train/dusseldorf/dusseldorf_000163_000019_leftImg8bit.png gtFine/train/dusseldorf/dusseldorf_000163_000019_gtFine_labelTrainIds.png 31 | leftImg8bit/train/dusseldorf/dusseldorf_000124_000019_leftImg8bit.png gtFine/train/dusseldorf/dusseldorf_000124_000019_gtFine_labelTrainIds.png 32 | leftImg8bit/train/dusseldorf/dusseldorf_000079_000019_leftImg8bit.png gtFine/train/dusseldorf/dusseldorf_000079_000019_gtFine_labelTrainIds.png 33 | leftImg8bit/train/dusseldorf/dusseldorf_000091_000019_leftImg8bit.png gtFine/train/dusseldorf/dusseldorf_000091_000019_gtFine_labelTrainIds.png 34 | leftImg8bit/train/dusseldorf/dusseldorf_000026_000019_leftImg8bit.png gtFine/train/dusseldorf/dusseldorf_000026_000019_gtFine_labelTrainIds.png 35 | leftImg8bit/train/dusseldorf/dusseldorf_000203_000019_leftImg8bit.png gtFine/train/dusseldorf/dusseldorf_000203_000019_gtFine_labelTrainIds.png 36 | leftImg8bit/train/dusseldorf/dusseldorf_000129_000019_leftImg8bit.png gtFine/train/dusseldorf/dusseldorf_000129_000019_gtFine_labelTrainIds.png 37 | leftImg8bit/train/dusseldorf/dusseldorf_000123_000019_leftImg8bit.png gtFine/train/dusseldorf/dusseldorf_000123_000019_gtFine_labelTrainIds.png 38 | leftImg8bit/train/dusseldorf/dusseldorf_000184_000019_leftImg8bit.png gtFine/train/dusseldorf/dusseldorf_000184_000019_gtFine_labelTrainIds.png 39 | leftImg8bit/train/dusseldorf/dusseldorf_000096_000019_leftImg8bit.png gtFine/train/dusseldorf/dusseldorf_000096_000019_gtFine_labelTrainIds.png 40 | leftImg8bit/train/dusseldorf/dusseldorf_000084_000019_leftImg8bit.png gtFine/train/dusseldorf/dusseldorf_000084_000019_gtFine_labelTrainIds.png 41 | leftImg8bit/train/darmstadt/darmstadt_000039_000019_leftImg8bit.png gtFine/train/darmstadt/darmstadt_000039_000019_gtFine_labelTrainIds.png 42 | leftImg8bit/train/darmstadt/darmstadt_000014_000019_leftImg8bit.png gtFine/train/darmstadt/darmstadt_000014_000019_gtFine_labelTrainIds.png 43 | leftImg8bit/train/darmstadt/darmstadt_000070_000019_leftImg8bit.png gtFine/train/darmstadt/darmstadt_000070_000019_gtFine_labelTrainIds.png 44 | leftImg8bit/train/darmstadt/darmstadt_000049_000019_leftImg8bit.png gtFine/train/darmstadt/darmstadt_000049_000019_gtFine_labelTrainIds.png 45 | leftImg8bit/train/darmstadt/darmstadt_000004_000019_leftImg8bit.png gtFine/train/darmstadt/darmstadt_000004_000019_gtFine_labelTrainIds.png 46 | leftImg8bit/train/zurich/zurich_000037_000019_leftImg8bit.png gtFine/train/zurich/zurich_000037_000019_gtFine_labelTrainIds.png 47 | leftImg8bit/train/zurich/zurich_000091_000019_leftImg8bit.png gtFine/train/zurich/zurich_000091_000019_gtFine_labelTrainIds.png 48 | leftImg8bit/train/zurich/zurich_000084_000019_leftImg8bit.png gtFine/train/zurich/zurich_000084_000019_gtFine_labelTrainIds.png 49 | leftImg8bit/train/zurich/zurich_000010_000019_leftImg8bit.png gtFine/train/zurich/zurich_000010_000019_gtFine_labelTrainIds.png 50 | leftImg8bit/train/zurich/zurich_000067_000019_leftImg8bit.png gtFine/train/zurich/zurich_000067_000019_gtFine_labelTrainIds.png 51 | leftImg8bit/train/zurich/zurich_000107_000019_leftImg8bit.png gtFine/train/zurich/zurich_000107_000019_gtFine_labelTrainIds.png 52 | leftImg8bit/train/zurich/zurich_000057_000019_leftImg8bit.png gtFine/train/zurich/zurich_000057_000019_gtFine_labelTrainIds.png 53 | leftImg8bit/train/zurich/zurich_000041_000019_leftImg8bit.png gtFine/train/zurich/zurich_000041_000019_gtFine_labelTrainIds.png 54 | leftImg8bit/train/bremen/bremen_000164_000019_leftImg8bit.png gtFine/train/bremen/bremen_000164_000019_gtFine_labelTrainIds.png 55 | leftImg8bit/train/bremen/bremen_000265_000019_leftImg8bit.png gtFine/train/bremen/bremen_000265_000019_gtFine_labelTrainIds.png 56 | leftImg8bit/train/bremen/bremen_000260_000019_leftImg8bit.png gtFine/train/bremen/bremen_000260_000019_gtFine_labelTrainIds.png 57 | leftImg8bit/train/bremen/bremen_000285_000019_leftImg8bit.png gtFine/train/bremen/bremen_000285_000019_gtFine_labelTrainIds.png 58 | leftImg8bit/train/bremen/bremen_000255_000019_leftImg8bit.png gtFine/train/bremen/bremen_000255_000019_gtFine_labelTrainIds.png 59 | leftImg8bit/train/bremen/bremen_000056_000019_leftImg8bit.png gtFine/train/bremen/bremen_000056_000019_gtFine_labelTrainIds.png 60 | leftImg8bit/train/bremen/bremen_000303_000019_leftImg8bit.png gtFine/train/bremen/bremen_000303_000019_gtFine_labelTrainIds.png 61 | leftImg8bit/train/bremen/bremen_000185_000019_leftImg8bit.png gtFine/train/bremen/bremen_000185_000019_gtFine_labelTrainIds.png 62 | leftImg8bit/train/bremen/bremen_000114_000019_leftImg8bit.png gtFine/train/bremen/bremen_000114_000019_gtFine_labelTrainIds.png 63 | leftImg8bit/train/bremen/bremen_000233_000019_leftImg8bit.png gtFine/train/bremen/bremen_000233_000019_gtFine_labelTrainIds.png 64 | leftImg8bit/train/bremen/bremen_000273_000019_leftImg8bit.png gtFine/train/bremen/bremen_000273_000019_gtFine_labelTrainIds.png 65 | leftImg8bit/train/bremen/bremen_000306_000019_leftImg8bit.png gtFine/train/bremen/bremen_000306_000019_gtFine_labelTrainIds.png 66 | leftImg8bit/train/bremen/bremen_000187_000019_leftImg8bit.png gtFine/train/bremen/bremen_000187_000019_gtFine_labelTrainIds.png 67 | leftImg8bit/train/bremen/bremen_000281_000019_leftImg8bit.png gtFine/train/bremen/bremen_000281_000019_gtFine_labelTrainIds.png 68 | leftImg8bit/train/bremen/bremen_000080_000019_leftImg8bit.png gtFine/train/bremen/bremen_000080_000019_gtFine_labelTrainIds.png 69 | leftImg8bit/train/bremen/bremen_000231_000019_leftImg8bit.png gtFine/train/bremen/bremen_000231_000019_gtFine_labelTrainIds.png 70 | leftImg8bit/train/bremen/bremen_000052_000019_leftImg8bit.png gtFine/train/bremen/bremen_000052_000019_gtFine_labelTrainIds.png 71 | leftImg8bit/train/bremen/bremen_000180_000019_leftImg8bit.png gtFine/train/bremen/bremen_000180_000019_gtFine_labelTrainIds.png 72 | leftImg8bit/train/bremen/bremen_000121_000019_leftImg8bit.png gtFine/train/bremen/bremen_000121_000019_gtFine_labelTrainIds.png 73 | leftImg8bit/train/bremen/bremen_000153_000019_leftImg8bit.png gtFine/train/bremen/bremen_000153_000019_gtFine_labelTrainIds.png 74 | leftImg8bit/train/bochum/bochum_000000_022210_leftImg8bit.png gtFine/train/bochum/bochum_000000_022210_gtFine_labelTrainIds.png 75 | leftImg8bit/train/bochum/bochum_000000_000313_leftImg8bit.png gtFine/train/bochum/bochum_000000_000313_gtFine_labelTrainIds.png 76 | leftImg8bit/train/bochum/bochum_000000_027057_leftImg8bit.png gtFine/train/bochum/bochum_000000_027057_gtFine_labelTrainIds.png 77 | leftImg8bit/train/bochum/bochum_000000_021606_leftImg8bit.png gtFine/train/bochum/bochum_000000_021606_gtFine_labelTrainIds.png 78 | leftImg8bit/train/bochum/bochum_000000_028764_leftImg8bit.png gtFine/train/bochum/bochum_000000_028764_gtFine_labelTrainIds.png 79 | leftImg8bit/train/bochum/bochum_000000_002562_leftImg8bit.png gtFine/train/bochum/bochum_000000_002562_gtFine_labelTrainIds.png 80 | leftImg8bit/train/hamburg/hamburg_000000_093572_leftImg8bit.png gtFine/train/hamburg/hamburg_000000_093572_gtFine_labelTrainIds.png 81 | leftImg8bit/train/hamburg/hamburg_000000_000629_leftImg8bit.png gtFine/train/hamburg/hamburg_000000_000629_gtFine_labelTrainIds.png 82 | leftImg8bit/train/hamburg/hamburg_000000_067799_leftImg8bit.png gtFine/train/hamburg/hamburg_000000_067799_gtFine_labelTrainIds.png 83 | leftImg8bit/train/hamburg/hamburg_000000_044747_leftImg8bit.png gtFine/train/hamburg/hamburg_000000_044747_gtFine_labelTrainIds.png 84 | leftImg8bit/train/hamburg/hamburg_000000_088054_leftImg8bit.png gtFine/train/hamburg/hamburg_000000_088054_gtFine_labelTrainIds.png 85 | leftImg8bit/train/hamburg/hamburg_000000_079657_leftImg8bit.png gtFine/train/hamburg/hamburg_000000_079657_gtFine_labelTrainIds.png 86 | leftImg8bit/train/hamburg/hamburg_000000_046619_leftImg8bit.png gtFine/train/hamburg/hamburg_000000_046619_gtFine_labelTrainIds.png 87 | leftImg8bit/train/hamburg/hamburg_000000_006192_leftImg8bit.png gtFine/train/hamburg/hamburg_000000_006192_gtFine_labelTrainIds.png 88 | leftImg8bit/train/hamburg/hamburg_000000_074545_leftImg8bit.png gtFine/train/hamburg/hamburg_000000_074545_gtFine_labelTrainIds.png 89 | leftImg8bit/train/hamburg/hamburg_000000_046078_leftImg8bit.png gtFine/train/hamburg/hamburg_000000_046078_gtFine_labelTrainIds.png 90 | leftImg8bit/train/hamburg/hamburg_000000_037741_leftImg8bit.png gtFine/train/hamburg/hamburg_000000_037741_gtFine_labelTrainIds.png 91 | leftImg8bit/train/hamburg/hamburg_000000_069289_leftImg8bit.png gtFine/train/hamburg/hamburg_000000_069289_gtFine_labelTrainIds.png 92 | leftImg8bit/train/hamburg/hamburg_000000_088939_leftImg8bit.png gtFine/train/hamburg/hamburg_000000_088939_gtFine_labelTrainIds.png 93 | leftImg8bit/train/hamburg/hamburg_000000_014940_leftImg8bit.png gtFine/train/hamburg/hamburg_000000_014940_gtFine_labelTrainIds.png 94 | leftImg8bit/train/hamburg/hamburg_000000_016447_leftImg8bit.png gtFine/train/hamburg/hamburg_000000_016447_gtFine_labelTrainIds.png 95 | leftImg8bit/train/tubingen/tubingen_000104_000019_leftImg8bit.png gtFine/train/tubingen/tubingen_000104_000019_gtFine_labelTrainIds.png 96 | leftImg8bit/train/tubingen/tubingen_000046_000019_leftImg8bit.png gtFine/train/tubingen/tubingen_000046_000019_gtFine_labelTrainIds.png 97 | leftImg8bit/train/tubingen/tubingen_000130_000019_leftImg8bit.png gtFine/train/tubingen/tubingen_000130_000019_gtFine_labelTrainIds.png 98 | leftImg8bit/train/tubingen/tubingen_000079_000019_leftImg8bit.png gtFine/train/tubingen/tubingen_000079_000019_gtFine_labelTrainIds.png 99 | leftImg8bit/train/tubingen/tubingen_000063_000019_leftImg8bit.png gtFine/train/tubingen/tubingen_000063_000019_gtFine_labelTrainIds.png 100 | leftImg8bit/train/tubingen/tubingen_000087_000019_leftImg8bit.png gtFine/train/tubingen/tubingen_000087_000019_gtFine_labelTrainIds.png 101 | leftImg8bit/train/tubingen/tubingen_000061_000019_leftImg8bit.png gtFine/train/tubingen/tubingen_000061_000019_gtFine_labelTrainIds.png 102 | leftImg8bit/train/tubingen/tubingen_000074_000019_leftImg8bit.png gtFine/train/tubingen/tubingen_000074_000019_gtFine_labelTrainIds.png 103 | leftImg8bit/train/tubingen/tubingen_000017_000019_leftImg8bit.png gtFine/train/tubingen/tubingen_000017_000019_gtFine_labelTrainIds.png 104 | leftImg8bit/train/aachen/aachen_000142_000019_leftImg8bit.png gtFine/train/aachen/aachen_000142_000019_gtFine_labelTrainIds.png 105 | leftImg8bit/train/aachen/aachen_000029_000019_leftImg8bit.png gtFine/train/aachen/aachen_000029_000019_gtFine_labelTrainIds.png 106 | leftImg8bit/train/aachen/aachen_000141_000019_leftImg8bit.png gtFine/train/aachen/aachen_000141_000019_gtFine_labelTrainIds.png 107 | leftImg8bit/train/aachen/aachen_000136_000019_leftImg8bit.png gtFine/train/aachen/aachen_000136_000019_gtFine_labelTrainIds.png 108 | leftImg8bit/train/aachen/aachen_000098_000019_leftImg8bit.png gtFine/train/aachen/aachen_000098_000019_gtFine_labelTrainIds.png 109 | leftImg8bit/train/aachen/aachen_000080_000019_leftImg8bit.png gtFine/train/aachen/aachen_000080_000019_gtFine_labelTrainIds.png 110 | leftImg8bit/train/aachen/aachen_000157_000019_leftImg8bit.png gtFine/train/aachen/aachen_000157_000019_gtFine_labelTrainIds.png 111 | leftImg8bit/train/aachen/aachen_000169_000019_leftImg8bit.png gtFine/train/aachen/aachen_000169_000019_gtFine_labelTrainIds.png 112 | leftImg8bit/train/aachen/aachen_000147_000019_leftImg8bit.png gtFine/train/aachen/aachen_000147_000019_gtFine_labelTrainIds.png 113 | leftImg8bit/train/aachen/aachen_000002_000019_leftImg8bit.png gtFine/train/aachen/aachen_000002_000019_gtFine_labelTrainIds.png 114 | leftImg8bit/train/aachen/aachen_000007_000019_leftImg8bit.png gtFine/train/aachen/aachen_000007_000019_gtFine_labelTrainIds.png 115 | leftImg8bit/train/krefeld/krefeld_000000_023338_leftImg8bit.png gtFine/train/krefeld/krefeld_000000_023338_gtFine_labelTrainIds.png 116 | leftImg8bit/train/krefeld/krefeld_000000_030560_leftImg8bit.png gtFine/train/krefeld/krefeld_000000_030560_gtFine_labelTrainIds.png 117 | leftImg8bit/train/krefeld/krefeld_000000_035124_leftImg8bit.png gtFine/train/krefeld/krefeld_000000_035124_gtFine_labelTrainIds.png 118 | leftImg8bit/train/krefeld/krefeld_000000_000316_leftImg8bit.png gtFine/train/krefeld/krefeld_000000_000316_gtFine_labelTrainIds.png 119 | leftImg8bit/train/krefeld/krefeld_000000_007325_leftImg8bit.png gtFine/train/krefeld/krefeld_000000_007325_gtFine_labelTrainIds.png 120 | leftImg8bit/train/krefeld/krefeld_000000_023698_leftImg8bit.png gtFine/train/krefeld/krefeld_000000_023698_gtFine_labelTrainIds.png 121 | leftImg8bit/train/hanover/hanover_000000_044085_leftImg8bit.png gtFine/train/hanover/hanover_000000_044085_gtFine_labelTrainIds.png 122 | leftImg8bit/train/hanover/hanover_000000_046200_leftImg8bit.png gtFine/train/hanover/hanover_000000_046200_gtFine_labelTrainIds.png 123 | leftImg8bit/train/hanover/hanover_000000_000712_leftImg8bit.png gtFine/train/hanover/hanover_000000_000712_gtFine_labelTrainIds.png 124 | leftImg8bit/train/hanover/hanover_000000_052649_leftImg8bit.png gtFine/train/hanover/hanover_000000_052649_gtFine_labelTrainIds.png 125 | leftImg8bit/train/hanover/hanover_000000_035768_leftImg8bit.png gtFine/train/hanover/hanover_000000_035768_gtFine_labelTrainIds.png 126 | leftImg8bit/train/hanover/hanover_000000_043822_leftImg8bit.png gtFine/train/hanover/hanover_000000_043822_gtFine_labelTrainIds.png 127 | leftImg8bit/train/hanover/hanover_000000_049005_leftImg8bit.png gtFine/train/hanover/hanover_000000_049005_gtFine_labelTrainIds.png 128 | leftImg8bit/train/hanover/hanover_000000_014919_leftImg8bit.png gtFine/train/hanover/hanover_000000_014919_gtFine_labelTrainIds.png 129 | leftImg8bit/train/hanover/hanover_000000_023239_leftImg8bit.png gtFine/train/hanover/hanover_000000_023239_gtFine_labelTrainIds.png 130 | leftImg8bit/train/hanover/hanover_000000_007780_leftImg8bit.png gtFine/train/hanover/hanover_000000_007780_gtFine_labelTrainIds.png 131 | leftImg8bit/train/hanover/hanover_000000_055937_leftImg8bit.png gtFine/train/hanover/hanover_000000_055937_gtFine_labelTrainIds.png 132 | leftImg8bit/train/hanover/hanover_000000_002357_leftImg8bit.png gtFine/train/hanover/hanover_000000_002357_gtFine_labelTrainIds.png 133 | leftImg8bit/train/weimar/weimar_000077_000019_leftImg8bit.png gtFine/train/weimar/weimar_000077_000019_gtFine_labelTrainIds.png 134 | leftImg8bit/train/weimar/weimar_000091_000019_leftImg8bit.png gtFine/train/weimar/weimar_000091_000019_gtFine_labelTrainIds.png 135 | leftImg8bit/train/weimar/weimar_000034_000019_leftImg8bit.png gtFine/train/weimar/weimar_000034_000019_gtFine_labelTrainIds.png 136 | leftImg8bit/train/weimar/weimar_000117_000019_leftImg8bit.png gtFine/train/weimar/weimar_000117_000019_gtFine_labelTrainIds.png 137 | leftImg8bit/train/weimar/weimar_000019_000019_leftImg8bit.png gtFine/train/weimar/weimar_000019_000019_gtFine_labelTrainIds.png 138 | leftImg8bit/train/weimar/weimar_000125_000019_leftImg8bit.png gtFine/train/weimar/weimar_000125_000019_gtFine_labelTrainIds.png 139 | leftImg8bit/train/weimar/weimar_000067_000019_leftImg8bit.png gtFine/train/weimar/weimar_000067_000019_gtFine_labelTrainIds.png 140 | leftImg8bit/train/weimar/weimar_000012_000019_leftImg8bit.png gtFine/train/weimar/weimar_000012_000019_gtFine_labelTrainIds.png 141 | leftImg8bit/train/weimar/weimar_000103_000019_leftImg8bit.png gtFine/train/weimar/weimar_000103_000019_gtFine_labelTrainIds.png 142 | leftImg8bit/train/strasbourg/strasbourg_000001_054275_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000001_054275_gtFine_labelTrainIds.png 143 | leftImg8bit/train/strasbourg/strasbourg_000001_049399_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000001_049399_gtFine_labelTrainIds.png 144 | leftImg8bit/train/strasbourg/strasbourg_000001_002949_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000001_002949_gtFine_labelTrainIds.png 145 | leftImg8bit/train/strasbourg/strasbourg_000001_017540_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000001_017540_gtFine_labelTrainIds.png 146 | leftImg8bit/train/strasbourg/strasbourg_000000_021651_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000000_021651_gtFine_labelTrainIds.png 147 | leftImg8bit/train/strasbourg/strasbourg_000000_017159_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000000_017159_gtFine_labelTrainIds.png 148 | leftImg8bit/train/strasbourg/strasbourg_000001_031427_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000001_031427_gtFine_labelTrainIds.png 149 | leftImg8bit/train/strasbourg/strasbourg_000001_045481_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000001_045481_gtFine_labelTrainIds.png 150 | leftImg8bit/train/strasbourg/strasbourg_000001_002354_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000001_002354_gtFine_labelTrainIds.png 151 | leftImg8bit/train/strasbourg/strasbourg_000000_015131_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000000_015131_gtFine_labelTrainIds.png 152 | leftImg8bit/train/strasbourg/strasbourg_000001_036697_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000001_036697_gtFine_labelTrainIds.png 153 | leftImg8bit/train/strasbourg/strasbourg_000001_024379_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000001_024379_gtFine_labelTrainIds.png 154 | leftImg8bit/train/strasbourg/strasbourg_000000_019050_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000000_019050_gtFine_labelTrainIds.png 155 | leftImg8bit/train/strasbourg/strasbourg_000001_002519_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000001_002519_gtFine_labelTrainIds.png 156 | leftImg8bit/train/strasbourg/strasbourg_000000_011225_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000000_011225_gtFine_labelTrainIds.png 157 | leftImg8bit/train/strasbourg/strasbourg_000000_017593_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000000_017593_gtFine_labelTrainIds.png 158 | leftImg8bit/train/strasbourg/strasbourg_000001_016253_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000001_016253_gtFine_labelTrainIds.png 159 | leftImg8bit/train/strasbourg/strasbourg_000000_018153_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000000_018153_gtFine_labelTrainIds.png 160 | leftImg8bit/train/strasbourg/strasbourg_000000_008784_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000000_008784_gtFine_labelTrainIds.png 161 | leftImg8bit/train/strasbourg/strasbourg_000001_000710_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000001_000710_gtFine_labelTrainIds.png 162 | leftImg8bit/train/strasbourg/strasbourg_000000_025351_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000000_025351_gtFine_labelTrainIds.png 163 | leftImg8bit/train/strasbourg/strasbourg_000000_023694_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000000_023694_gtFine_labelTrainIds.png 164 | leftImg8bit/train/strasbourg/strasbourg_000001_000778_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000001_000778_gtFine_labelTrainIds.png 165 | leftImg8bit/train/cologne/cologne_000062_000019_leftImg8bit.png gtFine/train/cologne/cologne_000062_000019_gtFine_labelTrainIds.png 166 | leftImg8bit/train/cologne/cologne_000109_000019_leftImg8bit.png gtFine/train/cologne/cologne_000109_000019_gtFine_labelTrainIds.png 167 | leftImg8bit/train/cologne/cologne_000071_000019_leftImg8bit.png gtFine/train/cologne/cologne_000071_000019_gtFine_labelTrainIds.png 168 | leftImg8bit/train/cologne/cologne_000019_000019_leftImg8bit.png gtFine/train/cologne/cologne_000019_000019_gtFine_labelTrainIds.png 169 | leftImg8bit/train/cologne/cologne_000050_000019_leftImg8bit.png gtFine/train/cologne/cologne_000050_000019_gtFine_labelTrainIds.png 170 | leftImg8bit/train/cologne/cologne_000057_000019_leftImg8bit.png gtFine/train/cologne/cologne_000057_000019_gtFine_labelTrainIds.png 171 | leftImg8bit/train/cologne/cologne_000117_000019_leftImg8bit.png gtFine/train/cologne/cologne_000117_000019_gtFine_labelTrainIds.png 172 | leftImg8bit/train/cologne/cologne_000108_000019_leftImg8bit.png gtFine/train/cologne/cologne_000108_000019_gtFine_labelTrainIds.png 173 | leftImg8bit/train/cologne/cologne_000070_000019_leftImg8bit.png gtFine/train/cologne/cologne_000070_000019_gtFine_labelTrainIds.png 174 | leftImg8bit/train/cologne/cologne_000086_000019_leftImg8bit.png gtFine/train/cologne/cologne_000086_000019_gtFine_labelTrainIds.png 175 | leftImg8bit/train/erfurt/erfurt_000017_000019_leftImg8bit.png gtFine/train/erfurt/erfurt_000017_000019_gtFine_labelTrainIds.png 176 | leftImg8bit/train/erfurt/erfurt_000102_000019_leftImg8bit.png gtFine/train/erfurt/erfurt_000102_000019_gtFine_labelTrainIds.png 177 | leftImg8bit/train/erfurt/erfurt_000097_000019_leftImg8bit.png gtFine/train/erfurt/erfurt_000097_000019_gtFine_labelTrainIds.png 178 | leftImg8bit/train/erfurt/erfurt_000005_000019_leftImg8bit.png gtFine/train/erfurt/erfurt_000005_000019_gtFine_labelTrainIds.png 179 | leftImg8bit/train/erfurt/erfurt_000049_000019_leftImg8bit.png gtFine/train/erfurt/erfurt_000049_000019_gtFine_labelTrainIds.png 180 | leftImg8bit/train/erfurt/erfurt_000096_000019_leftImg8bit.png gtFine/train/erfurt/erfurt_000096_000019_gtFine_labelTrainIds.png 181 | leftImg8bit/train/erfurt/erfurt_000093_000019_leftImg8bit.png gtFine/train/erfurt/erfurt_000093_000019_gtFine_labelTrainIds.png 182 | leftImg8bit/train/monchengladbach/monchengladbach_000000_002478_leftImg8bit.png gtFine/train/monchengladbach/monchengladbach_000000_002478_gtFine_labelTrainIds.png 183 | leftImg8bit/train/monchengladbach/monchengladbach_000000_007098_leftImg8bit.png gtFine/train/monchengladbach/monchengladbach_000000_007098_gtFine_labelTrainIds.png 184 | leftImg8bit/train/monchengladbach/monchengladbach_000001_000054_leftImg8bit.png gtFine/train/monchengladbach/monchengladbach_000001_000054_gtFine_labelTrainIds.png 185 | leftImg8bit/train/monchengladbach/monchengladbach_000000_013352_leftImg8bit.png gtFine/train/monchengladbach/monchengladbach_000000_013352_gtFine_labelTrainIds.png 186 | leftImg8bit/train/monchengladbach/monchengladbach_000000_018720_leftImg8bit.png gtFine/train/monchengladbach/monchengladbach_000000_018720_gtFine_labelTrainIds.png 187 | -------------------------------------------------------------------------------- /partitions/cityscapes/1_30/labeled.txt: -------------------------------------------------------------------------------- 1 | leftImg8bit/train/weimar/weimar_000085_000019_leftImg8bit.png gtFine/train/weimar/weimar_000085_000019_gtFine_labelTrainIds.png 2 | leftImg8bit/train/bochum/bochum_000000_021070_leftImg8bit.png gtFine/train/bochum/bochum_000000_021070_gtFine_labelTrainIds.png 3 | leftImg8bit/train/bremen/bremen_000128_000019_leftImg8bit.png gtFine/train/bremen/bremen_000128_000019_gtFine_labelTrainIds.png 4 | leftImg8bit/train/stuttgart/stuttgart_000119_000019_leftImg8bit.png gtFine/train/stuttgart/stuttgart_000119_000019_gtFine_labelTrainIds.png 5 | leftImg8bit/train/hamburg/hamburg_000000_088783_leftImg8bit.png gtFine/train/hamburg/hamburg_000000_088783_gtFine_labelTrainIds.png 6 | leftImg8bit/train/bremen/bremen_000307_000019_leftImg8bit.png gtFine/train/bremen/bremen_000307_000019_gtFine_labelTrainIds.png 7 | leftImg8bit/train/strasbourg/strasbourg_000001_014258_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000001_014258_gtFine_labelTrainIds.png 8 | leftImg8bit/train/aachen/aachen_000093_000019_leftImg8bit.png gtFine/train/aachen/aachen_000093_000019_gtFine_labelTrainIds.png 9 | leftImg8bit/train/zurich/zurich_000078_000019_leftImg8bit.png gtFine/train/zurich/zurich_000078_000019_gtFine_labelTrainIds.png 10 | leftImg8bit/train/ulm/ulm_000034_000019_leftImg8bit.png gtFine/train/ulm/ulm_000034_000019_gtFine_labelTrainIds.png 11 | leftImg8bit/train/monchengladbach/monchengladbach_000000_017950_leftImg8bit.png gtFine/train/monchengladbach/monchengladbach_000000_017950_gtFine_labelTrainIds.png 12 | leftImg8bit/train/tubingen/tubingen_000111_000019_leftImg8bit.png gtFine/train/tubingen/tubingen_000111_000019_gtFine_labelTrainIds.png 13 | leftImg8bit/train/weimar/weimar_000091_000019_leftImg8bit.png gtFine/train/weimar/weimar_000091_000019_gtFine_labelTrainIds.png 14 | leftImg8bit/train/strasbourg/strasbourg_000000_034652_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000000_034652_gtFine_labelTrainIds.png 15 | leftImg8bit/train/weimar/weimar_000071_000019_leftImg8bit.png gtFine/train/weimar/weimar_000071_000019_gtFine_labelTrainIds.png 16 | leftImg8bit/train/bremen/bremen_000181_000019_leftImg8bit.png gtFine/train/bremen/bremen_000181_000019_gtFine_labelTrainIds.png 17 | leftImg8bit/train/aachen/aachen_000010_000019_leftImg8bit.png gtFine/train/aachen/aachen_000010_000019_gtFine_labelTrainIds.png 18 | leftImg8bit/train/krefeld/krefeld_000000_003096_leftImg8bit.png gtFine/train/krefeld/krefeld_000000_003096_gtFine_labelTrainIds.png 19 | leftImg8bit/train/monchengladbach/monchengladbach_000000_020303_leftImg8bit.png gtFine/train/monchengladbach/monchengladbach_000000_020303_gtFine_labelTrainIds.png 20 | leftImg8bit/train/strasbourg/strasbourg_000001_026355_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000001_026355_gtFine_labelTrainIds.png 21 | leftImg8bit/train/aachen/aachen_000005_000019_leftImg8bit.png gtFine/train/aachen/aachen_000005_000019_gtFine_labelTrainIds.png 22 | leftImg8bit/train/hamburg/hamburg_000000_090742_leftImg8bit.png gtFine/train/hamburg/hamburg_000000_090742_gtFine_labelTrainIds.png 23 | leftImg8bit/train/stuttgart/stuttgart_000028_000019_leftImg8bit.png gtFine/train/stuttgart/stuttgart_000028_000019_gtFine_labelTrainIds.png 24 | leftImg8bit/train/strasbourg/strasbourg_000001_003676_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000001_003676_gtFine_labelTrainIds.png 25 | leftImg8bit/train/dusseldorf/dusseldorf_000214_000019_leftImg8bit.png gtFine/train/dusseldorf/dusseldorf_000214_000019_gtFine_labelTrainIds.png 26 | leftImg8bit/train/dusseldorf/dusseldorf_000212_000019_leftImg8bit.png gtFine/train/dusseldorf/dusseldorf_000212_000019_gtFine_labelTrainIds.png 27 | leftImg8bit/train/ulm/ulm_000035_000019_leftImg8bit.png gtFine/train/ulm/ulm_000035_000019_gtFine_labelTrainIds.png 28 | leftImg8bit/train/tubingen/tubingen_000036_000019_leftImg8bit.png gtFine/train/tubingen/tubingen_000036_000019_gtFine_labelTrainIds.png 29 | leftImg8bit/train/strasbourg/strasbourg_000000_014101_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000000_014101_gtFine_labelTrainIds.png 30 | leftImg8bit/train/erfurt/erfurt_000108_000019_leftImg8bit.png gtFine/train/erfurt/erfurt_000108_000019_gtFine_labelTrainIds.png 31 | leftImg8bit/train/cologne/cologne_000029_000019_leftImg8bit.png gtFine/train/cologne/cologne_000029_000019_gtFine_labelTrainIds.png 32 | leftImg8bit/train/ulm/ulm_000007_000019_leftImg8bit.png gtFine/train/ulm/ulm_000007_000019_gtFine_labelTrainIds.png 33 | leftImg8bit/train/erfurt/erfurt_000095_000019_leftImg8bit.png gtFine/train/erfurt/erfurt_000095_000019_gtFine_labelTrainIds.png 34 | leftImg8bit/train/tubingen/tubingen_000038_000019_leftImg8bit.png gtFine/train/tubingen/tubingen_000038_000019_gtFine_labelTrainIds.png 35 | leftImg8bit/train/strasbourg/strasbourg_000000_021651_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000000_021651_gtFine_labelTrainIds.png 36 | leftImg8bit/train/aachen/aachen_000042_000019_leftImg8bit.png gtFine/train/aachen/aachen_000042_000019_gtFine_labelTrainIds.png 37 | leftImg8bit/train/stuttgart/stuttgart_000125_000019_leftImg8bit.png gtFine/train/stuttgart/stuttgart_000125_000019_gtFine_labelTrainIds.png 38 | leftImg8bit/train/hamburg/hamburg_000000_098862_leftImg8bit.png gtFine/train/hamburg/hamburg_000000_098862_gtFine_labelTrainIds.png 39 | leftImg8bit/train/dusseldorf/dusseldorf_000002_000019_leftImg8bit.png gtFine/train/dusseldorf/dusseldorf_000002_000019_gtFine_labelTrainIds.png 40 | leftImg8bit/train/krefeld/krefeld_000000_019697_leftImg8bit.png gtFine/train/krefeld/krefeld_000000_019697_gtFine_labelTrainIds.png 41 | leftImg8bit/train/dusseldorf/dusseldorf_000081_000019_leftImg8bit.png gtFine/train/dusseldorf/dusseldorf_000081_000019_gtFine_labelTrainIds.png 42 | leftImg8bit/train/erfurt/erfurt_000085_000019_leftImg8bit.png gtFine/train/erfurt/erfurt_000085_000019_gtFine_labelTrainIds.png 43 | leftImg8bit/train/jena/jena_000085_000019_leftImg8bit.png gtFine/train/jena/jena_000085_000019_gtFine_labelTrainIds.png 44 | leftImg8bit/train/hamburg/hamburg_000000_042885_leftImg8bit.png gtFine/train/hamburg/hamburg_000000_042885_gtFine_labelTrainIds.png 45 | leftImg8bit/train/bremen/bremen_000080_000019_leftImg8bit.png gtFine/train/bremen/bremen_000080_000019_gtFine_labelTrainIds.png 46 | leftImg8bit/train/dusseldorf/dusseldorf_000105_000019_leftImg8bit.png gtFine/train/dusseldorf/dusseldorf_000105_000019_gtFine_labelTrainIds.png 47 | leftImg8bit/train/strasbourg/strasbourg_000001_003991_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000001_003991_gtFine_labelTrainIds.png 48 | leftImg8bit/train/weimar/weimar_000025_000019_leftImg8bit.png gtFine/train/weimar/weimar_000025_000019_gtFine_labelTrainIds.png 49 | leftImg8bit/train/strasbourg/strasbourg_000000_034040_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000000_034040_gtFine_labelTrainIds.png 50 | leftImg8bit/train/hanover/hanover_000000_034141_leftImg8bit.png gtFine/train/hanover/hanover_000000_034141_gtFine_labelTrainIds.png 51 | leftImg8bit/train/strasbourg/strasbourg_000001_022836_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000001_022836_gtFine_labelTrainIds.png 52 | leftImg8bit/train/krefeld/krefeld_000000_024604_leftImg8bit.png gtFine/train/krefeld/krefeld_000000_024604_gtFine_labelTrainIds.png 53 | leftImg8bit/train/cologne/cologne_000055_000019_leftImg8bit.png gtFine/train/cologne/cologne_000055_000019_gtFine_labelTrainIds.png 54 | leftImg8bit/train/stuttgart/stuttgart_000118_000019_leftImg8bit.png gtFine/train/stuttgart/stuttgart_000118_000019_gtFine_labelTrainIds.png 55 | leftImg8bit/train/dusseldorf/dusseldorf_000101_000019_leftImg8bit.png gtFine/train/dusseldorf/dusseldorf_000101_000019_gtFine_labelTrainIds.png 56 | leftImg8bit/train/ulm/ulm_000074_000019_leftImg8bit.png gtFine/train/ulm/ulm_000074_000019_gtFine_labelTrainIds.png 57 | leftImg8bit/train/jena/jena_000000_000019_leftImg8bit.png gtFine/train/jena/jena_000000_000019_gtFine_labelTrainIds.png 58 | leftImg8bit/train/bremen/bremen_000048_000019_leftImg8bit.png gtFine/train/bremen/bremen_000048_000019_gtFine_labelTrainIds.png 59 | leftImg8bit/train/cologne/cologne_000117_000019_leftImg8bit.png gtFine/train/cologne/cologne_000117_000019_gtFine_labelTrainIds.png 60 | leftImg8bit/train/dusseldorf/dusseldorf_000171_000019_leftImg8bit.png gtFine/train/dusseldorf/dusseldorf_000171_000019_gtFine_labelTrainIds.png 61 | leftImg8bit/train/dusseldorf/dusseldorf_000197_000019_leftImg8bit.png gtFine/train/dusseldorf/dusseldorf_000197_000019_gtFine_labelTrainIds.png 62 | leftImg8bit/train/tubingen/tubingen_000142_000019_leftImg8bit.png gtFine/train/tubingen/tubingen_000142_000019_gtFine_labelTrainIds.png 63 | leftImg8bit/train/monchengladbach/monchengladbach_000000_009690_leftImg8bit.png gtFine/train/monchengladbach/monchengladbach_000000_009690_gtFine_labelTrainIds.png 64 | leftImg8bit/train/cologne/cologne_000014_000019_leftImg8bit.png gtFine/train/cologne/cologne_000014_000019_gtFine_labelTrainIds.png 65 | leftImg8bit/train/aachen/aachen_000036_000019_leftImg8bit.png gtFine/train/aachen/aachen_000036_000019_gtFine_labelTrainIds.png 66 | leftImg8bit/train/strasbourg/strasbourg_000000_015602_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000000_015602_gtFine_labelTrainIds.png 67 | leftImg8bit/train/aachen/aachen_000143_000019_leftImg8bit.png gtFine/train/aachen/aachen_000143_000019_gtFine_labelTrainIds.png 68 | leftImg8bit/train/hamburg/hamburg_000000_062039_leftImg8bit.png gtFine/train/hamburg/hamburg_000000_062039_gtFine_labelTrainIds.png 69 | leftImg8bit/train/stuttgart/stuttgart_000145_000019_leftImg8bit.png gtFine/train/stuttgart/stuttgart_000145_000019_gtFine_labelTrainIds.png 70 | leftImg8bit/train/bremen/bremen_000297_000019_leftImg8bit.png gtFine/train/bremen/bremen_000297_000019_gtFine_labelTrainIds.png 71 | leftImg8bit/train/zurich/zurich_000027_000019_leftImg8bit.png gtFine/train/zurich/zurich_000027_000019_gtFine_labelTrainIds.png 72 | leftImg8bit/train/aachen/aachen_000024_000019_leftImg8bit.png gtFine/train/aachen/aachen_000024_000019_gtFine_labelTrainIds.png 73 | leftImg8bit/train/cologne/cologne_000011_000019_leftImg8bit.png gtFine/train/cologne/cologne_000011_000019_gtFine_labelTrainIds.png 74 | leftImg8bit/train/hanover/hanover_000000_029769_leftImg8bit.png gtFine/train/hanover/hanover_000000_029769_gtFine_labelTrainIds.png 75 | leftImg8bit/train/ulm/ulm_000021_000019_leftImg8bit.png gtFine/train/ulm/ulm_000021_000019_gtFine_labelTrainIds.png 76 | leftImg8bit/train/monchengladbach/monchengladbach_000000_006169_leftImg8bit.png gtFine/train/monchengladbach/monchengladbach_000000_006169_gtFine_labelTrainIds.png 77 | leftImg8bit/train/darmstadt/darmstadt_000035_000019_leftImg8bit.png gtFine/train/darmstadt/darmstadt_000035_000019_gtFine_labelTrainIds.png 78 | leftImg8bit/train/krefeld/krefeld_000000_022162_leftImg8bit.png gtFine/train/krefeld/krefeld_000000_022162_gtFine_labelTrainIds.png 79 | leftImg8bit/train/bremen/bremen_000263_000019_leftImg8bit.png gtFine/train/bremen/bremen_000263_000019_gtFine_labelTrainIds.png 80 | leftImg8bit/train/krefeld/krefeld_000000_015868_leftImg8bit.png gtFine/train/krefeld/krefeld_000000_015868_gtFine_labelTrainIds.png 81 | leftImg8bit/train/darmstadt/darmstadt_000023_000019_leftImg8bit.png gtFine/train/darmstadt/darmstadt_000023_000019_gtFine_labelTrainIds.png 82 | leftImg8bit/train/aachen/aachen_000049_000019_leftImg8bit.png gtFine/train/aachen/aachen_000049_000019_gtFine_labelTrainIds.png 83 | leftImg8bit/train/hamburg/hamburg_000000_105464_leftImg8bit.png gtFine/train/hamburg/hamburg_000000_105464_gtFine_labelTrainIds.png 84 | leftImg8bit/train/strasbourg/strasbourg_000000_035571_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000000_035571_gtFine_labelTrainIds.png 85 | leftImg8bit/train/bochum/bochum_000000_027951_leftImg8bit.png gtFine/train/bochum/bochum_000000_027951_gtFine_labelTrainIds.png 86 | leftImg8bit/train/bremen/bremen_000231_000019_leftImg8bit.png gtFine/train/bremen/bremen_000231_000019_gtFine_labelTrainIds.png 87 | leftImg8bit/train/strasbourg/strasbourg_000001_042309_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000001_042309_gtFine_labelTrainIds.png 88 | leftImg8bit/train/dusseldorf/dusseldorf_000155_000019_leftImg8bit.png gtFine/train/dusseldorf/dusseldorf_000155_000019_gtFine_labelTrainIds.png 89 | leftImg8bit/train/dusseldorf/dusseldorf_000185_000019_leftImg8bit.png gtFine/train/dusseldorf/dusseldorf_000185_000019_gtFine_labelTrainIds.png 90 | leftImg8bit/train/aachen/aachen_000164_000019_leftImg8bit.png gtFine/train/aachen/aachen_000164_000019_gtFine_labelTrainIds.png 91 | leftImg8bit/train/hanover/hanover_000000_043822_leftImg8bit.png gtFine/train/hanover/hanover_000000_043822_gtFine_labelTrainIds.png 92 | leftImg8bit/train/hanover/hanover_000000_014713_leftImg8bit.png gtFine/train/hanover/hanover_000000_014713_gtFine_labelTrainIds.png 93 | leftImg8bit/train/dusseldorf/dusseldorf_000110_000019_leftImg8bit.png gtFine/train/dusseldorf/dusseldorf_000110_000019_gtFine_labelTrainIds.png 94 | leftImg8bit/train/stuttgart/stuttgart_000034_000019_leftImg8bit.png gtFine/train/stuttgart/stuttgart_000034_000019_gtFine_labelTrainIds.png 95 | leftImg8bit/train/strasbourg/strasbourg_000001_052297_leftImg8bit.png gtFine/train/strasbourg/strasbourg_000001_052297_gtFine_labelTrainIds.png 96 | leftImg8bit/train/hamburg/hamburg_000000_065983_leftImg8bit.png gtFine/train/hamburg/hamburg_000000_065983_gtFine_labelTrainIds.png 97 | leftImg8bit/train/dusseldorf/dusseldorf_000133_000019_leftImg8bit.png gtFine/train/dusseldorf/dusseldorf_000133_000019_gtFine_labelTrainIds.png 98 | leftImg8bit/train/ulm/ulm_000044_000019_leftImg8bit.png gtFine/train/ulm/ulm_000044_000019_gtFine_labelTrainIds.png 99 | leftImg8bit/train/jena/jena_000090_000019_leftImg8bit.png gtFine/train/jena/jena_000090_000019_gtFine_labelTrainIds.png 100 | leftImg8bit/train/bremen/bremen_000177_000019_leftImg8bit.png gtFine/train/bremen/bremen_000177_000019_gtFine_labelTrainIds.png -------------------------------------------------------------------------------- /partitions/coco/1_256/labeled.txt: -------------------------------------------------------------------------------- 1 | train2017/000000539326.jpg masks/000000539326.png 2 | train2017/000000436349.jpg masks/000000436349.png 3 | train2017/000000153931.jpg masks/000000153931.png 4 | train2017/000000244816.jpg masks/000000244816.png 5 | train2017/000000382263.jpg masks/000000382263.png 6 | train2017/000000326531.jpg masks/000000326531.png 7 | train2017/000000546702.jpg masks/000000546702.png 8 | train2017/000000023501.jpg masks/000000023501.png 9 | train2017/000000058731.jpg masks/000000058731.png 10 | train2017/000000071215.jpg masks/000000071215.png 11 | train2017/000000432762.jpg masks/000000432762.png 12 | train2017/000000475711.jpg masks/000000475711.png 13 | train2017/000000462401.jpg masks/000000462401.png 14 | train2017/000000257632.jpg masks/000000257632.png 15 | train2017/000000445433.jpg masks/000000445433.png 16 | train2017/000000218459.jpg masks/000000218459.png 17 | train2017/000000383893.jpg masks/000000383893.png 18 | train2017/000000151733.jpg masks/000000151733.png 19 | train2017/000000535766.jpg masks/000000535766.png 20 | train2017/000000487018.jpg masks/000000487018.png 21 | train2017/000000044432.jpg masks/000000044432.png 22 | train2017/000000428686.jpg masks/000000428686.png 23 | train2017/000000157036.jpg masks/000000157036.png 24 | train2017/000000352980.jpg masks/000000352980.png 25 | train2017/000000105936.jpg masks/000000105936.png 26 | train2017/000000491453.jpg masks/000000491453.png 27 | train2017/000000302467.jpg masks/000000302467.png 28 | train2017/000000133532.jpg masks/000000133532.png 29 | train2017/000000262508.jpg masks/000000262508.png 30 | train2017/000000125160.jpg masks/000000125160.png 31 | train2017/000000461340.jpg masks/000000461340.png 32 | train2017/000000472472.jpg masks/000000472472.png 33 | train2017/000000223751.jpg masks/000000223751.png 34 | train2017/000000431241.jpg masks/000000431241.png 35 | train2017/000000268400.jpg masks/000000268400.png 36 | train2017/000000376843.jpg masks/000000376843.png 37 | train2017/000000338427.jpg masks/000000338427.png 38 | train2017/000000538596.jpg masks/000000538596.png 39 | train2017/000000132993.jpg masks/000000132993.png 40 | train2017/000000037401.jpg masks/000000037401.png 41 | train2017/000000310808.jpg masks/000000310808.png 42 | train2017/000000298799.jpg masks/000000298799.png 43 | train2017/000000465625.jpg masks/000000465625.png 44 | train2017/000000178637.jpg masks/000000178637.png 45 | train2017/000000298008.jpg masks/000000298008.png 46 | train2017/000000295480.jpg masks/000000295480.png 47 | train2017/000000002402.jpg masks/000000002402.png 48 | train2017/000000103642.jpg masks/000000103642.png 49 | train2017/000000049445.jpg masks/000000049445.png 50 | train2017/000000379211.jpg masks/000000379211.png 51 | train2017/000000210580.jpg masks/000000210580.png 52 | train2017/000000177011.jpg masks/000000177011.png 53 | train2017/000000156503.jpg masks/000000156503.png 54 | train2017/000000149250.jpg masks/000000149250.png 55 | train2017/000000130538.jpg masks/000000130538.png 56 | train2017/000000182403.jpg masks/000000182403.png 57 | train2017/000000310416.jpg masks/000000310416.png 58 | train2017/000000292009.jpg masks/000000292009.png 59 | train2017/000000093793.jpg masks/000000093793.png 60 | train2017/000000265646.jpg masks/000000265646.png 61 | train2017/000000385194.jpg masks/000000385194.png 62 | train2017/000000575355.jpg masks/000000575355.png 63 | train2017/000000322478.jpg masks/000000322478.png 64 | train2017/000000451219.jpg masks/000000451219.png 65 | train2017/000000114414.jpg masks/000000114414.png 66 | train2017/000000068381.jpg masks/000000068381.png 67 | train2017/000000570115.jpg masks/000000570115.png 68 | train2017/000000287578.jpg masks/000000287578.png 69 | train2017/000000366795.jpg masks/000000366795.png 70 | train2017/000000575391.jpg masks/000000575391.png 71 | train2017/000000292688.jpg masks/000000292688.png 72 | train2017/000000265051.jpg masks/000000265051.png 73 | train2017/000000029085.jpg masks/000000029085.png 74 | train2017/000000541478.jpg masks/000000541478.png 75 | train2017/000000056509.jpg masks/000000056509.png 76 | train2017/000000472749.jpg masks/000000472749.png 77 | train2017/000000281564.jpg masks/000000281564.png 78 | train2017/000000052250.jpg masks/000000052250.png 79 | train2017/000000265315.jpg masks/000000265315.png 80 | train2017/000000055567.jpg masks/000000055567.png 81 | train2017/000000433667.jpg masks/000000433667.png 82 | train2017/000000506311.jpg masks/000000506311.png 83 | train2017/000000041840.jpg masks/000000041840.png 84 | train2017/000000360540.jpg masks/000000360540.png 85 | train2017/000000219904.jpg masks/000000219904.png 86 | train2017/000000447087.jpg masks/000000447087.png 87 | train2017/000000263779.jpg masks/000000263779.png 88 | train2017/000000218405.jpg masks/000000218405.png 89 | train2017/000000267055.jpg masks/000000267055.png 90 | train2017/000000080406.jpg masks/000000080406.png 91 | train2017/000000323374.jpg masks/000000323374.png 92 | train2017/000000108589.jpg masks/000000108589.png 93 | train2017/000000297204.jpg masks/000000297204.png 94 | train2017/000000217323.jpg masks/000000217323.png 95 | train2017/000000509588.jpg masks/000000509588.png 96 | train2017/000000477491.jpg masks/000000477491.png 97 | train2017/000000156963.jpg masks/000000156963.png 98 | train2017/000000138789.jpg masks/000000138789.png 99 | train2017/000000532625.jpg masks/000000532625.png 100 | train2017/000000365164.jpg masks/000000365164.png 101 | train2017/000000139758.jpg masks/000000139758.png 102 | train2017/000000089027.jpg masks/000000089027.png 103 | train2017/000000081966.jpg masks/000000081966.png 104 | train2017/000000482472.jpg masks/000000482472.png 105 | train2017/000000291477.jpg masks/000000291477.png 106 | train2017/000000222305.jpg masks/000000222305.png 107 | train2017/000000188606.jpg masks/000000188606.png 108 | train2017/000000278260.jpg masks/000000278260.png 109 | train2017/000000133990.jpg masks/000000133990.png 110 | train2017/000000500646.jpg masks/000000500646.png 111 | train2017/000000391170.jpg masks/000000391170.png 112 | train2017/000000229388.jpg masks/000000229388.png 113 | train2017/000000008066.jpg masks/000000008066.png 114 | train2017/000000232723.jpg masks/000000232723.png 115 | train2017/000000038858.jpg masks/000000038858.png 116 | train2017/000000431597.jpg masks/000000431597.png 117 | train2017/000000528764.jpg masks/000000528764.png 118 | train2017/000000308905.jpg masks/000000308905.png 119 | train2017/000000008055.jpg masks/000000008055.png 120 | train2017/000000152436.jpg masks/000000152436.png 121 | train2017/000000102862.jpg masks/000000102862.png 122 | train2017/000000184211.jpg masks/000000184211.png 123 | train2017/000000392683.jpg masks/000000392683.png 124 | train2017/000000362079.jpg masks/000000362079.png 125 | train2017/000000495756.jpg masks/000000495756.png 126 | train2017/000000435109.jpg masks/000000435109.png 127 | train2017/000000376393.jpg masks/000000376393.png 128 | train2017/000000378055.jpg masks/000000378055.png 129 | train2017/000000398289.jpg masks/000000398289.png 130 | train2017/000000490437.jpg masks/000000490437.png 131 | train2017/000000338224.jpg masks/000000338224.png 132 | train2017/000000413044.jpg masks/000000413044.png 133 | train2017/000000537349.jpg masks/000000537349.png 134 | train2017/000000501059.jpg masks/000000501059.png 135 | train2017/000000469467.jpg masks/000000469467.png 136 | train2017/000000187156.jpg masks/000000187156.png 137 | train2017/000000188787.jpg masks/000000188787.png 138 | train2017/000000336129.jpg masks/000000336129.png 139 | train2017/000000020334.jpg masks/000000020334.png 140 | train2017/000000349934.jpg masks/000000349934.png 141 | train2017/000000416625.jpg masks/000000416625.png 142 | train2017/000000189391.jpg masks/000000189391.png 143 | train2017/000000001622.jpg masks/000000001622.png 144 | train2017/000000367804.jpg masks/000000367804.png 145 | train2017/000000116503.jpg masks/000000116503.png 146 | train2017/000000090516.jpg masks/000000090516.png 147 | train2017/000000426849.jpg masks/000000426849.png 148 | train2017/000000528516.jpg masks/000000528516.png 149 | train2017/000000385339.jpg masks/000000385339.png 150 | train2017/000000052543.jpg masks/000000052543.png 151 | train2017/000000411695.jpg masks/000000411695.png 152 | train2017/000000547742.jpg masks/000000547742.png 153 | train2017/000000407509.jpg masks/000000407509.png 154 | train2017/000000313733.jpg masks/000000313733.png 155 | train2017/000000298372.jpg masks/000000298372.png 156 | train2017/000000239196.jpg masks/000000239196.png 157 | train2017/000000371950.jpg masks/000000371950.png 158 | train2017/000000349559.jpg masks/000000349559.png 159 | train2017/000000564682.jpg masks/000000564682.png 160 | train2017/000000112536.jpg masks/000000112536.png 161 | train2017/000000113977.jpg masks/000000113977.png 162 | train2017/000000256903.jpg masks/000000256903.png 163 | train2017/000000208955.jpg masks/000000208955.png 164 | train2017/000000497259.jpg masks/000000497259.png 165 | train2017/000000171179.jpg masks/000000171179.png 166 | train2017/000000097734.jpg masks/000000097734.png 167 | train2017/000000253838.jpg masks/000000253838.png 168 | train2017/000000501995.jpg masks/000000501995.png 169 | train2017/000000032655.jpg masks/000000032655.png 170 | train2017/000000483794.jpg masks/000000483794.png 171 | train2017/000000409862.jpg masks/000000409862.png 172 | train2017/000000243090.jpg masks/000000243090.png 173 | train2017/000000034855.jpg masks/000000034855.png 174 | train2017/000000081605.jpg masks/000000081605.png 175 | train2017/000000032458.jpg masks/000000032458.png 176 | train2017/000000565951.jpg masks/000000565951.png 177 | train2017/000000114424.jpg masks/000000114424.png 178 | train2017/000000353148.jpg masks/000000353148.png 179 | train2017/000000310843.jpg masks/000000310843.png 180 | train2017/000000349154.jpg masks/000000349154.png 181 | train2017/000000449238.jpg masks/000000449238.png 182 | train2017/000000399269.jpg masks/000000399269.png 183 | train2017/000000464430.jpg masks/000000464430.png 184 | train2017/000000161823.jpg masks/000000161823.png 185 | train2017/000000508750.jpg masks/000000508750.png 186 | train2017/000000195180.jpg masks/000000195180.png 187 | train2017/000000064474.jpg masks/000000064474.png 188 | train2017/000000462134.jpg masks/000000462134.png 189 | train2017/000000281678.jpg masks/000000281678.png 190 | train2017/000000237064.jpg masks/000000237064.png 191 | train2017/000000545329.jpg masks/000000545329.png 192 | train2017/000000335085.jpg masks/000000335085.png 193 | train2017/000000449879.jpg masks/000000449879.png 194 | train2017/000000126563.jpg masks/000000126563.png 195 | train2017/000000313553.jpg masks/000000313553.png 196 | train2017/000000439465.jpg masks/000000439465.png 197 | train2017/000000157184.jpg masks/000000157184.png 198 | train2017/000000117131.jpg masks/000000117131.png 199 | train2017/000000205460.jpg masks/000000205460.png 200 | train2017/000000112996.jpg masks/000000112996.png 201 | train2017/000000228664.jpg masks/000000228664.png 202 | train2017/000000053275.jpg masks/000000053275.png 203 | train2017/000000375321.jpg masks/000000375321.png 204 | train2017/000000318723.jpg masks/000000318723.png 205 | train2017/000000197584.jpg masks/000000197584.png 206 | train2017/000000247925.jpg masks/000000247925.png 207 | train2017/000000391651.jpg masks/000000391651.png 208 | train2017/000000286018.jpg masks/000000286018.png 209 | train2017/000000432174.jpg masks/000000432174.png 210 | train2017/000000156809.jpg masks/000000156809.png 211 | train2017/000000386847.jpg masks/000000386847.png 212 | train2017/000000353124.jpg masks/000000353124.png 213 | train2017/000000015107.jpg masks/000000015107.png 214 | train2017/000000512458.jpg masks/000000512458.png 215 | train2017/000000518287.jpg masks/000000518287.png 216 | train2017/000000244671.jpg masks/000000244671.png 217 | train2017/000000105689.jpg masks/000000105689.png 218 | train2017/000000259755.jpg masks/000000259755.png 219 | train2017/000000196715.jpg masks/000000196715.png 220 | train2017/000000273378.jpg masks/000000273378.png 221 | train2017/000000559470.jpg masks/000000559470.png 222 | train2017/000000132306.jpg masks/000000132306.png 223 | train2017/000000287574.jpg masks/000000287574.png 224 | train2017/000000139355.jpg masks/000000139355.png 225 | train2017/000000007167.jpg masks/000000007167.png 226 | train2017/000000448064.jpg masks/000000448064.png 227 | train2017/000000008190.jpg masks/000000008190.png 228 | train2017/000000204775.jpg masks/000000204775.png 229 | train2017/000000014337.jpg masks/000000014337.png 230 | train2017/000000446075.jpg masks/000000446075.png 231 | train2017/000000085338.jpg masks/000000085338.png 232 | train2017/000000527338.jpg masks/000000527338.png 233 | train2017/000000569591.jpg masks/000000569591.png 234 | train2017/000000253773.jpg masks/000000253773.png 235 | train2017/000000557556.jpg masks/000000557556.png 236 | train2017/000000002470.jpg masks/000000002470.png 237 | train2017/000000055559.jpg masks/000000055559.png 238 | train2017/000000516823.jpg masks/000000516823.png 239 | train2017/000000507516.jpg masks/000000507516.png 240 | train2017/000000251474.jpg masks/000000251474.png 241 | train2017/000000377570.jpg masks/000000377570.png 242 | train2017/000000003751.jpg masks/000000003751.png 243 | train2017/000000327623.jpg masks/000000327623.png 244 | train2017/000000282293.jpg masks/000000282293.png 245 | train2017/000000577520.jpg masks/000000577520.png 246 | train2017/000000132094.jpg masks/000000132094.png 247 | train2017/000000402172.jpg masks/000000402172.png 248 | train2017/000000486580.jpg masks/000000486580.png 249 | train2017/000000478287.jpg masks/000000478287.png 250 | train2017/000000272673.jpg masks/000000272673.png 251 | train2017/000000410023.jpg masks/000000410023.png 252 | train2017/000000281625.jpg masks/000000281625.png 253 | train2017/000000356456.jpg masks/000000356456.png 254 | train2017/000000368564.jpg masks/000000368564.png 255 | train2017/000000407387.jpg masks/000000407387.png 256 | train2017/000000064264.jpg masks/000000064264.png 257 | train2017/000000438346.jpg masks/000000438346.png 258 | train2017/000000171729.jpg masks/000000171729.png 259 | train2017/000000460413.jpg masks/000000460413.png 260 | train2017/000000005210.jpg masks/000000005210.png 261 | train2017/000000394245.jpg masks/000000394245.png 262 | train2017/000000218302.jpg masks/000000218302.png 263 | train2017/000000154847.jpg masks/000000154847.png 264 | train2017/000000022816.jpg masks/000000022816.png 265 | train2017/000000469870.jpg masks/000000469870.png 266 | train2017/000000023121.jpg masks/000000023121.png 267 | train2017/000000309454.jpg masks/000000309454.png 268 | train2017/000000252604.jpg masks/000000252604.png 269 | train2017/000000504733.jpg masks/000000504733.png 270 | train2017/000000490860.jpg masks/000000490860.png 271 | train2017/000000053150.jpg masks/000000053150.png 272 | train2017/000000422469.jpg masks/000000422469.png 273 | train2017/000000330932.jpg masks/000000330932.png 274 | train2017/000000552142.jpg masks/000000552142.png 275 | train2017/000000500890.jpg masks/000000500890.png 276 | train2017/000000462984.jpg masks/000000462984.png 277 | train2017/000000470770.jpg masks/000000470770.png 278 | train2017/000000133874.jpg masks/000000133874.png 279 | train2017/000000042944.jpg masks/000000042944.png 280 | train2017/000000542338.jpg masks/000000542338.png 281 | train2017/000000492325.jpg masks/000000492325.png 282 | train2017/000000275316.jpg masks/000000275316.png 283 | train2017/000000058524.jpg masks/000000058524.png 284 | train2017/000000051808.jpg masks/000000051808.png 285 | train2017/000000275102.jpg masks/000000275102.png 286 | train2017/000000268192.jpg masks/000000268192.png 287 | train2017/000000072229.jpg masks/000000072229.png 288 | train2017/000000075110.jpg masks/000000075110.png 289 | train2017/000000355697.jpg masks/000000355697.png 290 | train2017/000000171467.jpg masks/000000171467.png 291 | train2017/000000474439.jpg masks/000000474439.png 292 | train2017/000000220156.jpg masks/000000220156.png 293 | train2017/000000320533.jpg masks/000000320533.png 294 | train2017/000000503906.jpg masks/000000503906.png 295 | train2017/000000569722.jpg masks/000000569722.png 296 | train2017/000000415269.jpg masks/000000415269.png 297 | train2017/000000441480.jpg masks/000000441480.png 298 | train2017/000000580681.jpg masks/000000580681.png 299 | train2017/000000288099.jpg masks/000000288099.png 300 | train2017/000000528080.jpg masks/000000528080.png 301 | train2017/000000428973.jpg masks/000000428973.png 302 | train2017/000000413757.jpg masks/000000413757.png 303 | train2017/000000468405.jpg masks/000000468405.png 304 | train2017/000000513237.jpg masks/000000513237.png 305 | train2017/000000104046.jpg masks/000000104046.png 306 | train2017/000000539975.jpg masks/000000539975.png 307 | train2017/000000068183.jpg masks/000000068183.png 308 | train2017/000000116588.jpg masks/000000116588.png 309 | train2017/000000138644.jpg masks/000000138644.png 310 | train2017/000000223636.jpg masks/000000223636.png 311 | train2017/000000191803.jpg masks/000000191803.png 312 | train2017/000000293514.jpg masks/000000293514.png 313 | train2017/000000164348.jpg masks/000000164348.png 314 | train2017/000000450340.jpg masks/000000450340.png 315 | train2017/000000411187.jpg masks/000000411187.png 316 | train2017/000000471913.jpg masks/000000471913.png 317 | train2017/000000499423.jpg masks/000000499423.png 318 | train2017/000000300981.jpg masks/000000300981.png 319 | train2017/000000096111.jpg masks/000000096111.png 320 | train2017/000000260883.jpg masks/000000260883.png 321 | train2017/000000262175.jpg masks/000000262175.png 322 | train2017/000000207513.jpg masks/000000207513.png 323 | train2017/000000264733.jpg masks/000000264733.png 324 | train2017/000000430345.jpg masks/000000430345.png 325 | train2017/000000296030.jpg masks/000000296030.png 326 | train2017/000000551227.jpg masks/000000551227.png 327 | train2017/000000097777.jpg masks/000000097777.png 328 | train2017/000000252342.jpg masks/000000252342.png 329 | train2017/000000085372.jpg masks/000000085372.png 330 | train2017/000000473196.jpg masks/000000473196.png 331 | train2017/000000220224.jpg masks/000000220224.png 332 | train2017/000000064681.jpg masks/000000064681.png 333 | train2017/000000027902.jpg masks/000000027902.png 334 | train2017/000000117182.jpg masks/000000117182.png 335 | train2017/000000199363.jpg masks/000000199363.png 336 | train2017/000000459659.jpg masks/000000459659.png 337 | train2017/000000083174.jpg masks/000000083174.png 338 | train2017/000000203653.jpg masks/000000203653.png 339 | train2017/000000096030.jpg masks/000000096030.png 340 | train2017/000000370868.jpg masks/000000370868.png 341 | train2017/000000239611.jpg masks/000000239611.png 342 | train2017/000000063446.jpg masks/000000063446.png 343 | train2017/000000200231.jpg masks/000000200231.png 344 | train2017/000000530630.jpg masks/000000530630.png 345 | train2017/000000540265.jpg masks/000000540265.png 346 | train2017/000000321508.jpg masks/000000321508.png 347 | train2017/000000057481.jpg masks/000000057481.png 348 | train2017/000000269946.jpg masks/000000269946.png 349 | train2017/000000003637.jpg masks/000000003637.png 350 | train2017/000000498915.jpg masks/000000498915.png 351 | train2017/000000571215.jpg masks/000000571215.png 352 | train2017/000000358706.jpg masks/000000358706.png 353 | train2017/000000476417.jpg masks/000000476417.png 354 | train2017/000000047905.jpg masks/000000047905.png 355 | train2017/000000481981.jpg masks/000000481981.png 356 | train2017/000000245425.jpg masks/000000245425.png 357 | train2017/000000325693.jpg masks/000000325693.png 358 | train2017/000000472796.jpg masks/000000472796.png 359 | train2017/000000196571.jpg masks/000000196571.png 360 | train2017/000000507536.jpg masks/000000507536.png 361 | train2017/000000175908.jpg masks/000000175908.png 362 | train2017/000000535457.jpg masks/000000535457.png 363 | train2017/000000283960.jpg masks/000000283960.png 364 | train2017/000000365206.jpg masks/000000365206.png 365 | train2017/000000469242.jpg masks/000000469242.png 366 | train2017/000000083670.jpg masks/000000083670.png 367 | train2017/000000570483.jpg masks/000000570483.png 368 | train2017/000000478009.jpg masks/000000478009.png 369 | train2017/000000543618.jpg masks/000000543618.png 370 | train2017/000000089949.jpg masks/000000089949.png 371 | train2017/000000314126.jpg masks/000000314126.png 372 | train2017/000000486471.jpg masks/000000486471.png 373 | train2017/000000401515.jpg masks/000000401515.png 374 | train2017/000000374340.jpg masks/000000374340.png 375 | train2017/000000327819.jpg masks/000000327819.png 376 | train2017/000000447089.jpg masks/000000447089.png 377 | train2017/000000537918.jpg masks/000000537918.png 378 | train2017/000000370426.jpg masks/000000370426.png 379 | train2017/000000576322.jpg masks/000000576322.png 380 | train2017/000000560784.jpg masks/000000560784.png 381 | train2017/000000378029.jpg masks/000000378029.png 382 | train2017/000000092335.jpg masks/000000092335.png 383 | train2017/000000343606.jpg masks/000000343606.png 384 | train2017/000000393086.jpg masks/000000393086.png 385 | train2017/000000339512.jpg masks/000000339512.png 386 | train2017/000000031893.jpg masks/000000031893.png 387 | train2017/000000478537.jpg masks/000000478537.png 388 | train2017/000000127304.jpg masks/000000127304.png 389 | train2017/000000158038.jpg masks/000000158038.png 390 | train2017/000000415770.jpg masks/000000415770.png 391 | train2017/000000181815.jpg masks/000000181815.png 392 | train2017/000000492974.jpg masks/000000492974.png 393 | train2017/000000407522.jpg masks/000000407522.png 394 | train2017/000000332832.jpg masks/000000332832.png 395 | train2017/000000121361.jpg masks/000000121361.png 396 | train2017/000000003514.jpg masks/000000003514.png 397 | train2017/000000191310.jpg masks/000000191310.png 398 | train2017/000000420573.jpg masks/000000420573.png 399 | train2017/000000146646.jpg masks/000000146646.png 400 | train2017/000000474963.jpg masks/000000474963.png 401 | train2017/000000359085.jpg masks/000000359085.png 402 | train2017/000000273369.jpg masks/000000273369.png 403 | train2017/000000090888.jpg masks/000000090888.png 404 | train2017/000000235038.jpg masks/000000235038.png 405 | train2017/000000227928.jpg masks/000000227928.png 406 | train2017/000000563257.jpg masks/000000563257.png 407 | train2017/000000254304.jpg masks/000000254304.png 408 | train2017/000000383866.jpg masks/000000383866.png 409 | train2017/000000302680.jpg masks/000000302680.png 410 | train2017/000000422657.jpg masks/000000422657.png 411 | train2017/000000542573.jpg masks/000000542573.png 412 | train2017/000000495055.jpg masks/000000495055.png 413 | train2017/000000378657.jpg masks/000000378657.png 414 | train2017/000000268406.jpg masks/000000268406.png 415 | train2017/000000383733.jpg masks/000000383733.png 416 | train2017/000000334416.jpg masks/000000334416.png 417 | train2017/000000505994.jpg masks/000000505994.png 418 | train2017/000000001205.jpg masks/000000001205.png 419 | train2017/000000234424.jpg masks/000000234424.png 420 | train2017/000000535902.jpg masks/000000535902.png 421 | train2017/000000003464.jpg masks/000000003464.png 422 | train2017/000000282444.jpg masks/000000282444.png 423 | train2017/000000302924.jpg masks/000000302924.png 424 | train2017/000000545364.jpg masks/000000545364.png 425 | train2017/000000063121.jpg masks/000000063121.png 426 | train2017/000000062324.jpg masks/000000062324.png 427 | train2017/000000043227.jpg masks/000000043227.png 428 | train2017/000000062581.jpg masks/000000062581.png 429 | train2017/000000234501.jpg masks/000000234501.png 430 | train2017/000000011360.jpg masks/000000011360.png 431 | train2017/000000491850.jpg masks/000000491850.png 432 | train2017/000000194419.jpg masks/000000194419.png 433 | train2017/000000312269.jpg masks/000000312269.png 434 | train2017/000000519827.jpg masks/000000519827.png 435 | train2017/000000527961.jpg masks/000000527961.png 436 | train2017/000000560532.jpg masks/000000560532.png 437 | train2017/000000462536.jpg masks/000000462536.png 438 | train2017/000000117407.jpg masks/000000117407.png 439 | train2017/000000104885.jpg masks/000000104885.png 440 | train2017/000000161885.jpg masks/000000161885.png 441 | train2017/000000029579.jpg masks/000000029579.png 442 | train2017/000000424002.jpg masks/000000424002.png 443 | train2017/000000515040.jpg masks/000000515040.png 444 | train2017/000000173948.jpg masks/000000173948.png 445 | train2017/000000203081.jpg masks/000000203081.png 446 | train2017/000000434423.jpg masks/000000434423.png 447 | train2017/000000022979.jpg masks/000000022979.png 448 | train2017/000000008458.jpg masks/000000008458.png 449 | train2017/000000309791.jpg masks/000000309791.png 450 | train2017/000000559586.jpg masks/000000559586.png 451 | train2017/000000118181.jpg masks/000000118181.png 452 | train2017/000000348076.jpg masks/000000348076.png 453 | train2017/000000519429.jpg masks/000000519429.png 454 | train2017/000000296584.jpg masks/000000296584.png 455 | train2017/000000118724.jpg masks/000000118724.png 456 | train2017/000000126931.jpg masks/000000126931.png 457 | train2017/000000383660.jpg masks/000000383660.png 458 | train2017/000000265449.jpg masks/000000265449.png 459 | train2017/000000083878.jpg masks/000000083878.png 460 | train2017/000000283152.jpg masks/000000283152.png 461 | train2017/000000211725.jpg masks/000000211725.png 462 | train2017/000000567342.jpg masks/000000567342.png 463 | train2017/000000191280.jpg masks/000000191280.png -------------------------------------------------------------------------------- /partitions/coco/1_512/labeled.txt: -------------------------------------------------------------------------------- 1 | train2017/000000177254.jpg masks/000000177254.png 2 | train2017/000000210467.jpg masks/000000210467.png 3 | train2017/000000468760.jpg masks/000000468760.png 4 | train2017/000000482382.jpg masks/000000482382.png 5 | train2017/000000575018.jpg masks/000000575018.png 6 | train2017/000000568440.jpg masks/000000568440.png 7 | train2017/000000206705.jpg masks/000000206705.png 8 | train2017/000000316826.jpg masks/000000316826.png 9 | train2017/000000562930.jpg masks/000000562930.png 10 | train2017/000000318594.jpg masks/000000318594.png 11 | train2017/000000128405.jpg masks/000000128405.png 12 | train2017/000000079247.jpg masks/000000079247.png 13 | train2017/000000066866.jpg masks/000000066866.png 14 | train2017/000000530433.jpg masks/000000530433.png 15 | train2017/000000236010.jpg masks/000000236010.png 16 | train2017/000000306926.jpg masks/000000306926.png 17 | train2017/000000455040.jpg masks/000000455040.png 18 | train2017/000000485752.jpg masks/000000485752.png 19 | train2017/000000491453.jpg masks/000000491453.png 20 | train2017/000000302767.jpg masks/000000302767.png 21 | train2017/000000435328.jpg masks/000000435328.png 22 | train2017/000000390671.jpg masks/000000390671.png 23 | train2017/000000174304.jpg masks/000000174304.png 24 | train2017/000000310753.jpg masks/000000310753.png 25 | train2017/000000094145.jpg masks/000000094145.png 26 | train2017/000000450355.jpg masks/000000450355.png 27 | train2017/000000032948.jpg masks/000000032948.png 28 | train2017/000000456658.jpg masks/000000456658.png 29 | train2017/000000363191.jpg masks/000000363191.png 30 | train2017/000000202774.jpg masks/000000202774.png 31 | train2017/000000234839.jpg masks/000000234839.png 32 | train2017/000000485139.jpg masks/000000485139.png 33 | train2017/000000435681.jpg masks/000000435681.png 34 | train2017/000000329245.jpg masks/000000329245.png 35 | train2017/000000240147.jpg masks/000000240147.png 36 | train2017/000000077137.jpg masks/000000077137.png 37 | train2017/000000383185.jpg masks/000000383185.png 38 | train2017/000000183114.jpg masks/000000183114.png 39 | train2017/000000578521.jpg masks/000000578521.png 40 | train2017/000000239208.jpg masks/000000239208.png 41 | train2017/000000037748.jpg masks/000000037748.png 42 | train2017/000000511324.jpg masks/000000511324.png 43 | train2017/000000493552.jpg masks/000000493552.png 44 | train2017/000000290875.jpg masks/000000290875.png 45 | train2017/000000296706.jpg masks/000000296706.png 46 | train2017/000000032724.jpg masks/000000032724.png 47 | train2017/000000440694.jpg masks/000000440694.png 48 | train2017/000000238212.jpg masks/000000238212.png 49 | train2017/000000283748.jpg masks/000000283748.png 50 | train2017/000000308350.jpg masks/000000308350.png 51 | train2017/000000088768.jpg masks/000000088768.png 52 | train2017/000000473103.jpg masks/000000473103.png 53 | train2017/000000278171.jpg masks/000000278171.png 54 | train2017/000000142454.jpg masks/000000142454.png 55 | train2017/000000267825.jpg masks/000000267825.png 56 | train2017/000000450774.jpg masks/000000450774.png 57 | train2017/000000046753.jpg masks/000000046753.png 58 | train2017/000000041366.jpg masks/000000041366.png 59 | train2017/000000474356.jpg masks/000000474356.png 60 | train2017/000000381106.jpg masks/000000381106.png 61 | train2017/000000477179.jpg masks/000000477179.png 62 | train2017/000000313727.jpg masks/000000313727.png 63 | train2017/000000103730.jpg masks/000000103730.png 64 | train2017/000000554743.jpg masks/000000554743.png 65 | train2017/000000035672.jpg masks/000000035672.png 66 | train2017/000000411291.jpg masks/000000411291.png 67 | train2017/000000555920.jpg masks/000000555920.png 68 | train2017/000000256662.jpg masks/000000256662.png 69 | train2017/000000438301.jpg masks/000000438301.png 70 | train2017/000000480344.jpg masks/000000480344.png 71 | train2017/000000436695.jpg masks/000000436695.png 72 | train2017/000000003103.jpg masks/000000003103.png 73 | train2017/000000131696.jpg masks/000000131696.png 74 | train2017/000000401826.jpg masks/000000401826.png 75 | train2017/000000379630.jpg masks/000000379630.png 76 | train2017/000000212429.jpg masks/000000212429.png 77 | train2017/000000222309.jpg masks/000000222309.png 78 | train2017/000000181359.jpg masks/000000181359.png 79 | train2017/000000015274.jpg masks/000000015274.png 80 | train2017/000000410229.jpg masks/000000410229.png 81 | train2017/000000423718.jpg masks/000000423718.png 82 | train2017/000000378911.jpg masks/000000378911.png 83 | train2017/000000459487.jpg masks/000000459487.png 84 | train2017/000000298008.jpg masks/000000298008.png 85 | train2017/000000542814.jpg masks/000000542814.png 86 | train2017/000000520208.jpg masks/000000520208.png 87 | train2017/000000507249.jpg masks/000000507249.png 88 | train2017/000000542662.jpg masks/000000542662.png 89 | train2017/000000541113.jpg masks/000000541113.png 90 | train2017/000000547039.jpg masks/000000547039.png 91 | train2017/000000423620.jpg masks/000000423620.png 92 | train2017/000000129314.jpg masks/000000129314.png 93 | train2017/000000051310.jpg masks/000000051310.png 94 | train2017/000000300170.jpg masks/000000300170.png 95 | train2017/000000093391.jpg masks/000000093391.png 96 | train2017/000000156282.jpg masks/000000156282.png 97 | train2017/000000044151.jpg masks/000000044151.png 98 | train2017/000000260883.jpg masks/000000260883.png 99 | train2017/000000297180.jpg masks/000000297180.png 100 | train2017/000000521982.jpg masks/000000521982.png 101 | train2017/000000051800.jpg masks/000000051800.png 102 | train2017/000000525899.jpg masks/000000525899.png 103 | train2017/000000348648.jpg masks/000000348648.png 104 | train2017/000000567858.jpg masks/000000567858.png 105 | train2017/000000151566.jpg masks/000000151566.png 106 | train2017/000000211609.jpg masks/000000211609.png 107 | train2017/000000091796.jpg masks/000000091796.png 108 | train2017/000000393108.jpg masks/000000393108.png 109 | train2017/000000255550.jpg masks/000000255550.png 110 | train2017/000000000009.jpg masks/000000000009.png 111 | train2017/000000354424.jpg masks/000000354424.png 112 | train2017/000000518907.jpg masks/000000518907.png 113 | train2017/000000245409.jpg masks/000000245409.png 114 | train2017/000000518365.jpg masks/000000518365.png 115 | train2017/000000150769.jpg masks/000000150769.png 116 | train2017/000000362301.jpg masks/000000362301.png 117 | train2017/000000126833.jpg masks/000000126833.png 118 | train2017/000000202128.jpg masks/000000202128.png 119 | train2017/000000344415.jpg masks/000000344415.png 120 | train2017/000000505010.jpg masks/000000505010.png 121 | train2017/000000194885.jpg masks/000000194885.png 122 | train2017/000000459347.jpg masks/000000459347.png 123 | train2017/000000238029.jpg masks/000000238029.png 124 | train2017/000000267457.jpg masks/000000267457.png 125 | train2017/000000358642.jpg masks/000000358642.png 126 | train2017/000000173644.jpg masks/000000173644.png 127 | train2017/000000496064.jpg masks/000000496064.png 128 | train2017/000000145502.jpg masks/000000145502.png 129 | train2017/000000117026.jpg masks/000000117026.png 130 | train2017/000000408705.jpg masks/000000408705.png 131 | train2017/000000426414.jpg masks/000000426414.png 132 | train2017/000000036207.jpg masks/000000036207.png 133 | train2017/000000314907.jpg masks/000000314907.png 134 | train2017/000000024815.jpg masks/000000024815.png 135 | train2017/000000420827.jpg masks/000000420827.png 136 | train2017/000000312216.jpg masks/000000312216.png 137 | train2017/000000097659.jpg masks/000000097659.png 138 | train2017/000000132297.jpg masks/000000132297.png 139 | train2017/000000445723.jpg masks/000000445723.png 140 | train2017/000000341011.jpg masks/000000341011.png 141 | train2017/000000447911.jpg masks/000000447911.png 142 | train2017/000000294545.jpg masks/000000294545.png 143 | train2017/000000228580.jpg masks/000000228580.png 144 | train2017/000000205911.jpg masks/000000205911.png 145 | train2017/000000289883.jpg masks/000000289883.png 146 | train2017/000000125291.jpg masks/000000125291.png 147 | train2017/000000092377.jpg masks/000000092377.png 148 | train2017/000000227003.jpg masks/000000227003.png 149 | train2017/000000488965.jpg masks/000000488965.png 150 | train2017/000000141538.jpg masks/000000141538.png 151 | train2017/000000185328.jpg masks/000000185328.png 152 | train2017/000000477016.jpg masks/000000477016.png 153 | train2017/000000070527.jpg masks/000000070527.png 154 | train2017/000000271235.jpg masks/000000271235.png 155 | train2017/000000265303.jpg masks/000000265303.png 156 | train2017/000000405582.jpg masks/000000405582.png 157 | train2017/000000522489.jpg masks/000000522489.png 158 | train2017/000000543233.jpg masks/000000543233.png 159 | train2017/000000382670.jpg masks/000000382670.png 160 | train2017/000000255827.jpg masks/000000255827.png 161 | train2017/000000436759.jpg masks/000000436759.png 162 | train2017/000000260882.jpg masks/000000260882.png 163 | train2017/000000329762.jpg masks/000000329762.png 164 | train2017/000000226211.jpg masks/000000226211.png 165 | train2017/000000094610.jpg masks/000000094610.png 166 | train2017/000000017311.jpg masks/000000017311.png 167 | train2017/000000389480.jpg masks/000000389480.png 168 | train2017/000000211002.jpg masks/000000211002.png 169 | train2017/000000542694.jpg masks/000000542694.png 170 | train2017/000000125244.jpg masks/000000125244.png 171 | train2017/000000477946.jpg masks/000000477946.png 172 | train2017/000000072708.jpg masks/000000072708.png 173 | train2017/000000142246.jpg masks/000000142246.png 174 | train2017/000000328427.jpg masks/000000328427.png 175 | train2017/000000274474.jpg masks/000000274474.png 176 | train2017/000000578023.jpg masks/000000578023.png 177 | train2017/000000272481.jpg masks/000000272481.png 178 | train2017/000000081001.jpg masks/000000081001.png 179 | train2017/000000231991.jpg masks/000000231991.png 180 | train2017/000000379158.jpg masks/000000379158.png 181 | train2017/000000333181.jpg masks/000000333181.png 182 | train2017/000000173776.jpg masks/000000173776.png 183 | train2017/000000143401.jpg masks/000000143401.png 184 | train2017/000000183617.jpg masks/000000183617.png 185 | train2017/000000161013.jpg masks/000000161013.png 186 | train2017/000000438492.jpg masks/000000438492.png 187 | train2017/000000260321.jpg masks/000000260321.png 188 | train2017/000000564865.jpg masks/000000564865.png 189 | train2017/000000008676.jpg masks/000000008676.png 190 | train2017/000000113598.jpg masks/000000113598.png 191 | train2017/000000290285.jpg masks/000000290285.png 192 | train2017/000000480317.jpg masks/000000480317.png 193 | train2017/000000371514.jpg masks/000000371514.png 194 | train2017/000000320872.jpg masks/000000320872.png 195 | train2017/000000391857.jpg masks/000000391857.png 196 | train2017/000000182620.jpg masks/000000182620.png 197 | train2017/000000038850.jpg masks/000000038850.png 198 | train2017/000000241867.jpg masks/000000241867.png 199 | train2017/000000545370.jpg masks/000000545370.png 200 | train2017/000000008027.jpg masks/000000008027.png 201 | train2017/000000436392.jpg masks/000000436392.png 202 | train2017/000000134144.jpg masks/000000134144.png 203 | train2017/000000406268.jpg masks/000000406268.png 204 | train2017/000000324616.jpg masks/000000324616.png 205 | train2017/000000325768.jpg masks/000000325768.png 206 | train2017/000000410739.jpg masks/000000410739.png 207 | train2017/000000255950.jpg masks/000000255950.png 208 | train2017/000000219407.jpg masks/000000219407.png 209 | train2017/000000537543.jpg masks/000000537543.png 210 | train2017/000000043719.jpg masks/000000043719.png 211 | train2017/000000027626.jpg masks/000000027626.png 212 | train2017/000000286671.jpg masks/000000286671.png 213 | train2017/000000569234.jpg masks/000000569234.png 214 | train2017/000000347407.jpg masks/000000347407.png 215 | train2017/000000261702.jpg masks/000000261702.png 216 | train2017/000000092761.jpg masks/000000092761.png 217 | train2017/000000477434.jpg masks/000000477434.png 218 | train2017/000000556886.jpg masks/000000556886.png 219 | train2017/000000478055.jpg masks/000000478055.png 220 | train2017/000000007023.jpg masks/000000007023.png 221 | train2017/000000448529.jpg masks/000000448529.png 222 | train2017/000000225505.jpg masks/000000225505.png 223 | train2017/000000397375.jpg masks/000000397375.png 224 | train2017/000000028317.jpg masks/000000028317.png 225 | train2017/000000555358.jpg masks/000000555358.png 226 | train2017/000000562632.jpg masks/000000562632.png 227 | train2017/000000405278.jpg masks/000000405278.png 228 | train2017/000000565203.jpg masks/000000565203.png 229 | train2017/000000132527.jpg masks/000000132527.png 230 | train2017/000000364525.jpg masks/000000364525.png 231 | train2017/000000525636.jpg masks/000000525636.png 232 | train2017/000000143516.jpg masks/000000143516.png -------------------------------------------------------------------------------- /partitions/pascal/183/labeled.txt: -------------------------------------------------------------------------------- 1 | JPEGImages/2008_006748.jpg SegmentationClass/2008_006748.png 2 | JPEGImages/2011_000453.jpg SegmentationClass/2011_000453.png 3 | JPEGImages/2010_002338.jpg SegmentationClass/2010_002338.png 4 | JPEGImages/2009_000161.jpg SegmentationClass/2009_000161.png 5 | JPEGImages/2009_003860.jpg SegmentationClass/2009_003860.png 6 | JPEGImages/2007_008945.jpg SegmentationClass/2007_008945.png 7 | JPEGImages/2007_002488.jpg SegmentationClass/2007_002488.png 8 | JPEGImages/2008_001056.jpg SegmentationClass/2008_001056.png 9 | JPEGImages/2008_000515.jpg SegmentationClass/2008_000515.png 10 | JPEGImages/2010_002286.jpg SegmentationClass/2010_002286.png 11 | JPEGImages/2009_000603.jpg SegmentationClass/2009_000603.png 12 | JPEGImages/2010_005500.jpg SegmentationClass/2010_005500.png 13 | JPEGImages/2009_000015.jpg SegmentationClass/2009_000015.png 14 | JPEGImages/2008_001358.jpg SegmentationClass/2008_001358.png 15 | JPEGImages/2011_001400.jpg SegmentationClass/2011_001400.png 16 | JPEGImages/2010_001386.jpg SegmentationClass/2010_001386.png 17 | JPEGImages/2007_009580.jpg SegmentationClass/2007_009580.png 18 | JPEGImages/2007_006899.jpg SegmentationClass/2007_006899.png 19 | JPEGImages/2007_006317.jpg SegmentationClass/2007_006317.png 20 | JPEGImages/2008_003252.jpg SegmentationClass/2008_003252.png 21 | JPEGImages/2010_005232.jpg SegmentationClass/2010_005232.png 22 | JPEGImages/2011_002350.jpg SegmentationClass/2011_002350.png 23 | JPEGImages/2011_002920.jpg SegmentationClass/2011_002920.png 24 | JPEGImages/2009_004117.jpg SegmentationClass/2009_004117.png 25 | JPEGImages/2011_002246.jpg SegmentationClass/2011_002246.png 26 | JPEGImages/2008_003200.jpg SegmentationClass/2008_003200.png 27 | JPEGImages/2007_005988.jpg SegmentationClass/2007_005988.png 28 | JPEGImages/2009_001339.jpg SegmentationClass/2009_001339.png 29 | JPEGImages/2010_005429.jpg SegmentationClass/2010_005429.png 30 | JPEGImages/2009_001117.jpg SegmentationClass/2009_001117.png 31 | JPEGImages/2008_005668.jpg SegmentationClass/2008_005668.png 32 | JPEGImages/2008_002338.jpg SegmentationClass/2008_002338.png 33 | JPEGImages/2007_005273.jpg SegmentationClass/2007_005273.png 34 | JPEGImages/2011_000382.jpg SegmentationClass/2011_000382.png 35 | JPEGImages/2009_000408.jpg SegmentationClass/2009_000408.png 36 | JPEGImages/2009_000420.jpg SegmentationClass/2009_000420.png 37 | JPEGImages/2010_003380.jpg SegmentationClass/2010_003380.png 38 | JPEGImages/2007_005262.jpg SegmentationClass/2007_005262.png 39 | JPEGImages/2010_003799.jpg SegmentationClass/2010_003799.png 40 | JPEGImages/2008_005843.jpg SegmentationClass/2008_005843.png 41 | JPEGImages/2007_003715.jpg SegmentationClass/2007_003715.png 42 | JPEGImages/2009_004425.jpg SegmentationClass/2009_004425.png 43 | JPEGImages/2009_003172.jpg SegmentationClass/2009_003172.png 44 | JPEGImages/2011_000152.jpg SegmentationClass/2011_000152.png 45 | JPEGImages/2007_000528.jpg SegmentationClass/2007_000528.png 46 | JPEGImages/2011_003246.jpg SegmentationClass/2011_003246.png 47 | JPEGImages/2007_008307.jpg SegmentationClass/2007_008307.png 48 | JPEGImages/2007_007585.jpg SegmentationClass/2007_007585.png 49 | JPEGImages/2011_001810.jpg SegmentationClass/2011_001810.png 50 | JPEGImages/2008_006490.jpg SegmentationClass/2008_006490.png 51 | JPEGImages/2007_009052.jpg SegmentationClass/2007_009052.png 52 | JPEGImages/2009_003975.jpg SegmentationClass/2009_003975.png 53 | JPEGImages/2010_000075.jpg SegmentationClass/2010_000075.png 54 | JPEGImages/2007_002967.jpg SegmentationClass/2007_002967.png 55 | JPEGImages/2007_003118.jpg SegmentationClass/2007_003118.png 56 | JPEGImages/2008_005214.jpg SegmentationClass/2008_005214.png 57 | JPEGImages/2007_000738.jpg SegmentationClass/2007_000738.png 58 | JPEGImages/2009_000285.jpg SegmentationClass/2009_000285.png 59 | JPEGImages/2007_007481.jpg SegmentationClass/2007_007481.png 60 | JPEGImages/2010_001418.jpg SegmentationClass/2010_001418.png 61 | JPEGImages/2011_002335.jpg SegmentationClass/2011_002335.png 62 | JPEGImages/2007_002273.jpg SegmentationClass/2007_002273.png 63 | JPEGImages/2011_001166.jpg SegmentationClass/2011_001166.png 64 | JPEGImages/2011_003038.jpg SegmentationClass/2011_003038.png 65 | JPEGImages/2008_005006.jpg SegmentationClass/2008_005006.png 66 | JPEGImages/2010_000117.jpg SegmentationClass/2010_000117.png 67 | JPEGImages/2010_002625.jpg SegmentationClass/2010_002625.png 68 | JPEGImages/2009_002993.jpg SegmentationClass/2009_002993.png 69 | JPEGImages/2007_005790.jpg SegmentationClass/2007_005790.png 70 | JPEGImages/2008_003180.jpg SegmentationClass/2008_003180.png 71 | JPEGImages/2009_001095.jpg SegmentationClass/2009_001095.png 72 | JPEGImages/2010_001329.jpg SegmentationClass/2010_001329.png 73 | JPEGImages/2011_002559.jpg SegmentationClass/2011_002559.png 74 | JPEGImages/2009_001070.jpg SegmentationClass/2009_001070.png 75 | JPEGImages/2010_005318.jpg SegmentationClass/2010_005318.png 76 | JPEGImages/2011_000122.jpg SegmentationClass/2011_000122.png 77 | JPEGImages/2009_003697.jpg SegmentationClass/2009_003697.png 78 | JPEGImages/2010_002892.jpg SegmentationClass/2010_002892.png 79 | JPEGImages/2009_002019.jpg SegmentationClass/2009_002019.png 80 | JPEGImages/2008_002471.jpg SegmentationClass/2008_002471.png 81 | JPEGImages/2007_005314.jpg SegmentationClass/2007_005314.png 82 | JPEGImages/2007_007398.jpg SegmentationClass/2007_007398.png 83 | JPEGImages/2008_008343.jpg SegmentationClass/2008_008343.png 84 | JPEGImages/2007_003207.jpg SegmentationClass/2007_003207.png 85 | JPEGImages/2009_002588.jpg SegmentationClass/2009_002588.png 86 | JPEGImages/2009_002422.jpg SegmentationClass/2009_002422.png 87 | JPEGImages/2008_002697.jpg SegmentationClass/2008_002697.png 88 | JPEGImages/2011_001754.jpg SegmentationClass/2011_001754.png 89 | JPEGImages/2008_007375.jpg SegmentationClass/2008_007375.png 90 | JPEGImages/2008_003060.jpg SegmentationClass/2008_003060.png 91 | JPEGImages/2011_001259.jpg SegmentationClass/2011_001259.png 92 | JPEGImages/2010_004171.jpg SegmentationClass/2010_004171.png 93 | JPEGImages/2009_000655.jpg SegmentationClass/2009_000655.png 94 | JPEGImages/2010_004478.jpg SegmentationClass/2010_004478.png 95 | JPEGImages/2011_001855.jpg SegmentationClass/2011_001855.png 96 | JPEGImages/2007_009649.jpg SegmentationClass/2007_009649.png 97 | JPEGImages/2007_003267.jpg SegmentationClass/2007_003267.png 98 | JPEGImages/2008_001188.jpg SegmentationClass/2008_001188.png 99 | JPEGImages/2010_004900.jpg SegmentationClass/2010_004900.png 100 | JPEGImages/2011_000449.jpg SegmentationClass/2011_000449.png 101 | JPEGImages/2008_004869.jpg SegmentationClass/2008_004869.png 102 | JPEGImages/2008_004838.jpg SegmentationClass/2008_004838.png 103 | JPEGImages/2010_002907.jpg SegmentationClass/2010_002907.png 104 | JPEGImages/2008_004259.jpg SegmentationClass/2008_004259.png 105 | JPEGImages/2008_003429.jpg SegmentationClass/2008_003429.png 106 | JPEGImages/2011_000999.jpg SegmentationClass/2011_000999.png 107 | JPEGImages/2011_001632.jpg SegmentationClass/2011_001632.png 108 | JPEGImages/2011_000577.jpg SegmentationClass/2011_000577.png 109 | JPEGImages/2010_005505.jpg SegmentationClass/2010_005505.png 110 | JPEGImages/2010_004365.jpg SegmentationClass/2010_004365.png 111 | JPEGImages/2007_007948.jpg SegmentationClass/2007_007948.png 112 | JPEGImages/2008_005713.jpg SegmentationClass/2008_005713.png 113 | JPEGImages/2008_006920.jpg SegmentationClass/2008_006920.png 114 | JPEGImages/2010_000132.jpg SegmentationClass/2010_000132.png 115 | JPEGImages/2008_006182.jpg SegmentationClass/2008_006182.png 116 | JPEGImages/2007_005212.jpg SegmentationClass/2007_005212.png 117 | JPEGImages/2009_000746.jpg SegmentationClass/2009_000746.png 118 | JPEGImages/2009_005236.jpg SegmentationClass/2009_005236.png 119 | JPEGImages/2010_005876.jpg SegmentationClass/2010_005876.png 120 | JPEGImages/2007_002462.jpg SegmentationClass/2007_002462.png 121 | JPEGImages/2009_000409.jpg SegmentationClass/2009_000409.png 122 | JPEGImages/2008_008525.jpg SegmentationClass/2008_008525.png 123 | JPEGImages/2011_002114.jpg SegmentationClass/2011_002114.png 124 | JPEGImages/2010_003887.jpg SegmentationClass/2010_003887.png 125 | JPEGImages/2009_005287.jpg SegmentationClass/2009_005287.png 126 | JPEGImages/2010_002815.jpg SegmentationClass/2010_002815.png 127 | JPEGImages/2010_002203.jpg SegmentationClass/2010_002203.png 128 | JPEGImages/2010_003717.jpg SegmentationClass/2010_003717.png 129 | JPEGImages/2010_005277.jpg SegmentationClass/2010_005277.png 130 | JPEGImages/2008_000832.jpg SegmentationClass/2008_000832.png 131 | JPEGImages/2009_003757.jpg SegmentationClass/2009_003757.png 132 | JPEGImages/2007_006477.jpg SegmentationClass/2007_006477.png 133 | JPEGImages/2008_003480.jpg SegmentationClass/2008_003480.png 134 | JPEGImages/2009_003783.jpg SegmentationClass/2009_003783.png 135 | JPEGImages/2009_003646.jpg SegmentationClass/2009_003646.png 136 | JPEGImages/2011_000068.jpg SegmentationClass/2011_000068.png 137 | JPEGImages/2010_002573.jpg SegmentationClass/2010_002573.png 138 | JPEGImages/2010_001160.jpg SegmentationClass/2010_001160.png 139 | JPEGImages/2011_002447.jpg SegmentationClass/2011_002447.png 140 | JPEGImages/2008_002215.jpg SegmentationClass/2008_002215.png 141 | JPEGImages/2011_002709.jpg SegmentationClass/2011_002709.png 142 | JPEGImages/2010_004721.jpg SegmentationClass/2010_004721.png 143 | JPEGImages/2008_003065.jpg SegmentationClass/2008_003065.png 144 | JPEGImages/2009_002314.jpg SegmentationClass/2009_002314.png 145 | JPEGImages/2007_009605.jpg SegmentationClass/2007_009605.png 146 | JPEGImages/2007_007230.jpg SegmentationClass/2007_007230.png 147 | JPEGImages/2008_003373.jpg SegmentationClass/2008_003373.png 148 | JPEGImages/2011_002135.jpg SegmentationClass/2011_002135.png 149 | JPEGImages/2008_003939.jpg SegmentationClass/2008_003939.png 150 | JPEGImages/2010_001706.jpg SegmentationClass/2010_001706.png 151 | JPEGImages/2008_002218.jpg SegmentationClass/2008_002218.png 152 | JPEGImages/2009_003034.jpg SegmentationClass/2009_003034.png 153 | JPEGImages/2010_001247.jpg SegmentationClass/2010_001247.png 154 | JPEGImages/2010_001922.jpg SegmentationClass/2010_001922.png 155 | JPEGImages/2007_009832.jpg SegmentationClass/2007_009832.png 156 | JPEGImages/2011_000208.jpg SegmentationClass/2011_000208.png 157 | JPEGImages/2010_002527.jpg SegmentationClass/2010_002527.png 158 | JPEGImages/2010_002154.jpg SegmentationClass/2010_002154.png 159 | JPEGImages/2009_001203.jpg SegmentationClass/2009_001203.png 160 | JPEGImages/2007_003251.jpg SegmentationClass/2007_003251.png 161 | JPEGImages/2010_002962.jpg SegmentationClass/2010_002962.png 162 | JPEGImages/2007_000515.jpg SegmentationClass/2007_000515.png 163 | JPEGImages/2009_002387.jpg SegmentationClass/2009_002387.png 164 | JPEGImages/2007_006400.jpg SegmentationClass/2007_006400.png 165 | JPEGImages/2009_003249.jpg SegmentationClass/2009_003249.png 166 | JPEGImages/2009_000454.jpg SegmentationClass/2009_000454.png 167 | JPEGImages/2009_004539.jpg SegmentationClass/2009_004539.png 168 | JPEGImages/2009_001544.jpg SegmentationClass/2009_001544.png 169 | JPEGImages/2009_004446.jpg SegmentationClass/2009_004446.png 170 | JPEGImages/2010_004683.jpg SegmentationClass/2010_004683.png 171 | JPEGImages/2007_007878.jpg SegmentationClass/2007_007878.png 172 | JPEGImages/2011_002291.jpg SegmentationClass/2011_002291.png 173 | JPEGImages/2011_000108.jpg SegmentationClass/2011_000108.png 174 | JPEGImages/2010_004154.jpg SegmentationClass/2010_004154.png 175 | JPEGImages/2010_001347.jpg SegmentationClass/2010_001347.png 176 | JPEGImages/2008_004892.jpg SegmentationClass/2008_004892.png 177 | JPEGImages/2007_005264.jpg SegmentationClass/2007_005264.png 178 | JPEGImages/2009_004561.jpg SegmentationClass/2009_004561.png 179 | JPEGImages/2011_000468.jpg SegmentationClass/2011_000468.png 180 | JPEGImages/2011_000920.jpg SegmentationClass/2011_000920.png 181 | JPEGImages/2011_001928.jpg SegmentationClass/2011_001928.png 182 | JPEGImages/2008_003562.jpg SegmentationClass/2008_003562.png 183 | JPEGImages/2009_001036.jpg SegmentationClass/2009_001036.png -------------------------------------------------------------------------------- /partitions/pascal/366/labeled.txt: -------------------------------------------------------------------------------- 1 | JPEGImages/2008_004112.jpg SegmentationClass/2008_004112.png 2 | JPEGImages/2010_005028.jpg SegmentationClass/2010_005028.png 3 | JPEGImages/2010_004933.jpg SegmentationClass/2010_004933.png 4 | JPEGImages/2009_003345.jpg SegmentationClass/2009_003345.png 5 | JPEGImages/2008_002641.jpg SegmentationClass/2008_002641.png 6 | JPEGImages/2011_002410.jpg SegmentationClass/2011_002410.png 7 | JPEGImages/2010_002382.jpg SegmentationClass/2010_002382.png 8 | JPEGImages/2007_002024.jpg SegmentationClass/2007_002024.png 9 | JPEGImages/2009_004095.jpg SegmentationClass/2009_004095.png 10 | JPEGImages/2009_001961.jpg SegmentationClass/2009_001961.png 11 | JPEGImages/2007_007783.jpg SegmentationClass/2007_007783.png 12 | JPEGImages/2011_001765.jpg SegmentationClass/2011_001765.png 13 | JPEGImages/2011_000216.jpg SegmentationClass/2011_000216.png 14 | JPEGImages/2011_000453.jpg SegmentationClass/2011_000453.png 15 | JPEGImages/2011_000252.jpg SegmentationClass/2011_000252.png 16 | JPEGImages/2009_003369.jpg SegmentationClass/2009_003369.png 17 | JPEGImages/2007_002361.jpg SegmentationClass/2007_002361.png 18 | JPEGImages/2011_003025.jpg SegmentationClass/2011_003025.png 19 | JPEGImages/2007_003541.jpg SegmentationClass/2007_003541.png 20 | JPEGImages/2009_001251.jpg SegmentationClass/2009_001251.png 21 | JPEGImages/2007_009759.jpg SegmentationClass/2007_009759.png 22 | JPEGImages/2007_003529.jpg SegmentationClass/2007_003529.png 23 | JPEGImages/2010_004805.jpg SegmentationClass/2010_004805.png 24 | JPEGImages/2008_001119.jpg SegmentationClass/2008_001119.png 25 | JPEGImages/2008_000259.jpg SegmentationClass/2008_000259.png 26 | JPEGImages/2008_002650.jpg SegmentationClass/2008_002650.png 27 | JPEGImages/2009_003012.jpg SegmentationClass/2009_003012.png 28 | JPEGImages/2010_004361.jpg SegmentationClass/2010_004361.png 29 | JPEGImages/2008_004026.jpg SegmentationClass/2008_004026.png 30 | JPEGImages/2008_003083.jpg SegmentationClass/2008_003083.png 31 | JPEGImages/2011_000550.jpg SegmentationClass/2011_000550.png 32 | JPEGImages/2010_004808.jpg SegmentationClass/2010_004808.png 33 | JPEGImages/2011_002503.jpg SegmentationClass/2011_002503.png 34 | JPEGImages/2011_002770.jpg SegmentationClass/2011_002770.png 35 | JPEGImages/2010_001183.jpg SegmentationClass/2010_001183.png 36 | JPEGImages/2011_000790.jpg SegmentationClass/2011_000790.png 37 | JPEGImages/2009_004328.jpg SegmentationClass/2009_004328.png 38 | JPEGImages/2008_000764.jpg SegmentationClass/2008_000764.png 39 | JPEGImages/2010_002055.jpg SegmentationClass/2010_002055.png 40 | JPEGImages/2009_003090.jpg SegmentationClass/2009_003090.png 41 | JPEGImages/2008_000540.jpg SegmentationClass/2008_000540.png 42 | JPEGImages/2009_001885.jpg SegmentationClass/2009_001885.png 43 | JPEGImages/2010_005223.jpg SegmentationClass/2010_005223.png 44 | JPEGImages/2009_001002.jpg SegmentationClass/2009_001002.png 45 | JPEGImages/2010_000466.jpg SegmentationClass/2010_000466.png 46 | JPEGImages/2008_003068.jpg SegmentationClass/2008_003068.png 47 | JPEGImages/2008_007357.jpg SegmentationClass/2008_007357.png 48 | JPEGImages/2008_007165.jpg SegmentationClass/2008_007165.png 49 | JPEGImages/2009_005037.jpg SegmentationClass/2009_005037.png 50 | JPEGImages/2007_004003.jpg SegmentationClass/2007_004003.png 51 | JPEGImages/2011_000468.jpg SegmentationClass/2011_000468.png 52 | JPEGImages/2008_001106.jpg SegmentationClass/2008_001106.png 53 | JPEGImages/2010_002139.jpg SegmentationClass/2010_002139.png 54 | JPEGImages/2011_002149.jpg SegmentationClass/2011_002149.png 55 | JPEGImages/2010_005744.jpg SegmentationClass/2010_005744.png 56 | JPEGImages/2008_000711.jpg SegmentationClass/2008_000711.png 57 | JPEGImages/2008_004892.jpg SegmentationClass/2008_004892.png 58 | JPEGImages/2010_002107.jpg SegmentationClass/2010_002107.png 59 | JPEGImages/2007_004476.jpg SegmentationClass/2007_004476.png 60 | JPEGImages/2009_004887.jpg SegmentationClass/2009_004887.png 61 | JPEGImages/2008_003769.jpg SegmentationClass/2008_003769.png 62 | JPEGImages/2010_000986.jpg SegmentationClass/2010_000986.png 63 | JPEGImages/2011_002119.jpg SegmentationClass/2011_002119.png 64 | JPEGImages/2008_002182.jpg SegmentationClass/2008_002182.png 65 | JPEGImages/2008_000436.jpg SegmentationClass/2008_000436.png 66 | JPEGImages/2009_000887.jpg SegmentationClass/2009_000887.png 67 | JPEGImages/2008_002868.jpg SegmentationClass/2008_002868.png 68 | JPEGImages/2008_008462.jpg SegmentationClass/2008_008462.png 69 | JPEGImages/2007_009030.jpg SegmentationClass/2007_009030.png 70 | JPEGImages/2008_001413.jpg SegmentationClass/2008_001413.png 71 | JPEGImages/2010_005927.jpg SegmentationClass/2010_005927.png 72 | JPEGImages/2009_000774.jpg SegmentationClass/2009_000774.png 73 | JPEGImages/2011_000197.jpg SegmentationClass/2011_000197.png 74 | JPEGImages/2008_002834.jpg SegmentationClass/2008_002834.png 75 | JPEGImages/2011_000551.jpg SegmentationClass/2011_000551.png 76 | JPEGImages/2009_001636.jpg SegmentationClass/2009_001636.png 77 | JPEGImages/2009_002072.jpg SegmentationClass/2009_002072.png 78 | JPEGImages/2008_002749.jpg SegmentationClass/2008_002749.png 79 | JPEGImages/2007_002142.jpg SegmentationClass/2007_002142.png 80 | JPEGImages/2007_006483.jpg SegmentationClass/2007_006483.png 81 | JPEGImages/2008_001523.jpg SegmentationClass/2008_001523.png 82 | JPEGImages/2007_003205.jpg SegmentationClass/2007_003205.png 83 | JPEGImages/2009_001270.jpg SegmentationClass/2009_001270.png 84 | JPEGImages/2007_009649.jpg SegmentationClass/2007_009649.png 85 | JPEGImages/2009_002849.jpg SegmentationClass/2009_002849.png 86 | JPEGImages/2010_005450.jpg SegmentationClass/2010_005450.png 87 | JPEGImages/2009_005269.jpg SegmentationClass/2009_005269.png 88 | JPEGImages/2010_003799.jpg SegmentationClass/2010_003799.png 89 | JPEGImages/2010_003230.jpg SegmentationClass/2010_003230.png 90 | JPEGImages/2010_005796.jpg SegmentationClass/2010_005796.png 91 | JPEGImages/2009_001735.jpg SegmentationClass/2009_001735.png 92 | JPEGImages/2008_005770.jpg SegmentationClass/2008_005770.png 93 | JPEGImages/2008_005367.jpg SegmentationClass/2008_005367.png 94 | JPEGImages/2011_000243.jpg SegmentationClass/2011_000243.png 95 | JPEGImages/2010_004694.jpg SegmentationClass/2010_004694.png 96 | JPEGImages/2007_009630.jpg SegmentationClass/2007_009630.png 97 | JPEGImages/2008_001188.jpg SegmentationClass/2008_001188.png 98 | JPEGImages/2011_000646.jpg SegmentationClass/2011_000646.png 99 | JPEGImages/2008_004663.jpg SegmentationClass/2008_004663.png 100 | JPEGImages/2007_006615.jpg SegmentationClass/2007_006615.png 101 | JPEGImages/2007_007021.jpg SegmentationClass/2007_007021.png 102 | JPEGImages/2008_002338.jpg SegmentationClass/2008_002338.png 103 | JPEGImages/2010_001347.jpg SegmentationClass/2010_001347.png 104 | JPEGImages/2009_002613.jpg SegmentationClass/2009_002613.png 105 | JPEGImages/2009_001782.jpg SegmentationClass/2009_001782.png 106 | JPEGImages/2010_004210.jpg SegmentationClass/2010_004210.png 107 | JPEGImages/2008_000309.jpg SegmentationClass/2008_000309.png 108 | JPEGImages/2007_007250.jpg SegmentationClass/2007_007250.png 109 | JPEGImages/2009_001444.jpg SegmentationClass/2009_001444.png 110 | JPEGImages/2009_001036.jpg SegmentationClass/2009_001036.png 111 | JPEGImages/2007_006212.jpg SegmentationClass/2007_006212.png 112 | JPEGImages/2011_000920.jpg SegmentationClass/2011_000920.png 113 | JPEGImages/2010_001273.jpg SegmentationClass/2010_001273.png 114 | JPEGImages/2010_001619.jpg SegmentationClass/2010_001619.png 115 | JPEGImages/2007_009597.jpg SegmentationClass/2007_009597.png 116 | JPEGImages/2008_005541.jpg SegmentationClass/2008_005541.png 117 | JPEGImages/2009_000684.jpg SegmentationClass/2009_000684.png 118 | JPEGImages/2008_006655.jpg SegmentationClass/2008_006655.png 119 | JPEGImages/2008_000832.jpg SegmentationClass/2008_000832.png 120 | JPEGImages/2010_001944.jpg SegmentationClass/2010_001944.png 121 | JPEGImages/2007_009322.jpg SegmentationClass/2007_009322.png 122 | JPEGImages/2010_001660.jpg SegmentationClass/2010_001660.png 123 | JPEGImages/2008_004430.jpg SegmentationClass/2008_004430.png 124 | JPEGImages/2009_005234.jpg SegmentationClass/2009_005234.png 125 | JPEGImages/2007_000648.jpg SegmentationClass/2007_000648.png 126 | JPEGImages/2007_009435.jpg SegmentationClass/2007_009435.png 127 | JPEGImages/2010_002018.jpg SegmentationClass/2010_002018.png 128 | JPEGImages/2008_002218.jpg SegmentationClass/2008_002218.png 129 | JPEGImages/2009_001937.jpg SegmentationClass/2009_001937.png 130 | JPEGImages/2007_000645.jpg SegmentationClass/2007_000645.png 131 | JPEGImages/2010_004365.jpg SegmentationClass/2010_004365.png 132 | JPEGImages/2010_002457.jpg SegmentationClass/2010_002457.png 133 | JPEGImages/2007_000170.jpg SegmentationClass/2007_000170.png 134 | JPEGImages/2007_002273.jpg SegmentationClass/2007_002273.png 135 | JPEGImages/2007_007902.jpg SegmentationClass/2007_007902.png 136 | JPEGImages/2010_002418.jpg SegmentationClass/2010_002418.png 137 | JPEGImages/2009_003340.jpg SegmentationClass/2009_003340.png 138 | JPEGImages/2011_000258.jpg SegmentationClass/2011_000258.png 139 | JPEGImages/2007_001416.jpg SegmentationClass/2007_001416.png 140 | JPEGImages/2010_000675.jpg SegmentationClass/2010_000675.png 141 | JPEGImages/2009_000720.jpg SegmentationClass/2009_000720.png 142 | JPEGImages/2010_004900.jpg SegmentationClass/2010_004900.png 143 | JPEGImages/2010_005898.jpg SegmentationClass/2010_005898.png 144 | JPEGImages/2007_003330.jpg SegmentationClass/2007_003330.png 145 | JPEGImages/2009_002588.jpg SegmentationClass/2009_002588.png 146 | JPEGImages/2010_004306.jpg SegmentationClass/2010_004306.png 147 | JPEGImages/2009_000553.jpg SegmentationClass/2009_000553.png 148 | JPEGImages/2007_001917.jpg SegmentationClass/2007_001917.png 149 | JPEGImages/2009_003519.jpg SegmentationClass/2009_003519.png 150 | JPEGImages/2009_004171.jpg SegmentationClass/2009_004171.png 151 | JPEGImages/2010_005952.jpg SegmentationClass/2010_005952.png 152 | JPEGImages/2007_009779.jpg SegmentationClass/2007_009779.png 153 | JPEGImages/2009_000444.jpg SegmentationClass/2009_000444.png 154 | JPEGImages/2009_003539.jpg SegmentationClass/2009_003539.png 155 | JPEGImages/2011_002222.jpg SegmentationClass/2011_002222.png 156 | JPEGImages/2010_000269.jpg SegmentationClass/2010_000269.png 157 | JPEGImages/2007_007585.jpg SegmentationClass/2007_007585.png 158 | JPEGImages/2007_009527.jpg SegmentationClass/2007_009527.png 159 | JPEGImages/2007_008927.jpg SegmentationClass/2007_008927.png 160 | JPEGImages/2011_000400.jpg SegmentationClass/2011_000400.png 161 | JPEGImages/2007_003580.jpg SegmentationClass/2007_003580.png 162 | JPEGImages/2009_003142.jpg SegmentationClass/2009_003142.png 163 | JPEGImages/2010_000978.jpg SegmentationClass/2010_000978.png 164 | JPEGImages/2007_001825.jpg SegmentationClass/2007_001825.png 165 | JPEGImages/2009_005287.jpg SegmentationClass/2009_005287.png 166 | JPEGImages/2009_000409.jpg SegmentationClass/2009_000409.png 167 | JPEGImages/2008_002064.jpg SegmentationClass/2008_002064.png 168 | JPEGImages/2008_003939.jpg SegmentationClass/2008_003939.png 169 | JPEGImages/2008_000923.jpg SegmentationClass/2008_000923.png 170 | JPEGImages/2010_002551.jpg SegmentationClass/2010_002551.png 171 | JPEGImages/2007_007698.jpg SegmentationClass/2007_007698.png 172 | JPEGImages/2009_003361.jpg SegmentationClass/2009_003361.png 173 | JPEGImages/2011_003184.jpg SegmentationClass/2011_003184.png 174 | JPEGImages/2007_004998.jpg SegmentationClass/2007_004998.png 175 | JPEGImages/2008_000290.jpg SegmentationClass/2008_000290.png 176 | JPEGImages/2011_001432.jpg SegmentationClass/2011_001432.png 177 | JPEGImages/2008_005006.jpg SegmentationClass/2008_005006.png 178 | JPEGImages/2008_001716.jpg SegmentationClass/2008_001716.png 179 | JPEGImages/2007_006899.jpg SegmentationClass/2007_006899.png 180 | JPEGImages/2010_003384.jpg SegmentationClass/2010_003384.png 181 | JPEGImages/2010_004625.jpg SegmentationClass/2010_004625.png 182 | JPEGImages/2009_001070.jpg SegmentationClass/2009_001070.png 183 | JPEGImages/2007_007890.jpg SegmentationClass/2007_007890.png 184 | JPEGImages/2008_003208.jpg SegmentationClass/2008_003208.png 185 | JPEGImages/2008_005953.jpg SegmentationClass/2008_005953.png 186 | JPEGImages/2010_001457.jpg SegmentationClass/2010_001457.png 187 | JPEGImages/2008_004259.jpg SegmentationClass/2008_004259.png 188 | JPEGImages/2011_000006.jpg SegmentationClass/2011_000006.png 189 | JPEGImages/2011_000651.jpg SegmentationClass/2011_000651.png 190 | JPEGImages/2010_001732.jpg SegmentationClass/2010_001732.png 191 | JPEGImages/2009_001615.jpg SegmentationClass/2009_001615.png 192 | JPEGImages/2011_001904.jpg SegmentationClass/2011_001904.png 193 | JPEGImages/2008_000470.jpg SegmentationClass/2008_000470.png 194 | JPEGImages/2011_000379.jpg SegmentationClass/2011_000379.png 195 | JPEGImages/2010_000810.jpg SegmentationClass/2010_000810.png 196 | JPEGImages/2009_004105.jpg SegmentationClass/2009_004105.png 197 | JPEGImages/2008_008263.jpg SegmentationClass/2008_008263.png 198 | JPEGImages/2007_006865.jpg SegmentationClass/2007_006865.png 199 | JPEGImages/2010_002166.jpg SegmentationClass/2010_002166.png 200 | JPEGImages/2008_005300.jpg SegmentationClass/2008_005300.png 201 | JPEGImages/2008_000238.jpg SegmentationClass/2008_000238.png 202 | JPEGImages/2007_000515.jpg SegmentationClass/2007_000515.png 203 | JPEGImages/2010_000195.jpg SegmentationClass/2010_000195.png 204 | JPEGImages/2010_004938.jpg SegmentationClass/2010_004938.png 205 | JPEGImages/2007_006605.jpg SegmentationClass/2007_006605.png 206 | JPEGImages/2007_009436.jpg SegmentationClass/2007_009436.png 207 | JPEGImages/2009_002567.jpg SegmentationClass/2009_002567.png 208 | JPEGImages/2009_002519.jpg SegmentationClass/2009_002519.png 209 | JPEGImages/2009_000635.jpg SegmentationClass/2009_000635.png 210 | JPEGImages/2011_000999.jpg SegmentationClass/2011_000999.png 211 | JPEGImages/2007_009594.jpg SegmentationClass/2007_009594.png 212 | JPEGImages/2009_001339.jpg SegmentationClass/2009_001339.png 213 | JPEGImages/2010_002527.jpg SegmentationClass/2010_002527.png 214 | JPEGImages/2007_002914.jpg SegmentationClass/2007_002914.png 215 | JPEGImages/2007_000733.jpg SegmentationClass/2007_000733.png 216 | JPEGImages/2007_000549.jpg SegmentationClass/2007_000549.png 217 | JPEGImages/2008_005196.jpg SegmentationClass/2008_005196.png 218 | JPEGImages/2011_001336.jpg SegmentationClass/2011_001336.png 219 | JPEGImages/2009_001502.jpg SegmentationClass/2009_001502.png 220 | JPEGImages/2009_005000.jpg SegmentationClass/2009_005000.png 221 | JPEGImages/2007_008948.jpg SegmentationClass/2007_008948.png 222 | JPEGImages/2007_004707.jpg SegmentationClass/2007_004707.png 223 | JPEGImages/2011_000637.jpg SegmentationClass/2011_000637.png 224 | JPEGImages/2011_000221.jpg SegmentationClass/2011_000221.png 225 | JPEGImages/2007_008932.jpg SegmentationClass/2007_008932.png 226 | JPEGImages/2007_001149.jpg SegmentationClass/2007_001149.png 227 | JPEGImages/2010_001261.jpg SegmentationClass/2010_001261.png 228 | JPEGImages/2011_000208.jpg SegmentationClass/2011_000208.png 229 | JPEGImages/2011_001412.jpg SegmentationClass/2011_001412.png 230 | JPEGImages/2008_001169.jpg SegmentationClass/2008_001169.png 231 | JPEGImages/2007_002967.jpg SegmentationClass/2007_002967.png 232 | JPEGImages/2008_005345.jpg SegmentationClass/2008_005345.png 233 | JPEGImages/2008_000074.jpg SegmentationClass/2008_000074.png 234 | JPEGImages/2008_004080.jpg SegmentationClass/2008_004080.png 235 | JPEGImages/2010_000772.jpg SegmentationClass/2010_000772.png 236 | JPEGImages/2010_002054.jpg SegmentationClass/2010_002054.png 237 | JPEGImages/2010_004704.jpg SegmentationClass/2010_004704.png 238 | JPEGImages/2007_007930.jpg SegmentationClass/2007_007930.png 239 | JPEGImages/2007_009709.jpg SegmentationClass/2007_009709.png 240 | JPEGImages/2011_001621.jpg SegmentationClass/2011_001621.png 241 | JPEGImages/2009_001104.jpg SegmentationClass/2009_001104.png 242 | JPEGImages/2007_007947.jpg SegmentationClass/2007_007947.png 243 | JPEGImages/2010_001618.jpg SegmentationClass/2010_001618.png 244 | JPEGImages/2007_006490.jpg SegmentationClass/2007_006490.png 245 | JPEGImages/2007_005086.jpg SegmentationClass/2007_005086.png 246 | JPEGImages/2008_003998.jpg SegmentationClass/2008_003998.png 247 | JPEGImages/2009_004919.jpg SegmentationClass/2009_004919.png 248 | JPEGImages/2007_007908.jpg SegmentationClass/2007_007908.png 249 | JPEGImages/2011_002956.jpg SegmentationClass/2011_002956.png 250 | JPEGImages/2010_004560.jpg SegmentationClass/2010_004560.png 251 | JPEGImages/2008_001498.jpg SegmentationClass/2008_001498.png 252 | JPEGImages/2009_001868.jpg SegmentationClass/2009_001868.png 253 | JPEGImages/2009_000400.jpg SegmentationClass/2009_000400.png 254 | JPEGImages/2009_002472.jpg SegmentationClass/2009_002472.png 255 | JPEGImages/2009_003860.jpg SegmentationClass/2009_003860.png 256 | JPEGImages/2008_002079.jpg SegmentationClass/2008_002079.png 257 | JPEGImages/2009_003757.jpg SegmentationClass/2009_003757.png 258 | JPEGImages/2009_000690.jpg SegmentationClass/2009_000690.png 259 | JPEGImages/2008_003373.jpg SegmentationClass/2008_003373.png 260 | JPEGImages/2009_002763.jpg SegmentationClass/2009_002763.png 261 | JPEGImages/2010_005055.jpg SegmentationClass/2010_005055.png 262 | JPEGImages/2010_003670.jpg SegmentationClass/2010_003670.png 263 | JPEGImages/2009_002885.jpg SegmentationClass/2009_002885.png 264 | JPEGImages/2008_000131.jpg SegmentationClass/2008_000131.png 265 | JPEGImages/2009_000987.jpg SegmentationClass/2009_000987.png 266 | JPEGImages/2008_003691.jpg SegmentationClass/2008_003691.png 267 | JPEGImages/2008_000103.jpg SegmentationClass/2008_000103.png 268 | JPEGImages/2008_002032.jpg SegmentationClass/2008_002032.png 269 | JPEGImages/2009_001283.jpg SegmentationClass/2009_001283.png 270 | JPEGImages/2008_003814.jpg SegmentationClass/2008_003814.png 271 | JPEGImages/2008_007201.jpg SegmentationClass/2008_007201.png 272 | JPEGImages/2011_001959.jpg SegmentationClass/2011_001959.png 273 | JPEGImages/2011_001542.jpg SegmentationClass/2011_001542.png 274 | JPEGImages/2009_001888.jpg SegmentationClass/2009_001888.png 275 | JPEGImages/2008_001926.jpg SegmentationClass/2008_001926.png 276 | JPEGImages/2011_002389.jpg SegmentationClass/2011_002389.png 277 | JPEGImages/2010_001177.jpg SegmentationClass/2010_001177.png 278 | JPEGImages/2010_004598.jpg SegmentationClass/2010_004598.png 279 | JPEGImages/2011_001536.jpg SegmentationClass/2011_001536.png 280 | JPEGImages/2011_003246.jpg SegmentationClass/2011_003246.png 281 | JPEGImages/2010_001515.jpg SegmentationClass/2010_001515.png 282 | JPEGImages/2007_007891.jpg SegmentationClass/2007_007891.png 283 | JPEGImages/2007_003788.jpg SegmentationClass/2007_003788.png 284 | JPEGImages/2008_004776.jpg SegmentationClass/2008_004776.png 285 | JPEGImages/2009_003088.jpg SegmentationClass/2009_003088.png 286 | JPEGImages/2009_000655.jpg SegmentationClass/2009_000655.png 287 | JPEGImages/2011_003121.jpg SegmentationClass/2011_003121.png 288 | JPEGImages/2007_000720.jpg SegmentationClass/2007_000720.png 289 | JPEGImages/2008_003774.jpg SegmentationClass/2008_003774.png 290 | JPEGImages/2007_009947.jpg SegmentationClass/2007_009947.png 291 | JPEGImages/2008_005600.jpg SegmentationClass/2008_005600.png 292 | JPEGImages/2011_000573.jpg SegmentationClass/2011_000573.png 293 | JPEGImages/2010_003269.jpg SegmentationClass/2010_003269.png 294 | JPEGImages/2007_005043.jpg SegmentationClass/2007_005043.png 295 | JPEGImages/2007_000121.jpg SegmentationClass/2007_000121.png 296 | JPEGImages/2009_003636.jpg SegmentationClass/2009_003636.png 297 | JPEGImages/2010_002440.jpg SegmentationClass/2010_002440.png 298 | JPEGImages/2010_003974.jpg SegmentationClass/2010_003974.png 299 | JPEGImages/2010_002973.jpg SegmentationClass/2010_002973.png 300 | JPEGImages/2011_002561.jpg SegmentationClass/2011_002561.png 301 | JPEGImages/2010_005643.jpg SegmentationClass/2010_005643.png 302 | JPEGImages/2008_000316.jpg SegmentationClass/2008_000316.png 303 | JPEGImages/2011_001895.jpg SegmentationClass/2011_001895.png 304 | JPEGImages/2009_001724.jpg SegmentationClass/2009_001724.png 305 | JPEGImages/2008_000505.jpg SegmentationClass/2008_000505.png 306 | JPEGImages/2008_003701.jpg SegmentationClass/2008_003701.png 307 | JPEGImages/2007_005951.jpg SegmentationClass/2007_005951.png 308 | JPEGImages/2009_004178.jpg SegmentationClass/2009_004178.png 309 | JPEGImages/2007_005314.jpg SegmentationClass/2007_005314.png 310 | JPEGImages/2007_003431.jpg SegmentationClass/2007_003431.png 311 | JPEGImages/2007_008526.jpg SegmentationClass/2007_008526.png 312 | JPEGImages/2009_000996.jpg SegmentationClass/2009_000996.png 313 | JPEGImages/2010_001842.jpg SegmentationClass/2010_001842.png 314 | JPEGImages/2007_007523.jpg SegmentationClass/2007_007523.png 315 | JPEGImages/2009_001972.jpg SegmentationClass/2009_001972.png 316 | JPEGImages/2010_003342.jpg SegmentationClass/2010_003342.png 317 | JPEGImages/2008_000861.jpg SegmentationClass/2008_000861.png 318 | JPEGImages/2007_006151.jpg SegmentationClass/2007_006151.png 319 | JPEGImages/2009_002423.jpg SegmentationClass/2009_002423.png 320 | JPEGImages/2011_001753.jpg SegmentationClass/2011_001753.png 321 | JPEGImages/2010_002499.jpg SegmentationClass/2010_002499.png 322 | JPEGImages/2007_005124.jpg SegmentationClass/2007_005124.png 323 | JPEGImages/2011_002585.jpg SegmentationClass/2011_002585.png 324 | JPEGImages/2011_001175.jpg SegmentationClass/2011_001175.png 325 | JPEGImages/2010_004283.jpg SegmentationClass/2010_004283.png 326 | JPEGImages/2009_005177.jpg SegmentationClass/2009_005177.png 327 | JPEGImages/2008_002697.jpg SegmentationClass/2008_002697.png 328 | JPEGImages/2007_002293.jpg SegmentationClass/2007_002293.png 329 | JPEGImages/2008_005266.jpg SegmentationClass/2008_005266.png 330 | JPEGImages/2007_006281.jpg SegmentationClass/2007_006281.png 331 | JPEGImages/2007_003118.jpg SegmentationClass/2007_003118.png 332 | JPEGImages/2009_002844.jpg SegmentationClass/2009_002844.png 333 | JPEGImages/2010_002720.jpg SegmentationClass/2010_002720.png 334 | JPEGImages/2007_000713.jpg SegmentationClass/2007_000713.png 335 | JPEGImages/2011_000652.jpg SegmentationClass/2011_000652.png 336 | JPEGImages/2010_004071.jpg SegmentationClass/2010_004071.png 337 | JPEGImages/2010_001399.jpg SegmentationClass/2010_001399.png 338 | JPEGImages/2008_007313.jpg SegmentationClass/2008_007313.png 339 | JPEGImages/2010_002778.jpg SegmentationClass/2010_002778.png 340 | JPEGImages/2007_007048.jpg SegmentationClass/2007_007048.png 341 | JPEGImages/2010_003170.jpg SegmentationClass/2010_003170.png 342 | JPEGImages/2008_000287.jpg SegmentationClass/2008_000287.png 343 | JPEGImages/2007_001027.jpg SegmentationClass/2007_001027.png 344 | JPEGImages/2007_005212.jpg SegmentationClass/2007_005212.png 345 | JPEGImages/2007_002105.jpg SegmentationClass/2007_002105.png 346 | JPEGImages/2009_000006.jpg SegmentationClass/2009_000006.png 347 | JPEGImages/2007_001073.jpg SegmentationClass/2007_001073.png 348 | JPEGImages/2008_005375.jpg SegmentationClass/2008_005375.png 349 | JPEGImages/2010_004669.jpg SegmentationClass/2010_004669.png 350 | JPEGImages/2011_002872.jpg SegmentationClass/2011_002872.png 351 | JPEGImages/2008_000584.jpg SegmentationClass/2008_000584.png 352 | JPEGImages/2009_004374.jpg SegmentationClass/2009_004374.png 353 | JPEGImages/2007_005878.jpg SegmentationClass/2007_005878.png 354 | JPEGImages/2008_000162.jpg SegmentationClass/2008_000162.png 355 | JPEGImages/2010_004960.jpg SegmentationClass/2010_004960.png 356 | JPEGImages/2009_003922.jpg SegmentationClass/2009_003922.png 357 | JPEGImages/2009_004990.jpg SegmentationClass/2009_004990.png 358 | JPEGImages/2008_002215.jpg SegmentationClass/2008_002215.png 359 | JPEGImages/2009_004446.jpg SegmentationClass/2009_004446.png 360 | JPEGImages/2007_003000.jpg SegmentationClass/2007_003000.png 361 | JPEGImages/2011_002947.jpg SegmentationClass/2011_002947.png 362 | JPEGImages/2010_004773.jpg SegmentationClass/2010_004773.png 363 | JPEGImages/2008_007242.jpg SegmentationClass/2008_007242.png 364 | JPEGImages/2011_001400.jpg SegmentationClass/2011_001400.png 365 | JPEGImages/2010_002097.jpg SegmentationClass/2010_002097.png 366 | JPEGImages/2007_000032.jpg SegmentationClass/2007_000032.png -------------------------------------------------------------------------------- /partitions/pascal/92/labeled.txt: -------------------------------------------------------------------------------- 1 | JPEGImages/2007_000733.jpg SegmentationClass/2007_000733.png 2 | JPEGImages/2010_004493.jpg SegmentationClass/2010_004493.png 3 | JPEGImages/2010_000466.jpg SegmentationClass/2010_000466.png 4 | JPEGImages/2009_000894.jpg SegmentationClass/2009_000894.png 5 | JPEGImages/2007_002234.jpg SegmentationClass/2007_002234.png 6 | JPEGImages/2009_005145.jpg SegmentationClass/2009_005145.png 7 | JPEGImages/2008_008511.jpg SegmentationClass/2008_008511.png 8 | JPEGImages/2007_009327.jpg SegmentationClass/2007_009327.png 9 | JPEGImages/2007_003431.jpg SegmentationClass/2007_003431.png 10 | JPEGImages/2009_005069.jpg SegmentationClass/2009_005069.png 11 | JPEGImages/2011_002585.jpg SegmentationClass/2011_002585.png 12 | JPEGImages/2009_004409.jpg SegmentationClass/2009_004409.png 13 | JPEGImages/2008_000645.jpg SegmentationClass/2008_000645.png 14 | JPEGImages/2007_005144.jpg SegmentationClass/2007_005144.png 15 | JPEGImages/2009_000895.jpg SegmentationClass/2009_000895.png 16 | JPEGImages/2010_003670.jpg SegmentationClass/2010_003670.png 17 | JPEGImages/2011_000243.jpg SegmentationClass/2011_000243.png 18 | JPEGImages/2010_000978.jpg SegmentationClass/2010_000978.png 19 | JPEGImages/2007_005797.jpg SegmentationClass/2007_005797.png 20 | JPEGImages/2011_001412.jpg SegmentationClass/2011_001412.png 21 | JPEGImages/2010_004074.jpg SegmentationClass/2010_004074.png 22 | JPEGImages/2009_001514.jpg SegmentationClass/2009_001514.png 23 | JPEGImages/2010_005217.jpg SegmentationClass/2010_005217.png 24 | JPEGImages/2010_005775.jpg SegmentationClass/2010_005775.png 25 | JPEGImages/2007_005043.jpg SegmentationClass/2007_005043.png 26 | JPEGImages/2008_000595.jpg SegmentationClass/2008_000595.png 27 | JPEGImages/2010_001933.jpg SegmentationClass/2010_001933.png 28 | JPEGImages/2011_003216.jpg SegmentationClass/2011_003216.png 29 | JPEGImages/2009_002052.jpg SegmentationClass/2009_002052.png 30 | JPEGImages/2008_001761.jpg SegmentationClass/2008_001761.png 31 | JPEGImages/2009_002362.jpg SegmentationClass/2009_002362.png 32 | JPEGImages/2010_004069.jpg SegmentationClass/2010_004069.png 33 | JPEGImages/2009_001270.jpg SegmentationClass/2009_001270.png 34 | JPEGImages/2008_006345.jpg SegmentationClass/2008_006345.png 35 | JPEGImages/2010_004900.jpg SegmentationClass/2010_004900.png 36 | JPEGImages/2009_003249.jpg SegmentationClass/2009_003249.png 37 | JPEGImages/2008_004014.jpg SegmentationClass/2008_004014.png 38 | JPEGImages/2010_004916.jpg SegmentationClass/2010_004916.png 39 | JPEGImages/2008_007242.jpg SegmentationClass/2008_007242.png 40 | JPEGImages/2009_004095.jpg SegmentationClass/2009_004095.png 41 | JPEGImages/2007_002142.jpg SegmentationClass/2007_002142.png 42 | JPEGImages/2011_000882.jpg SegmentationClass/2011_000882.png 43 | JPEGImages/2011_001015.jpg SegmentationClass/2011_001015.png 44 | JPEGImages/2010_002532.jpg SegmentationClass/2010_002532.png 45 | JPEGImages/2011_000069.jpg SegmentationClass/2011_000069.png 46 | JPEGImages/2008_000188.jpg SegmentationClass/2008_000188.png 47 | JPEGImages/2008_000105.jpg SegmentationClass/2008_000105.png 48 | JPEGImages/2009_004790.jpg SegmentationClass/2009_004790.png 49 | JPEGImages/2011_002488.jpg SegmentationClass/2011_002488.png 50 | JPEGImages/2009_001100.jpg SegmentationClass/2009_001100.png 51 | JPEGImages/2010_004560.jpg SegmentationClass/2010_004560.png 52 | JPEGImages/2010_004773.jpg SegmentationClass/2010_004773.png 53 | JPEGImages/2010_003093.jpg SegmentationClass/2010_003093.png 54 | JPEGImages/2007_009082.jpg SegmentationClass/2007_009082.png 55 | JPEGImages/2011_001536.jpg SegmentationClass/2011_001536.png 56 | JPEGImages/2008_000470.jpg SegmentationClass/2008_000470.png 57 | JPEGImages/2008_000284.jpg SegmentationClass/2008_000284.png 58 | JPEGImages/2010_005064.jpg SegmentationClass/2010_005064.png 59 | JPEGImages/2008_000336.jpg SegmentationClass/2008_000336.png 60 | JPEGImages/2008_008462.jpg SegmentationClass/2008_008462.png 61 | JPEGImages/2007_001960.jpg SegmentationClass/2007_001960.png 62 | JPEGImages/2007_004951.jpg SegmentationClass/2007_004951.png 63 | JPEGImages/2008_004112.jpg SegmentationClass/2008_004112.png 64 | JPEGImages/2009_001339.jpg SegmentationClass/2009_001339.png 65 | JPEGImages/2008_005074.jpg SegmentationClass/2008_005074.png 66 | JPEGImages/2010_003010.jpg SegmentationClass/2010_003010.png 67 | JPEGImages/2011_000122.jpg SegmentationClass/2011_000122.png 68 | JPEGImages/2010_001279.jpg SegmentationClass/2010_001279.png 69 | JPEGImages/2010_004363.jpg SegmentationClass/2010_004363.png 70 | JPEGImages/2011_002561.jpg SegmentationClass/2011_002561.png 71 | JPEGImages/2007_005989.jpg SegmentationClass/2007_005989.png 72 | JPEGImages/2010_003799.jpg SegmentationClass/2010_003799.png 73 | JPEGImages/2007_006004.jpg SegmentationClass/2007_006004.png 74 | JPEGImages/2007_009630.jpg SegmentationClass/2007_009630.png 75 | JPEGImages/2008_001159.jpg SegmentationClass/2008_001159.png 76 | JPEGImages/2007_007003.jpg SegmentationClass/2007_007003.png 77 | JPEGImages/2008_001610.jpg SegmentationClass/2008_001610.png 78 | JPEGImages/2007_007415.jpg SegmentationClass/2007_007415.png 79 | JPEGImages/2007_002273.jpg SegmentationClass/2007_002273.png 80 | JPEGImages/2010_003157.jpg SegmentationClass/2010_003157.png 81 | JPEGImages/2011_002107.jpg SegmentationClass/2011_002107.png 82 | JPEGImages/2010_005982.jpg SegmentationClass/2010_005982.png 83 | JPEGImages/2007_005878.jpg SegmentationClass/2007_005878.png 84 | JPEGImages/2011_000457.jpg SegmentationClass/2011_000457.png 85 | JPEGImages/2008_000832.jpg SegmentationClass/2008_000832.png 86 | JPEGImages/2008_003769.jpg SegmentationClass/2008_003769.png 87 | JPEGImages/2010_002047.jpg SegmentationClass/2010_002047.png 88 | JPEGImages/2009_002387.jpg SegmentationClass/2009_002387.png 89 | JPEGImages/2009_002117.jpg SegmentationClass/2009_002117.png 90 | JPEGImages/2011_002920.jpg SegmentationClass/2011_002920.png 91 | JPEGImages/2010_004760.jpg SegmentationClass/2010_004760.png 92 | JPEGImages/2008_004822.jpg SegmentationClass/2008_004822.png -------------------------------------------------------------------------------- /tools/train.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | now=$(date +"%Y%m%d_%H%M%S") 3 | 4 | config=configs/pascal.yaml 5 | labeled_id_path=partitions/pascal/92/labeled.txt 6 | unlabeled_id_path=partitions/pascal/92/unlabeled.txt 7 | save_path=exp/pascal/92/corrmatch 8 | #config=configs/cityscapes.yaml 9 | #labeled_id_path=partitions/cityscapes/1_4/labeled.txt 10 | #unlabeled_id_path=partitions/cityscapes/1_4/unlabeled.txt 11 | #save_path=exp/cityscapes/1_4/corrmatch 12 | 13 | mkdir -p $save_path 14 | 15 | python -m torch.distributed.launch \ 16 | --nproc_per_node=$1 \ 17 | --master_addr=localhost \ 18 | --master_port=$2 \ 19 | corrmatch.py \ 20 | --config=$config --labeled-id-path $labeled_id_path --unlabeled-id-path $unlabeled_id_path \ 21 | --save-path $save_path --port $2 2>&1 | tee $save_path/$now.txt -------------------------------------------------------------------------------- /tools/val.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | now=$(date +"%Y%m%d_%H%M%S") 3 | 4 | config=configs/pascal.yaml 5 | checkpoint_path=your/checkpoint/path 6 | 7 | python -m torch.distributed.launch \ 8 | --nproc_per_node=$1 \ 9 | --master_addr=localhost \ 10 | --master_port=$2 \ 11 | evaluate.py \ 12 | --config=$config --checkpoint_path $checkpoint_path -------------------------------------------------------------------------------- /tools/vis.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | now=$(date +"%Y%m%d_%H%M%S") 3 | 4 | config=configs/pascal.yaml 5 | labeled_id_path=partitions/pascal/92/labeled.txt 6 | unlabeled_id_path=partitions/pascal/92/unlabeled.txt 7 | save_path=exp/pascal/92/unimatch 8 | #config=configs/cityscapes.yaml 9 | #labeled_id_path=partitions/cityscapes/1_4/labeled.txt 10 | #unlabeled_id_path=partitions/cityscapes/1_4/unlabeled.txt 11 | #save_path=exp/cityscapes/1_4/unimatch 12 | 13 | mkdir -p $save_path 14 | 15 | python -m torch.distributed.launch \ 16 | --nproc_per_node=$1 \ 17 | --master_addr=localhost \ 18 | --master_port=$2 \ 19 | vis.py \ 20 | --config=$config --labeled-id-path $labeled_id_path --unlabeled-id-path $unlabeled_id_path \ 21 | --save-path $save_path --port $2 2>&1 | tee $save_path/$now.txt -------------------------------------------------------------------------------- /tools/vis_mask.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | now=$(date +"%Y%m%d_%H%M%S") 3 | 4 | config=configs/pascal.yaml 5 | labeled_id_path=partitions/pascal/92/labeled.txt 6 | unlabeled_id_path=partitions/pascal/92/unlabeled.txt 7 | save_path=exp/pascal/92/unimatch 8 | #config=configs/cityscapes.yaml 9 | #labeled_id_path=partitions/cityscapes/1_4/labeled.txt 10 | #unlabeled_id_path=partitions/cityscapes/1_4/unlabeled.txt 11 | #save_path=exp/cityscapes/1_4/unimatch 12 | 13 | mkdir -p $save_path 14 | 15 | python -m torch.distributed.launch \ 16 | --nproc_per_node=$1 \ 17 | --master_addr=localhost \ 18 | --master_port=$2 \ 19 | vis_mask.py \ 20 | --config=$config --labeled-id-path $labeled_id_path --unlabeled-id-path $unlabeled_id_path \ 21 | --save-path $save_path --port $2 2>&1 | tee $save_path/$now.txt -------------------------------------------------------------------------------- /util/dist_helper.py: -------------------------------------------------------------------------------- 1 | import os 2 | import subprocess 3 | 4 | import torch 5 | import torch.distributed as dist 6 | 7 | 8 | def setup_distributed(backend="nccl", port=None): 9 | """AdaHessian Optimizer 10 | Lifted from https://github.com/BIGBALLON/distribuuuu/blob/master/distribuuuu/utils.py 11 | Originally licensed MIT, Copyright (c) 2020 Wei Li 12 | """ 13 | num_gpus = torch.cuda.device_count() 14 | 15 | if "SLURM_JOB_ID" in os.environ: 16 | rank = int(os.environ["SLURM_PROCID"]) 17 | world_size = int(os.environ["SLURM_NTASKS"]) 18 | node_list = os.environ["SLURM_NODELIST"] 19 | addr = subprocess.getoutput(f"scontrol show hostname {node_list} | head -n1") 20 | # specify master port 21 | if port is not None: 22 | os.environ["MASTER_PORT"] = str(port) 23 | elif "MASTER_PORT" not in os.environ: 24 | os.environ["MASTER_PORT"] = "10685" 25 | if "MASTER_ADDR" not in os.environ: 26 | os.environ["MASTER_ADDR"] = addr 27 | os.environ["WORLD_SIZE"] = str(world_size) 28 | os.environ["LOCAL_RANK"] = str(rank % num_gpus) 29 | os.environ["RANK"] = str(rank) 30 | else: 31 | rank = int(os.environ["RANK"]) 32 | world_size = int(os.environ["WORLD_SIZE"]) 33 | 34 | torch.cuda.set_device(rank % num_gpus) 35 | 36 | dist.init_process_group( 37 | backend=backend, 38 | world_size=world_size, 39 | rank=rank, 40 | ) 41 | return rank, world_size 42 | -------------------------------------------------------------------------------- /util/mesh_helper.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import torch.nn.functional as F 3 | from einops.layers.torch import Rearrange, Reduce 4 | from einops import rearrange, reduce, asnumpy, parse_shape 5 | 6 | a = torch.randn([4, 21, 65, 65]) 7 | b = torch.randn([4, 21, 65, 65]) 8 | c = torch.randn([4, 21, 65, 65]) 9 | h, w = a.shape[-2:] 10 | h_local, w_local = 3, 3 11 | for i in torch.arange(h - 2) + 1: 12 | for j in torch.arange(w - 2) + 1: 13 | a_local = a[:, :, i - 1:i + 2, j - 1:j + 2] 14 | a_local = rearrange(a_local, 'n c h w -> n c (h w)') 15 | b_local = b[:, :, i - 1:i + 2, j - 1:j + 2] 16 | b_local = rearrange(b_local, 'n c h w -> n c (h w)') 17 | corr_local = torch.matmul(a_local.transpose(1, 2), b_local) / torch.sqrt(torch.tensor(a_local.shape[1]).float()) 18 | print(corr_local.shape) 19 | exit() 20 | c_local = c[:, :, i - 1:i + 2, j - 1:j + 2] 21 | c_local = rearrange(c_local, 'n c h w -> n c (h w)') 22 | out_local = rearrange(torch.matmul(c_local, F.softmax(corr_local, dim=-1)), 'n c (h w) -> n c h w', h=h_local, 23 | w=w_local) 24 | print(out_local.shape) 25 | -------------------------------------------------------------------------------- /util/ohem.py: -------------------------------------------------------------------------------- 1 | import torch 2 | from torch import nn 3 | import torch.nn.functional as F 4 | import numpy as np 5 | 6 | 7 | # see https://github.com/charlesCXK/TorchSemiSeg/blob/main/furnace/seg_opr/loss_opr.py 8 | class ProbOhemCrossEntropy2d(nn.Module): 9 | def __init__(self, ignore_index, reduction='mean', thresh=0.7, min_kept=256, 10 | down_ratio=1, use_weight=False): 11 | super(ProbOhemCrossEntropy2d, self).__init__() 12 | self.ignore_index = ignore_index 13 | self.thresh = float(thresh) 14 | self.min_kept = int(min_kept) 15 | self.down_ratio = down_ratio 16 | if use_weight: 17 | weight = torch.FloatTensor( 18 | [0.8373, 0.918, 0.866, 1.0345, 1.0166, 0.9969, 0.9754, 1.0489, 19 | 0.8786, 1.0023, 0.9539, 0.9843, 1.1116, 0.9037, 1.0865, 1.0955, 20 | 1.0865, 1.1529, 1.0507]) 21 | self.criterion = torch.nn.CrossEntropyLoss(reduction=reduction, 22 | weight=weight, 23 | ignore_index=ignore_index) 24 | else: 25 | self.criterion = torch.nn.CrossEntropyLoss(reduction=reduction, 26 | ignore_index=ignore_index) 27 | 28 | def forward(self, pred, target): 29 | b, c, h, w = pred.size() 30 | target = target.view(-1) 31 | valid_mask = target.ne(self.ignore_index) 32 | target = target * valid_mask.long() 33 | num_valid = valid_mask.sum() 34 | 35 | prob = F.softmax(pred, dim=1) 36 | prob = (prob.transpose(0, 1)).reshape(c, -1) 37 | 38 | if self.min_kept > num_valid: 39 | pass 40 | elif num_valid > 0: 41 | prob = prob.masked_fill_(~valid_mask, 1) 42 | mask_prob = prob[ 43 | target, torch.arange(len(target), dtype=torch.long)] 44 | threshold = self.thresh 45 | if self.min_kept > 0: 46 | index = mask_prob.argsort() 47 | threshold_index = index[min(len(index), self.min_kept) - 1] 48 | if mask_prob[threshold_index] > self.thresh: 49 | threshold = mask_prob[threshold_index] 50 | kept_mask = mask_prob.le(threshold) 51 | target = target * kept_mask.long() 52 | valid_mask = valid_mask * kept_mask 53 | 54 | target = target.masked_fill_(~valid_mask, self.ignore_index) 55 | target = target.view(b, h, w) 56 | 57 | return self.criterion(pred, target) 58 | -------------------------------------------------------------------------------- /util/thresh_helper.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import torch.distributed as dist 3 | 4 | 5 | class ThreshController: 6 | def __init__(self, nclass, momentum, thresh_init=0.85): 7 | 8 | self.thresh_global = torch.tensor(thresh_init).cuda() 9 | self.momentum = momentum 10 | self.nclass = nclass 11 | self.gpu_num = dist.get_world_size() 12 | 13 | def new_global_mask_pooling(self, pred, ignore_mask=None): 14 | return_dict = {} 15 | n, c, h, w = pred.shape 16 | pred_gather = torch.zeros([n * self.gpu_num, c, h, w]).cuda() 17 | dist.all_gather_into_tensor(pred_gather, pred) 18 | pred = pred_gather 19 | if ignore_mask is not None: 20 | ignore_mask_gather = torch.zeros([n * self.gpu_num, h, w]).cuda().long() 21 | dist.all_gather_into_tensor(ignore_mask_gather, ignore_mask) 22 | ignore_mask = ignore_mask_gather 23 | mask_pred = torch.argmax(pred, dim=1) 24 | pred_softmax = pred.softmax(dim=1) 25 | pred_conf = pred_softmax.max(dim=1)[0] 26 | unique_cls = torch.unique(mask_pred) 27 | cls_num = len(unique_cls) 28 | new_global = 0.0 29 | for cls in unique_cls: 30 | cls_map = (mask_pred == cls) 31 | if ignore_mask is not None: 32 | cls_map *= (ignore_mask != 255) 33 | if cls_map.sum() == 0: 34 | cls_num -= 1 35 | continue 36 | pred_conf_cls_all = pred_conf[cls_map] 37 | cls_max_conf = pred_conf_cls_all.max() 38 | new_global += cls_max_conf 39 | if cls_num > 0: 40 | return_dict['new_global'] = new_global / cls_num 41 | else: 42 | return_dict['new_global'] = None 43 | 44 | return return_dict 45 | 46 | def thresh_update(self, pred, ignore_mask=None, update_g=False): 47 | thresh = self.new_global_mask_pooling(pred, ignore_mask) 48 | if update_g and thresh['new_global'] is not None: 49 | self.thresh_global = self.momentum * self.thresh_global + (1 - self.momentum) * thresh['new_global'] 50 | 51 | def get_thresh_global(self): 52 | return self.thresh_global 53 | -------------------------------------------------------------------------------- /util/utils.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import logging 3 | import os 4 | 5 | 6 | def count_params(model): 7 | param_num = sum(p.numel() for p in model.parameters()) 8 | return param_num / 1e6 9 | 10 | 11 | def color_map(dataset='pascal'): 12 | cmap = np.zeros((256, 3), dtype='uint8') 13 | 14 | if dataset == 'pascal' or dataset == 'coco': 15 | def bitget(byteval, idx): 16 | return (byteval & (1 << idx)) != 0 17 | 18 | for i in range(256): 19 | r = g = b = 0 20 | c = i 21 | for j in range(8): 22 | r = r | (bitget(c, 0) << 7-j) 23 | g = g | (bitget(c, 1) << 7-j) 24 | b = b | (bitget(c, 2) << 7-j) 25 | c = c >> 3 26 | 27 | cmap[i] = np.array([r, g, b]) 28 | 29 | elif dataset == 'cityscapes': 30 | cmap[0] = np.array([128, 64, 128]) 31 | cmap[1] = np.array([244, 35, 232]) 32 | cmap[2] = np.array([70, 70, 70]) 33 | cmap[3] = np.array([102, 102, 156]) 34 | cmap[4] = np.array([190, 153, 153]) 35 | cmap[5] = np.array([153, 153, 153]) 36 | cmap[6] = np.array([250, 170, 30]) 37 | cmap[7] = np.array([220, 220, 0]) 38 | cmap[8] = np.array([107, 142, 35]) 39 | cmap[9] = np.array([152, 251, 152]) 40 | cmap[10] = np.array([70, 130, 180]) 41 | cmap[11] = np.array([220, 20, 60]) 42 | cmap[12] = np.array([255, 0, 0]) 43 | cmap[13] = np.array([0, 0, 142]) 44 | cmap[14] = np.array([0, 0, 70]) 45 | cmap[15] = np.array([0, 60, 100]) 46 | cmap[16] = np.array([0, 80, 100]) 47 | cmap[17] = np.array([0, 0, 230]) 48 | cmap[18] = np.array([119, 11, 32]) 49 | 50 | return cmap 51 | 52 | 53 | class AverageMeter(object): 54 | """Computes and stores the average and current value""" 55 | 56 | def __init__(self, length=0): 57 | self.length = length 58 | self.reset() 59 | 60 | def reset(self): 61 | if self.length > 0: 62 | self.history = [] 63 | else: 64 | self.count = 0 65 | self.sum = 0.0 66 | self.val = 0.0 67 | self.avg = 0.0 68 | 69 | def update(self, val, num=1): 70 | if self.length > 0: 71 | # currently assert num==1 to avoid bad usage, refine when there are some explict requirements 72 | assert num == 1 73 | self.history.append(val) 74 | if len(self.history) > self.length: 75 | del self.history[0] 76 | 77 | self.val = self.history[-1] 78 | self.avg = np.mean(self.history) 79 | else: 80 | self.val = val 81 | self.sum += val * num 82 | self.count += num 83 | self.avg = self.sum / self.count 84 | 85 | 86 | def intersectionAndUnion(output, target, K, ignore_index=255): 87 | # 'K' classes, output and target sizes are N or N * L or N * H * W, each value in range 0 to K - 1. 88 | assert output.ndim in [1, 2, 3] 89 | assert output.shape == target.shape 90 | output = output.reshape(output.size).copy() 91 | target = target.reshape(target.size) 92 | output[np.where(target == ignore_index)[0]] = ignore_index 93 | intersection = output[np.where(output == target)[0]] 94 | area_intersection, _ = np.histogram(intersection, bins=np.arange(K + 1)) 95 | area_output, _ = np.histogram(output, bins=np.arange(K + 1)) 96 | area_target, _ = np.histogram(target, bins=np.arange(K + 1)) 97 | area_union = area_output + area_target - area_intersection 98 | return area_intersection, area_union, area_target 99 | 100 | 101 | logs = set() 102 | 103 | 104 | def init_log(name, level=logging.INFO): 105 | if (name, level) in logs: 106 | return 107 | logs.add((name, level)) 108 | logger = logging.getLogger(name) 109 | logger.setLevel(level) 110 | ch = logging.StreamHandler() 111 | ch.setLevel(level) 112 | if "SLURM_PROCID" in os.environ: 113 | rank = int(os.environ["SLURM_PROCID"]) 114 | logger.addFilter(lambda record: rank == 0) 115 | else: 116 | rank = 0 117 | format_str = "[%(asctime)s][%(levelname)8s] %(message)s" 118 | formatter = logging.Formatter(format_str) 119 | ch.setFormatter(formatter) 120 | logger.addHandler(ch) 121 | return logger 122 | -------------------------------------------------------------------------------- /vis.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | import os 3 | 4 | import torch 5 | import torch.distributed as dist 6 | import torch.nn.functional as F 7 | from torch.utils.data import DataLoader 8 | import yaml 9 | import matplotlib 10 | 11 | matplotlib.use('agg') 12 | import matplotlib.pyplot as plt 13 | import seaborn as sns 14 | from einops import rearrange 15 | 16 | from dataset.semi import SemiDataset 17 | from model.semseg.deeplabv3plus_vis import DeepLabV3Plus 18 | from util.dist_helper import setup_distributed 19 | 20 | parser = argparse.ArgumentParser(description='Semi-Supervised Semantic Segmentation') 21 | parser.add_argument('--config', type=str, required=True) 22 | parser.add_argument('--labeled-id-path', type=str, required=True) 23 | parser.add_argument('--unlabeled-id-path', type=str, required=True) 24 | parser.add_argument('--save-path', type=str, required=True) 25 | parser.add_argument('--local_rank', default=0, type=int) 26 | parser.add_argument('--port', default=None, type=int) 27 | args = parser.parse_args() 28 | 29 | 30 | def corr_compute(feat): 31 | Q = rearrange(feat, 'n c h w -> n c (h w)') 32 | K = rearrange(feat, 'n c h w -> n c (h w)') 33 | corr_map = torch.matmul(Q.transpose(1, 2), K) / torch.sqrt(torch.tensor(Q.shape[1]).float()) 34 | corr_map = F.softmax(corr_map, dim=-1) 35 | return corr_map 36 | 37 | 38 | def corr2heatmap_save(corr_map_i, pixel_index): 39 | temp_map = rearrange(corr_map_i[pixel_index], '(h w) -> 1 1 h w', h=c4_feats_i.shape[-2], w=c4_feats_i.shape[-1]) 40 | temp_map = F.interpolate(temp_map, (h, w), mode='bilinear') 41 | temp_map = rearrange(temp_map, '1 1 h w -> h w') 42 | range_ = torch.max(temp_map) - torch.min(temp_map) 43 | temp_map = (- torch.min(temp_map) + temp_map) / range_ 44 | plt.figure(figsize=(w / 50, h / 50)) 45 | heat_map = sns.heatmap(temp_map.cpu().numpy(), cbar=False) 46 | heat_map = heat_map.get_figure() 47 | plt.axis('off') 48 | 49 | heat_map.savefig('temp/{}/{}_{}_corr.png'.format(file_name, int(pixel_index / c4_feats_i.shape[-1]) * int( 50 | h / c4_feats_i.shape[-2]), int(pixel_index % c4_feats_i.shape[-1]) * int(w / c4_feats_i.shape[-1])), 51 | pad_inches=0, bbox_inches='tight') 52 | plt.clf() 53 | plt.close() 54 | del heat_map, temp_map 55 | 56 | 57 | rank, word_size = setup_distributed(port=args.port) 58 | 59 | cfg = yaml.load(open('configs/pascal.yaml', "r"), Loader=yaml.Loader) 60 | 61 | model = DeepLabV3Plus(cfg) 62 | model.load_state_dict(torch.load('Your/checkpoint/path')) 63 | model = torch.nn.SyncBatchNorm.convert_sync_batchnorm(model) 64 | model.cuda() 65 | 66 | local_rank = int(os.environ["LOCAL_RANK"]) 67 | model = torch.nn.parallel.DistributedDataParallel(model, device_ids=[local_rank], 68 | output_device=local_rank, find_unused_parameters=False) 69 | 70 | valset = SemiDataset(cfg['dataset'], cfg['data_root'], 'val') 71 | valsampler = torch.utils.data.distributed.DistributedSampler(valset, shuffle=False) 72 | valloader = DataLoader(valset, batch_size=1, pin_memory=True, num_workers=4, 73 | drop_last=False, sampler=valsampler) 74 | 75 | model.eval() 76 | 77 | with torch.no_grad(): 78 | for img, mask, ids, img_ori in valloader: 79 | dist.barrier() 80 | img = img.cuda() 81 | b, _, h, w = img.shape 82 | res = model(img, use_corr=True) 83 | pred = res['out'] 84 | pred_mask = pred.argmax(dim=1) 85 | pred_conf = pred.softmax(dim=1).max(dim=1)[0] 86 | pred_conf_fliter = (pred_conf <= 0.95) 87 | mask_fliter = pred_mask.clone() 88 | mask_fliter[pred_conf_fliter] = 255 89 | corr_map = res['corr_map'] 90 | c4_feats = res['c4'] 91 | 92 | for i in range(pred_mask.shape[0]): 93 | file_name = ids[i].split(' ')[0].split('/')[1].split('.')[0] 94 | if not os.path.exists('temp/{}'.format(file_name)): 95 | os.mkdir('temp/{}'.format(file_name)) 96 | print(file_name) 97 | mask_pred_i = pred_mask[i] 98 | mask_i = mask[i] 99 | mask_filter_i = mask_fliter[i] 100 | corr_map_i = corr_map[i] 101 | c4_feats_i = c4_feats[i] 102 | for pixel_index in range(corr_map_i.shape[0]): 103 | corr2heatmap_save(corr_map_i, pixel_index) 104 | -------------------------------------------------------------------------------- /vis_mask.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | import os 3 | 4 | import torch 5 | import torch.distributed as dist 6 | import torch.nn.functional as F 7 | from torch.utils.data import DataLoader 8 | import yaml 9 | import matplotlib 10 | 11 | matplotlib.use('agg') 12 | import matplotlib.pyplot as plt 13 | from einops import rearrange 14 | import numpy as np 15 | from PIL import Image 16 | 17 | from dataset.semi import SemiDataset 18 | from model.semseg.deeplabv3plus_vis import DeepLabV3Plus 19 | from util.dist_helper import setup_distributed 20 | 21 | parser = argparse.ArgumentParser(description='Semi-Supervised Semantic Segmentation') 22 | parser.add_argument('--config', type=str, required=True) 23 | parser.add_argument('--labeled-id-path', type=str, required=True) 24 | parser.add_argument('--unlabeled-id-path', type=str, required=True) 25 | parser.add_argument('--save-path', type=str, required=True) 26 | parser.add_argument('--local_rank', default=0, type=int) 27 | parser.add_argument('--port', default=None, type=int) 28 | args = parser.parse_args() 29 | 30 | def color_map(dataset='pascal'): 31 | cmap = np.zeros((256, 3), dtype='uint8') 32 | 33 | if dataset == 'pascal' or dataset == 'coco': 34 | def bitget(byteval, idx): 35 | return (byteval & (1 << idx)) != 0 36 | 37 | for i in range(256): 38 | r = g = b = 0 39 | c = i 40 | for j in range(8): 41 | r = r | (bitget(c, 0) << 7-j) 42 | g = g | (bitget(c, 1) << 7-j) 43 | b = b | (bitget(c, 2) << 7-j) 44 | c = c >> 3 45 | 46 | cmap[i] = np.array([r, g, b]) 47 | 48 | elif dataset == 'cityscapes': 49 | cmap[0] = np.array([128, 64, 128]) 50 | cmap[1] = np.array([244, 35, 232]) 51 | cmap[2] = np.array([70, 70, 70]) 52 | cmap[3] = np.array([102, 102, 156]) 53 | cmap[4] = np.array([190, 153, 153]) 54 | cmap[5] = np.array([153, 153, 153]) 55 | cmap[6] = np.array([250, 170, 30]) 56 | cmap[7] = np.array([220, 220, 0]) 57 | cmap[8] = np.array([107, 142, 35]) 58 | cmap[9] = np.array([152, 251, 152]) 59 | cmap[10] = np.array([70, 130, 180]) 60 | cmap[11] = np.array([220, 20, 60]) 61 | cmap[12] = np.array([255, 0, 0]) 62 | cmap[13] = np.array([0, 0, 142]) 63 | cmap[14] = np.array([0, 0, 70]) 64 | cmap[15] = np.array([0, 60, 100]) 65 | cmap[16] = np.array([0, 80, 100]) 66 | cmap[17] = np.array([0, 0, 230]) 67 | cmap[18] = np.array([119, 11, 32]) 68 | 69 | return cmap 70 | 71 | 72 | rank, word_size = setup_distributed(port=args.port) 73 | 74 | cfg = yaml.load(open('configs/pascal.yaml', "r"), Loader=yaml.Loader) 75 | 76 | model = DeepLabV3Plus(cfg) 77 | model.load_state_dict(torch.load('Your/checkpoint/path')) 78 | model = torch.nn.SyncBatchNorm.convert_sync_batchnorm(model) 79 | model.cuda() 80 | 81 | local_rank = int(os.environ["LOCAL_RANK"]) 82 | model = torch.nn.parallel.DistributedDataParallel(model, device_ids=[local_rank], 83 | output_device=local_rank, find_unused_parameters=False) 84 | 85 | valset = SemiDataset(cfg['dataset'], cfg['data_root'], 'val') 86 | valsampler = torch.utils.data.distributed.DistributedSampler(valset, shuffle=False) 87 | valloader = DataLoader(valset, batch_size=1, pin_memory=True, num_workers=4, 88 | drop_last=False, sampler=valsampler) 89 | 90 | model.eval() 91 | if local_rank == 0: 92 | if not os.path.exists('visual'): 93 | os.mkdir('visual') 94 | 95 | with torch.no_grad(): 96 | for img, mask, ids, img_ori in valloader: 97 | dist.barrier() 98 | 99 | img = img.cuda() 100 | b, _, h, w = img.shape 101 | res = model(img, use_corr=True) 102 | pred = res['out'] 103 | pred_mask = pred.argmax(dim=1) 104 | pred_conf = pred.softmax(dim=1).max(dim=1)[0] 105 | # take 0.95 as an example 106 | pred_conf_fliter = (pred_conf <= 0.95) 107 | mask_fliter = pred_mask.clone() 108 | mask_fliter[pred_conf_fliter] = 255 109 | for i in range(pred_mask.shape[0]): 110 | file_name = ids[i].split(' ')[0].split('/')[1].split('.')[0] 111 | if not os.path.exists('visual/{}'.format(file_name)): 112 | os.mkdir('visual/{}'.format(file_name)) 113 | print(file_name) 114 | mask_pred_i = pred_mask[i] 115 | mask_i = mask[i] 116 | mask_filter_i = mask_fliter[i] 117 | mask_i = Image.fromarray(mask_i.cpu().numpy().astype(np.uint8), mode='P') 118 | mask_pred_i = Image.fromarray(mask_pred_i.cpu().numpy().astype(np.uint8), mode='P') 119 | mask_filter_i = Image.fromarray(mask_filter_i.cpu().numpy().astype(np.uint8), mode='P') 120 | platte = color_map() 121 | mask_i.putpalette(platte) 122 | mask_pred_i.putpalette(platte) 123 | mask_filter_i.putpalette(platte) 124 | mask_i.save('visual/{}/mask_gt.png'.format(file_name)) 125 | mask_pred_i.save('visual/{}/mask_pred.png'.format(file_name)) 126 | mask_filter_i.save('visual/{}/mask_filter.png'.format(file_name)) 127 | 128 | --------------------------------------------------------------------------------