diff --git a/.gitignore b/.gitignore
index 04aa02d..3e718ff 100644
--- a/.gitignore
+++ b/.gitignore
@@ -131,3 +131,15 @@ dmypy.json
checkpoints/
logs/
+DeepLab-V2-PyTorch/data/
+DeepLab-V2-PyTorch/__pycache__/
+DeepLab-V2-PyTorch/libs/__pycache__/
+
+
+DeepLabV3Plus-Pytorch/checkpoints
+DeepLabV3Plus-Pytorch/__pycache__
+DeepLabV3Plus-Pytorch/datasets/__pycache__
+DeepLabV3Plus-Pytorch/metrics/__pycache__
+DeepLabV3Plus-Pytorch/network/__pycache__
+DeepLabV3Plus-Pytorch/utils/__pycache__
+
diff --git a/DeepLab-V2-PyTorch/eval.sh b/DeepLab-V2-PyTorch/eval.sh
index 684ad17..ac78407 100755
--- a/DeepLab-V2-PyTorch/eval.sh
+++ b/DeepLab-V2-PyTorch/eval.sh
@@ -3,12 +3,12 @@
DATASET=voc12
LOG_DIR=Deeplabv2_pseudo_segmentation_labels_2gpu
-CUDA_VISIBLE_DEVICES=0 python main.py test \
+CUDA_VISIBLE_DEVICES=1 python main.py test \
-c configs/${DATASET}.yaml \
-m data/models/${LOG_DIR}/deeplabv2_resnet101_msc/*/checkpoint_final.pth \
--log_dir=${LOG_DIR}
# evaluate the model with CRF post-processing
-CUDA_VISIBLE_DEVICES=0 python main.py crf \
+CUDA_VISIBLE_DEVICES=1 python main.py crf \
-c configs/${DATASET}.yaml \
--log_dir=${LOG_DIR}
diff --git a/DeepLab-V2-PyTorch/libs/utils/stream_metrics.py b/DeepLab-V2-PyTorch/libs/utils/stream_metrics.py
new file mode 100644
index 0000000..3bc801c
--- /dev/null
+++ b/DeepLab-V2-PyTorch/libs/utils/stream_metrics.py
@@ -0,0 +1,101 @@
+import numpy as np
+from sklearn.metrics import confusion_matrix
+
+class _StreamMetrics(object):
+ def __init__(self):
+ """ Overridden by subclasses """
+ raise NotImplementedError()
+
+ def update(self, gt, pred):
+ """ Overridden by subclasses """
+ raise NotImplementedError()
+
+ def get_results(self):
+ """ Overridden by subclasses """
+ raise NotImplementedError()
+
+ def to_str(self, metrics):
+ """ Overridden by subclasses """
+ raise NotImplementedError()
+
+ def reset(self):
+ """ Overridden by subclasses """
+ raise NotImplementedError()
+
+class StreamSegMetrics(_StreamMetrics):
+ """
+ Stream Metrics for Semantic Segmentation Task
+ """
+ def __init__(self, n_classes):
+ self.n_classes = n_classes
+ self.confusion_matrix = np.zeros((n_classes, n_classes))
+
+ def update(self, label_trues, label_preds):
+ for lt, lp in zip(label_trues, label_preds):
+ self.confusion_matrix += self._fast_hist( lt.flatten(), lp.flatten() )
+
+ @staticmethod
+ def to_str(results):
+ string = "\n"
+ for k, v in results.items():
+ if k!="Class IoU":
+ string += "%s: %f\n"%(k, v)
+
+ #string+='Class IoU:\n'
+ #for k, v in results['Class IoU'].items():
+ # string += "\tclass %d: %f\n"%(k, v)
+ return string
+
+ def _fast_hist(self, label_true, label_pred):
+ mask = (label_true >= 0) & (label_true < self.n_classes)
+ hist = np.bincount(
+ self.n_classes * label_true[mask].astype(int) + label_pred[mask],
+ minlength=self.n_classes ** 2,
+ ).reshape(self.n_classes, self.n_classes)
+ return hist
+
+ def get_results(self):
+ """Returns accuracy score evaluation result.
+ - overall accuracy
+ - mean accuracy
+ - mean IU
+ - fwavacc
+ """
+ hist = self.confusion_matrix
+ acc = np.diag(hist).sum() / hist.sum()
+ acc_cls = np.diag(hist) / hist.sum(axis=1)
+ acc_cls = np.nanmean(acc_cls)
+ iu = np.diag(hist) / (hist.sum(axis=1) + hist.sum(axis=0) - np.diag(hist))
+ mean_iu = np.nanmean(iu)
+ freq = hist.sum(axis=1) / hist.sum()
+ fwavacc = (freq[freq > 0] * iu[freq > 0]).sum()
+ cls_iu = dict(zip(range(self.n_classes), iu))
+
+ return {
+ "Overall Acc": acc,
+ "Mean Acc": acc_cls,
+ "FreqW Acc": fwavacc,
+ "Mean IoU": mean_iu,
+ "Class IoU": cls_iu,
+ }
+
+ def reset(self):
+ self.confusion_matrix = np.zeros((self.n_classes, self.n_classes))
+
+class AverageMeter(object):
+ """Computes and stores the average and current value"""
+ def __init__(self):
+ self.reset()
+
+ def reset(self):
+ self.val = 0
+ self.avg = 0
+ self.sum = 0
+ self.count = 0
+
+ def update(self, val, n=1):
+ self.val = val
+ self.sum += val * n
+ self.count += n
+ self.avg = self.sum / self.count
+
diff --git a/DeepLab-V2-PyTorch/main_v2.py b/DeepLab-V2-PyTorch/main_v2.py
new file mode 100755
index 0000000..806e413
--- /dev/null
+++ b/DeepLab-V2-PyTorch/main_v2.py
@@ -0,0 +1,315 @@
+#!/usr/bin/env python
+# coding: utf-8
+#
+# Author: Kazuto Nakashima
+# URL: https://kazuto1011.github.io
+# Date: 07 January 2019
+
+from __future__ import absolute_import, division, print_function
+
+import random
+import os
+import argparse
+import cv2
+import time
+
+import numpy as np
+import torch
+import torch.nn as nn
+import torch.nn.functional as F
+import yaml
+from addict import Dict
+from PIL import Image
+
+from libs.datasets import get_dataset
+from libs.models import *
+from libs.utils import PolynomialLR
+from libs.utils.stream_metrics import StreamSegMetrics, AverageMeter
+
+
+def get_argparser():
+ parser = argparse.ArgumentParser()
+
+ # Datset Options
+ parser.add_argument("--config_path", type=str, help="config file path")
+ parser.add_argument("--gt_path", type=str, help="gt label path")
+ parser.add_argument("--log_dir", type=str, help="training log path")
+ parser.add_argument("--cuda", type=bool, default=True, help="GPU")
+ parser.add_argument("--random_seed", type=int, default=1, help="random seed (default: 1)")
+ parser.add_argument("--amp", action='store_true', default=False)
+ parser.add_argument("--val_interval", type=int, default=100, help="val_interval")
+
+ return parser
+
+
+def makedirs(dirs):
+ if not os.path.exists(dirs):
+ os.makedirs(dirs)
+
+
+def get_device(cuda):
+ cuda = cuda and torch.cuda.is_available()
+ device = torch.device("cuda" if cuda else "cpu")
+ if cuda:
+ print("Device:")
+ for i in range(torch.cuda.device_count()):
+ print(" {}:".format(i), torch.cuda.get_device_name(i))
+ else:
+ print("Device: CPU")
+ return device
+
+
+def get_params(model, key):
+ # For Dilated FCN
+ if key == "1x":
+ for m in model.named_modules():
+ if "layer" in m[0]:
+ if isinstance(m[1], nn.Conv2d):
+ for p in m[1].parameters():
+ yield p
+ # For conv weight in the ASPP module
+ if key == "10x":
+ for m in model.named_modules():
+ if "aspp" in m[0]:
+ if isinstance(m[1], nn.Conv2d):
+ yield m[1].weight
+ # For conv bias in the ASPP module
+ if key == "20x":
+ for m in model.named_modules():
+ if "aspp" in m[0]:
+ if isinstance(m[1], nn.Conv2d):
+ yield m[1].bias
+
+
+def resize_labels(labels, size):
+ """
+ Downsample labels for 0.5x and 0.75x logits by nearest interpolation.
+ Other nearest methods result in misaligned labels.
+ -> F.interpolate(labels, shape, mode='nearest')
+ -> cv2.resize(labels, shape, interpolation=cv2.INTER_NEAREST)
+ """
+ new_labels = []
+ for label in labels:
+ label = label.float().numpy()
+ label = Image.fromarray(label).resize(size, resample=Image.NEAREST)
+ new_labels.append(np.asarray(label))
+ new_labels = torch.LongTensor(new_labels)
+ return new_labels
+
+
+def main():
+ opts = get_argparser().parse_args()
+ print(opts)
+
+ # Setup random seed
+ torch.manual_seed(opts.random_seed)
+ np.random.seed(opts.random_seed)
+ random.seed(opts.random_seed)
+
+ """
+ Training DeepLab by v2 protocol
+ """
+ # Configuration
+
+ with open(opts.config_path) as f:
+ CONFIG = Dict(yaml.load(f))
+
+ device = get_device(opts.cuda)
+ torch.backends.cudnn.benchmark = True
+
+ # Dataset
+ train_dataset = get_dataset(CONFIG.DATASET.NAME)(
+ root=CONFIG.DATASET.ROOT,
+ split=CONFIG.DATASET.SPLIT.TRAIN,
+ ignore_label=CONFIG.DATASET.IGNORE_LABEL,
+ mean_bgr=(CONFIG.IMAGE.MEAN.B, CONFIG.IMAGE.MEAN.G, CONFIG.IMAGE.MEAN.R),
+ augment=True,
+ base_size=CONFIG.IMAGE.SIZE.BASE,
+ crop_size=CONFIG.IMAGE.SIZE.TRAIN,
+ scales=CONFIG.DATASET.SCALES,
+ flip=True,
+ gt_path=opts.gt_path,
+ )
+ print(train_dataset)
+ print()
+
+ valid_dataset = get_dataset(CONFIG.DATASET.NAME)(
+ root=CONFIG.DATASET.ROOT,
+ split=CONFIG.DATASET.SPLIT.VAL,
+ ignore_label=CONFIG.DATASET.IGNORE_LABEL,
+ mean_bgr=(CONFIG.IMAGE.MEAN.B, CONFIG.IMAGE.MEAN.G, CONFIG.IMAGE.MEAN.R),
+ augment=False,
+ gt_path="SegmentationClassAug",
+ )
+ print(valid_dataset)
+
+ # DataLoader
+ train_loader = torch.utils.data.DataLoader(
+ dataset=train_dataset,
+ batch_size=CONFIG.SOLVER.BATCH_SIZE.TRAIN,
+ num_workers=CONFIG.DATALOADER.NUM_WORKERS,
+ shuffle=True,
+ )
+ valid_loader = torch.utils.data.DataLoader(
+ dataset=valid_dataset,
+ batch_size=CONFIG.SOLVER.BATCH_SIZE.TEST,
+ num_workers=CONFIG.DATALOADER.NUM_WORKERS,
+ shuffle=False,
+ )
+
+ # Model check
+ print("Model:", CONFIG.MODEL.NAME)
+ assert (
+ CONFIG.MODEL.NAME == "DeepLabV2_ResNet101_MSC"
+ ), 'Currently support only "DeepLabV2_ResNet101_MSC"'
+
+ # Model setup
+ model = eval(CONFIG.MODEL.NAME)(n_classes=CONFIG.DATASET.N_CLASSES)
+ print(" Init:", CONFIG.MODEL.INIT_MODEL)
+ state_dict = torch.load(CONFIG.MODEL.INIT_MODEL, map_location='cpu')
+
+ for m in model.base.state_dict().keys():
+ if m not in state_dict.keys():
+ print(" Skip init:", m)
+
+ model.base.load_state_dict(state_dict, strict=False) # to skip ASPP
+ model = nn.DataParallel(model)
+ model.to(device)
+
+ # Loss definition
+ criterion = nn.CrossEntropyLoss(ignore_index=CONFIG.DATASET.IGNORE_LABEL)
+ criterion.to(device)
+
+ # Optimizer
+ optimizer = torch.optim.SGD(
+ # cf lr_mult and decay_mult in train.prototxt
+ params=[
+ {
+ "params": get_params(model.module, key="1x"),
+ "lr": CONFIG.SOLVER.LR,
+ "weight_decay": CONFIG.SOLVER.WEIGHT_DECAY,
+ },
+ {
+ "params": get_params(model.module, key="10x"),
+ "lr": 10 * CONFIG.SOLVER.LR,
+ "weight_decay": CONFIG.SOLVER.WEIGHT_DECAY,
+ },
+ {
+ "params": get_params(model.module, key="20x"),
+ "lr": 20 * CONFIG.SOLVER.LR,
+ "weight_decay": 0.0,
+ },
+ ],
+ momentum=CONFIG.SOLVER.MOMENTUM,
+ )
+
+ # Learning rate scheduler
+ scheduler = PolynomialLR(
+ optimizer=optimizer,
+ step_size=CONFIG.SOLVER.LR_DECAY,
+ iter_max=CONFIG.SOLVER.ITER_MAX,
+ power=CONFIG.SOLVER.POLY_POWER,
+ )
+
+ # Path to save models
+ checkpoint_dir = os.path.join(
+ CONFIG.EXP.OUTPUT_DIR,
+ "models",
+ opts.log_dir,
+ CONFIG.MODEL.NAME.lower(),
+ CONFIG.DATASET.SPLIT.TRAIN,
+ )
+ makedirs(checkpoint_dir)
+ print("Checkpoint dst:", checkpoint_dir)
+
+ model.train()
+
+ metrics = StreamSegMetrics(CONFIG.DATASET.N_CLASSES)
+
+ scaler = torch.cuda.amp.GradScaler(enabled=opts.amp)
+ avg_loss = AverageMeter()
+ avg_time = AverageMeter()
+
+ curr_iter = 0
+ best_score = 0
+ end_time = time.time()
+
+ while True:
+ for _, images, labels, cls_labels in train_loader:
+ curr_iter += 1
+ loss = 0
+
+ optimizer.zero_grad()
+
+ with torch.cuda.amp.autocast(enabled=opts.amp):
+ # Propagate forward
+ logits = model(images.to(device))
+
+ # Loss
+ for logit in logits:
+ # Resize labels for {100%, 75%, 50%, Max} logits
+ _, _, H, W = logit.shape
+ labels_ = resize_labels(labels, size=(H, W))
+
+ pseudo_labels = logit.detach() * cls_labels[:, :, None, None].to(device)
+ pseudo_labels = pseudo_labels.argmax(dim=1)
+
+ _loss = criterion(logit, labels_.to(device)) + criterion(logit, pseudo_labels)
+
+ loss += _loss
+
+ # Propagate backward (just compute gradients wrt the loss)
+ loss = (loss / len(logits))
+
+ scaler.scale(loss).backward()
+ scaler.step(optimizer)
+ scaler.update()
+
+ # Update learning rate
+ scheduler.step()
+ avg_loss.update(loss.item())
+ avg_time.update(time.time() - end_time)
+ end_time = time.time()
+
+ # TensorBoard
+ if curr_iter % 10 == 0:
+ print(" Itrs %d/%d, Loss=%6f, Time=%.2f , LR=%.8f" %
+ (curr_iter, CONFIG.SOLVER.ITER_MAX,
+ avg_loss.avg, avg_time.avg*1000, optimizer.param_groups[0]['lr']))
+
+ # validation
+ if curr_iter % opts.val_interval == 0:
+ print("... validation")
+ metrics.reset()
+ with torch.no_grad():
+ for _, images, labels, _ in valid_loader:
+ images = images.to(device)
+
+ # Forward propagation
+ logits = model(images)
+
+ # Pixel-wise labeling
+ _, H, W = labels.shape
+ logits = F.interpolate(logits, size=(H, W),
+ mode="bilinear", align_corners=False)
+ preds = torch.argmax(logits, dim=1).cpu().numpy()
+ targets = labels.cpu().numpy()
+
+ metrics.update(targets, preds)
+
+ score = metrics.get_results()
+ print(metrics.to_str(score))
+
+ if score['Mean IoU'] > best_score: # save best model
+ best_score = score['Mean IoU']
+ torch.save(
+ model.module.state_dict(), os.path.join(checkpoint_dir, "checkpoint_best.pth")
+ )
+
+ if curr_iter > CONFIG.SOLVER.ITER_MAX:
+ return
+
+
+if __name__ == "__main__":
+
+ main()
diff --git a/DeepLab-V2-PyTorch/train.sh b/DeepLab-V2-PyTorch/train.sh
index c4241f0..802af93 100755
--- a/DeepLab-V2-PyTorch/train.sh
+++ b/DeepLab-V2-PyTorch/train.sh
@@ -1,13 +1,20 @@
# Training DeepLab-V2 using pseudo segmentation labels
-DATASET=voc12_2gpu
-LOG_DIR=Deeplabv2_pseudo_segmentation_labels_2gpu
-GT_DIR=refined_pseudo_segmentation_labels
-CUDA_VISIBLE_DEVICES=0,1 python main.py train -c configs/${DATASET}.yaml --gt_path=${GT_DIR} --log_dir=${LOG_DIR}
+#DATASET=voc12_2gpu
+#LOG_DIR=Deeplabv2_pseudo_segmentation_labels_2gpu
+#GT_DIR=refined_pseudo_segmentation_labels
+#CUDA_VISIBLE_DEVICES=1,2 python main.py train -c configs/${DATASET}.yaml --gt_path=${GT_DIR} --log_dir=${LOG_DIR}
#---------------------------------------------------------------------------------------------------------------------
-DATASET=voc12_4gpu
-LOG_DIR=Deeplabv2_pseudo_segmentation_labels_4gpu
+#DATASET=voc12_4gpu
+#LOG_DIR=Deeplabv2_pseudo_segmentation_labels_4gpu
+#GT_DIR=refined_pseudo_segmentation_labels
+#CUDA_VISIBLE_DEVICES=0,1,2,3 python main.py train -c configs/${DATASET}.yaml --gt_path=${GT_DIR} --log_dir=${LOG_DIR}
+
+
+CONFIG=configs/voc12_2gpu.yaml
+LOG_DIR=Deeplabv2_new
GT_DIR=refined_pseudo_segmentation_labels
-CUDA_VISIBLE_DEVICES=0,1,2,3 python main.py train -c configs/${DATASET}.yaml --gt_path=${GT_DIR} --log_dir=${LOG_DIR}
\ No newline at end of file
+
+CUDA_VISIBLE_DEVICES=0 python main_v2.py --config_path ${CONFIG} --gt_path ${GT_DIR} --log_dir ${LOG_DIR}
diff --git a/DeepLabV3Plus-Pytorch/LICENSE b/DeepLabV3Plus-Pytorch/LICENSE
new file mode 100644
index 0000000..f3a59ca
--- /dev/null
+++ b/DeepLabV3Plus-Pytorch/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2020 Gongfan Fang
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/DeepLabV3Plus-Pytorch/datasets/__init__.py b/DeepLabV3Plus-Pytorch/datasets/__init__.py
new file mode 100644
index 0000000..a693df6
--- /dev/null
+++ b/DeepLabV3Plus-Pytorch/datasets/__init__.py
@@ -0,0 +1,2 @@
+from .voc import VOCSegmentation
+from .cityscapes import Cityscapes
\ No newline at end of file
diff --git a/DeepLabV3Plus-Pytorch/datasets/cityscapes.py b/DeepLabV3Plus-Pytorch/datasets/cityscapes.py
new file mode 100644
index 0000000..f51ee58
--- /dev/null
+++ b/DeepLabV3Plus-Pytorch/datasets/cityscapes.py
@@ -0,0 +1,147 @@
+import json
+import os
+from collections import namedtuple
+
+import torch
+import torch.utils.data as data
+from PIL import Image
+import numpy as np
+
+
+class Cityscapes(data.Dataset):
+ """Cityscapes Dataset.
+
+ **Parameters:**
+ - **root** (string): Root directory of dataset where directory 'leftImg8bit' and 'gtFine' or 'gtCoarse' are located.
+ - **split** (string, optional): The image split to use, 'train', 'test' or 'val' if mode="gtFine" otherwise 'train', 'train_extra' or 'val'
+ - **mode** (string, optional): The quality mode to use, 'gtFine' or 'gtCoarse' or 'color'. Can also be a list to output a tuple with all specified target types.
+ - **transform** (callable, optional): A function/transform that takes in a PIL image and returns a transformed version. E.g, ``transforms.RandomCrop``
+ - **target_transform** (callable, optional): A function/transform that takes in the target and transforms it.
+ """
+
+ # Based on https://github.com/mcordts/cityscapesScripts
+ CityscapesClass = namedtuple('CityscapesClass', ['name', 'id', 'train_id', 'category', 'category_id',
+ 'has_instances', 'ignore_in_eval', 'color'])
+ classes = [
+ CityscapesClass('unlabeled', 0, 255, 'void', 0, False, True, (0, 0, 0)),
+ CityscapesClass('ego vehicle', 1, 255, 'void', 0, False, True, (0, 0, 0)),
+ CityscapesClass('rectification border', 2, 255, 'void', 0, False, True, (0, 0, 0)),
+ CityscapesClass('out of roi', 3, 255, 'void', 0, False, True, (0, 0, 0)),
+ CityscapesClass('static', 4, 255, 'void', 0, False, True, (0, 0, 0)),
+ CityscapesClass('dynamic', 5, 255, 'void', 0, False, True, (111, 74, 0)),
+ CityscapesClass('ground', 6, 255, 'void', 0, False, True, (81, 0, 81)),
+ CityscapesClass('road', 7, 0, 'flat', 1, False, False, (128, 64, 128)),
+ CityscapesClass('sidewalk', 8, 1, 'flat', 1, False, False, (244, 35, 232)),
+ CityscapesClass('parking', 9, 255, 'flat', 1, False, True, (250, 170, 160)),
+ CityscapesClass('rail track', 10, 255, 'flat', 1, False, True, (230, 150, 140)),
+ CityscapesClass('building', 11, 2, 'construction', 2, False, False, (70, 70, 70)),
+ CityscapesClass('wall', 12, 3, 'construction', 2, False, False, (102, 102, 156)),
+ CityscapesClass('fence', 13, 4, 'construction', 2, False, False, (190, 153, 153)),
+ CityscapesClass('guard rail', 14, 255, 'construction', 2, False, True, (180, 165, 180)),
+ CityscapesClass('bridge', 15, 255, 'construction', 2, False, True, (150, 100, 100)),
+ CityscapesClass('tunnel', 16, 255, 'construction', 2, False, True, (150, 120, 90)),
+ CityscapesClass('pole', 17, 5, 'object', 3, False, False, (153, 153, 153)),
+ CityscapesClass('polegroup', 18, 255, 'object', 3, False, True, (153, 153, 153)),
+ CityscapesClass('traffic light', 19, 6, 'object', 3, False, False, (250, 170, 30)),
+ CityscapesClass('traffic sign', 20, 7, 'object', 3, False, False, (220, 220, 0)),
+ CityscapesClass('vegetation', 21, 8, 'nature', 4, False, False, (107, 142, 35)),
+ CityscapesClass('terrain', 22, 9, 'nature', 4, False, False, (152, 251, 152)),
+ CityscapesClass('sky', 23, 10, 'sky', 5, False, False, (70, 130, 180)),
+ CityscapesClass('person', 24, 11, 'human', 6, True, False, (220, 20, 60)),
+ CityscapesClass('rider', 25, 12, 'human', 6, True, False, (255, 0, 0)),
+ CityscapesClass('car', 26, 13, 'vehicle', 7, True, False, (0, 0, 142)),
+ CityscapesClass('truck', 27, 14, 'vehicle', 7, True, False, (0, 0, 70)),
+ CityscapesClass('bus', 28, 15, 'vehicle', 7, True, False, (0, 60, 100)),
+ CityscapesClass('caravan', 29, 255, 'vehicle', 7, True, True, (0, 0, 90)),
+ CityscapesClass('trailer', 30, 255, 'vehicle', 7, True, True, (0, 0, 110)),
+ CityscapesClass('train', 31, 16, 'vehicle', 7, True, False, (0, 80, 100)),
+ CityscapesClass('motorcycle', 32, 17, 'vehicle', 7, True, False, (0, 0, 230)),
+ CityscapesClass('bicycle', 33, 18, 'vehicle', 7, True, False, (119, 11, 32)),
+ CityscapesClass('license plate', -1, 255, 'vehicle', 7, False, True, (0, 0, 142)),
+ ]
+
+ train_id_to_color = [c.color for c in classes if (c.train_id != -1 and c.train_id != 255)]
+ train_id_to_color.append([0, 0, 0])
+ train_id_to_color = np.array(train_id_to_color)
+ id_to_train_id = np.array([c.train_id for c in classes])
+
+ #train_id_to_color = [(0, 0, 0), (128, 64, 128), (70, 70, 70), (153, 153, 153), (107, 142, 35),
+ # (70, 130, 180), (220, 20, 60), (0, 0, 142)]
+ #train_id_to_color = np.array(train_id_to_color)
+ #id_to_train_id = np.array([c.category_id for c in classes], dtype='uint8') - 1
+
+ def __init__(self, root, split='train', mode='fine', target_type='semantic', transform=None):
+ self.root = os.path.expanduser(root)
+ self.mode = 'gtFine'
+ self.target_type = target_type
+ self.images_dir = os.path.join(self.root, 'leftImg8bit', split)
+
+ self.targets_dir = os.path.join(self.root, self.mode, split)
+ self.transform = transform
+
+ self.split = split
+ self.images = []
+ self.targets = []
+
+ if split not in ['train', 'test', 'val']:
+ raise ValueError('Invalid split for mode! Please use split="train", split="test"'
+ ' or split="val"')
+
+ if not os.path.isdir(self.images_dir) or not os.path.isdir(self.targets_dir):
+ raise RuntimeError('Dataset not found or incomplete. Please make sure all required folders for the'
+ ' specified "split" and "mode" are inside the "root" directory')
+
+ for city in os.listdir(self.images_dir):
+ img_dir = os.path.join(self.images_dir, city)
+ target_dir = os.path.join(self.targets_dir, city)
+
+ for file_name in os.listdir(img_dir):
+ self.images.append(os.path.join(img_dir, file_name))
+ target_name = '{}_{}'.format(file_name.split('_leftImg8bit')[0],
+ self._get_target_suffix(self.mode, self.target_type))
+ self.targets.append(os.path.join(target_dir, target_name))
+
+ @classmethod
+ def encode_target(cls, target):
+ return cls.id_to_train_id[np.array(target)]
+
+ @classmethod
+ def decode_target(cls, target):
+ target[target == 255] = 19
+ #target = target.astype('uint8') + 1
+ return cls.train_id_to_color[target]
+
+ def __getitem__(self, index):
+ """
+ Args:
+ index (int): Index
+ Returns:
+ tuple: (image, target) where target is a tuple of all target types if target_type is a list with more
+ than one item. Otherwise target is a json object if target_type="polygon", else the image segmentation.
+ """
+ image = Image.open(self.images[index]).convert('RGB')
+ target = Image.open(self.targets[index])
+ if self.transform:
+ image, target = self.transform(image, target)
+ target = self.encode_target(target)
+ return image, target
+
+ def __len__(self):
+ return len(self.images)
+
+ def _load_json(self, path):
+ with open(path, 'r') as file:
+ data = json.load(file)
+ return data
+
+ def _get_target_suffix(self, mode, target_type):
+ if target_type == 'instance':
+ return '{}_instanceIds.png'.format(mode)
+ elif target_type == 'semantic':
+ return '{}_labelIds.png'.format(mode)
+ elif target_type == 'color':
+ return '{}_color.png'.format(mode)
+ elif target_type == 'polygon':
+ return '{}_polygons.json'.format(mode)
+ elif target_type == 'depth':
+ return '{}_disparity.png'.format(mode)
\ No newline at end of file
diff --git a/DeepLabV3Plus-Pytorch/datasets/data/cityscapes b/DeepLabV3Plus-Pytorch/datasets/data/cityscapes
new file mode 120000
index 0000000..5e3c692
--- /dev/null
+++ b/DeepLabV3Plus-Pytorch/datasets/data/cityscapes
@@ -0,0 +1 @@
+/disk3/fgf//Datasets/cityscapes
\ No newline at end of file
diff --git a/DeepLabV3Plus-Pytorch/datasets/data/train_aug.txt b/DeepLabV3Plus-Pytorch/datasets/data/train_aug.txt
new file mode 100644
index 0000000..48a784f
--- /dev/null
+++ b/DeepLabV3Plus-Pytorch/datasets/data/train_aug.txt
@@ -0,0 +1,10582 @@
+2011_003276
+2011_003275
+2011_003274
+2011_003269
+2011_003262
+2011_003261
+2011_003260
+2011_003259
+2011_003255
+2011_003254
+2011_003253
+2011_003247
+2011_003246
+2011_003244
+2011_003242
+2011_003238
+2011_003236
+2011_003232
+2011_003230
+2011_003228
+2011_003223
+2011_003220
+2011_003216
+2011_003213
+2011_003212
+2011_003211
+2011_003201
+2011_003194
+2011_003192
+2011_003188
+2011_003187
+2011_003185
+2011_003184
+2011_003183
+2011_003177
+2011_003176
+2011_003171
+2011_003169
+2011_003168
+2011_003167
+2011_003166
+2011_003163
+2011_003162
+2011_003159
+2011_003158
+2011_003154
+2011_003152
+2011_003151
+2011_003150
+2011_003149
+2011_003148
+2011_003141
+2011_003138
+2011_003134
+2011_003132
+2011_003124
+2011_003121
+2011_003115
+2011_003111
+2011_003109
+2011_003097
+2011_003091
+2011_003089
+2011_003086
+2011_003081
+2011_003079
+2011_003078
+2011_003076
+2011_003074
+2011_003073
+2011_003066
+2011_003065
+2011_003063
+2011_003059
+2011_003057
+2011_003054
+2011_003050
+2011_003049
+2011_003048
+2011_003047
+2011_003044
+2011_003043
+2011_003041
+2011_003039
+2011_003038
+2011_003034
+2011_003029
+2011_003028
+2011_003027
+2011_003025
+2011_003023
+2011_003020
+2011_003016
+2011_003013
+2011_003012
+2011_003010
+2011_003005
+2011_003002
+2011_002999
+2011_002994
+2011_002992
+2011_002988
+2011_002987
+2011_002985
+2011_002983
+2011_002979
+2011_002978
+2011_002974
+2011_002971
+2011_002970
+2011_002969
+2011_002967
+2011_002966
+2011_002965
+2011_002962
+2011_002958
+2011_002956
+2011_002953
+2011_002949
+2011_002947
+2011_002944
+2011_002943
+2011_002942
+2011_002940
+2011_002937
+2011_002935
+2011_002933
+2011_002932
+2011_002930
+2011_002927
+2011_002925
+2011_002924
+2011_002921
+2011_002920
+2011_002917
+2011_002916
+2011_002913
+2011_002912
+2011_002911
+2011_002908
+2011_002900
+2011_002897
+2011_002890
+2011_002889
+2011_002887
+2011_002884
+2011_002883
+2011_002881
+2011_002880
+2011_002873
+2011_002872
+2011_002871
+2011_002870
+2011_002868
+2011_002867
+2011_002864
+2011_002854
+2011_002852
+2011_002851
+2011_002842
+2011_002841
+2011_002838
+2011_002834
+2011_002833
+2011_002831
+2011_002830
+2011_002826
+2011_002823
+2011_002821
+2011_002818
+2011_002817
+2011_002814
+2011_002811
+2011_002810
+2011_002808
+2011_002805
+2011_002803
+2011_002802
+2011_002798
+2011_002796
+2011_002795
+2011_002790
+2011_002786
+2011_002784
+2011_002782
+2011_002780
+2011_002779
+2011_002776
+2011_002775
+2011_002772
+2011_002770
+2011_002767
+2011_002765
+2011_002760
+2011_002756
+2011_002752
+2011_002751
+2011_002750
+2011_002748
+2011_002742
+2011_002740
+2011_002738
+2011_002726
+2011_002725
+2011_002724
+2011_002719
+2011_002717
+2011_002715
+2011_002714
+2011_002709
+2011_002706
+2011_002699
+2011_002697
+2011_002694
+2011_002687
+2011_002678
+2011_002677
+2011_002676
+2011_002674
+2011_002673
+2011_002664
+2011_002661
+2011_002658
+2011_002657
+2011_002656
+2011_002652
+2011_002650
+2011_002649
+2011_002640
+2011_002639
+2011_002638
+2011_002636
+2011_002631
+2011_002629
+2011_002624
+2011_002620
+2011_002618
+2011_002617
+2011_002616
+2011_002614
+2011_002612
+2011_002610
+2011_002609
+2011_002606
+2011_002605
+2011_002598
+2011_002594
+2011_002590
+2011_002588
+2011_002585
+2011_002584
+2011_002583
+2011_002582
+2011_002579
+2011_002571
+2011_002568
+2011_002567
+2011_002566
+2011_002561
+2011_002560
+2011_002559
+2011_002558
+2011_002556
+2011_002555
+2011_002554
+2011_002553
+2011_002552
+2011_002551
+2011_002543
+2011_002542
+2011_002536
+2011_002533
+2011_002531
+2011_002528
+2011_002526
+2011_002520
+2011_002519
+2011_002516
+2011_002514
+2011_002511
+2011_002507
+2011_002505
+2011_002504
+2011_002503
+2011_002495
+2011_002494
+2011_002492
+2011_002491
+2011_002490
+2011_002488
+2011_002484
+2011_002482
+2011_002479
+2011_002476
+2011_002474
+2011_002470
+2011_002464
+2011_002463
+2011_002462
+2011_002461
+2011_002460
+2011_002459
+2011_002458
+2011_002457
+2011_002455
+2011_002448
+2011_002447
+2011_002443
+2011_002436
+2011_002435
+2011_002433
+2011_002429
+2011_002422
+2011_002421
+2011_002420
+2011_002418
+2011_002414
+2011_002413
+2011_002410
+2011_002409
+2011_002407
+2011_002406
+2011_002402
+2011_002398
+2011_002397
+2011_002396
+2011_002395
+2011_002394
+2011_002393
+2011_002389
+2011_002388
+2011_002387
+2011_002386
+2011_002385
+2011_002384
+2011_002381
+2011_002380
+2011_002366
+2011_002365
+2011_002359
+2011_002357
+2011_002350
+2011_002348
+2011_002347
+2011_002346
+2011_002341
+2011_002335
+2011_002330
+2011_002325
+2011_002324
+2011_002318
+2011_002312
+2011_002303
+2011_002301
+2011_002300
+2011_002294
+2011_002292
+2011_002291
+2011_002284
+2011_002281
+2011_002280
+2011_002278
+2011_002276
+2011_002273
+2011_002272
+2011_002270
+2011_002269
+2011_002268
+2011_002265
+2011_002260
+2011_002253
+2011_002252
+2011_002251
+2011_002248
+2011_002246
+2011_002245
+2011_002241
+2011_002239
+2011_002237
+2011_002236
+2011_002234
+2011_002230
+2011_002228
+2011_002227
+2011_002224
+2011_002222
+2011_002221
+2011_002218
+2011_002215
+2011_002211
+2011_002193
+2011_002192
+2011_002189
+2011_002186
+2011_002185
+2011_002184
+2011_002179
+2011_002177
+2011_002174
+2011_002173
+2011_002169
+2011_002167
+2011_002163
+2011_002160
+2011_002159
+2011_002158
+2011_002154
+2011_002149
+2011_002148
+2011_002147
+2011_002144
+2011_002143
+2011_002142
+2011_002137
+2011_002135
+2011_002134
+2011_002132
+2011_002131
+2011_002128
+2011_002119
+2011_002116
+2011_002114
+2011_002113
+2011_002111
+2011_002109
+2011_002108
+2011_002107
+2011_002106
+2011_002105
+2011_002102
+2011_002100
+2011_002097
+2011_002096
+2011_002093
+2011_002091
+2011_002088
+2011_002085
+2011_002079
+2011_002074
+2011_002073
+2011_002063
+2011_002062
+2011_002055
+2011_002053
+2011_002050
+2011_002049
+2011_002047
+2011_002046
+2011_002045
+2011_002044
+2011_002042
+2011_002039
+2011_002038
+2011_002036
+2011_002034
+2011_002033
+2011_002031
+2011_002027
+2011_002022
+2011_002021
+2011_002019
+2011_002018
+2011_002016
+2011_002012
+2011_002006
+2011_002005
+2011_002004
+2011_002003
+2011_001991
+2011_001989
+2011_001987
+2011_001986
+2011_001982
+2011_001980
+2011_001977
+2011_001975
+2011_001974
+2011_001972
+2011_001971
+2011_001967
+2011_001966
+2011_001964
+2011_001962
+2011_001961
+2011_001959
+2011_001956
+2011_001952
+2011_001951
+2011_001950
+2011_001949
+2011_001946
+2011_001945
+2011_001944
+2011_001942
+2011_001941
+2011_001938
+2011_001937
+2011_001932
+2011_001930
+2011_001929
+2011_001928
+2011_001927
+2011_001926
+2011_001924
+2011_001922
+2011_001920
+2011_001919
+2011_001914
+2011_001911
+2011_001906
+2011_001904
+2011_001902
+2011_001901
+2011_001900
+2011_001896
+2011_001895
+2011_001893
+2011_001891
+2011_001889
+2011_001886
+2011_001885
+2011_001884
+2011_001877
+2011_001876
+2011_001875
+2011_001873
+2011_001872
+2011_001871
+2011_001870
+2011_001866
+2011_001858
+2011_001856
+2011_001855
+2011_001854
+2011_001847
+2011_001845
+2011_001842
+2011_001841
+2011_001840
+2011_001837
+2011_001834
+2011_001833
+2011_001827
+2011_001826
+2011_001825
+2011_001824
+2011_001822
+2011_001820
+2011_001819
+2011_001815
+2011_001811
+2011_001810
+2011_001806
+2011_001805
+2011_001801
+2011_001800
+2011_001799
+2011_001796
+2011_001791
+2011_001790
+2011_001789
+2011_001785
+2011_001779
+2011_001776
+2011_001771
+2011_001769
+2011_001766
+2011_001765
+2011_001764
+2011_001757
+2011_001755
+2011_001754
+2011_001753
+2011_001751
+2011_001747
+2011_001741
+2011_001740
+2011_001739
+2011_001733
+2011_001732
+2011_001730
+2011_001727
+2011_001720
+2011_001719
+2011_001716
+2011_001715
+2011_001712
+2011_001710
+2011_001707
+2011_001705
+2011_001700
+2011_001699
+2011_001698
+2011_001695
+2011_001694
+2011_001693
+2011_001691
+2011_001689
+2011_001679
+2011_001678
+2011_001673
+2011_001671
+2011_001666
+2011_001663
+2011_001662
+2011_001656
+2011_001655
+2011_001653
+2011_001652
+2011_001650
+2011_001649
+2011_001647
+2011_001643
+2011_001641
+2011_001632
+2011_001629
+2011_001628
+2011_001625
+2011_001622
+2011_001621
+2011_001620
+2011_001618
+2011_001616
+2011_001612
+2011_001611
+2011_001608
+2011_001606
+2011_001605
+2011_001602
+2011_001600
+2011_001599
+2011_001596
+2011_001592
+2011_001591
+2011_001586
+2011_001582
+2011_001573
+2011_001572
+2011_001571
+2011_001568
+2011_001566
+2011_001560
+2011_001558
+2011_001557
+2011_001549
+2011_001547
+2011_001544
+2011_001542
+2011_001541
+2011_001538
+2011_001537
+2011_001536
+2011_001535
+2011_001531
+2011_001526
+2011_001525
+2011_001524
+2011_001521
+2011_001519
+2011_001518
+2011_001514
+2011_001510
+2011_001508
+2011_001507
+2011_001505
+2011_001503
+2011_001501
+2011_001498
+2011_001480
+2011_001479
+2011_001476
+2011_001475
+2011_001471
+2011_001467
+2011_001466
+2011_001464
+2011_001463
+2011_001456
+2011_001455
+2011_001451
+2011_001449
+2011_001441
+2011_001440
+2011_001432
+2011_001424
+2011_001422
+2011_001414
+2011_001412
+2011_001411
+2011_001406
+2011_001404
+2011_001402
+2011_001400
+2011_001399
+2011_001394
+2011_001390
+2011_001389
+2011_001388
+2011_001387
+2011_001384
+2011_001382
+2011_001381
+2011_001375
+2011_001373
+2011_001370
+2011_001369
+2011_001366
+2011_001360
+2011_001357
+2011_001355
+2011_001354
+2011_001337
+2011_001336
+2011_001335
+2011_001333
+2011_001330
+2011_001329
+2011_001327
+2011_001326
+2011_001323
+2011_001320
+2011_001319
+2011_001318
+2011_001315
+2011_001311
+2011_001310
+2011_001305
+2011_001304
+2011_001302
+2011_001295
+2011_001290
+2011_001288
+2011_001286
+2011_001285
+2011_001284
+2011_001283
+2011_001282
+2011_001277
+2011_001272
+2011_001271
+2011_001270
+2011_001266
+2011_001264
+2011_001261
+2011_001260
+2011_001259
+2011_001257
+2011_001255
+2011_001254
+2011_001253
+2011_001252
+2011_001251
+2011_001246
+2011_001245
+2011_001240
+2011_001238
+2011_001229
+2011_001227
+2011_001226
+2011_001223
+2011_001221
+2011_001220
+2011_001217
+2011_001216
+2011_001215
+2011_001213
+2011_001211
+2011_001208
+2011_001203
+2011_001201
+2011_001198
+2011_001193
+2011_001192
+2011_001189
+2011_001188
+2011_001176
+2011_001175
+2011_001173
+2011_001169
+2011_001168
+2011_001167
+2011_001166
+2011_001163
+2011_001160
+2011_001158
+2011_001153
+2011_001152
+2011_001150
+2011_001149
+2011_001146
+2011_001144
+2011_001139
+2011_001138
+2011_001137
+2011_001136
+2011_001135
+2011_001134
+2011_001133
+2011_001128
+2011_001127
+2011_001126
+2011_001124
+2011_001123
+2011_001117
+2011_001116
+2011_001111
+2011_001107
+2011_001106
+2011_001105
+2011_001100
+2011_001097
+2011_001093
+2011_001091
+2011_001086
+2011_001084
+2011_001081
+2011_001080
+2011_001079
+2011_001073
+2011_001066
+2011_001062
+2011_001058
+2011_001056
+2011_001055
+2011_001054
+2011_001052
+2011_001044
+2011_001040
+2011_001036
+2011_001034
+2011_001033
+2011_001032
+2011_001031
+2011_001030
+2011_001029
+2011_001028
+2011_001027
+2011_001025
+2011_001023
+2011_001022
+2011_001019
+2011_001016
+2011_001015
+2011_001011
+2011_001010
+2011_001009
+2011_001008
+2011_001004
+2011_001001
+2011_000999
+2011_000997
+2011_000996
+2011_000991
+2011_000990
+2011_000987
+2011_000986
+2011_000983
+2011_000982
+2011_000981
+2011_000979
+2011_000977
+2011_000975
+2011_000973
+2011_000965
+2011_000961
+2011_000957
+2011_000954
+2011_000951
+2011_000950
+2011_000947
+2011_000944
+2011_000940
+2011_000934
+2011_000933
+2011_000932
+2011_000930
+2011_000927
+2011_000922
+2011_000920
+2011_000919
+2011_000917
+2011_000909
+2011_000908
+2011_000901
+2011_000899
+2011_000898
+2011_000897
+2011_000895
+2011_000893
+2011_000887
+2011_000885
+2011_000882
+2011_000875
+2011_000872
+2011_000859
+2011_000858
+2011_000855
+2011_000853
+2011_000851
+2011_000850
+2011_000848
+2011_000847
+2011_000845
+2011_000840
+2011_000839
+2011_000837
+2011_000834
+2011_000831
+2011_000829
+2011_000828
+2011_000827
+2011_000824
+2011_000823
+2011_000820
+2011_000819
+2011_000815
+2011_000806
+2011_000804
+2011_000800
+2011_000793
+2011_000791
+2011_000790
+2011_000788
+2011_000785
+2011_000784
+2011_000778
+2011_000774
+2011_000772
+2011_000771
+2011_000770
+2011_000769
+2011_000768
+2011_000767
+2011_000765
+2011_000763
+2011_000759
+2011_000758
+2011_000755
+2011_000753
+2011_000749
+2011_000748
+2011_000745
+2011_000744
+2011_000743
+2011_000734
+2011_000731
+2011_000725
+2011_000724
+2011_000718
+2011_000713
+2011_000711
+2011_000709
+2011_000704
+2011_000703
+2011_000701
+2011_000698
+2011_000692
+2011_000690
+2011_000689
+2011_000688
+2011_000685
+2011_000684
+2011_000683
+2011_000682
+2011_000679
+2011_000675
+2011_000673
+2011_000666
+2011_000657
+2011_000656
+2011_000655
+2011_000652
+2011_000651
+2011_000646
+2011_000642
+2011_000641
+2011_000637
+2011_000634
+2011_000631
+2011_000630
+2011_000629
+2011_000628
+2011_000627
+2011_000622
+2011_000612
+2011_000609
+2011_000608
+2011_000600
+2011_000596
+2011_000594
+2011_000592
+2011_000589
+2011_000586
+2011_000579
+2011_000578
+2011_000577
+2011_000575
+2011_000573
+2011_000572
+2011_000569
+2011_000567
+2011_000565
+2011_000560
+2011_000559
+2011_000558
+2011_000557
+2011_000556
+2011_000554
+2011_000551
+2011_000550
+2011_000542
+2011_000541
+2011_000538
+2011_000534
+2011_000531
+2011_000530
+2011_000520
+2011_000519
+2011_000518
+2011_000514
+2011_000513
+2011_000511
+2011_000509
+2011_000505
+2011_000502
+2011_000499
+2011_000498
+2011_000496
+2011_000494
+2011_000492
+2011_000491
+2011_000487
+2011_000485
+2011_000477
+2011_000475
+2011_000474
+2011_000471
+2011_000469
+2011_000468
+2011_000465
+2011_000457
+2011_000454
+2011_000453
+2011_000450
+2011_000449
+2011_000445
+2011_000444
+2011_000442
+2011_000434
+2011_000432
+2011_000428
+2011_000427
+2011_000426
+2011_000420
+2011_000418
+2011_000416
+2011_000413
+2011_000408
+2011_000404
+2011_000400
+2011_000399
+2011_000398
+2011_000397
+2011_000392
+2011_000391
+2011_000388
+2011_000386
+2011_000383
+2011_000382
+2011_000379
+2011_000376
+2011_000375
+2011_000374
+2011_000370
+2011_000369
+2011_000364
+2011_000362
+2011_000361
+2011_000359
+2011_000347
+2011_000346
+2011_000345
+2011_000344
+2011_000343
+2011_000342
+2011_000332
+2011_000329
+2011_000324
+2011_000322
+2011_000321
+2011_000320
+2011_000319
+2011_000317
+2011_000315
+2011_000314
+2011_000309
+2011_000307
+2011_000305
+2011_000304
+2011_000299
+2011_000297
+2011_000293
+2011_000290
+2011_000288
+2011_000286
+2011_000285
+2011_000282
+2011_000278
+2011_000277
+2011_000276
+2011_000273
+2011_000269
+2011_000268
+2011_000267
+2011_000258
+2011_000257
+2011_000253
+2011_000252
+2011_000250
+2011_000249
+2011_000246
+2011_000243
+2011_000241
+2011_000233
+2011_000232
+2011_000229
+2011_000228
+2011_000224
+2011_000222
+2011_000221
+2011_000220
+2011_000219
+2011_000216
+2011_000214
+2011_000213
+2011_000210
+2011_000208
+2011_000206
+2011_000202
+2011_000197
+2011_000196
+2011_000195
+2011_000194
+2011_000192
+2011_000182
+2011_000181
+2011_000180
+2011_000176
+2011_000166
+2011_000165
+2011_000163
+2011_000162
+2011_000161
+2011_000152
+2011_000149
+2011_000147
+2011_000146
+2011_000145
+2011_000142
+2011_000138
+2011_000137
+2011_000130
+2011_000129
+2011_000128
+2011_000124
+2011_000122
+2011_000116
+2011_000114
+2011_000109
+2011_000108
+2011_000105
+2011_000103
+2011_000102
+2011_000098
+2011_000096
+2011_000095
+2011_000094
+2011_000090
+2011_000087
+2011_000086
+2011_000084
+2011_000083
+2011_000082
+2011_000077
+2011_000076
+2011_000072
+2011_000071
+2011_000069
+2011_000068
+2011_000065
+2011_000061
+2011_000060
+2011_000058
+2011_000057
+2011_000053
+2011_000052
+2011_000048
+2011_000044
+2011_000043
+2011_000041
+2011_000038
+2011_000037
+2011_000036
+2011_000034
+2011_000030
+2011_000027
+2011_000025
+2011_000022
+2011_000017
+2011_000016
+2011_000012
+2011_000010
+2011_000009
+2011_000007
+2011_000006
+2011_000003
+2011_000002
+2010_006086
+2010_006084
+2010_006082
+2010_006079
+2010_006078
+2010_006076
+2010_006073
+2010_006067
+2010_006066
+2010_006063
+2010_006062
+2010_006061
+2010_006058
+2010_006057
+2010_006056
+2010_006051
+2010_006050
+2010_006042
+2010_006041
+2010_006040
+2010_006037
+2010_006035
+2010_006033
+2010_006032
+2010_006031
+2010_006028
+2010_006025
+2010_006023
+2010_006021
+2010_006015
+2010_006012
+2010_006011
+2010_006010
+2010_006009
+2010_006004
+2010_006000
+2010_005998
+2010_005997
+2010_005996
+2010_005995
+2010_005993
+2010_005987
+2010_005986
+2010_005985
+2010_005984
+2010_005982
+2010_005981
+2010_005980
+2010_005978
+2010_005976
+2010_005975
+2010_005974
+2010_005973
+2010_005972
+2010_005968
+2010_005967
+2010_005960
+2010_005959
+2010_005958
+2010_005954
+2010_005953
+2010_005952
+2010_005951
+2010_005949
+2010_005948
+2010_005943
+2010_005942
+2010_005938
+2010_005937
+2010_005936
+2010_005935
+2010_005934
+2010_005932
+2010_005930
+2010_005929
+2010_005928
+2010_005927
+2010_005921
+2010_005919
+2010_005914
+2010_005909
+2010_005907
+2010_005906
+2010_005904
+2010_005903
+2010_005901
+2010_005898
+2010_005897
+2010_005896
+2010_005894
+2010_005892
+2010_005891
+2010_005886
+2010_005885
+2010_005884
+2010_005883
+2010_005882
+2010_005876
+2010_005875
+2010_005874
+2010_005870
+2010_005868
+2010_005867
+2010_005865
+2010_005855
+2010_005853
+2010_005849
+2010_005848
+2010_005847
+2010_005845
+2010_005843
+2010_005841
+2010_005840
+2010_005838
+2010_005837
+2010_005836
+2010_005835
+2010_005833
+2010_005830
+2010_005827
+2010_005826
+2010_005825
+2010_005824
+2010_005823
+2010_005821
+2010_005820
+2010_005817
+2010_005816
+2010_005815
+2010_005810
+2010_005807
+2010_005806
+2010_005805
+2010_005804
+2010_005800
+2010_005796
+2010_005794
+2010_005791
+2010_005785
+2010_005784
+2010_005782
+2010_005780
+2010_005777
+2010_005776
+2010_005775
+2010_005770
+2010_005768
+2010_005767
+2010_005764
+2010_005763
+2010_005761
+2010_005758
+2010_005756
+2010_005755
+2010_005753
+2010_005752
+2010_005750
+2010_005748
+2010_005747
+2010_005746
+2010_005744
+2010_005740
+2010_005738
+2010_005736
+2010_005735
+2010_005734
+2010_005733
+2010_005732
+2010_005731
+2010_005725
+2010_005723
+2010_005721
+2010_005716
+2010_005715
+2010_005712
+2010_005700
+2010_005697
+2010_005696
+2010_005692
+2010_005688
+2010_005684
+2010_005683
+2010_005681
+2010_005678
+2010_005676
+2010_005672
+2010_005671
+2010_005670
+2010_005669
+2010_005668
+2010_005666
+2010_005665
+2010_005663
+2010_005658
+2010_005657
+2010_005654
+2010_005652
+2010_005651
+2010_005647
+2010_005646
+2010_005643
+2010_005640
+2010_005637
+2010_005636
+2010_005635
+2010_005632
+2010_005629
+2010_005628
+2010_005627
+2010_005625
+2010_005620
+2010_005619
+2010_005615
+2010_005614
+2010_005612
+2010_005610
+2010_005608
+2010_005604
+2010_005603
+2010_005601
+2010_005597
+2010_005596
+2010_005595
+2010_005594
+2010_005593
+2010_005592
+2010_005591
+2010_005588
+2010_005587
+2010_005586
+2010_005585
+2010_005584
+2010_005578
+2010_005576
+2010_005573
+2010_005572
+2010_005571
+2010_005570
+2010_005567
+2010_005566
+2010_005565
+2010_005562
+2010_005561
+2010_005559
+2010_005557
+2010_005556
+2010_005551
+2010_005548
+2010_005546
+2010_005543
+2010_005542
+2010_005540
+2010_005538
+2010_005536
+2010_005535
+2010_005532
+2010_005527
+2010_005522
+2010_005519
+2010_005518
+2010_005516
+2010_005515
+2010_005514
+2010_005513
+2010_005512
+2010_005511
+2010_005506
+2010_005505
+2010_005502
+2010_005500
+2010_005498
+2010_005497
+2010_005494
+2010_005493
+2010_005492
+2010_005491
+2010_005489
+2010_005484
+2010_005483
+2010_005482
+2010_005480
+2010_005475
+2010_005474
+2010_005472
+2010_005471
+2010_005468
+2010_005467
+2010_005466
+2010_005463
+2010_005462
+2010_005458
+2010_005457
+2010_005456
+2010_005455
+2010_005452
+2010_005450
+2010_005442
+2010_005441
+2010_005437
+2010_005434
+2010_005429
+2010_005426
+2010_005425
+2010_005424
+2010_005419
+2010_005417
+2010_005416
+2010_005415
+2010_005414
+2010_005410
+2010_005409
+2010_005408
+2010_005406
+2010_005405
+2010_005403
+2010_005398
+2010_005394
+2010_005393
+2010_005391
+2010_005389
+2010_005388
+2010_005386
+2010_005385
+2010_005384
+2010_005382
+2010_005379
+2010_005377
+2010_005376
+2010_005375
+2010_005374
+2010_005372
+2010_005371
+2010_005369
+2010_005365
+2010_005364
+2010_005361
+2010_005359
+2010_005352
+2010_005350
+2010_005349
+2010_005346
+2010_005345
+2010_005340
+2010_005338
+2010_005332
+2010_005331
+2010_005330
+2010_005327
+2010_005323
+2010_005320
+2010_005318
+2010_005317
+2010_005314
+2010_005312
+2010_005310
+2010_005309
+2010_005308
+2010_005306
+2010_005303
+2010_005301
+2010_005299
+2010_005297
+2010_005293
+2010_005292
+2010_005287
+2010_005285
+2010_005279
+2010_005277
+2010_005276
+2010_005275
+2010_005274
+2010_005273
+2010_005272
+2010_005270
+2010_005268
+2010_005266
+2010_005264
+2010_005261
+2010_005260
+2010_005258
+2010_005257
+2010_005253
+2010_005250
+2010_005246
+2010_005243
+2010_005242
+2010_005239
+2010_005238
+2010_005236
+2010_005232
+2010_005230
+2010_005229
+2010_005226
+2010_005224
+2010_005223
+2010_005222
+2010_005217
+2010_005216
+2010_005215
+2010_005213
+2010_005211
+2010_005208
+2010_005202
+2010_005201
+2010_005199
+2010_005198
+2010_005193
+2010_005192
+2010_005190
+2010_005188
+2010_005185
+2010_005184
+2010_005183
+2010_005182
+2010_005170
+2010_005169
+2010_005167
+2010_005164
+2010_005161
+2010_005158
+2010_005155
+2010_005152
+2010_005149
+2010_005148
+2010_005147
+2010_005143
+2010_005141
+2010_005138
+2010_005136
+2010_005134
+2010_005133
+2010_005130
+2010_005129
+2010_005128
+2010_005127
+2010_005123
+2010_005120
+2010_005119
+2010_005116
+2010_005115
+2010_005111
+2010_005110
+2010_005109
+2010_005107
+2010_005106
+2010_005101
+2010_005100
+2010_005099
+2010_005098
+2010_005096
+2010_005094
+2010_005093
+2010_005090
+2010_005087
+2010_005083
+2010_005082
+2010_005080
+2010_005079
+2010_005075
+2010_005072
+2010_005071
+2010_005068
+2010_005066
+2010_005064
+2010_005062
+2010_005061
+2010_005060
+2010_005059
+2010_005055
+2010_005054
+2010_005053
+2010_005052
+2010_005049
+2010_005048
+2010_005044
+2010_005042
+2010_005041
+2010_005035
+2010_005033
+2010_005031
+2010_005028
+2010_005026
+2010_005023
+2010_005022
+2010_005019
+2010_005018
+2010_005017
+2010_005016
+2010_005011
+2010_005008
+2010_005006
+2010_005005
+2010_005002
+2010_005000
+2010_004998
+2010_004997
+2010_004995
+2010_004992
+2010_004991
+2010_004989
+2010_004987
+2010_004983
+2010_004982
+2010_004974
+2010_004973
+2010_004971
+2010_004970
+2010_004968
+2010_004967
+2010_004966
+2010_004963
+2010_004962
+2010_004960
+2010_004959
+2010_004957
+2010_004954
+2010_004953
+2010_004952
+2010_004950
+2010_004948
+2010_004945
+2010_004944
+2010_004943
+2010_004942
+2010_004938
+2010_004937
+2010_004933
+2010_004931
+2010_004930
+2010_004928
+2010_004922
+2010_004921
+2010_004919
+2010_004918
+2010_004917
+2010_004916
+2010_004913
+2010_004910
+2010_004909
+2010_004908
+2010_004906
+2010_004903
+2010_004901
+2010_004900
+2010_004896
+2010_004894
+2010_004891
+2010_004890
+2010_004889
+2010_004888
+2010_004879
+2010_004878
+2010_004877
+2010_004874
+2010_004871
+2010_004868
+2010_004866
+2010_004865
+2010_004855
+2010_004854
+2010_004852
+2010_004849
+2010_004848
+2010_004847
+2010_004844
+2010_004841
+2010_004838
+2010_004836
+2010_004832
+2010_004830
+2010_004829
+2010_004826
+2010_004824
+2010_004822
+2010_004821
+2010_004817
+2010_004816
+2010_004813
+2010_004812
+2010_004809
+2010_004808
+2010_004807
+2010_004806
+2010_004805
+2010_004804
+2010_004797
+2010_004793
+2010_004792
+2010_004791
+2010_004786
+2010_004785
+2010_004782
+2010_004779
+2010_004778
+2010_004777
+2010_004775
+2010_004773
+2010_004770
+2010_004768
+2010_004766
+2010_004765
+2010_004760
+2010_004756
+2010_004753
+2010_004751
+2010_004750
+2010_004749
+2010_004748
+2010_004747
+2010_004743
+2010_004741
+2010_004738
+2010_004735
+2010_004733
+2010_004730
+2010_004729
+2010_004728
+2010_004726
+2010_004722
+2010_004721
+2010_004717
+2010_004714
+2010_004712
+2010_004710
+2010_004708
+2010_004704
+2010_004703
+2010_004698
+2010_004696
+2010_004694
+2010_004692
+2010_004691
+2010_004690
+2010_004686
+2010_004683
+2010_004681
+2010_004680
+2010_004679
+2010_004677
+2010_004676
+2010_004672
+2010_004669
+2010_004667
+2010_004666
+2010_004665
+2010_004661
+2010_004660
+2010_004659
+2010_004657
+2010_004656
+2010_004655
+2010_004654
+2010_004646
+2010_004642
+2010_004638
+2010_004637
+2010_004634
+2010_004631
+2010_004629
+2010_004627
+2010_004625
+2010_004624
+2010_004621
+2010_004620
+2010_004618
+2010_004616
+2010_004609
+2010_004604
+2010_004601
+2010_004598
+2010_004597
+2010_004596
+2010_004594
+2010_004592
+2010_004591
+2010_004588
+2010_004586
+2010_004585
+2010_004584
+2010_004581
+2010_004577
+2010_004576
+2010_004575
+2010_004573
+2010_004570
+2010_004569
+2010_004567
+2010_004561
+2010_004560
+2010_004558
+2010_004557
+2010_004554
+2010_004553
+2010_004546
+2010_004545
+2010_004542
+2010_004540
+2010_004537
+2010_004536
+2010_004533
+2010_004523
+2010_004521
+2010_004518
+2010_004517
+2010_004515
+2010_004514
+2010_004511
+2010_004509
+2010_004506
+2010_004505
+2010_004503
+2010_004501
+2010_004499
+2010_004493
+2010_004492
+2010_004491
+2010_004488
+2010_004486
+2010_004484
+2010_004483
+2010_004481
+2010_004478
+2010_004477
+2010_004476
+2010_004475
+2010_004469
+2010_004467
+2010_004466
+2010_004461
+2010_004460
+2010_004459
+2010_004457
+2010_004456
+2010_004455
+2010_004451
+2010_004450
+2010_004448
+2010_004447
+2010_004445
+2010_004441
+2010_004439
+2010_004436
+2010_004431
+2010_004429
+2010_004428
+2010_004425
+2010_004422
+2010_004420
+2010_004417
+2010_004415
+2010_004412
+2010_004409
+2010_004404
+2010_004402
+2010_004400
+2010_004391
+2010_004390
+2010_004387
+2010_004385
+2010_004380
+2010_004374
+2010_004373
+2010_004371
+2010_004370
+2010_004368
+2010_004367
+2010_004366
+2010_004365
+2010_004363
+2010_004362
+2010_004361
+2010_004360
+2010_004358
+2010_004357
+2010_004352
+2010_004351
+2010_004350
+2010_004349
+2010_004346
+2010_004345
+2010_004344
+2010_004341
+2010_004339
+2010_004336
+2010_004335
+2010_004333
+2010_004332
+2010_004327
+2010_004325
+2010_004318
+2010_004313
+2010_004312
+2010_004311
+2010_004307
+2010_004306
+2010_004304
+2010_004301
+2010_004297
+2010_004296
+2010_004295
+2010_004291
+2010_004290
+2010_004289
+2010_004288
+2010_004286
+2010_004283
+2010_004282
+2010_004280
+2010_004279
+2010_004278
+2010_004276
+2010_004275
+2010_004271
+2010_004264
+2010_004263
+2010_004259
+2010_004258
+2010_004257
+2010_004256
+2010_004254
+2010_004253
+2010_004252
+2010_004249
+2010_004248
+2010_004247
+2010_004244
+2010_004242
+2010_004239
+2010_004238
+2010_004231
+2010_004230
+2010_004229
+2010_004228
+2010_004227
+2010_004225
+2010_004224
+2010_004223
+2010_004222
+2010_004216
+2010_004211
+2010_004210
+2010_004209
+2010_004207
+2010_004204
+2010_004201
+2010_004198
+2010_004197
+2010_004193
+2010_004191
+2010_004188
+2010_004187
+2010_004186
+2010_004184
+2010_004182
+2010_004180
+2010_004179
+2010_004178
+2010_004175
+2010_004173
+2010_004172
+2010_004171
+2010_004168
+2010_004163
+2010_004162
+2010_004161
+2010_004160
+2010_004157
+2010_004154
+2010_004148
+2010_004145
+2010_004144
+2010_004143
+2010_004141
+2010_004140
+2010_004139
+2010_004138
+2010_004137
+2010_004133
+2010_004130
+2010_004129
+2010_004125
+2010_004124
+2010_004123
+2010_004121
+2010_004119
+2010_004118
+2010_004116
+2010_004111
+2010_004109
+2010_004108
+2010_004107
+2010_004105
+2010_004102
+2010_004096
+2010_004095
+2010_004094
+2010_004092
+2010_004089
+2010_004088
+2010_004084
+2010_004081
+2010_004075
+2010_004074
+2010_004073
+2010_004072
+2010_004071
+2010_004069
+2010_004067
+2010_004066
+2010_004065
+2010_004064
+2010_004062
+2010_004061
+2010_004060
+2010_004059
+2010_004054
+2010_004053
+2010_004052
+2010_004050
+2010_004048
+2010_004045
+2010_004043
+2010_004037
+2010_004036
+2010_004033
+2010_004031
+2010_004030
+2010_004029
+2010_004028
+2010_004027
+2010_004026
+2010_004025
+2010_004023
+2010_004021
+2010_004017
+2010_004014
+2010_004009
+2010_004008
+2010_004007
+2010_004006
+2010_004005
+2010_004002
+2010_003999
+2010_003996
+2010_003995
+2010_003994
+2010_003988
+2010_003987
+2010_003983
+2010_003982
+2010_003981
+2010_003980
+2010_003976
+2010_003974
+2010_003970
+2010_003966
+2010_003961
+2010_003958
+2010_003957
+2010_003955
+2010_003954
+2010_003950
+2010_003949
+2010_003945
+2010_003944
+2010_003943
+2010_003942
+2010_003939
+2010_003938
+2010_003937
+2010_003936
+2010_003933
+2010_003931
+2010_003929
+2010_003928
+2010_003925
+2010_003920
+2010_003919
+2010_003914
+2010_003911
+2010_003910
+2010_003906
+2010_003900
+2010_003899
+2010_003898
+2010_003897
+2010_003894
+2010_003893
+2010_003892
+2010_003891
+2010_003890
+2010_003887
+2010_003884
+2010_003879
+2010_003878
+2010_003877
+2010_003875
+2010_003874
+2010_003871
+2010_003865
+2010_003864
+2010_003863
+2010_003861
+2010_003860
+2010_003859
+2010_003857
+2010_003856
+2010_003855
+2010_003852
+2010_003848
+2010_003847
+2010_003845
+2010_003844
+2010_003837
+2010_003828
+2010_003826
+2010_003825
+2010_003823
+2010_003822
+2010_003821
+2010_003818
+2010_003816
+2010_003815
+2010_003811
+2010_003807
+2010_003806
+2010_003805
+2010_003804
+2010_003801
+2010_003800
+2010_003799
+2010_003798
+2010_003792
+2010_003791
+2010_003789
+2010_003788
+2010_003784
+2010_003779
+2010_003774
+2010_003773
+2010_003770
+2010_003762
+2010_003761
+2010_003757
+2010_003755
+2010_003754
+2010_003752
+2010_003747
+2010_003745
+2010_003744
+2010_003743
+2010_003742
+2010_003737
+2010_003736
+2010_003735
+2010_003734
+2010_003731
+2010_003730
+2010_003729
+2010_003728
+2010_003725
+2010_003724
+2010_003723
+2010_003721
+2010_003719
+2010_003717
+2010_003714
+2010_003709
+2010_003703
+2010_003701
+2010_003696
+2010_003695
+2010_003690
+2010_003689
+2010_003688
+2010_003687
+2010_003686
+2010_003680
+2010_003679
+2010_003677
+2010_003674
+2010_003673
+2010_003672
+2010_003671
+2010_003670
+2010_003667
+2010_003665
+2010_003664
+2010_003659
+2010_003656
+2010_003655
+2010_003653
+2010_003651
+2010_003649
+2010_003648
+2010_003645
+2010_003644
+2010_003643
+2010_003641
+2010_003640
+2010_003635
+2010_003634
+2010_003632
+2010_003630
+2010_003629
+2010_003628
+2010_003625
+2010_003618
+2010_003613
+2010_003612
+2010_003610
+2010_003609
+2010_003608
+2010_003605
+2010_003604
+2010_003603
+2010_003601
+2010_003599
+2010_003598
+2010_003594
+2010_003592
+2010_003588
+2010_003585
+2010_003582
+2010_003579
+2010_003576
+2010_003574
+2010_003573
+2010_003569
+2010_003568
+2010_003567
+2010_003563
+2010_003562
+2010_003561
+2010_003560
+2010_003559
+2010_003556
+2010_003554
+2010_003551
+2010_003549
+2010_003546
+2010_003540
+2010_003539
+2010_003538
+2010_003537
+2010_003535
+2010_003534
+2010_003529
+2010_003527
+2010_003526
+2010_003522
+2010_003520
+2010_003513
+2010_003512
+2010_003509
+2010_003508
+2010_003507
+2010_003503
+2010_003497
+2010_003496
+2010_003493
+2010_003491
+2010_003490
+2010_003488
+2010_003483
+2010_003482
+2010_003481
+2010_003479
+2010_003478
+2010_003477
+2010_003474
+2010_003470
+2010_003469
+2010_003467
+2010_003465
+2010_003461
+2010_003458
+2010_003451
+2010_003450
+2010_003439
+2010_003437
+2010_003436
+2010_003435
+2010_003432
+2010_003429
+2010_003427
+2010_003421
+2010_003419
+2010_003415
+2010_003411
+2010_003406
+2010_003405
+2010_003401
+2010_003400
+2010_003398
+2010_003397
+2010_003395
+2010_003391
+2010_003390
+2010_003385
+2010_003384
+2010_003383
+2010_003380
+2010_003379
+2010_003376
+2010_003375
+2010_003374
+2010_003372
+2010_003371
+2010_003370
+2010_003368
+2010_003367
+2010_003366
+2010_003361
+2010_003358
+2010_003355
+2010_003353
+2010_003351
+2010_003350
+2010_003345
+2010_003344
+2010_003343
+2010_003342
+2010_003341
+2010_003337
+2010_003335
+2010_003333
+2010_003332
+2010_003331
+2010_003329
+2010_003326
+2010_003321
+2010_003316
+2010_003314
+2010_003309
+2010_003305
+2010_003304
+2010_003303
+2010_003301
+2010_003300
+2010_003299
+2010_003297
+2010_003291
+2010_003290
+2010_003287
+2010_003285
+2010_003283
+2010_003280
+2010_003279
+2010_003278
+2010_003274
+2010_003270
+2010_003269
+2010_003264
+2010_003263
+2010_003260
+2010_003259
+2010_003257
+2010_003256
+2010_003255
+2010_003253
+2010_003252
+2010_003251
+2010_003250
+2010_003249
+2010_003248
+2010_003244
+2010_003241
+2010_003240
+2010_003238
+2010_003236
+2010_003233
+2010_003232
+2010_003230
+2010_003227
+2010_003223
+2010_003222
+2010_003220
+2010_003219
+2010_003218
+2010_003214
+2010_003212
+2010_003206
+2010_003204
+2010_003203
+2010_003201
+2010_003200
+2010_003199
+2010_003197
+2010_003192
+2010_003191
+2010_003190
+2010_003186
+2010_003185
+2010_003179
+2010_003176
+2010_003174
+2010_003173
+2010_003170
+2010_003169
+2010_003162
+2010_003160
+2010_003159
+2010_003157
+2010_003156
+2010_003154
+2010_003153
+2010_003151
+2010_003149
+2010_003148
+2010_003147
+2010_003146
+2010_003143
+2010_003139
+2010_003138
+2010_003137
+2010_003135
+2010_003133
+2010_003129
+2010_003122
+2010_003120
+2010_003119
+2010_003117
+2010_003115
+2010_003114
+2010_003112
+2010_003108
+2010_003107
+2010_003106
+2010_003103
+2010_003102
+2010_003101
+2010_003098
+2010_003097
+2010_003094
+2010_003093
+2010_003092
+2010_003091
+2010_003088
+2010_003086
+2010_003084
+2010_003082
+2010_003081
+2010_003078
+2010_003077
+2010_003074
+2010_003072
+2010_003071
+2010_003067
+2010_003062
+2010_003057
+2010_003056
+2010_003055
+2010_003054
+2010_003053
+2010_003051
+2010_003050
+2010_003047
+2010_003044
+2010_003043
+2010_003040
+2010_003037
+2010_003035
+2010_003034
+2010_003032
+2010_003028
+2010_003027
+2010_003025
+2010_003024
+2010_003019
+2010_003017
+2010_003016
+2010_003015
+2010_003013
+2010_003011
+2010_003010
+2010_003007
+2010_003003
+2010_003002
+2010_002995
+2010_002993
+2010_002991
+2010_002990
+2010_002987
+2010_002985
+2010_002982
+2010_002980
+2010_002979
+2010_002978
+2010_002976
+2010_002973
+2010_002972
+2010_002965
+2010_002962
+2010_002960
+2010_002958
+2010_002956
+2010_002955
+2010_002954
+2010_002948
+2010_002947
+2010_002946
+2010_002941
+2010_002940
+2010_002938
+2010_002937
+2010_002935
+2010_002931
+2010_002930
+2010_002927
+2010_002924
+2010_002917
+2010_002915
+2010_002914
+2010_002909
+2010_002907
+2010_002905
+2010_002903
+2010_002901
+2010_002899
+2010_002896
+2010_002892
+2010_002891
+2010_002887
+2010_002884
+2010_002881
+2010_002880
+2010_002879
+2010_002877
+2010_002876
+2010_002873
+2010_002871
+2010_002870
+2010_002865
+2010_002864
+2010_002860
+2010_002858
+2010_002857
+2010_002856
+2010_002855
+2010_002854
+2010_002853
+2010_002851
+2010_002845
+2010_002844
+2010_002843
+2010_002841
+2010_002840
+2010_002839
+2010_002838
+2010_002834
+2010_002831
+2010_002830
+2010_002827
+2010_002824
+2010_002822
+2010_002821
+2010_002820
+2010_002817
+2010_002816
+2010_002815
+2010_002814
+2010_002813
+2010_002811
+2010_002808
+2010_002807
+2010_002805
+2010_002803
+2010_002801
+2010_002797
+2010_002794
+2010_002793
+2010_002791
+2010_002790
+2010_002789
+2010_002786
+2010_002783
+2010_002781
+2010_002780
+2010_002779
+2010_002778
+2010_002775
+2010_002774
+2010_002772
+2010_002771
+2010_002770
+2010_002767
+2010_002760
+2010_002759
+2010_002758
+2010_002754
+2010_002752
+2010_002750
+2010_002747
+2010_002746
+2010_002742
+2010_002741
+2010_002740
+2010_002737
+2010_002736
+2010_002734
+2010_002733
+2010_002729
+2010_002728
+2010_002725
+2010_002723
+2010_002722
+2010_002721
+2010_002720
+2010_002716
+2010_002714
+2010_002713
+2010_002710
+2010_002708
+2010_002705
+2010_002704
+2010_002702
+2010_002697
+2010_002696
+2010_002695
+2010_002692
+2010_002688
+2010_002686
+2010_002684
+2010_002679
+2010_002678
+2010_002676
+2010_002675
+2010_002674
+2010_002668
+2010_002667
+2010_002666
+2010_002665
+2010_002662
+2010_002661
+2010_002660
+2010_002659
+2010_002656
+2010_002654
+2010_002653
+2010_002652
+2010_002647
+2010_002645
+2010_002644
+2010_002642
+2010_002639
+2010_002638
+2010_002632
+2010_002631
+2010_002629
+2010_002628
+2010_002626
+2010_002625
+2010_002624
+2010_002621
+2010_002620
+2010_002618
+2010_002616
+2010_002615
+2010_002614
+2010_002605
+2010_002603
+2010_002602
+2010_002601
+2010_002598
+2010_002597
+2010_002594
+2010_002592
+2010_002589
+2010_002587
+2010_002586
+2010_002583
+2010_002582
+2010_002580
+2010_002579
+2010_002578
+2010_002577
+2010_002575
+2010_002573
+2010_002570
+2010_002569
+2010_002567
+2010_002565
+2010_002562
+2010_002561
+2010_002556
+2010_002553
+2010_002552
+2010_002551
+2010_002547
+2010_002543
+2010_002542
+2010_002539
+2010_002537
+2010_002534
+2010_002533
+2010_002532
+2010_002529
+2010_002527
+2010_002526
+2010_002520
+2010_002518
+2010_002516
+2010_002513
+2010_002510
+2010_002509
+2010_002507
+2010_002504
+2010_002501
+2010_002499
+2010_002498
+2010_002497
+2010_002496
+2010_002492
+2010_002487
+2010_002485
+2010_002484
+2010_002482
+2010_002479
+2010_002475
+2010_002472
+2010_002469
+2010_002468
+2010_002462
+2010_002461
+2010_002460
+2010_002459
+2010_002458
+2010_002457
+2010_002456
+2010_002455
+2010_002452
+2010_002449
+2010_002448
+2010_002446
+2010_002445
+2010_002440
+2010_002439
+2010_002438
+2010_002436
+2010_002435
+2010_002431
+2010_002429
+2010_002427
+2010_002425
+2010_002424
+2010_002420
+2010_002418
+2010_002413
+2010_002410
+2010_002409
+2010_002408
+2010_002406
+2010_002405
+2010_002402
+2010_002400
+2010_002399
+2010_002398
+2010_002393
+2010_002392
+2010_002391
+2010_002388
+2010_002387
+2010_002383
+2010_002382
+2010_002379
+2010_002378
+2010_002374
+2010_002373
+2010_002371
+2010_002370
+2010_002369
+2010_002368
+2010_002366
+2010_002365
+2010_002364
+2010_002363
+2010_002357
+2010_002356
+2010_002354
+2010_002353
+2010_002349
+2010_002346
+2010_002340
+2010_002338
+2010_002337
+2010_002333
+2010_002332
+2010_002327
+2010_002326
+2010_002321
+2010_002320
+2010_002319
+2010_002318
+2010_002316
+2010_002315
+2010_002313
+2010_002312
+2010_002309
+2010_002307
+2010_002303
+2010_002301
+2010_002299
+2010_002295
+2010_002294
+2010_002289
+2010_002287
+2010_002286
+2010_002283
+2010_002279
+2010_002278
+2010_002276
+2010_002274
+2010_002269
+2010_002263
+2010_002261
+2010_002255
+2010_002254
+2010_002248
+2010_002247
+2010_002245
+2010_002244
+2010_002243
+2010_002242
+2010_002236
+2010_002229
+2010_002227
+2010_002226
+2010_002224
+2010_002223
+2010_002221
+2010_002220
+2010_002219
+2010_002218
+2010_002216
+2010_002215
+2010_002213
+2010_002211
+2010_002208
+2010_002207
+2010_002204
+2010_002203
+2010_002199
+2010_002195
+2010_002194
+2010_002193
+2010_002192
+2010_002191
+2010_002187
+2010_002185
+2010_002183
+2010_002182
+2010_002181
+2010_002180
+2010_002179
+2010_002177
+2010_002176
+2010_002175
+2010_002172
+2010_002168
+2010_002167
+2010_002166
+2010_002154
+2010_002152
+2010_002149
+2010_002143
+2010_002139
+2010_002138
+2010_002136
+2010_002133
+2010_002132
+2010_002130
+2010_002129
+2010_002128
+2010_002127
+2010_002124
+2010_002121
+2010_002118
+2010_002117
+2010_002113
+2010_002107
+2010_002105
+2010_002104
+2010_002102
+2010_002100
+2010_002098
+2010_002097
+2010_002096
+2010_002095
+2010_002094
+2010_002089
+2010_002086
+2010_002085
+2010_002080
+2010_002073
+2010_002070
+2010_002068
+2010_002067
+2010_002065
+2010_002060
+2010_002058
+2010_002057
+2010_002055
+2010_002054
+2010_002050
+2010_002048
+2010_002047
+2010_002046
+2010_002045
+2010_002044
+2010_002042
+2010_002041
+2010_002040
+2010_002039
+2010_002037
+2010_002032
+2010_002029
+2010_002026
+2010_002023
+2010_002022
+2010_002020
+2010_002019
+2010_002018
+2010_002015
+2010_002006
+2010_002005
+2010_002002
+2010_002000
+2010_001998
+2010_001994
+2010_001993
+2010_001992
+2010_001988
+2010_001987
+2010_001986
+2010_001982
+2010_001981
+2010_001980
+2010_001979
+2010_001978
+2010_001976
+2010_001974
+2010_001973
+2010_001970
+2010_001968
+2010_001967
+2010_001960
+2010_001957
+2010_001954
+2010_001950
+2010_001948
+2010_001944
+2010_001941
+2010_001940
+2010_001939
+2010_001938
+2010_001937
+2010_001934
+2010_001933
+2010_001931
+2010_001929
+2010_001927
+2010_001924
+2010_001923
+2010_001922
+2010_001921
+2010_001919
+2010_001918
+2010_001916
+2010_001911
+2010_001907
+2010_001904
+2010_001899
+2010_001896
+2010_001893
+2010_001892
+2010_001891
+2010_001885
+2010_001884
+2010_001881
+2010_001877
+2010_001870
+2010_001869
+2010_001868
+2010_001864
+2010_001863
+2010_001860
+2010_001858
+2010_001857
+2010_001856
+2010_001853
+2010_001852
+2010_001850
+2010_001849
+2010_001846
+2010_001845
+2010_001843
+2010_001842
+2010_001841
+2010_001838
+2010_001837
+2010_001829
+2010_001828
+2010_001827
+2010_001823
+2010_001821
+2010_001819
+2010_001817
+2010_001814
+2010_001810
+2010_001808
+2010_001807
+2010_001806
+2010_001803
+2010_001801
+2010_001797
+2010_001796
+2010_001795
+2010_001794
+2010_001788
+2010_001787
+2010_001785
+2010_001784
+2010_001783
+2010_001780
+2010_001777
+2010_001776
+2010_001771
+2010_001763
+2010_001762
+2010_001760
+2010_001759
+2010_001757
+2010_001756
+2010_001754
+2010_001753
+2010_001749
+2010_001748
+2010_001747
+2010_001746
+2010_001744
+2010_001743
+2010_001739
+2010_001737
+2010_001732
+2010_001731
+2010_001729
+2010_001726
+2010_001720
+2010_001719
+2010_001718
+2010_001717
+2010_001715
+2010_001712
+2010_001710
+2010_001709
+2010_001706
+2010_001705
+2010_001700
+2010_001698
+2010_001697
+2010_001694
+2010_001690
+2010_001689
+2010_001687
+2010_001685
+2010_001682
+2010_001680
+2010_001679
+2010_001676
+2010_001675
+2010_001674
+2010_001671
+2010_001669
+2010_001668
+2010_001665
+2010_001660
+2010_001659
+2010_001652
+2010_001650
+2010_001649
+2010_001647
+2010_001645
+2010_001644
+2010_001640
+2010_001638
+2010_001637
+2010_001636
+2010_001635
+2010_001633
+2010_001630
+2010_001626
+2010_001625
+2010_001619
+2010_001618
+2010_001614
+2010_001608
+2010_001607
+2010_001606
+2010_001603
+2010_001602
+2010_001601
+2010_001599
+2010_001596
+2010_001595
+2010_001594
+2010_001592
+2010_001590
+2010_001587
+2010_001586
+2010_001584
+2010_001583
+2010_001580
+2010_001576
+2010_001574
+2010_001572
+2010_001571
+2010_001569
+2010_001562
+2010_001561
+2010_001560
+2010_001555
+2010_001552
+2010_001551
+2010_001550
+2010_001548
+2010_001547
+2010_001544
+2010_001543
+2010_001540
+2010_001539
+2010_001537
+2010_001536
+2010_001535
+2010_001533
+2010_001529
+2010_001528
+2010_001525
+2010_001520
+2010_001518
+2010_001516
+2010_001515
+2010_001514
+2010_001511
+2010_001505
+2010_001503
+2010_001502
+2010_001501
+2010_001499
+2010_001497
+2010_001487
+2010_001486
+2010_001481
+2010_001480
+2010_001479
+2010_001478
+2010_001473
+2010_001472
+2010_001468
+2010_001465
+2010_001464
+2010_001463
+2010_001461
+2010_001458
+2010_001457
+2010_001456
+2010_001455
+2010_001453
+2010_001452
+2010_001450
+2010_001449
+2010_001441
+2010_001435
+2010_001434
+2010_001433
+2010_001432
+2010_001431
+2010_001430
+2010_001426
+2010_001425
+2010_001422
+2010_001421
+2010_001418
+2010_001417
+2010_001413
+2010_001412
+2010_001411
+2010_001410
+2010_001408
+2010_001407
+2010_001406
+2010_001405
+2010_001402
+2010_001401
+2010_001399
+2010_001397
+2010_001395
+2010_001394
+2010_001390
+2010_001386
+2010_001385
+2010_001383
+2010_001382
+2010_001374
+2010_001372
+2010_001370
+2010_001366
+2010_001364
+2010_001363
+2010_001361
+2010_001360
+2010_001357
+2010_001356
+2010_001355
+2010_001347
+2010_001344
+2010_001343
+2010_001339
+2010_001338
+2010_001337
+2010_001333
+2010_001329
+2010_001328
+2010_001326
+2010_001325
+2010_001321
+2010_001320
+2010_001317
+2010_001315
+2010_001312
+2010_001311
+2010_001310
+2010_001305
+2010_001301
+2010_001294
+2010_001293
+2010_001291
+2010_001289
+2010_001288
+2010_001287
+2010_001286
+2010_001282
+2010_001279
+2010_001277
+2010_001275
+2010_001274
+2010_001273
+2010_001272
+2010_001271
+2010_001270
+2010_001263
+2010_001261
+2010_001257
+2010_001254
+2010_001253
+2010_001250
+2010_001247
+2010_001245
+2010_001242
+2010_001241
+2010_001240
+2010_001237
+2010_001234
+2010_001229
+2010_001225
+2010_001224
+2010_001220
+2010_001219
+2010_001218
+2010_001216
+2010_001215
+2010_001214
+2010_001212
+2010_001211
+2010_001210
+2010_001205
+2010_001204
+2010_001201
+2010_001199
+2010_001195
+2010_001193
+2010_001192
+2010_001189
+2010_001188
+2010_001185
+2010_001184
+2010_001183
+2010_001181
+2010_001179
+2010_001177
+2010_001175
+2010_001172
+2010_001164
+2010_001163
+2010_001160
+2010_001159
+2010_001158
+2010_001154
+2010_001152
+2010_001148
+2010_001143
+2010_001142
+2010_001140
+2010_001139
+2010_001134
+2010_001131
+2010_001130
+2010_001127
+2010_001126
+2010_001125
+2010_001123
+2010_001121
+2010_001120
+2010_001119
+2010_001118
+2010_001117
+2010_001113
+2010_001112
+2010_001111
+2010_001110
+2010_001109
+2010_001107
+2010_001106
+2010_001105
+2010_001103
+2010_001100
+2010_001099
+2010_001098
+2010_001094
+2010_001092
+2010_001089
+2010_001087
+2010_001085
+2010_001082
+2010_001080
+2010_001077
+2010_001076
+2010_001074
+2010_001066
+2010_001063
+2010_001057
+2010_001054
+2010_001052
+2010_001051
+2010_001049
+2010_001044
+2010_001043
+2010_001042
+2010_001039
+2010_001032
+2010_001030
+2010_001025
+2010_001023
+2010_001021
+2010_001013
+2010_001012
+2010_001009
+2010_001008
+2010_001006
+2010_001002
+2010_000996
+2010_000995
+2010_000994
+2010_000993
+2010_000991
+2010_000989
+2010_000986
+2010_000984
+2010_000983
+2010_000981
+2010_000979
+2010_000978
+2010_000975
+2010_000974
+2010_000973
+2010_000971
+2010_000970
+2010_000968
+2010_000959
+2010_000956
+2010_000955
+2010_000954
+2010_000948
+2010_000947
+2010_000945
+2010_000944
+2010_000942
+2010_000938
+2010_000931
+2010_000928
+2010_000927
+2010_000926
+2010_000923
+2010_000922
+2010_000920
+2010_000915
+2010_000914
+2010_000912
+2010_000910
+2010_000908
+2010_000899
+2010_000898
+2010_000897
+2010_000893
+2010_000891
+2010_000889
+2010_000887
+2010_000885
+2010_000883
+2010_000879
+2010_000876
+2010_000875
+2010_000872
+2010_000871
+2010_000870
+2010_000866
+2010_000865
+2010_000863
+2010_000862
+2010_000860
+2010_000855
+2010_000849
+2010_000847
+2010_000846
+2010_000842
+2010_000838
+2010_000837
+2010_000831
+2010_000830
+2010_000829
+2010_000828
+2010_000822
+2010_000821
+2010_000815
+2010_000811
+2010_000810
+2010_000808
+2010_000807
+2010_000806
+2010_000805
+2010_000803
+2010_000802
+2010_000800
+2010_000799
+2010_000797
+2010_000792
+2010_000791
+2010_000787
+2010_000786
+2010_000785
+2010_000782
+2010_000778
+2010_000773
+2010_000772
+2010_000771
+2010_000770
+2010_000769
+2010_000765
+2010_000761
+2010_000760
+2010_000759
+2010_000754
+2010_000749
+2010_000748
+2010_000747
+2010_000746
+2010_000744
+2010_000743
+2010_000740
+2010_000739
+2010_000737
+2010_000735
+2010_000731
+2010_000729
+2010_000727
+2010_000726
+2010_000723
+2010_000722
+2010_000721
+2010_000717
+2010_000716
+2010_000715
+2010_000712
+2010_000711
+2010_000710
+2010_000707
+2010_000705
+2010_000702
+2010_000697
+2010_000695
+2010_000694
+2010_000692
+2010_000691
+2010_000689
+2010_000688
+2010_000687
+2010_000685
+2010_000681
+2010_000678
+2010_000675
+2010_000674
+2010_000671
+2010_000669
+2010_000667
+2010_000665
+2010_000664
+2010_000661
+2010_000658
+2010_000655
+2010_000651
+2010_000648
+2010_000647
+2010_000646
+2010_000645
+2010_000644
+2010_000641
+2010_000635
+2010_000633
+2010_000632
+2010_000630
+2010_000626
+2010_000624
+2010_000621
+2010_000617
+2010_000616
+2010_000613
+2010_000608
+2010_000604
+2010_000603
+2010_000602
+2010_000601
+2010_000591
+2010_000590
+2010_000588
+2010_000586
+2010_000583
+2010_000582
+2010_000581
+2010_000578
+2010_000577
+2010_000576
+2010_000574
+2010_000571
+2010_000568
+2010_000567
+2010_000564
+2010_000562
+2010_000561
+2010_000557
+2010_000556
+2010_000553
+2010_000549
+2010_000548
+2010_000547
+2010_000545
+2010_000541
+2010_000538
+2010_000537
+2010_000536
+2010_000534
+2010_000527
+2010_000526
+2010_000524
+2010_000522
+2010_000519
+2010_000515
+2010_000513
+2010_000511
+2010_000510
+2010_000508
+2010_000506
+2010_000503
+2010_000500
+2010_000498
+2010_000497
+2010_000495
+2010_000493
+2010_000492
+2010_000490
+2010_000488
+2010_000485
+2010_000484
+2010_000483
+2010_000480
+2010_000477
+2010_000475
+2010_000474
+2010_000473
+2010_000470
+2010_000469
+2010_000468
+2010_000466
+2010_000465
+2010_000463
+2010_000462
+2010_000461
+2010_000459
+2010_000458
+2010_000456
+2010_000453
+2010_000449
+2010_000448
+2010_000447
+2010_000446
+2010_000444
+2010_000442
+2010_000439
+2010_000437
+2010_000436
+2010_000435
+2010_000433
+2010_000432
+2010_000431
+2010_000420
+2010_000419
+2010_000418
+2010_000415
+2010_000413
+2010_000409
+2010_000406
+2010_000404
+2010_000401
+2010_000399
+2010_000395
+2010_000394
+2010_000393
+2010_000392
+2010_000390
+2010_000389
+2010_000388
+2010_000386
+2010_000384
+2010_000382
+2010_000381
+2010_000379
+2010_000377
+2010_000376
+2010_000375
+2010_000374
+2010_000371
+2010_000370
+2010_000362
+2010_000361
+2010_000358
+2010_000356
+2010_000352
+2010_000347
+2010_000344
+2010_000337
+2010_000336
+2010_000329
+2010_000327
+2010_000325
+2010_000324
+2010_000323
+2010_000321
+2010_000320
+2010_000317
+2010_000313
+2010_000312
+2010_000310
+2010_000308
+2010_000307
+2010_000303
+2010_000302
+2010_000299
+2010_000296
+2010_000295
+2010_000293
+2010_000291
+2010_000286
+2010_000285
+2010_000283
+2010_000279
+2010_000276
+2010_000273
+2010_000270
+2010_000269
+2010_000266
+2010_000264
+2010_000263
+2010_000262
+2010_000261
+2010_000260
+2010_000255
+2010_000254
+2010_000250
+2010_000249
+2010_000248
+2010_000247
+2010_000246
+2010_000245
+2010_000244
+2010_000234
+2010_000233
+2010_000229
+2010_000227
+2010_000224
+2010_000222
+2010_000218
+2010_000213
+2010_000211
+2010_000209
+2010_000204
+2010_000203
+2010_000202
+2010_000199
+2010_000198
+2010_000197
+2010_000196
+2010_000195
+2010_000194
+2010_000190
+2010_000189
+2010_000187
+2010_000184
+2010_000183
+2010_000182
+2010_000178
+2010_000177
+2010_000175
+2010_000172
+2010_000170
+2010_000169
+2010_000165
+2010_000162
+2010_000157
+2010_000152
+2010_000151
+2010_000148
+2010_000145
+2010_000141
+2010_000140
+2010_000139
+2010_000138
+2010_000137
+2010_000136
+2010_000133
+2010_000132
+2010_000131
+2010_000127
+2010_000124
+2010_000120
+2010_000118
+2010_000117
+2010_000114
+2010_000113
+2010_000111
+2010_000109
+2010_000103
+2010_000099
+2010_000098
+2010_000097
+2010_000095
+2010_000091
+2010_000090
+2010_000089
+2010_000088
+2010_000085
+2010_000082
+2010_000080
+2010_000079
+2010_000076
+2010_000075
+2010_000074
+2010_000073
+2010_000072
+2010_000071
+2010_000069
+2010_000067
+2010_000063
+2010_000061
+2010_000056
+2010_000055
+2010_000054
+2010_000053
+2010_000052
+2010_000050
+2010_000048
+2010_000045
+2010_000043
+2010_000036
+2010_000035
+2010_000033
+2010_000031
+2010_000027
+2010_000026
+2010_000024
+2010_000023
+2010_000018
+2010_000015
+2010_000014
+2010_000009
+2010_000002
+2010_000001
+2009_005311
+2009_005310
+2009_005309
+2009_005308
+2009_005307
+2009_005303
+2009_005300
+2009_005299
+2009_005294
+2009_005293
+2009_005292
+2009_005288
+2009_005287
+2009_005286
+2009_005282
+2009_005279
+2009_005278
+2009_005272
+2009_005269
+2009_005268
+2009_005267
+2009_005265
+2009_005263
+2009_005257
+2009_005256
+2009_005251
+2009_005247
+2009_005246
+2009_005242
+2009_005240
+2009_005239
+2009_005236
+2009_005234
+2009_005232
+2009_005229
+2009_005225
+2009_005222
+2009_005221
+2009_005218
+2009_005216
+2009_005215
+2009_005211
+2009_005210
+2009_005205
+2009_005204
+2009_005203
+2009_005202
+2009_005201
+2009_005198
+2009_005194
+2009_005193
+2009_005191
+2009_005185
+2009_005183
+2009_005181
+2009_005178
+2009_005177
+2009_005172
+2009_005171
+2009_005170
+2009_005168
+2009_005165
+2009_005163
+2009_005162
+2009_005161
+2009_005160
+2009_005155
+2009_005154
+2009_005153
+2009_005152
+2009_005150
+2009_005149
+2009_005147
+2009_005145
+2009_005144
+2009_005142
+2009_005141
+2009_005140
+2009_005133
+2009_005131
+2009_005130
+2009_005128
+2009_005127
+2009_005126
+2009_005120
+2009_005119
+2009_005118
+2009_005114
+2009_005111
+2009_005107
+2009_005104
+2009_005103
+2009_005102
+2009_005098
+2009_005095
+2009_005094
+2009_005086
+2009_005085
+2009_005084
+2009_005083
+2009_005082
+2009_005081
+2009_005080
+2009_005076
+2009_005075
+2009_005073
+2009_005070
+2009_005069
+2009_005068
+2009_005064
+2009_005062
+2009_005061
+2009_005060
+2009_005057
+2009_005056
+2009_005055
+2009_005051
+2009_005045
+2009_005044
+2009_005042
+2009_005040
+2009_005037
+2009_005036
+2009_005035
+2009_005033
+2009_005031
+2009_005030
+2009_005025
+2009_005024
+2009_005019
+2009_005016
+2009_005015
+2009_005008
+2009_005006
+2009_005005
+2009_005001
+2009_005000
+2009_004999
+2009_004996
+2009_004990
+2009_004988
+2009_004986
+2009_004984
+2009_004983
+2009_004982
+2009_004980
+2009_004979
+2009_004977
+2009_004975
+2009_004974
+2009_004971
+2009_004965
+2009_004962
+2009_004961
+2009_004959
+2009_004958
+2009_004956
+2009_004953
+2009_004947
+2009_004946
+2009_004945
+2009_004944
+2009_004943
+2009_004940
+2009_004939
+2009_004934
+2009_004933
+2009_004930
+2009_004929
+2009_004926
+2009_004922
+2009_004921
+2009_004919
+2009_004917
+2009_004914
+2009_004913
+2009_004907
+2009_004905
+2009_004904
+2009_004903
+2009_004902
+2009_004901
+2009_004899
+2009_004898
+2009_004897
+2009_004890
+2009_004889
+2009_004888
+2009_004887
+2009_004885
+2009_004880
+2009_004877
+2009_004876
+2009_004874
+2009_004872
+2009_004871
+2009_004869
+2009_004868
+2009_004865
+2009_004858
+2009_004857
+2009_004856
+2009_004855
+2009_004849
+2009_004847
+2009_004846
+2009_004845
+2009_004841
+2009_004839
+2009_004836
+2009_004834
+2009_004831
+2009_004830
+2009_004829
+2009_004828
+2009_004824
+2009_004823
+2009_004822
+2009_004817
+2009_004815
+2009_004813
+2009_004812
+2009_004806
+2009_004805
+2009_004804
+2009_004798
+2009_004797
+2009_004796
+2009_004794
+2009_004790
+2009_004787
+2009_004786
+2009_004784
+2009_004782
+2009_004781
+2009_004780
+2009_004779
+2009_004772
+2009_004771
+2009_004769
+2009_004768
+2009_004766
+2009_004765
+2009_004764
+2009_004763
+2009_004761
+2009_004760
+2009_004759
+2009_004758
+2009_004756
+2009_004754
+2009_004749
+2009_004746
+2009_004745
+2009_004744
+2009_004737
+2009_004734
+2009_004731
+2009_004728
+2009_004723
+2009_004720
+2009_004719
+2009_004718
+2009_004716
+2009_004713
+2009_004710
+2009_004709
+2009_004708
+2009_004706
+2009_004705
+2009_004701
+2009_004697
+2009_004694
+2009_004688
+2009_004686
+2009_004684
+2009_004683
+2009_004681
+2009_004679
+2009_004677
+2009_004674
+2009_004671
+2009_004670
+2009_004669
+2009_004667
+2009_004664
+2009_004662
+2009_004661
+2009_004656
+2009_004655
+2009_004652
+2009_004651
+2009_004648
+2009_004647
+2009_004645
+2009_004643
+2009_004642
+2009_004639
+2009_004634
+2009_004631
+2009_004630
+2009_004629
+2009_004628
+2009_004626
+2009_004625
+2009_004624
+2009_004623
+2009_004620
+2009_004619
+2009_004616
+2009_004614
+2009_004607
+2009_004606
+2009_004601
+2009_004598
+2009_004593
+2009_004588
+2009_004587
+2009_004582
+2009_004580
+2009_004572
+2009_004571
+2009_004570
+2009_004567
+2009_004565
+2009_004562
+2009_004561
+2009_004560
+2009_004559
+2009_004557
+2009_004556
+2009_004554
+2009_004552
+2009_004551
+2009_004548
+2009_004547
+2009_004545
+2009_004543
+2009_004542
+2009_004539
+2009_004537
+2009_004536
+2009_004535
+2009_004532
+2009_004530
+2009_004529
+2009_004527
+2009_004525
+2009_004524
+2009_004519
+2009_004518
+2009_004514
+2009_004513
+2009_004511
+2009_004508
+2009_004503
+2009_004502
+2009_004501
+2009_004499
+2009_004492
+2009_004486
+2009_004483
+2009_004479
+2009_004478
+2009_004477
+2009_004475
+2009_004471
+2009_004468
+2009_004465
+2009_004464
+2009_004457
+2009_004456
+2009_004454
+2009_004453
+2009_004452
+2009_004451
+2009_004449
+2009_004448
+2009_004446
+2009_004445
+2009_004444
+2009_004442
+2009_004440
+2009_004438
+2009_004436
+2009_004435
+2009_004434
+2009_004432
+2009_004429
+2009_004426
+2009_004425
+2009_004424
+2009_004419
+2009_004417
+2009_004414
+2009_004411
+2009_004410
+2009_004409
+2009_004406
+2009_004404
+2009_004403
+2009_004399
+2009_004397
+2009_004394
+2009_004392
+2009_004390
+2009_004383
+2009_004382
+2009_004377
+2009_004375
+2009_004374
+2009_004371
+2009_004370
+2009_004369
+2009_004368
+2009_004366
+2009_004364
+2009_004361
+2009_004359
+2009_004358
+2009_004357
+2009_004351
+2009_004350
+2009_004347
+2009_004346
+2009_004341
+2009_004340
+2009_004338
+2009_004336
+2009_004334
+2009_004332
+2009_004329
+2009_004328
+2009_004327
+2009_004323
+2009_004322
+2009_004319
+2009_004317
+2009_004316
+2009_004315
+2009_004312
+2009_004309
+2009_004308
+2009_004307
+2009_004303
+2009_004301
+2009_004300
+2009_004295
+2009_004291
+2009_004290
+2009_004289
+2009_004285
+2009_004284
+2009_004283
+2009_004279
+2009_004278
+2009_004277
+2009_004276
+2009_004274
+2009_004273
+2009_004272
+2009_004271
+2009_004264
+2009_004263
+2009_004262
+2009_004261
+2009_004258
+2009_004249
+2009_004244
+2009_004243
+2009_004241
+2009_004234
+2009_004233
+2009_004232
+2009_004231
+2009_004229
+2009_004228
+2009_004227
+2009_004225
+2009_004224
+2009_004222
+2009_004218
+2009_004213
+2009_004212
+2009_004211
+2009_004210
+2009_004207
+2009_004205
+2009_004203
+2009_004202
+2009_004201
+2009_004200
+2009_004199
+2009_004197
+2009_004193
+2009_004191
+2009_004188
+2009_004187
+2009_004186
+2009_004183
+2009_004181
+2009_004180
+2009_004179
+2009_004178
+2009_004177
+2009_004176
+2009_004175
+2009_004174
+2009_004171
+2009_004170
+2009_004169
+2009_004168
+2009_004166
+2009_004165
+2009_004164
+2009_004163
+2009_004162
+2009_004161
+2009_004159
+2009_004157
+2009_004154
+2009_004152
+2009_004150
+2009_004148
+2009_004142
+2009_004141
+2009_004139
+2009_004138
+2009_004134
+2009_004133
+2009_004131
+2009_004129
+2009_004128
+2009_004126
+2009_004124
+2009_004122
+2009_004121
+2009_004118
+2009_004117
+2009_004113
+2009_004112
+2009_004111
+2009_004109
+2009_004108
+2009_004105
+2009_004103
+2009_004102
+2009_004100
+2009_004096
+2009_004095
+2009_004094
+2009_004093
+2009_004092
+2009_004091
+2009_004088
+2009_004085
+2009_004083
+2009_004082
+2009_004078
+2009_004076
+2009_004075
+2009_004074
+2009_004073
+2009_004069
+2009_004062
+2009_004058
+2009_004055
+2009_004052
+2009_004051
+2009_004050
+2009_004044
+2009_004042
+2009_004040
+2009_004038
+2009_004037
+2009_004034
+2009_004032
+2009_004031
+2009_004025
+2009_004023
+2009_004022
+2009_004020
+2009_004019
+2009_004018
+2009_004016
+2009_004012
+2009_004007
+2009_004005
+2009_004004
+2009_004002
+2009_004001
+2009_003995
+2009_003994
+2009_003993
+2009_003992
+2009_003986
+2009_003985
+2009_003982
+2009_003977
+2009_003976
+2009_003975
+2009_003974
+2009_003973
+2009_003969
+2009_003966
+2009_003965
+2009_003962
+2009_003961
+2009_003958
+2009_003956
+2009_003955
+2009_003951
+2009_003950
+2009_003947
+2009_003944
+2009_003942
+2009_003936
+2009_003933
+2009_003929
+2009_003922
+2009_003921
+2009_003920
+2009_003916
+2009_003914
+2009_003913
+2009_003912
+2009_003911
+2009_003908
+2009_003905
+2009_003902
+2009_003901
+2009_003900
+2009_003899
+2009_003897
+2009_003896
+2009_003892
+2009_003888
+2009_003884
+2009_003883
+2009_003879
+2009_003874
+2009_003873
+2009_003870
+2009_003867
+2009_003865
+2009_003863
+2009_003860
+2009_003855
+2009_003852
+2009_003848
+2009_003847
+2009_003846
+2009_003843
+2009_003840
+2009_003838
+2009_003837
+2009_003836
+2009_003835
+2009_003832
+2009_003829
+2009_003827
+2009_003825
+2009_003822
+2009_003821
+2009_003820
+2009_003819
+2009_003818
+2009_003816
+2009_003815
+2009_003814
+2009_003813
+2009_003808
+2009_003802
+2009_003801
+2009_003800
+2009_003799
+2009_003795
+2009_003793
+2009_003790
+2009_003786
+2009_003785
+2009_003784
+2009_003783
+2009_003781
+2009_003776
+2009_003775
+2009_003768
+2009_003765
+2009_003760
+2009_003759
+2009_003758
+2009_003757
+2009_003753
+2009_003752
+2009_003751
+2009_003747
+2009_003743
+2009_003739
+2009_003738
+2009_003736
+2009_003735
+2009_003734
+2009_003732
+2009_003725
+2009_003722
+2009_003720
+2009_003718
+2009_003717
+2009_003714
+2009_003713
+2009_003711
+2009_003710
+2009_003709
+2009_003708
+2009_003705
+2009_003704
+2009_003702
+2009_003698
+2009_003697
+2009_003695
+2009_003694
+2009_003690
+2009_003689
+2009_003688
+2009_003686
+2009_003685
+2009_003683
+2009_003679
+2009_003677
+2009_003671
+2009_003669
+2009_003668
+2009_003667
+2009_003664
+2009_003663
+2009_003660
+2009_003657
+2009_003656
+2009_003655
+2009_003654
+2009_003652
+2009_003650
+2009_003647
+2009_003646
+2009_003644
+2009_003642
+2009_003639
+2009_003638
+2009_003636
+2009_003635
+2009_003634
+2009_003633
+2009_003629
+2009_003627
+2009_003626
+2009_003624
+2009_003618
+2009_003614
+2009_003613
+2009_003612
+2009_003609
+2009_003608
+2009_003606
+2009_003605
+2009_003601
+2009_003600
+2009_003598
+2009_003594
+2009_003592
+2009_003588
+2009_003583
+2009_003581
+2009_003577
+2009_003572
+2009_003571
+2009_003566
+2009_003565
+2009_003563
+2009_003562
+2009_003560
+2009_003555
+2009_003554
+2009_003546
+2009_003545
+2009_003544
+2009_003543
+2009_003541
+2009_003540
+2009_003539
+2009_003538
+2009_003537
+2009_003534
+2009_003533
+2009_003531
+2009_003530
+2009_003528
+2009_003524
+2009_003522
+2009_003521
+2009_003520
+2009_003519
+2009_003513
+2009_003511
+2009_003510
+2009_003509
+2009_003508
+2009_003500
+2009_003499
+2009_003497
+2009_003492
+2009_003491
+2009_003490
+2009_003489
+2009_003488
+2009_003487
+2009_003482
+2009_003476
+2009_003469
+2009_003468
+2009_003467
+2009_003462
+2009_003461
+2009_003460
+2009_003459
+2009_003458
+2009_003457
+2009_003456
+2009_003455
+2009_003454
+2009_003453
+2009_003447
+2009_003446
+2009_003445
+2009_003443
+2009_003441
+2009_003440
+2009_003436
+2009_003431
+2009_003430
+2009_003425
+2009_003422
+2009_003419
+2009_003417
+2009_003416
+2009_003415
+2009_003411
+2009_003409
+2009_003407
+2009_003402
+2009_003400
+2009_003399
+2009_003396
+2009_003395
+2009_003394
+2009_003386
+2009_003385
+2009_003384
+2009_003383
+2009_003381
+2009_003380
+2009_003379
+2009_003377
+2009_003376
+2009_003375
+2009_003373
+2009_003372
+2009_003369
+2009_003367
+2009_003365
+2009_003363
+2009_003361
+2009_003360
+2009_003353
+2009_003352
+2009_003351
+2009_003350
+2009_003349
+2009_003348
+2009_003347
+2009_003346
+2009_003345
+2009_003340
+2009_003338
+2009_003333
+2009_003326
+2009_003320
+2009_003317
+2009_003316
+2009_003315
+2009_003312
+2009_003310
+2009_003309
+2009_003305
+2009_003301
+2009_003300
+2009_003297
+2009_003294
+2009_003290
+2009_003288
+2009_003285
+2009_003284
+2009_003282
+2009_003278
+2009_003277
+2009_003276
+2009_003272
+2009_003271
+2009_003267
+2009_003266
+2009_003265
+2009_003262
+2009_003261
+2009_003259
+2009_003257
+2009_003255
+2009_003254
+2009_003253
+2009_003251
+2009_003249
+2009_003247
+2009_003238
+2009_003234
+2009_003233
+2009_003232
+2009_003230
+2009_003229
+2009_003225
+2009_003222
+2009_003219
+2009_003218
+2009_003214
+2009_003212
+2009_003209
+2009_003208
+2009_003204
+2009_003201
+2009_003200
+2009_003199
+2009_003198
+2009_003194
+2009_003191
+2009_003189
+2009_003187
+2009_003185
+2009_003183
+2009_003175
+2009_003173
+2009_003172
+2009_003168
+2009_003166
+2009_003165
+2009_003164
+2009_003157
+2009_003156
+2009_003155
+2009_003154
+2009_003153
+2009_003151
+2009_003150
+2009_003147
+2009_003146
+2009_003144
+2009_003143
+2009_003142
+2009_003140
+2009_003138
+2009_003136
+2009_003132
+2009_003130
+2009_003129
+2009_003128
+2009_003127
+2009_003126
+2009_003125
+2009_003122
+2009_003118
+2009_003116
+2009_003115
+2009_003114
+2009_003110
+2009_003109
+2009_003108
+2009_003107
+2009_003098
+2009_003097
+2009_003095
+2009_003093
+2009_003091
+2009_003090
+2009_003089
+2009_003088
+2009_003087
+2009_003083
+2009_003082
+2009_003078
+2009_003077
+2009_003076
+2009_003075
+2009_003074
+2009_003070
+2009_003068
+2009_003067
+2009_003066
+2009_003064
+2009_003058
+2009_003056
+2009_003054
+2009_003053
+2009_003052
+2009_003044
+2009_003042
+2009_003039
+2009_003035
+2009_003034
+2009_003033
+2009_003032
+2009_003031
+2009_003023
+2009_003022
+2009_003020
+2009_003019
+2009_003018
+2009_003013
+2009_003012
+2009_003010
+2009_003007
+2009_003006
+2009_003002
+2009_003000
+2009_002999
+2009_002998
+2009_002995
+2009_002993
+2009_002988
+2009_002986
+2009_002985
+2009_002984
+2009_002983
+2009_002980
+2009_002978
+2009_002977
+2009_002976
+2009_002972
+2009_002971
+2009_002970
+2009_002967
+2009_002962
+2009_002961
+2009_002960
+2009_002958
+2009_002957
+2009_002955
+2009_002954
+2009_002952
+2009_002947
+2009_002946
+2009_002941
+2009_002940
+2009_002938
+2009_002937
+2009_002935
+2009_002933
+2009_002932
+2009_002925
+2009_002921
+2009_002920
+2009_002918
+2009_002917
+2009_002914
+2009_002912
+2009_002910
+2009_002908
+2009_002902
+2009_002901
+2009_002898
+2009_002897
+2009_002894
+2009_002893
+2009_002890
+2009_002885
+2009_002883
+2009_002882
+2009_002879
+2009_002877
+2009_002876
+2009_002872
+2009_002869
+2009_002867
+2009_002865
+2009_002862
+2009_002855
+2009_002853
+2009_002851
+2009_002850
+2009_002849
+2009_002847
+2009_002845
+2009_002844
+2009_002843
+2009_002842
+2009_002841
+2009_002838
+2009_002837
+2009_002836
+2009_002835
+2009_002833
+2009_002831
+2009_002830
+2009_002827
+2009_002824
+2009_002820
+2009_002817
+2009_002816
+2009_002814
+2009_002813
+2009_002809
+2009_002807
+2009_002806
+2009_002803
+2009_002800
+2009_002799
+2009_002798
+2009_002792
+2009_002791
+2009_002790
+2009_002789
+2009_002785
+2009_002784
+2009_002780
+2009_002779
+2009_002778
+2009_002777
+2009_002774
+2009_002772
+2009_002770
+2009_002765
+2009_002764
+2009_002763
+2009_002762
+2009_002759
+2009_002758
+2009_002755
+2009_002754
+2009_002752
+2009_002750
+2009_002746
+2009_002744
+2009_002743
+2009_002741
+2009_002739
+2009_002734
+2009_002733
+2009_002728
+2009_002725
+2009_002719
+2009_002717
+2009_002715
+2009_002714
+2009_002713
+2009_002712
+2009_002711
+2009_002710
+2009_002708
+2009_002705
+2009_002704
+2009_002703
+2009_002698
+2009_002697
+2009_002695
+2009_002689
+2009_002688
+2009_002687
+2009_002685
+2009_002684
+2009_002683
+2009_002681
+2009_002676
+2009_002675
+2009_002674
+2009_002673
+2009_002672
+2009_002671
+2009_002670
+2009_002669
+2009_002668
+2009_002667
+2009_002665
+2009_002663
+2009_002662
+2009_002652
+2009_002648
+2009_002645
+2009_002634
+2009_002632
+2009_002629
+2009_002628
+2009_002626
+2009_002625
+2009_002624
+2009_002621
+2009_002620
+2009_002616
+2009_002615
+2009_002614
+2009_002613
+2009_002612
+2009_002611
+2009_002609
+2009_002608
+2009_002607
+2009_002605
+2009_002599
+2009_002597
+2009_002595
+2009_002592
+2009_002588
+2009_002586
+2009_002585
+2009_002580
+2009_002579
+2009_002577
+2009_002570
+2009_002569
+2009_002567
+2009_002566
+2009_002565
+2009_002563
+2009_002561
+2009_002559
+2009_002558
+2009_002557
+2009_002556
+2009_002553
+2009_002552
+2009_002546
+2009_002543
+2009_002542
+2009_002537
+2009_002536
+2009_002532
+2009_002531
+2009_002530
+2009_002525
+2009_002524
+2009_002523
+2009_002522
+2009_002519
+2009_002518
+2009_002517
+2009_002515
+2009_002514
+2009_002512
+2009_002510
+2009_002506
+2009_002505
+2009_002504
+2009_002500
+2009_002499
+2009_002488
+2009_002477
+2009_002476
+2009_002475
+2009_002474
+2009_002472
+2009_002471
+2009_002470
+2009_002465
+2009_002464
+2009_002460
+2009_002457
+2009_002456
+2009_002453
+2009_002452
+2009_002449
+2009_002448
+2009_002444
+2009_002443
+2009_002441
+2009_002439
+2009_002438
+2009_002436
+2009_002434
+2009_002433
+2009_002432
+2009_002431
+2009_002429
+2009_002425
+2009_002424
+2009_002423
+2009_002422
+2009_002420
+2009_002419
+2009_002416
+2009_002414
+2009_002409
+2009_002408
+2009_002407
+2009_002406
+2009_002404
+2009_002401
+2009_002400
+2009_002399
+2009_002398
+2009_002397
+2009_002393
+2009_002391
+2009_002388
+2009_002387
+2009_002386
+2009_002381
+2009_002380
+2009_002377
+2009_002376
+2009_002374
+2009_002373
+2009_002371
+2009_002370
+2009_002363
+2009_002362
+2009_002360
+2009_002358
+2009_002352
+2009_002350
+2009_002349
+2009_002348
+2009_002343
+2009_002339
+2009_002338
+2009_002335
+2009_002333
+2009_002331
+2009_002328
+2009_002326
+2009_002325
+2009_002324
+2009_002319
+2009_002314
+2009_002312
+2009_002311
+2009_002308
+2009_002306
+2009_002305
+2009_002302
+2009_002301
+2009_002299
+2009_002298
+2009_002297
+2009_002289
+2009_002286
+2009_002285
+2009_002282
+2009_002281
+2009_002274
+2009_002273
+2009_002272
+2009_002271
+2009_002267
+2009_002264
+2009_002262
+2009_002259
+2009_002258
+2009_002257
+2009_002256
+2009_002254
+2009_002253
+2009_002252
+2009_002245
+2009_002242
+2009_002240
+2009_002236
+2009_002235
+2009_002232
+2009_002231
+2009_002230
+2009_002229
+2009_002228
+2009_002226
+2009_002225
+2009_002222
+2009_002219
+2009_002216
+2009_002215
+2009_002214
+2009_002212
+2009_002211
+2009_002208
+2009_002205
+2009_002204
+2009_002203
+2009_002199
+2009_002198
+2009_002197
+2009_002194
+2009_002193
+2009_002192
+2009_002191
+2009_002182
+2009_002180
+2009_002177
+2009_002176
+2009_002175
+2009_002173
+2009_002169
+2009_002153
+2009_002152
+2009_002151
+2009_002149
+2009_002147
+2009_002146
+2009_002145
+2009_002144
+2009_002141
+2009_002139
+2009_002137
+2009_002136
+2009_002133
+2009_002131
+2009_002129
+2009_002128
+2009_002127
+2009_002126
+2009_002123
+2009_002120
+2009_002119
+2009_002118
+2009_002117
+2009_002116
+2009_002112
+2009_002111
+2009_002110
+2009_002107
+2009_002105
+2009_002104
+2009_002103
+2009_002099
+2009_002098
+2009_002096
+2009_002093
+2009_002089
+2009_002088
+2009_002087
+2009_002086
+2009_002083
+2009_002078
+2009_002077
+2009_002073
+2009_002072
+2009_002066
+2009_002064
+2009_002061
+2009_002060
+2009_002058
+2009_002057
+2009_002056
+2009_002055
+2009_002054
+2009_002053
+2009_002052
+2009_002046
+2009_002044
+2009_002040
+2009_002039
+2009_002037
+2009_002031
+2009_002024
+2009_002019
+2009_002011
+2009_002010
+2009_002009
+2009_002008
+2009_002003
+2009_002002
+2009_002001
+2009_002000
+2009_001999
+2009_001997
+2009_001994
+2009_001990
+2009_001988
+2009_001984
+2009_001980
+2009_001979
+2009_001977
+2009_001976
+2009_001975
+2009_001973
+2009_001972
+2009_001971
+2009_001967
+2009_001965
+2009_001964
+2009_001962
+2009_001961
+2009_001960
+2009_001959
+2009_001952
+2009_001949
+2009_001948
+2009_001945
+2009_001940
+2009_001937
+2009_001934
+2009_001933
+2009_001931
+2009_001929
+2009_001927
+2009_001926
+2009_001922
+2009_001917
+2009_001916
+2009_001911
+2009_001910
+2009_001909
+2009_001908
+2009_001907
+2009_001906
+2009_001905
+2009_001904
+2009_001902
+2009_001898
+2009_001897
+2009_001894
+2009_001890
+2009_001888
+2009_001885
+2009_001884
+2009_001881
+2009_001875
+2009_001874
+2009_001873
+2009_001871
+2009_001869
+2009_001868
+2009_001867
+2009_001865
+2009_001864
+2009_001861
+2009_001858
+2009_001856
+2009_001853
+2009_001852
+2009_001848
+2009_001847
+2009_001846
+2009_001840
+2009_001839
+2009_001837
+2009_001835
+2009_001833
+2009_001831
+2009_001830
+2009_001828
+2009_001827
+2009_001826
+2009_001825
+2009_001823
+2009_001822
+2009_001820
+2009_001817
+2009_001812
+2009_001811
+2009_001810
+2009_001809
+2009_001807
+2009_001806
+2009_001805
+2009_001802
+2009_001801
+2009_001800
+2009_001799
+2009_001798
+2009_001794
+2009_001792
+2009_001784
+2009_001783
+2009_001782
+2009_001781
+2009_001780
+2009_001779
+2009_001778
+2009_001774
+2009_001770
+2009_001767
+2009_001764
+2009_001759
+2009_001758
+2009_001755
+2009_001754
+2009_001752
+2009_001751
+2009_001750
+2009_001749
+2009_001747
+2009_001746
+2009_001744
+2009_001743
+2009_001741
+2009_001740
+2009_001738
+2009_001735
+2009_001734
+2009_001733
+2009_001732
+2009_001724
+2009_001723
+2009_001720
+2009_001719
+2009_001715
+2009_001713
+2009_001709
+2009_001707
+2009_001706
+2009_001705
+2009_001704
+2009_001699
+2009_001696
+2009_001695
+2009_001693
+2009_001690
+2009_001689
+2009_001682
+2009_001678
+2009_001677
+2009_001676
+2009_001675
+2009_001674
+2009_001673
+2009_001671
+2009_001670
+2009_001667
+2009_001664
+2009_001660
+2009_001657
+2009_001653
+2009_001651
+2009_001648
+2009_001646
+2009_001645
+2009_001643
+2009_001642
+2009_001640
+2009_001638
+2009_001636
+2009_001635
+2009_001633
+2009_001631
+2009_001627
+2009_001625
+2009_001623
+2009_001621
+2009_001618
+2009_001617
+2009_001615
+2009_001614
+2009_001612
+2009_001611
+2009_001608
+2009_001606
+2009_001605
+2009_001602
+2009_001598
+2009_001595
+2009_001594
+2009_001593
+2009_001591
+2009_001590
+2009_001589
+2009_001587
+2009_001585
+2009_001581
+2009_001577
+2009_001575
+2009_001570
+2009_001568
+2009_001567
+2009_001566
+2009_001562
+2009_001558
+2009_001555
+2009_001554
+2009_001553
+2009_001550
+2009_001549
+2009_001546
+2009_001544
+2009_001542
+2009_001541
+2009_001539
+2009_001538
+2009_001537
+2009_001534
+2009_001526
+2009_001522
+2009_001521
+2009_001519
+2009_001518
+2009_001517
+2009_001516
+2009_001514
+2009_001509
+2009_001508
+2009_001507
+2009_001502
+2009_001501
+2009_001500
+2009_001498
+2009_001494
+2009_001493
+2009_001490
+2009_001484
+2009_001481
+2009_001480
+2009_001479
+2009_001476
+2009_001475
+2009_001474
+2009_001472
+2009_001470
+2009_001468
+2009_001466
+2009_001463
+2009_001462
+2009_001457
+2009_001456
+2009_001453
+2009_001452
+2009_001450
+2009_001449
+2009_001448
+2009_001447
+2009_001446
+2009_001444
+2009_001443
+2009_001440
+2009_001437
+2009_001435
+2009_001434
+2009_001431
+2009_001427
+2009_001426
+2009_001424
+2009_001422
+2009_001419
+2009_001417
+2009_001414
+2009_001413
+2009_001412
+2009_001409
+2009_001407
+2009_001406
+2009_001403
+2009_001398
+2009_001397
+2009_001395
+2009_001393
+2009_001390
+2009_001389
+2009_001388
+2009_001387
+2009_001385
+2009_001384
+2009_001376
+2009_001375
+2009_001374
+2009_001372
+2009_001371
+2009_001370
+2009_001369
+2009_001368
+2009_001367
+2009_001366
+2009_001364
+2009_001361
+2009_001360
+2009_001359
+2009_001357
+2009_001355
+2009_001354
+2009_001350
+2009_001349
+2009_001348
+2009_001345
+2009_001344
+2009_001343
+2009_001339
+2009_001329
+2009_001328
+2009_001327
+2009_001326
+2009_001323
+2009_001322
+2009_001321
+2009_001320
+2009_001319
+2009_001316
+2009_001313
+2009_001312
+2009_001311
+2009_001309
+2009_001308
+2009_001306
+2009_001305
+2009_001303
+2009_001301
+2009_001291
+2009_001289
+2009_001288
+2009_001286
+2009_001285
+2009_001283
+2009_001282
+2009_001279
+2009_001271
+2009_001270
+2009_001268
+2009_001266
+2009_001264
+2009_001263
+2009_001260
+2009_001259
+2009_001257
+2009_001254
+2009_001253
+2009_001252
+2009_001251
+2009_001249
+2009_001245
+2009_001243
+2009_001242
+2009_001241
+2009_001238
+2009_001237
+2009_001236
+2009_001230
+2009_001229
+2009_001227
+2009_001225
+2009_001224
+2009_001221
+2009_001217
+2009_001216
+2009_001212
+2009_001208
+2009_001207
+2009_001206
+2009_001205
+2009_001203
+2009_001201
+2009_001199
+2009_001198
+2009_001197
+2009_001196
+2009_001195
+2009_001192
+2009_001190
+2009_001188
+2009_001184
+2009_001181
+2009_001180
+2009_001177
+2009_001172
+2009_001166
+2009_001164
+2009_001163
+2009_001159
+2009_001155
+2009_001154
+2009_001153
+2009_001152
+2009_001151
+2009_001148
+2009_001147
+2009_001146
+2009_001145
+2009_001140
+2009_001139
+2009_001138
+2009_001137
+2009_001135
+2009_001134
+2009_001133
+2009_001129
+2009_001128
+2009_001126
+2009_001124
+2009_001121
+2009_001120
+2009_001118
+2009_001117
+2009_001113
+2009_001111
+2009_001110
+2009_001107
+2009_001106
+2009_001105
+2009_001104
+2009_001103
+2009_001102
+2009_001100
+2009_001098
+2009_001097
+2009_001096
+2009_001095
+2009_001094
+2009_001091
+2009_001090
+2009_001085
+2009_001084
+2009_001083
+2009_001081
+2009_001079
+2009_001078
+2009_001075
+2009_001070
+2009_001069
+2009_001061
+2009_001059
+2009_001057
+2009_001056
+2009_001055
+2009_001054
+2009_001052
+2009_001044
+2009_001042
+2009_001040
+2009_001038
+2009_001037
+2009_001036
+2009_001030
+2009_001028
+2009_001027
+2009_001026
+2009_001024
+2009_001021
+2009_001019
+2009_001016
+2009_001013
+2009_001012
+2009_001011
+2009_001009
+2009_001007
+2009_001006
+2009_001002
+2009_001000
+2009_000996
+2009_000995
+2009_000992
+2009_000990
+2009_000987
+2009_000985
+2009_000981
+2009_000980
+2009_000979
+2009_000975
+2009_000974
+2009_000973
+2009_000971
+2009_000970
+2009_000969
+2009_000967
+2009_000966
+2009_000962
+2009_000961
+2009_000960
+2009_000958
+2009_000955
+2009_000954
+2009_000953
+2009_000948
+2009_000945
+2009_000939
+2009_000938
+2009_000937
+2009_000934
+2009_000932
+2009_000930
+2009_000928
+2009_000927
+2009_000926
+2009_000925
+2009_000923
+2009_000920
+2009_000915
+2009_000910
+2009_000909
+2009_000906
+2009_000904
+2009_000902
+2009_000901
+2009_000899
+2009_000898
+2009_000897
+2009_000896
+2009_000895
+2009_000894
+2009_000890
+2009_000889
+2009_000887
+2009_000886
+2009_000882
+2009_000874
+2009_000871
+2009_000869
+2009_000867
+2009_000865
+2009_000862
+2009_000858
+2009_000856
+2009_000854
+2009_000852
+2009_000851
+2009_000849
+2009_000848
+2009_000846
+2009_000843
+2009_000837
+2009_000834
+2009_000833
+2009_000831
+2009_000830
+2009_000829
+2009_000824
+2009_000823
+2009_000821
+2009_000820
+2009_000817
+2009_000816
+2009_000815
+2009_000812
+2009_000811
+2009_000805
+2009_000804
+2009_000801
+2009_000797
+2009_000796
+2009_000794
+2009_000793
+2009_000791
+2009_000790
+2009_000789
+2009_000783
+2009_000782
+2009_000779
+2009_000778
+2009_000777
+2009_000774
+2009_000770
+2009_000768
+2009_000763
+2009_000762
+2009_000760
+2009_000759
+2009_000758
+2009_000757
+2009_000756
+2009_000755
+2009_000752
+2009_000750
+2009_000748
+2009_000746
+2009_000745
+2009_000744
+2009_000742
+2009_000741
+2009_000737
+2009_000734
+2009_000726
+2009_000725
+2009_000724
+2009_000722
+2009_000720
+2009_000719
+2009_000718
+2009_000709
+2009_000708
+2009_000702
+2009_000696
+2009_000695
+2009_000694
+2009_000692
+2009_000691
+2009_000690
+2009_000689
+2009_000686
+2009_000684
+2009_000683
+2009_000681
+2009_000679
+2009_000677
+2009_000676
+2009_000674
+2009_000672
+2009_000670
+2009_000663
+2009_000662
+2009_000661
+2009_000658
+2009_000655
+2009_000653
+2009_000651
+2009_000648
+2009_000647
+2009_000642
+2009_000638
+2009_000637
+2009_000636
+2009_000635
+2009_000634
+2009_000632
+2009_000631
+2009_000629
+2009_000626
+2009_000625
+2009_000624
+2009_000617
+2009_000615
+2009_000614
+2009_000611
+2009_000606
+2009_000604
+2009_000603
+2009_000602
+2009_000600
+2009_000599
+2009_000597
+2009_000595
+2009_000593
+2009_000592
+2009_000591
+2009_000590
+2009_000586
+2009_000585
+2009_000579
+2009_000577
+2009_000576
+2009_000575
+2009_000574
+2009_000568
+2009_000567
+2009_000566
+2009_000565
+2009_000563
+2009_000562
+2009_000560
+2009_000559
+2009_000558
+2009_000557
+2009_000553
+2009_000552
+2009_000550
+2009_000549
+2009_000547
+2009_000546
+2009_000545
+2009_000544
+2009_000542
+2009_000539
+2009_000536
+2009_000535
+2009_000532
+2009_000529
+2009_000527
+2009_000526
+2009_000525
+2009_000522
+2009_000519
+2009_000516
+2009_000515
+2009_000513
+2009_000512
+2009_000511
+2009_000505
+2009_000504
+2009_000503
+2009_000502
+2009_000501
+2009_000500
+2009_000499
+2009_000496
+2009_000494
+2009_000493
+2009_000491
+2009_000486
+2009_000483
+2009_000477
+2009_000476
+2009_000474
+2009_000472
+2009_000471
+2009_000466
+2009_000464
+2009_000463
+2009_000461
+2009_000456
+2009_000454
+2009_000453
+2009_000452
+2009_000449
+2009_000445
+2009_000444
+2009_000443
+2009_000439
+2009_000438
+2009_000435
+2009_000430
+2009_000422
+2009_000420
+2009_000419
+2009_000417
+2009_000416
+2009_000414
+2009_000411
+2009_000410
+2009_000409
+2009_000408
+2009_000405
+2009_000402
+2009_000400
+2009_000399
+2009_000398
+2009_000397
+2009_000393
+2009_000390
+2009_000389
+2009_000385
+2009_000379
+2009_000378
+2009_000377
+2009_000375
+2009_000370
+2009_000367
+2009_000366
+2009_000356
+2009_000350
+2009_000347
+2009_000344
+2009_000343
+2009_000342
+2009_000341
+2009_000340
+2009_000339
+2009_000337
+2009_000336
+2009_000330
+2009_000328
+2009_000327
+2009_000322
+2009_000321
+2009_000320
+2009_000317
+2009_000316
+2009_000312
+2009_000308
+2009_000305
+2009_000304
+2009_000303
+2009_000300
+2009_000298
+2009_000297
+2009_000293
+2009_000291
+2009_000290
+2009_000289
+2009_000288
+2009_000287
+2009_000286
+2009_000285
+2009_000284
+2009_000283
+2009_000282
+2009_000280
+2009_000277
+2009_000276
+2009_000268
+2009_000260
+2009_000257
+2009_000254
+2009_000253
+2009_000251
+2009_000250
+2009_000249
+2009_000248
+2009_000247
+2009_000244
+2009_000239
+2009_000237
+2009_000233
+2009_000232
+2009_000229
+2009_000227
+2009_000225
+2009_000223
+2009_000218
+2009_000217
+2009_000216
+2009_000214
+2009_000212
+2009_000209
+2009_000206
+2009_000203
+2009_000199
+2009_000198
+2009_000197
+2009_000195
+2009_000192
+2009_000189
+2009_000188
+2009_000184
+2009_000183
+2009_000182
+2009_000181
+2009_000177
+2009_000176
+2009_000171
+2009_000169
+2009_000168
+2009_000165
+2009_000164
+2009_000161
+2009_000160
+2009_000159
+2009_000158
+2009_000157
+2009_000151
+2009_000150
+2009_000146
+2009_000145
+2009_000142
+2009_000141
+2009_000140
+2009_000137
+2009_000135
+2009_000133
+2009_000132
+2009_000131
+2009_000130
+2009_000128
+2009_000124
+2009_000122
+2009_000120
+2009_000119
+2009_000109
+2009_000105
+2009_000104
+2009_000103
+2009_000102
+2009_000100
+2009_000097
+2009_000093
+2009_000091
+2009_000090
+2009_000089
+2009_000088
+2009_000085
+2009_000084
+2009_000082
+2009_000078
+2009_000073
+2009_000072
+2009_000068
+2009_000067
+2009_000066
+2009_000063
+2009_000060
+2009_000059
+2009_000058
+2009_000056
+2009_000055
+2009_000054
+2009_000052
+2009_000051
+2009_000045
+2009_000042
+2009_000041
+2009_000040
+2009_000035
+2009_000030
+2009_000029
+2009_000028
+2009_000027
+2009_000026
+2009_000021
+2009_000017
+2009_000016
+2009_000015
+2009_000014
+2009_000011
+2009_000010
+2009_000009
+2009_000006
+2009_000002
+2009_000001
+2008_008773
+2008_008772
+2008_008770
+2008_008767
+2008_008765
+2008_008757
+2008_008755
+2008_008753
+2008_008751
+2008_008749
+2008_008748
+2008_008745
+2008_008744
+2008_008739
+2008_008735
+2008_008732
+2008_008726
+2008_008725
+2008_008724
+2008_008719
+2008_008718
+2008_008717
+2008_008714
+2008_008713
+2008_008708
+2008_008707
+2008_008706
+2008_008705
+2008_008701
+2008_008700
+2008_008697
+2008_008696
+2008_008695
+2008_008694
+2008_008691
+2008_008690
+2008_008689
+2008_008685
+2008_008684
+2008_008683
+2008_008681
+2008_008679
+2008_008676
+2008_008675
+2008_008674
+2008_008673
+2008_008671
+2008_008668
+2008_008666
+2008_008665
+2008_008662
+2008_008659
+2008_008658
+2008_008654
+2008_008652
+2008_008649
+2008_008642
+2008_008641
+2008_008637
+2008_008636
+2008_008635
+2008_008632
+2008_008628
+2008_008624
+2008_008623
+2008_008622
+2008_008621
+2008_008619
+2008_008618
+2008_008617
+2008_008616
+2008_008615
+2008_008613
+2008_008611
+2008_008608
+2008_008607
+2008_008606
+2008_008601
+2008_008600
+2008_008598
+2008_008595
+2008_008593
+2008_008591
+2008_008590
+2008_008589
+2008_008588
+2008_008585
+2008_008583
+2008_008579
+2008_008578
+2008_008574
+2008_008572
+2008_008570
+2008_008567
+2008_008564
+2008_008560
+2008_008554
+2008_008552
+2008_008550
+2008_008549
+2008_008547
+2008_008546
+2008_008545
+2008_008544
+2008_008541
+2008_008538
+2008_008537
+2008_008536
+2008_008533
+2008_008531
+2008_008530
+2008_008528
+2008_008527
+2008_008526
+2008_008525
+2008_008524
+2008_008522
+2008_008521
+2008_008519
+2008_008517
+2008_008512
+2008_008511
+2008_008508
+2008_008507
+2008_008506
+2008_008501
+2008_008500
+2008_008497
+2008_008496
+2008_008490
+2008_008488
+2008_008487
+2008_008482
+2008_008480
+2008_008479
+2008_008476
+2008_008474
+2008_008470
+2008_008467
+2008_008466
+2008_008464
+2008_008462
+2008_008461
+2008_008455
+2008_008453
+2008_008450
+2008_008447
+2008_008446
+2008_008444
+2008_008443
+2008_008440
+2008_008439
+2008_008437
+2008_008435
+2008_008433
+2008_008432
+2008_008431
+2008_008429
+2008_008428
+2008_008423
+2008_008416
+2008_008411
+2008_008410
+2008_008406
+2008_008404
+2008_008403
+2008_008402
+2008_008395
+2008_008388
+2008_008387
+2008_008384
+2008_008382
+2008_008380
+2008_008379
+2008_008377
+2008_008376
+2008_008373
+2008_008370
+2008_008368
+2008_008366
+2008_008365
+2008_008364
+2008_008363
+2008_008359
+2008_008357
+2008_008356
+2008_008354
+2008_008347
+2008_008346
+2008_008345
+2008_008344
+2008_008343
+2008_008342
+2008_008341
+2008_008338
+2008_008337
+2008_008336
+2008_008331
+2008_008330
+2008_008325
+2008_008324
+2008_008323
+2008_008322
+2008_008321
+2008_008320
+2008_008319
+2008_008318
+2008_008315
+2008_008314
+2008_008313
+2008_008310
+2008_008309
+2008_008307
+2008_008302
+2008_008300
+2008_008297
+2008_008294
+2008_008292
+2008_008288
+2008_008287
+2008_008284
+2008_008281
+2008_008279
+2008_008276
+2008_008275
+2008_008274
+2008_008272
+2008_008271
+2008_008269
+2008_008266
+2008_008263
+2008_008262
+2008_008257
+2008_008254
+2008_008246
+2008_008242
+2008_008241
+2008_008237
+2008_008235
+2008_008234
+2008_008233
+2008_008232
+2008_008231
+2008_008229
+2008_008227
+2008_008224
+2008_008223
+2008_008220
+2008_008218
+2008_008217
+2008_008215
+2008_008212
+2008_008211
+2008_008210
+2008_008208
+2008_008206
+2008_008203
+2008_008200
+2008_008199
+2008_008197
+2008_008194
+2008_008193
+2008_008192
+2008_008191
+2008_008190
+2008_008185
+2008_008184
+2008_008180
+2008_008179
+2008_008177
+2008_008176
+2008_008175
+2008_008170
+2008_008169
+2008_008166
+2008_008162
+2008_008155
+2008_008154
+2008_008152
+2008_008150
+2008_008148
+2008_008147
+2008_008146
+2008_008145
+2008_008141
+2008_008134
+2008_008132
+2008_008130
+2008_008125
+2008_008123
+2008_008122
+2008_008121
+2008_008120
+2008_008116
+2008_008115
+2008_008113
+2008_008112
+2008_008109
+2008_008106
+2008_008105
+2008_008098
+2008_008097
+2008_008096
+2008_008095
+2008_008093
+2008_008091
+2008_008086
+2008_008084
+2008_008083
+2008_008080
+2008_008075
+2008_008074
+2008_008073
+2008_008072
+2008_008070
+2008_008069
+2008_008066
+2008_008064
+2008_008058
+2008_008057
+2008_008055
+2008_008052
+2008_008048
+2008_008044
+2008_008043
+2008_008040
+2008_008037
+2008_008034
+2008_008031
+2008_008029
+2008_008028
+2008_008025
+2008_008024
+2008_008022
+2008_008021
+2008_008020
+2008_008018
+2008_008012
+2008_008011
+2008_008007
+2008_008004
+2008_008002
+2008_008001
+2008_007999
+2008_007998
+2008_007997
+2008_007993
+2008_007990
+2008_007989
+2008_007988
+2008_007987
+2008_007986
+2008_007985
+2008_007981
+2008_007977
+2008_007975
+2008_007973
+2008_007970
+2008_007969
+2008_007966
+2008_007964
+2008_007962
+2008_007955
+2008_007954
+2008_007953
+2008_007950
+2008_007949
+2008_007948
+2008_007947
+2008_007942
+2008_007941
+2008_007940
+2008_007938
+2008_007937
+2008_007936
+2008_007935
+2008_007933
+2008_007932
+2008_007931
+2008_007928
+2008_007923
+2008_007922
+2008_007918
+2008_007917
+2008_007916
+2008_007915
+2008_007914
+2008_007913
+2008_007912
+2008_007909
+2008_007907
+2008_007904
+2008_007902
+2008_007897
+2008_007895
+2008_007893
+2008_007891
+2008_007890
+2008_007888
+2008_007887
+2008_007884
+2008_007883
+2008_007882
+2008_007879
+2008_007877
+2008_007875
+2008_007873
+2008_007872
+2008_007871
+2008_007870
+2008_007869
+2008_007864
+2008_007861
+2008_007858
+2008_007855
+2008_007854
+2008_007853
+2008_007852
+2008_007850
+2008_007848
+2008_007843
+2008_007842
+2008_007841
+2008_007840
+2008_007839
+2008_007837
+2008_007835
+2008_007833
+2008_007831
+2008_007829
+2008_007827
+2008_007825
+2008_007823
+2008_007819
+2008_007817
+2008_007816
+2008_007812
+2008_007806
+2008_007805
+2008_007798
+2008_007794
+2008_007793
+2008_007791
+2008_007789
+2008_007788
+2008_007787
+2008_007786
+2008_007781
+2008_007780
+2008_007779
+2008_007777
+2008_007770
+2008_007768
+2008_007766
+2008_007764
+2008_007761
+2008_007760
+2008_007759
+2008_007758
+2008_007757
+2008_007755
+2008_007752
+2008_007750
+2008_007749
+2008_007748
+2008_007746
+2008_007745
+2008_007742
+2008_007741
+2008_007739
+2008_007736
+2008_007735
+2008_007733
+2008_007730
+2008_007729
+2008_007726
+2008_007724
+2008_007719
+2008_007717
+2008_007716
+2008_007714
+2008_007710
+2008_007709
+2008_007706
+2008_007704
+2008_007702
+2008_007701
+2008_007698
+2008_007697
+2008_007696
+2008_007694
+2008_007693
+2008_007692
+2008_007691
+2008_007690
+2008_007688
+2008_007685
+2008_007683
+2008_007682
+2008_007676
+2008_007673
+2008_007669
+2008_007668
+2008_007666
+2008_007665
+2008_007664
+2008_007662
+2008_007661
+2008_007660
+2008_007656
+2008_007653
+2008_007649
+2008_007648
+2008_007646
+2008_007643
+2008_007641
+2008_007640
+2008_007635
+2008_007632
+2008_007630
+2008_007629
+2008_007625
+2008_007623
+2008_007621
+2008_007618
+2008_007617
+2008_007613
+2008_007612
+2008_007611
+2008_007610
+2008_007608
+2008_007604
+2008_007599
+2008_007597
+2008_007595
+2008_007594
+2008_007593
+2008_007591
+2008_007589
+2008_007588
+2008_007587
+2008_007586
+2008_007585
+2008_007584
+2008_007583
+2008_007581
+2008_007579
+2008_007576
+2008_007574
+2008_007573
+2008_007567
+2008_007565
+2008_007561
+2008_007559
+2008_007558
+2008_007556
+2008_007546
+2008_007544
+2008_007538
+2008_007537
+2008_007536
+2008_007534
+2008_007533
+2008_007531
+2008_007529
+2008_007528
+2008_007525
+2008_007524
+2008_007521
+2008_007519
+2008_007515
+2008_007514
+2008_007511
+2008_007510
+2008_007509
+2008_007504
+2008_007501
+2008_007500
+2008_007496
+2008_007494
+2008_007491
+2008_007488
+2008_007486
+2008_007485
+2008_007480
+2008_007478
+2008_007477
+2008_007476
+2008_007473
+2008_007472
+2008_007471
+2008_007470
+2008_007469
+2008_007466
+2008_007465
+2008_007461
+2008_007459
+2008_007458
+2008_007456
+2008_007455
+2008_007452
+2008_007448
+2008_007446
+2008_007444
+2008_007443
+2008_007442
+2008_007441
+2008_007438
+2008_007435
+2008_007434
+2008_007433
+2008_007432
+2008_007431
+2008_007430
+2008_007428
+2008_007425
+2008_007424
+2008_007423
+2008_007421
+2008_007417
+2008_007415
+2008_007410
+2008_007409
+2008_007404
+2008_007403
+2008_007398
+2008_007397
+2008_007394
+2008_007393
+2008_007390
+2008_007389
+2008_007388
+2008_007384
+2008_007383
+2008_007382
+2008_007375
+2008_007374
+2008_007364
+2008_007363
+2008_007361
+2008_007358
+2008_007357
+2008_007356
+2008_007355
+2008_007353
+2008_007352
+2008_007348
+2008_007346
+2008_007344
+2008_007339
+2008_007336
+2008_007335
+2008_007334
+2008_007332
+2008_007327
+2008_007325
+2008_007324
+2008_007323
+2008_007321
+2008_007320
+2008_007319
+2008_007317
+2008_007314
+2008_007313
+2008_007312
+2008_007311
+2008_007307
+2008_007305
+2008_007298
+2008_007295
+2008_007293
+2008_007291
+2008_007289
+2008_007287
+2008_007286
+2008_007285
+2008_007282
+2008_007281
+2008_007280
+2008_007279
+2008_007277
+2008_007274
+2008_007266
+2008_007265
+2008_007264
+2008_007261
+2008_007260
+2008_007256
+2008_007254
+2008_007252
+2008_007250
+2008_007247
+2008_007246
+2008_007245
+2008_007242
+2008_007241
+2008_007239
+2008_007237
+2008_007236
+2008_007231
+2008_007229
+2008_007227
+2008_007226
+2008_007225
+2008_007223
+2008_007222
+2008_007221
+2008_007218
+2008_007217
+2008_007216
+2008_007214
+2008_007211
+2008_007208
+2008_007207
+2008_007205
+2008_007201
+2008_007197
+2008_007196
+2008_007195
+2008_007190
+2008_007189
+2008_007188
+2008_007187
+2008_007185
+2008_007184
+2008_007182
+2008_007181
+2008_007179
+2008_007176
+2008_007171
+2008_007169
+2008_007168
+2008_007167
+2008_007166
+2008_007165
+2008_007164
+2008_007163
+2008_007161
+2008_007156
+2008_007151
+2008_007147
+2008_007146
+2008_007145
+2008_007142
+2008_007138
+2008_007134
+2008_007133
+2008_007131
+2008_007130
+2008_007129
+2008_007124
+2008_007119
+2008_007118
+2008_007115
+2008_007114
+2008_007112
+2008_007108
+2008_007106
+2008_007105
+2008_007103
+2008_007101
+2008_007098
+2008_007097
+2008_007095
+2008_007091
+2008_007090
+2008_007086
+2008_007085
+2008_007084
+2008_007082
+2008_007081
+2008_007076
+2008_007075
+2008_007073
+2008_007070
+2008_007069
+2008_007067
+2008_007064
+2008_007061
+2008_007060
+2008_007059
+2008_007058
+2008_007057
+2008_007056
+2008_007054
+2008_007050
+2008_007045
+2008_007043
+2008_007042
+2008_007039
+2008_007038
+2008_007034
+2008_007032
+2008_007030
+2008_007028
+2008_007026
+2008_007022
+2008_007021
+2008_007019
+2008_007014
+2008_007012
+2008_007011
+2008_007010
+2008_007009
+2008_007006
+2008_007004
+2008_007003
+2008_006999
+2008_006998
+2008_006997
+2008_006992
+2008_006991
+2008_006989
+2008_006987
+2008_006980
+2008_006979
+2008_006973
+2008_006969
+2008_006968
+2008_006967
+2008_006965
+2008_006962
+2008_006961
+2008_006960
+2008_006959
+2008_006956
+2008_006954
+2008_006953
+2008_006952
+2008_006951
+2008_006950
+2008_006949
+2008_006948
+2008_006946
+2008_006944
+2008_006941
+2008_006939
+2008_006936
+2008_006933
+2008_006926
+2008_006925
+2008_006924
+2008_006923
+2008_006921
+2008_006920
+2008_006919
+2008_006912
+2008_006910
+2008_006909
+2008_006908
+2008_006907
+2008_006904
+2008_006903
+2008_006902
+2008_006900
+2008_006898
+2008_006896
+2008_006892
+2008_006890
+2008_006889
+2008_006885
+2008_006882
+2008_006881
+2008_006880
+2008_006879
+2008_006877
+2008_006873
+2008_006872
+2008_006870
+2008_006868
+2008_006865
+2008_006864
+2008_006863
+2008_006857
+2008_006855
+2008_006849
+2008_006847
+2008_006844
+2008_006843
+2008_006841
+2008_006839
+2008_006837
+2008_006834
+2008_006833
+2008_006832
+2008_006831
+2008_006828
+2008_006827
+2008_006825
+2008_006824
+2008_006820
+2008_006819
+2008_006818
+2008_006817
+2008_006816
+2008_006815
+2008_006813
+2008_006811
+2008_006810
+2008_006808
+2008_006807
+2008_006802
+2008_006800
+2008_006798
+2008_006797
+2008_006796
+2008_006793
+2008_006792
+2008_006785
+2008_006781
+2008_006779
+2008_006778
+2008_006777
+2008_006776
+2008_006774
+2008_006773
+2008_006767
+2008_006765
+2008_006764
+2008_006762
+2008_006761
+2008_006758
+2008_006753
+2008_006751
+2008_006750
+2008_006748
+2008_006747
+2008_006746
+2008_006743
+2008_006737
+2008_006733
+2008_006732
+2008_006731
+2008_006730
+2008_006728
+2008_006724
+2008_006719
+2008_006718
+2008_006717
+2008_006716
+2008_006715
+2008_006714
+2008_006712
+2008_006710
+2008_006708
+2008_006705
+2008_006701
+2008_006696
+2008_006694
+2008_006692
+2008_006691
+2008_006690
+2008_006686
+2008_006684
+2008_006682
+2008_006677
+2008_006671
+2008_006668
+2008_006667
+2008_006665
+2008_006663
+2008_006662
+2008_006660
+2008_006657
+2008_006656
+2008_006655
+2008_006654
+2008_006650
+2008_006649
+2008_006646
+2008_006645
+2008_006642
+2008_006641
+2008_006638
+2008_006637
+2008_006635
+2008_006634
+2008_006631
+2008_006629
+2008_006626
+2008_006625
+2008_006624
+2008_006623
+2008_006621
+2008_006619
+2008_006617
+2008_006616
+2008_006614
+2008_006613
+2008_006611
+2008_006610
+2008_006609
+2008_006606
+2008_006605
+2008_006604
+2008_006602
+2008_006600
+2008_006599
+2008_006598
+2008_006591
+2008_006588
+2008_006587
+2008_006586
+2008_006585
+2008_006579
+2008_006578
+2008_006576
+2008_006570
+2008_006568
+2008_006567
+2008_006566
+2008_006564
+2008_006562
+2008_006561
+2008_006558
+2008_006549
+2008_006548
+2008_006547
+2008_006546
+2008_006543
+2008_006538
+2008_006534
+2008_006530
+2008_006524
+2008_006522
+2008_006520
+2008_006519
+2008_006517
+2008_006512
+2008_006511
+2008_006509
+2008_006503
+2008_006502
+2008_006500
+2008_006497
+2008_006496
+2008_006491
+2008_006490
+2008_006489
+2008_006488
+2008_006487
+2008_006483
+2008_006482
+2008_006481
+2008_006477
+2008_006475
+2008_006474
+2008_006470
+2008_006467
+2008_006463
+2008_006462
+2008_006461
+2008_006458
+2008_006452
+2008_006449
+2008_006448
+2008_006447
+2008_006441
+2008_006438
+2008_006436
+2008_006434
+2008_006433
+2008_006432
+2008_006430
+2008_006429
+2008_006427
+2008_006425
+2008_006424
+2008_006421
+2008_006419
+2008_006417
+2008_006416
+2008_006410
+2008_006409
+2008_006407
+2008_006404
+2008_006403
+2008_006401
+2008_006400
+2008_006397
+2008_006394
+2008_006392
+2008_006390
+2008_006389
+2008_006387
+2008_006386
+2008_006384
+2008_006382
+2008_006377
+2008_006376
+2008_006373
+2008_006370
+2008_006369
+2008_006368
+2008_006366
+2008_006365
+2008_006364
+2008_006362
+2008_006361
+2008_006359
+2008_006356
+2008_006355
+2008_006353
+2008_006351
+2008_006350
+2008_006349
+2008_006347
+2008_006345
+2008_006339
+2008_006337
+2008_006336
+2008_006335
+2008_006331
+2008_006330
+2008_006329
+2008_006323
+2008_006320
+2008_006317
+2008_006316
+2008_006315
+2008_006311
+2008_006310
+2008_006307
+2008_006303
+2008_006300
+2008_006298
+2008_006295
+2008_006294
+2008_006290
+2008_006289
+2008_006288
+2008_006285
+2008_006282
+2008_006281
+2008_006280
+2008_006276
+2008_006273
+2008_006272
+2008_006271
+2008_006269
+2008_006267
+2008_006265
+2008_006262
+2008_006258
+2008_006257
+2008_006256
+2008_006253
+2008_006250
+2008_006249
+2008_006244
+2008_006242
+2008_006240
+2008_006239
+2008_006235
+2008_006234
+2008_006233
+2008_006232
+2008_006227
+2008_006225
+2008_006224
+2008_006222
+2008_006221
+2008_006220
+2008_006218
+2008_006215
+2008_006213
+2008_006211
+2008_006210
+2008_006207
+2008_006205
+2008_006203
+2008_006200
+2008_006195
+2008_006194
+2008_006192
+2008_006190
+2008_006188
+2008_006186
+2008_006185
+2008_006182
+2008_006181
+2008_006179
+2008_006178
+2008_006175
+2008_006170
+2008_006169
+2008_006166
+2008_006164
+2008_006163
+2008_006158
+2008_006154
+2008_006152
+2008_006151
+2008_006148
+2008_006147
+2008_006145
+2008_006144
+2008_006140
+2008_006136
+2008_006135
+2008_006133
+2008_006129
+2008_006128
+2008_006124
+2008_006121
+2008_006120
+2008_006119
+2008_006117
+2008_006113
+2008_006112
+2008_006111
+2008_006109
+2008_006104
+2008_006102
+2008_006100
+2008_006099
+2008_006096
+2008_006094
+2008_006092
+2008_006090
+2008_006088
+2008_006087
+2008_006085
+2008_006082
+2008_006081
+2008_006078
+2008_006076
+2008_006074
+2008_006072
+2008_006071
+2008_006070
+2008_006068
+2008_006067
+2008_006065
+2008_006064
+2008_006062
+2008_006059
+2008_006058
+2008_006052
+2008_006050
+2008_006049
+2008_006047
+2008_006046
+2008_006045
+2008_006042
+2008_006041
+2008_006039
+2008_006038
+2008_006037
+2008_006032
+2008_006031
+2008_006028
+2008_006027
+2008_006024
+2008_006021
+2008_006020
+2008_006017
+2008_006014
+2008_006010
+2008_006007
+2008_006004
+2008_006002
+2008_006000
+2008_005997
+2008_005991
+2008_005989
+2008_005987
+2008_005984
+2008_005982
+2008_005980
+2008_005979
+2008_005978
+2008_005977
+2008_005976
+2008_005975
+2008_005972
+2008_005970
+2008_005968
+2008_005967
+2008_005964
+2008_005962
+2008_005960
+2008_005959
+2008_005957
+2008_005956
+2008_005954
+2008_005953
+2008_005945
+2008_005943
+2008_005939
+2008_005938
+2008_005937
+2008_005936
+2008_005935
+2008_005934
+2008_005933
+2008_005929
+2008_005928
+2008_005926
+2008_005924
+2008_005923
+2008_005921
+2008_005918
+2008_005916
+2008_005914
+2008_005907
+2008_005903
+2008_005902
+2008_005898
+2008_005897
+2008_005893
+2008_005891
+2008_005890
+2008_005889
+2008_005884
+2008_005883
+2008_005882
+2008_005881
+2008_005878
+2008_005877
+2008_005875
+2008_005874
+2008_005873
+2008_005871
+2008_005869
+2008_005867
+2008_005865
+2008_005863
+2008_005860
+2008_005857
+2008_005856
+2008_005855
+2008_005853
+2008_005850
+2008_005848
+2008_005847
+2008_005846
+2008_005845
+2008_005843
+2008_005839
+2008_005838
+2008_005834
+2008_005832
+2008_005831
+2008_005825
+2008_005823
+2008_005822
+2008_005821
+2008_005818
+2008_005817
+2008_005816
+2008_005810
+2008_005808
+2008_005805
+2008_005803
+2008_005801
+2008_005800
+2008_005798
+2008_005796
+2008_005794
+2008_005792
+2008_005791
+2008_005790
+2008_005788
+2008_005780
+2008_005779
+2008_005777
+2008_005774
+2008_005770
+2008_005768
+2008_005767
+2008_005764
+2008_005763
+2008_005761
+2008_005758
+2008_005757
+2008_005752
+2008_005750
+2008_005748
+2008_005747
+2008_005742
+2008_005739
+2008_005737
+2008_005736
+2008_005735
+2008_005734
+2008_005732
+2008_005728
+2008_005726
+2008_005724
+2008_005721
+2008_005720
+2008_005719
+2008_005716
+2008_005714
+2008_005713
+2008_005707
+2008_005706
+2008_005705
+2008_005703
+2008_005702
+2008_005701
+2008_005699
+2008_005698
+2008_005695
+2008_005687
+2008_005686
+2008_005685
+2008_005683
+2008_005682
+2008_005681
+2008_005679
+2008_005678
+2008_005677
+2008_005675
+2008_005673
+2008_005668
+2008_005664
+2008_005663
+2008_005660
+2008_005657
+2008_005656
+2008_005653
+2008_005652
+2008_005650
+2008_005649
+2008_005646
+2008_005643
+2008_005641
+2008_005639
+2008_005638
+2008_005636
+2008_005635
+2008_005634
+2008_005631
+2008_005627
+2008_005626
+2008_005625
+2008_005623
+2008_005618
+2008_005616
+2008_005614
+2008_005612
+2008_005611
+2008_005610
+2008_005609
+2008_005608
+2008_005603
+2008_005601
+2008_005600
+2008_005599
+2008_005593
+2008_005591
+2008_005589
+2008_005588
+2008_005584
+2008_005582
+2008_005574
+2008_005573
+2008_005572
+2008_005570
+2008_005569
+2008_005567
+2008_005566
+2008_005564
+2008_005563
+2008_005561
+2008_005560
+2008_005558
+2008_005553
+2008_005552
+2008_005550
+2008_005549
+2008_005548
+2008_005541
+2008_005538
+2008_005536
+2008_005534
+2008_005531
+2008_005530
+2008_005527
+2008_005526
+2008_005523
+2008_005522
+2008_005521
+2008_005519
+2008_005517
+2008_005514
+2008_005512
+2008_005511
+2008_005510
+2008_005507
+2008_005505
+2008_005504
+2008_005502
+2008_005501
+2008_005500
+2008_005498
+2008_005496
+2008_005494
+2008_005491
+2008_005490
+2008_005485
+2008_005484
+2008_005480
+2008_005477
+2008_005473
+2008_005472
+2008_005469
+2008_005467
+2008_005465
+2008_005463
+2008_005460
+2008_005456
+2008_005455
+2008_005451
+2008_005449
+2008_005447
+2008_005446
+2008_005444
+2008_005443
+2008_005436
+2008_005431
+2008_005429
+2008_005427
+2008_005423
+2008_005421
+2008_005417
+2008_005415
+2008_005414
+2008_005412
+2008_005408
+2008_005406
+2008_005405
+2008_005404
+2008_005400
+2008_005396
+2008_005395
+2008_005393
+2008_005386
+2008_005382
+2008_005380
+2008_005379
+2008_005378
+2008_005376
+2008_005375
+2008_005374
+2008_005373
+2008_005369
+2008_005367
+2008_005365
+2008_005363
+2008_005362
+2008_005361
+2008_005360
+2008_005359
+2008_005357
+2008_005356
+2008_005354
+2008_005350
+2008_005349
+2008_005348
+2008_005347
+2008_005346
+2008_005345
+2008_005342
+2008_005337
+2008_005336
+2008_005335
+2008_005333
+2008_005331
+2008_005329
+2008_005327
+2008_005325
+2008_005324
+2008_005323
+2008_005321
+2008_005319
+2008_005316
+2008_005315
+2008_005313
+2008_005310
+2008_005309
+2008_005304
+2008_005303
+2008_005300
+2008_005297
+2008_005296
+2008_005295
+2008_005294
+2008_005288
+2008_005283
+2008_005282
+2008_005281
+2008_005279
+2008_005277
+2008_005276
+2008_005272
+2008_005271
+2008_005270
+2008_005269
+2008_005266
+2008_005261
+2008_005260
+2008_005257
+2008_005255
+2008_005253
+2008_005252
+2008_005251
+2008_005250
+2008_005248
+2008_005247
+2008_005244
+2008_005243
+2008_005240
+2008_005236
+2008_005235
+2008_005234
+2008_005233
+2008_005231
+2008_005221
+2008_005220
+2008_005218
+2008_005216
+2008_005215
+2008_005214
+2008_005213
+2008_005209
+2008_005208
+2008_005205
+2008_005204
+2008_005201
+2008_005196
+2008_005194
+2008_005193
+2008_005191
+2008_005190
+2008_005186
+2008_005185
+2008_005182
+2008_005181
+2008_005178
+2008_005174
+2008_005171
+2008_005168
+2008_005167
+2008_005166
+2008_005160
+2008_005159
+2008_005156
+2008_005151
+2008_005150
+2008_005147
+2008_005146
+2008_005140
+2008_005139
+2008_005137
+2008_005136
+2008_005134
+2008_005133
+2008_005132
+2008_005127
+2008_005123
+2008_005117
+2008_005115
+2008_005114
+2008_005111
+2008_005110
+2008_005109
+2008_005108
+2008_005107
+2008_005101
+2008_005098
+2008_005096
+2008_005094
+2008_005092
+2008_005090
+2008_005088
+2008_005085
+2008_005084
+2008_005082
+2008_005081
+2008_005080
+2008_005078
+2008_005074
+2008_005072
+2008_005071
+2008_005070
+2008_005068
+2008_005066
+2008_005065
+2008_005064
+2008_005063
+2008_005061
+2008_005057
+2008_005055
+2008_005054
+2008_005051
+2008_005046
+2008_005045
+2008_005043
+2008_005042
+2008_005040
+2008_005037
+2008_005036
+2008_005035
+2008_005033
+2008_005032
+2008_005023
+2008_005016
+2008_005015
+2008_005013
+2008_005010
+2008_005008
+2008_005006
+2008_005003
+2008_005001
+2008_005000
+2008_004998
+2008_004991
+2008_004990
+2008_004985
+2008_004984
+2008_004983
+2008_004982
+2008_004981
+2008_004979
+2008_004977
+2008_004976
+2008_004975
+2008_004974
+2008_004973
+2008_004970
+2008_004969
+2008_004968
+2008_004967
+2008_004966
+2008_004964
+2008_004961
+2008_004955
+2008_004950
+2008_004948
+2008_004946
+2008_004945
+2008_004942
+2008_004940
+2008_004938
+2008_004937
+2008_004935
+2008_004934
+2008_004933
+2008_004931
+2008_004930
+2008_004926
+2008_004923
+2008_004921
+2008_004920
+2008_004917
+2008_004914
+2008_004911
+2008_004908
+2008_004907
+2008_004904
+2008_004900
+2008_004899
+2008_004898
+2008_004896
+2008_004894
+2008_004893
+2008_004892
+2008_004887
+2008_004885
+2008_004881
+2008_004876
+2008_004875
+2008_004874
+2008_004873
+2008_004872
+2008_004869
+2008_004868
+2008_004866
+2008_004862
+2008_004858
+2008_004856
+2008_004852
+2008_004851
+2008_004850
+2008_004849
+2008_004847
+2008_004845
+2008_004844
+2008_004841
+2008_004838
+2008_004837
+2008_004834
+2008_004833
+2008_004832
+2008_004827
+2008_004825
+2008_004822
+2008_004821
+2008_004819
+2008_004814
+2008_004812
+2008_004808
+2008_004807
+2008_004805
+2008_004804
+2008_004802
+2008_004797
+2008_004795
+2008_004794
+2008_004786
+2008_004784
+2008_004783
+2008_004781
+2008_004778
+2008_004777
+2008_004776
+2008_004774
+2008_004771
+2008_004770
+2008_004768
+2008_004767
+2008_004766
+2008_004764
+2008_004763
+2008_004760
+2008_004756
+2008_004752
+2008_004750
+2008_004749
+2008_004745
+2008_004742
+2008_004740
+2008_004739
+2008_004736
+2008_004732
+2008_004730
+2008_004729
+2008_004726
+2008_004725
+2008_004722
+2008_004720
+2008_004719
+2008_004718
+2008_004713
+2008_004711
+2008_004707
+2008_004706
+2008_004703
+2008_004702
+2008_004697
+2008_004696
+2008_004695
+2008_004692
+2008_004690
+2008_004689
+2008_004688
+2008_004684
+2008_004679
+2008_004678
+2008_004677
+2008_004672
+2008_004671
+2008_004670
+2008_004668
+2008_004667
+2008_004666
+2008_004665
+2008_004663
+2008_004662
+2008_004661
+2008_004653
+2008_004649
+2008_004648
+2008_004647
+2008_004646
+2008_004640
+2008_004636
+2008_004635
+2008_004634
+2008_004633
+2008_004632
+2008_004631
+2008_004630
+2008_004629
+2008_004620
+2008_004619
+2008_004617
+2008_004616
+2008_004615
+2008_004614
+2008_004613
+2008_004611
+2008_004607
+2008_004606
+2008_004605
+2008_004603
+2008_004602
+2008_004599
+2008_004593
+2008_004592
+2008_004590
+2008_004589
+2008_004588
+2008_004585
+2008_004584
+2008_004583
+2008_004581
+2008_004579
+2008_004574
+2008_004570
+2008_004568
+2008_004567
+2008_004564
+2008_004559
+2008_004554
+2008_004553
+2008_004551
+2008_004550
+2008_004549
+2008_004547
+2008_004546
+2008_004545
+2008_004544
+2008_004541
+2008_004540
+2008_004539
+2008_004538
+2008_004534
+2008_004533
+2008_004532
+2008_004528
+2008_004526
+2008_004525
+2008_004522
+2008_004520
+2008_004519
+2008_004515
+2008_004513
+2008_004512
+2008_004510
+2008_004506
+2008_004505
+2008_004504
+2008_004502
+2008_004501
+2008_004499
+2008_004498
+2008_004497
+2008_004493
+2008_004492
+2008_004490
+2008_004488
+2008_004487
+2008_004482
+2008_004480
+2008_004479
+2008_004478
+2008_004476
+2008_004471
+2008_004470
+2008_004469
+2008_004464
+2008_004462
+2008_004460
+2008_004459
+2008_004458
+2008_004457
+2008_004455
+2008_004452
+2008_004450
+2008_004445
+2008_004443
+2008_004441
+2008_004439
+2008_004438
+2008_004436
+2008_004435
+2008_004431
+2008_004430
+2008_004428
+2008_004427
+2008_004426
+2008_004425
+2008_004422
+2008_004419
+2008_004418
+2008_004417
+2008_004416
+2008_004414
+2008_004412
+2008_004411
+2008_004410
+2008_004408
+2008_004406
+2008_004403
+2008_004402
+2008_004398
+2008_004394
+2008_004391
+2008_004389
+2008_004387
+2008_004385
+2008_004384
+2008_004380
+2008_004378
+2008_004374
+2008_004372
+2008_004371
+2008_004365
+2008_004362
+2008_004361
+2008_004358
+2008_004357
+2008_004354
+2008_004353
+2008_004348
+2008_004347
+2008_004344
+2008_004342
+2008_004333
+2008_004330
+2008_004328
+2008_004327
+2008_004326
+2008_004325
+2008_004324
+2008_004321
+2008_004319
+2008_004318
+2008_004317
+2008_004314
+2008_004313
+2008_004312
+2008_004308
+2008_004307
+2008_004306
+2008_004303
+2008_004301
+2008_004297
+2008_004296
+2008_004293
+2008_004292
+2008_004291
+2008_004290
+2008_004289
+2008_004288
+2008_004287
+2008_004284
+2008_004280
+2008_004278
+2008_004276
+2008_004274
+2008_004273
+2008_004271
+2008_004270
+2008_004269
+2008_004265
+2008_004263
+2008_004259
+2008_004258
+2008_004257
+2008_004251
+2008_004247
+2008_004246
+2008_004245
+2008_004243
+2008_004242
+2008_004239
+2008_004235
+2008_004234
+2008_004232
+2008_004231
+2008_004230
+2008_004224
+2008_004221
+2008_004218
+2008_004217
+2008_004216
+2008_004214
+2008_004213
+2008_004208
+2008_004205
+2008_004203
+2008_004201
+2008_004198
+2008_004196
+2008_004195
+2008_004190
+2008_004189
+2008_004188
+2008_004182
+2008_004178
+2008_004176
+2008_004174
+2008_004171
+2008_004166
+2008_004165
+2008_004163
+2008_004161
+2008_004155
+2008_004148
+2008_004147
+2008_004145
+2008_004142
+2008_004138
+2008_004137
+2008_004135
+2008_004134
+2008_004130
+2008_004127
+2008_004126
+2008_004125
+2008_004124
+2008_004123
+2008_004122
+2008_004121
+2008_004120
+2008_004119
+2008_004113
+2008_004112
+2008_004110
+2008_004106
+2008_004105
+2008_004103
+2008_004102
+2008_004100
+2008_004097
+2008_004093
+2008_004092
+2008_004090
+2008_004088
+2008_004087
+2008_004084
+2008_004081
+2008_004080
+2008_004077
+2008_004076
+2008_004075
+2008_004074
+2008_004071
+2008_004066
+2008_004064
+2008_004058
+2008_004056
+2008_004055
+2008_004054
+2008_004053
+2008_004048
+2008_004046
+2008_004045
+2008_004044
+2008_004042
+2008_004040
+2008_004037
+2008_004036
+2008_004030
+2008_004027
+2008_004026
+2008_004024
+2008_004022
+2008_004021
+2008_004020
+2008_004018
+2008_004017
+2008_004016
+2008_004015
+2008_004014
+2008_004008
+2008_004007
+2008_004006
+2008_004004
+2008_004003
+2008_004002
+2008_003998
+2008_003997
+2008_003996
+2008_003995
+2008_003992
+2008_003988
+2008_003986
+2008_003985
+2008_003984
+2008_003983
+2008_003978
+2008_003975
+2008_003974
+2008_003971
+2008_003970
+2008_003969
+2008_003967
+2008_003965
+2008_003962
+2008_003958
+2008_003956
+2008_003951
+2008_003948
+2008_003947
+2008_003945
+2008_003944
+2008_003943
+2008_003942
+2008_003941
+2008_003940
+2008_003939
+2008_003933
+2008_003932
+2008_003929
+2008_003925
+2008_003924
+2008_003922
+2008_003921
+2008_003920
+2008_003916
+2008_003915
+2008_003914
+2008_003913
+2008_003908
+2008_003905
+2008_003904
+2008_003894
+2008_003892
+2008_003891
+2008_003888
+2008_003884
+2008_003883
+2008_003882
+2008_003881
+2008_003873
+2008_003871
+2008_003870
+2008_003868
+2008_003866
+2008_003864
+2008_003860
+2008_003854
+2008_003852
+2008_003849
+2008_003847
+2008_003844
+2008_003843
+2008_003841
+2008_003840
+2008_003838
+2008_003835
+2008_003831
+2008_003830
+2008_003829
+2008_003827
+2008_003826
+2008_003825
+2008_003820
+2008_003819
+2008_003815
+2008_003814
+2008_003813
+2008_003812
+2008_003811
+2008_003805
+2008_003802
+2008_003801
+2008_003800
+2008_003799
+2008_003796
+2008_003794
+2008_003793
+2008_003791
+2008_003789
+2008_003788
+2008_003781
+2008_003780
+2008_003779
+2008_003776
+2008_003775
+2008_003774
+2008_003773
+2008_003772
+2008_003769
+2008_003768
+2008_003767
+2008_003766
+2008_003764
+2008_003763
+2008_003762
+2008_003761
+2008_003756
+2008_003755
+2008_003754
+2008_003753
+2008_003749
+2008_003748
+2008_003746
+2008_003745
+2008_003744
+2008_003743
+2008_003737
+2008_003732
+2008_003729
+2008_003726
+2008_003722
+2008_003721
+2008_003720
+2008_003719
+2008_003718
+2008_003712
+2008_003707
+2008_003706
+2008_003704
+2008_003703
+2008_003701
+2008_003697
+2008_003694
+2008_003691
+2008_003689
+2008_003688
+2008_003685
+2008_003684
+2008_003683
+2008_003682
+2008_003681
+2008_003680
+2008_003677
+2008_003675
+2008_003674
+2008_003673
+2008_003672
+2008_003671
+2008_003667
+2008_003665
+2008_003662
+2008_003659
+2008_003658
+2008_003655
+2008_003653
+2008_003652
+2008_003650
+2008_003647
+2008_003645
+2008_003638
+2008_003637
+2008_003636
+2008_003635
+2008_003629
+2008_003626
+2008_003624
+2008_003622
+2008_003619
+2008_003618
+2008_003617
+2008_003613
+2008_003611
+2008_003610
+2008_003609
+2008_003608
+2008_003607
+2008_003604
+2008_003598
+2008_003596
+2008_003593
+2008_003592
+2008_003591
+2008_003590
+2008_003589
+2008_003587
+2008_003585
+2008_003582
+2008_003580
+2008_003579
+2008_003578
+2008_003575
+2008_003572
+2008_003571
+2008_003565
+2008_003562
+2008_003560
+2008_003559
+2008_003557
+2008_003552
+2008_003547
+2008_003545
+2008_003544
+2008_003542
+2008_003534
+2008_003533
+2008_003531
+2008_003526
+2008_003524
+2008_003523
+2008_003522
+2008_003521
+2008_003520
+2008_003519
+2008_003515
+2008_003514
+2008_003510
+2008_003507
+2008_003504
+2008_003501
+2008_003500
+2008_003498
+2008_003497
+2008_003496
+2008_003493
+2008_003489
+2008_003488
+2008_003485
+2008_003484
+2008_003483
+2008_003482
+2008_003480
+2008_003479
+2008_003478
+2008_003475
+2008_003472
+2008_003469
+2008_003467
+2008_003466
+2008_003464
+2008_003463
+2008_003462
+2008_003458
+2008_003453
+2008_003452
+2008_003449
+2008_003448
+2008_003447
+2008_003443
+2008_003442
+2008_003439
+2008_003437
+2008_003435
+2008_003434
+2008_003433
+2008_003432
+2008_003430
+2008_003429
+2008_003426
+2008_003424
+2008_003423
+2008_003420
+2008_003418
+2008_003417
+2008_003415
+2008_003414
+2008_003409
+2008_003407
+2008_003406
+2008_003405
+2008_003402
+2008_003395
+2008_003394
+2008_003393
+2008_003386
+2008_003384
+2008_003382
+2008_003381
+2008_003380
+2008_003378
+2008_003374
+2008_003373
+2008_003362
+2008_003361
+2008_003360
+2008_003359
+2008_003351
+2008_003350
+2008_003348
+2008_003347
+2008_003344
+2008_003343
+2008_003342
+2008_003338
+2008_003336
+2008_003335
+2008_003334
+2008_003331
+2008_003329
+2008_003326
+2008_003323
+2008_003321
+2008_003320
+2008_003318
+2008_003316
+2008_003313
+2008_003311
+2008_003305
+2008_003304
+2008_003303
+2008_003302
+2008_003300
+2008_003297
+2008_003295
+2008_003291
+2008_003290
+2008_003289
+2008_003288
+2008_003287
+2008_003286
+2008_003283
+2008_003280
+2008_003278
+2008_003277
+2008_003276
+2008_003275
+2008_003272
+2008_003271
+2008_003269
+2008_003266
+2008_003265
+2008_003264
+2008_003263
+2008_003261
+2008_003256
+2008_003255
+2008_003252
+2008_003251
+2008_003249
+2008_003248
+2008_003245
+2008_003244
+2008_003242
+2008_003239
+2008_003232
+2008_003231
+2008_003228
+2008_003225
+2008_003224
+2008_003222
+2008_003220
+2008_003213
+2008_003211
+2008_003209
+2008_003208
+2008_003205
+2008_003203
+2008_003202
+2008_003200
+2008_003196
+2008_003193
+2008_003191
+2008_003189
+2008_003187
+2008_003186
+2008_003182
+2008_003181
+2008_003180
+2008_003178
+2008_003170
+2008_003168
+2008_003167
+2008_003161
+2008_003160
+2008_003157
+2008_003154
+2008_003152
+2008_003151
+2008_003147
+2008_003146
+2008_003144
+2008_003143
+2008_003140
+2008_003136
+2008_003134
+2008_003133
+2008_003132
+2008_003128
+2008_003127
+2008_003122
+2008_003120
+2008_003114
+2008_003112
+2008_003107
+2008_003106
+2008_003104
+2008_003101
+2008_003100
+2008_003099
+2008_003095
+2008_003094
+2008_003093
+2008_003090
+2008_003089
+2008_003088
+2008_003087
+2008_003083
+2008_003082
+2008_003081
+2008_003079
+2008_003075
+2008_003073
+2008_003072
+2008_003068
+2008_003067
+2008_003065
+2008_003063
+2008_003062
+2008_003061
+2008_003060
+2008_003059
+2008_003057
+2008_003056
+2008_003055
+2008_003053
+2008_003052
+2008_003051
+2008_003049
+2008_003048
+2008_003045
+2008_003043
+2008_003041
+2008_003039
+2008_003030
+2008_003025
+2008_003023
+2008_003022
+2008_003021
+2008_003020
+2008_003018
+2008_003017
+2008_003015
+2008_003013
+2008_003008
+2008_003005
+2008_003001
+2008_002999
+2008_002997
+2008_002993
+2008_002992
+2008_002988
+2008_002985
+2008_002984
+2008_002983
+2008_002977
+2008_002973
+2008_002972
+2008_002971
+2008_002970
+2008_002968
+2008_002966
+2008_002965
+2008_002961
+2008_002960
+2008_002957
+2008_002956
+2008_002955
+2008_002954
+2008_002951
+2008_002948
+2008_002947
+2008_002946
+2008_002943
+2008_002932
+2008_002931
+2008_002930
+2008_002926
+2008_002922
+2008_002920
+2008_002917
+2008_002916
+2008_002913
+2008_002910
+2008_002909
+2008_002908
+2008_002906
+2008_002903
+2008_002899
+2008_002897
+2008_002894
+2008_002892
+2008_002891
+2008_002890
+2008_002887
+2008_002885
+2008_002883
+2008_002882
+2008_002880
+2008_002879
+2008_002876
+2008_002875
+2008_002873
+2008_002872
+2008_002870
+2008_002869
+2008_002868
+2008_002866
+2008_002860
+2008_002857
+2008_002856
+2008_002854
+2008_002852
+2008_002850
+2008_002848
+2008_002847
+2008_002845
+2008_002843
+2008_002842
+2008_002838
+2008_002834
+2008_002831
+2008_002830
+2008_002829
+2008_002826
+2008_002823
+2008_002820
+2008_002817
+2008_002814
+2008_002813
+2008_002811
+2008_002809
+2008_002808
+2008_002806
+2008_002804
+2008_002801
+2008_002795
+2008_002794
+2008_002793
+2008_002792
+2008_002791
+2008_002789
+2008_002787
+2008_002784
+2008_002783
+2008_002776
+2008_002774
+2008_002773
+2008_002772
+2008_002768
+2008_002767
+2008_002766
+2008_002762
+2008_002760
+2008_002758
+2008_002756
+2008_002753
+2008_002752
+2008_002751
+2008_002750
+2008_002749
+2008_002746
+2008_002741
+2008_002738
+2008_002736
+2008_002735
+2008_002733
+2008_002732
+2008_002730
+2008_002728
+2008_002725
+2008_002720
+2008_002719
+2008_002718
+2008_002716
+2008_002715
+2008_002714
+2008_002712
+2008_002710
+2008_002709
+2008_002705
+2008_002704
+2008_002701
+2008_002700
+2008_002698
+2008_002697
+2008_002696
+2008_002687
+2008_002686
+2008_002684
+2008_002682
+2008_002679
+2008_002678
+2008_002677
+2008_002676
+2008_002675
+2008_002674
+2008_002673
+2008_002672
+2008_002670
+2008_002668
+2008_002666
+2008_002665
+2008_002662
+2008_002653
+2008_002652
+2008_002650
+2008_002649
+2008_002647
+2008_002645
+2008_002643
+2008_002641
+2008_002640
+2008_002639
+2008_002638
+2008_002634
+2008_002631
+2008_002625
+2008_002624
+2008_002622
+2008_002621
+2008_002616
+2008_002613
+2008_002612
+2008_002610
+2008_002606
+2008_002603
+2008_002601
+2008_002599
+2008_002598
+2008_002597
+2008_002590
+2008_002589
+2008_002584
+2008_002583
+2008_002579
+2008_002578
+2008_002576
+2008_002575
+2008_002574
+2008_002568
+2008_002567
+2008_002566
+2008_002564
+2008_002562
+2008_002558
+2008_002555
+2008_002551
+2008_002549
+2008_002547
+2008_002543
+2008_002542
+2008_002541
+2008_002540
+2008_002533
+2008_002527
+2008_002526
+2008_002524
+2008_002523
+2008_002515
+2008_002514
+2008_002512
+2008_002510
+2008_002509
+2008_002508
+2008_002506
+2008_002502
+2008_002501
+2008_002499
+2008_002494
+2008_002491
+2008_002487
+2008_002485
+2008_002484
+2008_002483
+2008_002482
+2008_002481
+2008_002477
+2008_002473
+2008_002471
+2008_002470
+2008_002466
+2008_002465
+2008_002461
+2008_002459
+2008_002458
+2008_002457
+2008_002456
+2008_002454
+2008_002452
+2008_002451
+2008_002448
+2008_002446
+2008_002445
+2008_002444
+2008_002442
+2008_002441
+2008_002439
+2008_002438
+2008_002437
+2008_002436
+2008_002434
+2008_002430
+2008_002428
+2008_002425
+2008_002424
+2008_002422
+2008_002419
+2008_002418
+2008_002414
+2008_002412
+2008_002411
+2008_002410
+2008_002408
+2008_002405
+2008_002404
+2008_002403
+2008_002401
+2008_002399
+2008_002395
+2008_002389
+2008_002384
+2008_002378
+2008_002377
+2008_002374
+2008_002372
+2008_002370
+2008_002369
+2008_002368
+2008_002366
+2008_002365
+2008_002362
+2008_002361
+2008_002359
+2008_002357
+2008_002356
+2008_002350
+2008_002349
+2008_002347
+2008_002344
+2008_002343
+2008_002340
+2008_002338
+2008_002335
+2008_002331
+2008_002330
+2008_002329
+2008_002328
+2008_002327
+2008_002325
+2008_002324
+2008_002322
+2008_002321
+2008_002317
+2008_002314
+2008_002312
+2008_002311
+2008_002307
+2008_002305
+2008_002304
+2008_002299
+2008_002298
+2008_002296
+2008_002294
+2008_002293
+2008_002292
+2008_002288
+2008_002283
+2008_002281
+2008_002280
+2008_002279
+2008_002278
+2008_002272
+2008_002270
+2008_002267
+2008_002262
+2008_002259
+2008_002258
+2008_002255
+2008_002251
+2008_002250
+2008_002248
+2008_002247
+2008_002244
+2008_002243
+2008_002236
+2008_002234
+2008_002231
+2008_002229
+2008_002227
+2008_002225
+2008_002223
+2008_002222
+2008_002221
+2008_002220
+2008_002218
+2008_002215
+2008_002210
+2008_002209
+2008_002208
+2008_002207
+2008_002206
+2008_002204
+2008_002202
+2008_002201
+2008_002200
+2008_002199
+2008_002198
+2008_002197
+2008_002195
+2008_002194
+2008_002193
+2008_002191
+2008_002185
+2008_002182
+2008_002181
+2008_002179
+2008_002177
+2008_002176
+2008_002175
+2008_002172
+2008_002169
+2008_002167
+2008_002162
+2008_002160
+2008_002158
+2008_002156
+2008_002155
+2008_002153
+2008_002151
+2008_002150
+2008_002148
+2008_002146
+2008_002145
+2008_002144
+2008_002140
+2008_002138
+2008_002132
+2008_002131
+2008_002129
+2008_002124
+2008_002123
+2008_002119
+2008_002118
+2008_002117
+2008_002116
+2008_002115
+2008_002114
+2008_002113
+2008_002112
+2008_002107
+2008_002103
+2008_002099
+2008_002098
+2008_002096
+2008_002094
+2008_002093
+2008_002092
+2008_002088
+2008_002086
+2008_002084
+2008_002082
+2008_002080
+2008_002079
+2008_002073
+2008_002071
+2008_002069
+2008_002067
+2008_002066
+2008_002064
+2008_002062
+2008_002061
+2008_002058
+2008_002056
+2008_002052
+2008_002047
+2008_002046
+2008_002045
+2008_002042
+2008_002039
+2008_002037
+2008_002036
+2008_002035
+2008_002033
+2008_002032
+2008_002031
+2008_002026
+2008_002023
+2008_002021
+2008_002017
+2008_002013
+2008_002011
+2008_002009
+2008_002007
+2008_002005
+2008_002004
+2008_002003
+2008_002002
+2008_002001
+2008_002000
+2008_001998
+2008_001997
+2008_001989
+2008_001987
+2008_001986
+2008_001985
+2008_001982
+2008_001980
+2008_001979
+2008_001978
+2008_001977
+2008_001970
+2008_001969
+2008_001967
+2008_001965
+2008_001961
+2008_001958
+2008_001957
+2008_001956
+2008_001955
+2008_001951
+2008_001947
+2008_001946
+2008_001945
+2008_001941
+2008_001937
+2008_001934
+2008_001932
+2008_001930
+2008_001929
+2008_001928
+2008_001926
+2008_001921
+2008_001920
+2008_001919
+2008_001914
+2008_001911
+2008_001910
+2008_001909
+2008_001908
+2008_001907
+2008_001905
+2008_001903
+2008_001899
+2008_001896
+2008_001894
+2008_001888
+2008_001882
+2008_001881
+2008_001880
+2008_001876
+2008_001872
+2008_001871
+2008_001869
+2008_001867
+2008_001866
+2008_001865
+2008_001863
+2008_001862
+2008_001860
+2008_001858
+2008_001856
+2008_001854
+2008_001852
+2008_001850
+2008_001849
+2008_001845
+2008_001843
+2008_001842
+2008_001841
+2008_001838
+2008_001837
+2008_001836
+2008_001834
+2008_001832
+2008_001830
+2008_001829
+2008_001825
+2008_001823
+2008_001820
+2008_001816
+2008_001815
+2008_001814
+2008_001813
+2008_001812
+2008_001811
+2008_001810
+2008_001809
+2008_001808
+2008_001806
+2008_001805
+2008_001802
+2008_001801
+2008_001797
+2008_001792
+2008_001791
+2008_001789
+2008_001787
+2008_001784
+2008_001783
+2008_001782
+2008_001781
+2008_001775
+2008_001774
+2008_001773
+2008_001772
+2008_001770
+2008_001769
+2008_001765
+2008_001764
+2008_001763
+2008_001761
+2008_001758
+2008_001757
+2008_001751
+2008_001750
+2008_001746
+2008_001745
+2008_001744
+2008_001742
+2008_001741
+2008_001737
+2008_001736
+2008_001735
+2008_001731
+2008_001730
+2008_001729
+2008_001727
+2008_001724
+2008_001723
+2008_001722
+2008_001719
+2008_001717
+2008_001716
+2008_001712
+2008_001710
+2008_001709
+2008_001708
+2008_001706
+2008_001704
+2008_001702
+2008_001699
+2008_001697
+2008_001694
+2008_001692
+2008_001691
+2008_001690
+2008_001681
+2008_001680
+2008_001679
+2008_001676
+2008_001673
+2008_001670
+2008_001669
+2008_001668
+2008_001667
+2008_001666
+2008_001663
+2008_001661
+2008_001660
+2008_001659
+2008_001655
+2008_001653
+2008_001652
+2008_001649
+2008_001648
+2008_001645
+2008_001643
+2008_001641
+2008_001638
+2008_001636
+2008_001632
+2008_001631
+2008_001626
+2008_001625
+2008_001624
+2008_001622
+2008_001620
+2008_001619
+2008_001617
+2008_001615
+2008_001613
+2008_001610
+2008_001609
+2008_001607
+2008_001605
+2008_001602
+2008_001601
+2008_001598
+2008_001596
+2008_001594
+2008_001593
+2008_001592
+2008_001591
+2008_001590
+2008_001589
+2008_001586
+2008_001582
+2008_001577
+2008_001576
+2008_001575
+2008_001574
+2008_001566
+2008_001564
+2008_001563
+2008_001553
+2008_001551
+2008_001550
+2008_001549
+2008_001544
+2008_001543
+2008_001542
+2008_001541
+2008_001540
+2008_001539
+2008_001538
+2008_001536
+2008_001534
+2008_001533
+2008_001529
+2008_001527
+2008_001525
+2008_001523
+2008_001522
+2008_001520
+2008_001516
+2008_001510
+2008_001503
+2008_001501
+2008_001500
+2008_001498
+2008_001495
+2008_001494
+2008_001493
+2008_001488
+2008_001486
+2008_001482
+2008_001481
+2008_001479
+2008_001475
+2008_001470
+2008_001468
+2008_001467
+2008_001466
+2008_001464
+2008_001462
+2008_001461
+2008_001460
+2008_001456
+2008_001455
+2008_001454
+2008_001451
+2008_001448
+2008_001446
+2008_001445
+2008_001444
+2008_001440
+2008_001437
+2008_001436
+2008_001434
+2008_001432
+2008_001431
+2008_001430
+2008_001429
+2008_001428
+2008_001427
+2008_001420
+2008_001419
+2008_001415
+2008_001414
+2008_001413
+2008_001410
+2008_001408
+2008_001406
+2008_001405
+2008_001402
+2008_001401
+2008_001399
+2008_001395
+2008_001391
+2008_001390
+2008_001389
+2008_001388
+2008_001387
+2008_001385
+2008_001383
+2008_001382
+2008_001380
+2008_001376
+2008_001375
+2008_001374
+2008_001373
+2008_001369
+2008_001367
+2008_001366
+2008_001359
+2008_001358
+2008_001357
+2008_001356
+2008_001353
+2008_001351
+2008_001350
+2008_001349
+2008_001346
+2008_001344
+2008_001340
+2008_001338
+2008_001336
+2008_001335
+2008_001334
+2008_001333
+2008_001329
+2008_001325
+2008_001322
+2008_001320
+2008_001318
+2008_001314
+2008_001312
+2008_001310
+2008_001307
+2008_001306
+2008_001304
+2008_001302
+2008_001301
+2008_001299
+2008_001296
+2008_001294
+2008_001290
+2008_001285
+2008_001284
+2008_001278
+2008_001275
+2008_001274
+2008_001272
+2008_001271
+2008_001267
+2008_001264
+2008_001263
+2008_001262
+2008_001257
+2008_001255
+2008_001248
+2008_001245
+2008_001241
+2008_001238
+2008_001236
+2008_001235
+2008_001230
+2008_001227
+2008_001226
+2008_001225
+2008_001223
+2008_001221
+2008_001220
+2008_001219
+2008_001218
+2008_001215
+2008_001210
+2008_001208
+2008_001206
+2008_001205
+2008_001203
+2008_001202
+2008_001199
+2008_001196
+2008_001194
+2008_001192
+2008_001190
+2008_001189
+2008_001188
+2008_001185
+2008_001183
+2008_001182
+2008_001177
+2008_001171
+2008_001169
+2008_001168
+2008_001167
+2008_001166
+2008_001164
+2008_001161
+2008_001160
+2008_001159
+2008_001158
+2008_001155
+2008_001154
+2008_001147
+2008_001143
+2008_001142
+2008_001140
+2008_001139
+2008_001137
+2008_001136
+2008_001134
+2008_001133
+2008_001130
+2008_001122
+2008_001121
+2008_001120
+2008_001119
+2008_001118
+2008_001115
+2008_001114
+2008_001113
+2008_001112
+2008_001111
+2008_001106
+2008_001105
+2008_001104
+2008_001099
+2008_001098
+2008_001092
+2008_001090
+2008_001089
+2008_001083
+2008_001081
+2008_001080
+2008_001077
+2008_001075
+2008_001073
+2008_001071
+2008_001068
+2008_001066
+2008_001063
+2008_001062
+2008_001060
+2008_001057
+2008_001056
+2008_001055
+2008_001054
+2008_001052
+2008_001048
+2008_001047
+2008_001046
+2008_001042
+2008_001041
+2008_001039
+2008_001036
+2008_001035
+2008_001034
+2008_001031
+2008_001030
+2008_001026
+2008_001024
+2008_001023
+2008_001022
+2008_001021
+2008_001020
+2008_001018
+2008_001012
+2008_001009
+2008_001007
+2008_001004
+2008_000999
+2008_000993
+2008_000987
+2008_000985
+2008_000984
+2008_000982
+2008_000981
+2008_000979
+2008_000976
+2008_000973
+2008_000972
+2008_000971
+2008_000970
+2008_000965
+2008_000964
+2008_000960
+2008_000959
+2008_000957
+2008_000956
+2008_000953
+2008_000952
+2008_000950
+2008_000944
+2008_000942
+2008_000941
+2008_000940
+2008_000939
+2008_000936
+2008_000934
+2008_000931
+2008_000928
+2008_000924
+2008_000923
+2008_000922
+2008_000917
+2008_000916
+2008_000915
+2008_000914
+2008_000912
+2008_000910
+2008_000908
+2008_000905
+2008_000904
+2008_000902
+2008_000901
+2008_000899
+2008_000897
+2008_000887
+2008_000885
+2008_000884
+2008_000883
+2008_000881
+2008_000880
+2008_000878
+2008_000876
+2008_000875
+2008_000873
+2008_000870
+2008_000868
+2008_000867
+2008_000864
+2008_000861
+2008_000860
+2008_000858
+2008_000857
+2008_000854
+2008_000851
+2008_000847
+2008_000844
+2008_000842
+2008_000841
+2008_000839
+2008_000837
+2008_000835
+2008_000834
+2008_000833
+2008_000832
+2008_000829
+2008_000828
+2008_000825
+2008_000824
+2008_000817
+2008_000815
+2008_000814
+2008_000808
+2008_000806
+2008_000804
+2008_000803
+2008_000801
+2008_000798
+2008_000796
+2008_000793
+2008_000792
+2008_000790
+2008_000788
+2008_000787
+2008_000785
+2008_000783
+2008_000780
+2008_000778
+2008_000777
+2008_000776
+2008_000775
+2008_000769
+2008_000764
+2008_000761
+2008_000760
+2008_000758
+2008_000756
+2008_000753
+2008_000748
+2008_000745
+2008_000742
+2008_000740
+2008_000737
+2008_000734
+2008_000733
+2008_000732
+2008_000729
+2008_000727
+2008_000726
+2008_000724
+2008_000723
+2008_000721
+2008_000719
+2008_000716
+2008_000714
+2008_000711
+2008_000706
+2008_000705
+2008_000704
+2008_000703
+2008_000699
+2008_000697
+2008_000696
+2008_000695
+2008_000694
+2008_000691
+2008_000690
+2008_000689
+2008_000683
+2008_000678
+2008_000677
+2008_000676
+2008_000674
+2008_000672
+2008_000670
+2008_000669
+2008_000660
+2008_000659
+2008_000656
+2008_000655
+2008_000652
+2008_000650
+2008_000648
+2008_000647
+2008_000646
+2008_000645
+2008_000641
+2008_000640
+2008_000636
+2008_000634
+2008_000629
+2008_000628
+2008_000626
+2008_000623
+2008_000622
+2008_000620
+2008_000619
+2008_000615
+2008_000614
+2008_000613
+2008_000609
+2008_000607
+2008_000605
+2008_000599
+2008_000595
+2008_000588
+2008_000585
+2008_000584
+2008_000583
+2008_000581
+2008_000579
+2008_000578
+2008_000572
+2008_000569
+2008_000568
+2008_000567
+2008_000566
+2008_000564
+2008_000563
+2008_000562
+2008_000561
+2008_000559
+2008_000558
+2008_000553
+2008_000552
+2008_000548
+2008_000547
+2008_000545
+2008_000544
+2008_000541
+2008_000540
+2008_000536
+2008_000535
+2008_000532
+2008_000531
+2008_000527
+2008_000522
+2008_000516
+2008_000515
+2008_000514
+2008_000512
+2008_000511
+2008_000505
+2008_000502
+2008_000499
+2008_000498
+2008_000496
+2008_000495
+2008_000493
+2008_000492
+2008_000491
+2008_000489
+2008_000488
+2008_000481
+2008_000480
+2008_000475
+2008_000473
+2008_000472
+2008_000471
+2008_000470
+2008_000465
+2008_000461
+2008_000457
+2008_000455
+2008_000452
+2008_000448
+2008_000447
+2008_000446
+2008_000445
+2008_000443
+2008_000442
+2008_000437
+2008_000436
+2008_000435
+2008_000432
+2008_000428
+2008_000426
+2008_000424
+2008_000423
+2008_000422
+2008_000421
+2008_000419
+2008_000418
+2008_000416
+2008_000415
+2008_000414
+2008_000413
+2008_000408
+2008_000407
+2008_000406
+2008_000405
+2008_000403
+2008_000400
+2008_000399
+2008_000398
+2008_000397
+2008_000393
+2008_000392
+2008_000383
+2008_000382
+2008_000381
+2008_000380
+2008_000378
+2008_000376
+2008_000373
+2008_000371
+2008_000367
+2008_000365
+2008_000364
+2008_000361
+2008_000358
+2008_000356
+2008_000354
+2008_000350
+2008_000348
+2008_000346
+2008_000343
+2008_000342
+2008_000340
+2008_000339
+2008_000338
+2008_000336
+2008_000335
+2008_000330
+2008_000328
+2008_000321
+2008_000318
+2008_000316
+2008_000315
+2008_000313
+2008_000311
+2008_000309
+2008_000307
+2008_000306
+2008_000305
+2008_000304
+2008_000298
+2008_000297
+2008_000291
+2008_000290
+2008_000289
+2008_000287
+2008_000284
+2008_000283
+2008_000281
+2008_000278
+2008_000277
+2008_000275
+2008_000274
+2008_000273
+2008_000272
+2008_000268
+2008_000266
+2008_000264
+2008_000262
+2008_000261
+2008_000260
+2008_000259
+2008_000257
+2008_000255
+2008_000253
+2008_000252
+2008_000251
+2008_000246
+2008_000244
+2008_000243
+2008_000238
+2008_000237
+2008_000236
+2008_000235
+2008_000227
+2008_000226
+2008_000222
+2008_000219
+2008_000217
+2008_000207
+2008_000204
+2008_000203
+2008_000202
+2008_000199
+2008_000197
+2008_000196
+2008_000195
+2008_000194
+2008_000192
+2008_000191
+2008_000190
+2008_000189
+2008_000188
+2008_000187
+2008_000185
+2008_000183
+2008_000181
+2008_000177
+2008_000176
+2008_000174
+2008_000163
+2008_000162
+2008_000154
+2008_000148
+2008_000145
+2008_000144
+2008_000143
+2008_000142
+2008_000141
+2008_000140
+2008_000138
+2008_000134
+2008_000133
+2008_000132
+2008_000131
+2008_000128
+2008_000119
+2008_000116
+2008_000115
+2008_000112
+2008_000109
+2008_000105
+2008_000103
+2008_000099
+2008_000097
+2008_000096
+2008_000095
+2008_000093
+2008_000090
+2008_000089
+2008_000085
+2008_000084
+2008_000082
+2008_000078
+2008_000076
+2008_000074
+2008_000070
+2008_000067
+2008_000066
+2008_000064
+2008_000062
+2008_000060
+2008_000059
+2008_000056
+2008_000054
+2008_000053
+2008_000052
+2008_000051
+2008_000050
+2008_000045
+2008_000043
+2008_000042
+2008_000041
+2008_000036
+2008_000034
+2008_000033
+2008_000032
+2008_000028
+2008_000027
+2008_000026
+2008_000023
+2008_000019
+2008_000015
+2008_000008
+2008_000007
+2008_000003
+2008_000002
+2007_009950
+2007_009947
+2007_009901
+2007_009899
+2007_009889
+2007_009832
+2007_009807
+2007_009788
+2007_009779
+2007_009759
+2007_009724
+2007_009709
+2007_009665
+2007_009649
+2007_009630
+2007_009618
+2007_009607
+2007_009605
+2007_009597
+2007_009594
+2007_009580
+2007_009554
+2007_009550
+2007_009533
+2007_009527
+2007_009464
+2007_009436
+2007_009435
+2007_009422
+2007_009348
+2007_009327
+2007_009322
+2007_009295
+2007_009216
+2007_009209
+2007_009139
+2007_009082
+2007_009052
+2007_009030
+2007_008994
+2007_008948
+2007_008945
+2007_008932
+2007_008927
+2007_008821
+2007_008801
+2007_008778
+2007_008764
+2007_008714
+2007_008575
+2007_008571
+2007_008526
+2007_008468
+2007_008407
+2007_008403
+2007_008307
+2007_008219
+2007_008218
+2007_008203
+2007_008142
+2007_008140
+2007_008085
+2007_008072
+2007_008043
+2007_007948
+2007_007947
+2007_007930
+2007_007908
+2007_007902
+2007_007891
+2007_007890
+2007_007878
+2007_007783
+2007_007773
+2007_007772
+2007_007726
+2007_007698
+2007_007649
+2007_007621
+2007_007591
+2007_007585
+2007_007530
+2007_007523
+2007_007481
+2007_007480
+2007_007447
+2007_007432
+2007_007415
+2007_007398
+2007_007387
+2007_007355
+2007_007250
+2007_007230
+2007_007154
+2007_007098
+2007_007048
+2007_007021
+2007_007003
+2007_006944
+2007_006900
+2007_006899
+2007_006865
+2007_006832
+2007_006803
+2007_006704
+2007_006699
+2007_006673
+2007_006661
+2007_006660
+2007_006641
+2007_006615
+2007_006605
+2007_006585
+2007_006581
+2007_006530
+2007_006490
+2007_006483
+2007_006477
+2007_006445
+2007_006409
+2007_006400
+2007_006317
+2007_006303
+2007_006281
+2007_006254
+2007_006232
+2007_006212
+2007_006151
+2007_006136
+2007_006134
+2007_006066
+2007_006004
+2007_005989
+2007_005988
+2007_005951
+2007_005902
+2007_005878
+2007_005859
+2007_005797
+2007_005790
+2007_005702
+2007_005688
+2007_005647
+2007_005430
+2007_005368
+2007_005360
+2007_005314
+2007_005273
+2007_005266
+2007_005264
+2007_005262
+2007_005248
+2007_005227
+2007_005212
+2007_005210
+2007_005144
+2007_005130
+2007_005124
+2007_005086
+2007_005064
+2007_005043
+2007_004998
+2007_004988
+2007_004951
+2007_004948
+2007_004841
+2007_004830
+2007_004810
+2007_004769
+2007_004768
+2007_004707
+2007_004705
+2007_004663
+2007_004627
+2007_004537
+2007_004500
+2007_004481
+2007_004476
+2007_004459
+2007_004423
+2007_004328
+2007_004291
+2007_004289
+2007_004166
+2007_004081
+2007_004065
+2007_004009
+2007_004003
+2007_003910
+2007_003889
+2007_003876
+2007_003815
+2007_003788
+2007_003778
+2007_003715
+2007_003668
+2007_003604
+2007_003593
+2007_003580
+2007_003565
+2007_003541
+2007_003529
+2007_003525
+2007_003451
+2007_003431
+2007_003330
+2007_003286
+2007_003267
+2007_003251
+2007_003207
+2007_003205
+2007_003191
+2007_003190
+2007_003189
+2007_003178
+2007_003118
+2007_003000
+2007_002967
+2007_002954
+2007_002953
+2007_002914
+2007_002896
+2007_002895
+2007_002845
+2007_002789
+2007_002760
+2007_002669
+2007_002668
+2007_002639
+2007_002611
+2007_002545
+2007_002488
+2007_002462
+2007_002403
+2007_002370
+2007_002368
+2007_002361
+2007_002293
+2007_002281
+2007_002273
+2007_002234
+2007_002227
+2007_002216
+2007_002212
+2007_002198
+2007_002142
+2007_002120
+2007_002107
+2007_002105
+2007_002099
+2007_002088
+2007_002055
+2007_002024
+2007_001960
+2007_001917
+2007_001901
+2007_001872
+2007_001857
+2007_001834
+2007_001825
+2007_001764
+2007_001724
+2007_001709
+2007_001704
+2007_001698
+2007_001609
+2007_001602
+2007_001595
+2007_001487
+2007_001439
+2007_001420
+2007_001416
+2007_001397
+2007_001340
+2007_001225
+2007_001185
+2007_001149
+2007_001073
+2007_001027
+2007_000904
+2007_000876
+2007_000836
+2007_000822
+2007_000793
+2007_000768
+2007_000738
+2007_000733
+2007_000720
+2007_000713
+2007_000648
+2007_000645
+2007_000584
+2007_000549
+2007_000528
+2007_000515
+2007_000504
+2007_000480
+2007_000392
+2007_000364
+2007_000363
+2007_000333
+2007_000256
+2007_000250
+2007_000243
+2007_000241
+2007_000170
+2007_000121
+2007_000068
+2007_000063
+2007_000039
+2007_000032
diff --git a/DeepLabV3Plus-Pytorch/datasets/utils.py b/DeepLabV3Plus-Pytorch/datasets/utils.py
new file mode 100644
index 0000000..6d41011
--- /dev/null
+++ b/DeepLabV3Plus-Pytorch/datasets/utils.py
@@ -0,0 +1,126 @@
+import os
+import os.path
+import hashlib
+import errno
+from tqdm import tqdm
+
+
+def gen_bar_updater(pbar):
+ def bar_update(count, block_size, total_size):
+ if pbar.total is None and total_size:
+ pbar.total = total_size
+ progress_bytes = count * block_size
+ pbar.update(progress_bytes - pbar.n)
+
+ return bar_update
+
+
+def check_integrity(fpath, md5=None):
+ if md5 is None:
+ return True
+ if not os.path.isfile(fpath):
+ return False
+ md5o = hashlib.md5()
+ with open(fpath, 'rb') as f:
+ # read in 1MB chunks
+ for chunk in iter(lambda: f.read(1024 * 1024), b''):
+ md5o.update(chunk)
+ md5c = md5o.hexdigest()
+ if md5c != md5:
+ return False
+ return True
+
+
+def makedir_exist_ok(dirpath):
+ """
+ Python2 support for os.makedirs(.., exist_ok=True)
+ """
+ try:
+ os.makedirs(dirpath)
+ except OSError as e:
+ if e.errno == errno.EEXIST:
+ pass
+ else:
+ raise
+
+
+def download_url(url, root, filename=None, md5=None):
+ """Download a file from a url and place it in root.
+ Args:
+ url (str): URL to download file from
+ root (str): Directory to place downloaded file in
+ filename (str): Name to save the file under. If None, use the basename of the URL
+ md5 (str): MD5 checksum of the download. If None, do not check
+ """
+ from six.moves import urllib
+
+ root = os.path.expanduser(root)
+ if not filename:
+ filename = os.path.basename(url)
+ fpath = os.path.join(root, filename)
+
+ makedir_exist_ok(root)
+
+ # downloads file
+ if os.path.isfile(fpath) and check_integrity(fpath, md5):
+ print('Using downloaded and verified file: ' + fpath)
+ else:
+ try:
+ print('Downloading ' + url + ' to ' + fpath)
+ urllib.request.urlretrieve(
+ url, fpath,
+ reporthook=gen_bar_updater(tqdm(unit='B', unit_scale=True))
+ )
+ except OSError:
+ if url[:5] == 'https':
+ url = url.replace('https:', 'http:')
+ print('Failed download. Trying https -> http instead.'
+ ' Downloading ' + url + ' to ' + fpath)
+ urllib.request.urlretrieve(
+ url, fpath,
+ reporthook=gen_bar_updater(tqdm(unit='B', unit_scale=True))
+ )
+
+
+def list_dir(root, prefix=False):
+ """List all directories at a given root
+ Args:
+ root (str): Path to directory whose folders need to be listed
+ prefix (bool, optional): If true, prepends the path to each result, otherwise
+ only returns the name of the directories found
+ """
+ root = os.path.expanduser(root)
+ directories = list(
+ filter(
+ lambda p: os.path.isdir(os.path.join(root, p)),
+ os.listdir(root)
+ )
+ )
+
+ if prefix is True:
+ directories = [os.path.join(root, d) for d in directories]
+
+ return directories
+
+
+def list_files(root, suffix, prefix=False):
+ """List all files ending with a suffix at a given root
+ Args:
+ root (str): Path to directory whose folders need to be listed
+ suffix (str or tuple): Suffix of the files to match, e.g. '.png' or ('.jpg', '.png').
+ It uses the Python "str.endswith" method and is passed directly
+ prefix (bool, optional): If true, prepends the path to each result, otherwise
+ only returns the name of the files found
+ """
+ root = os.path.expanduser(root)
+ files = list(
+ filter(
+ lambda p: os.path.isfile(os.path.join(root, p)) and p.endswith(suffix),
+ os.listdir(root)
+ )
+ )
+
+ if prefix is True:
+ files = [os.path.join(root, d) for d in files]
+
+ return files
\ No newline at end of file
diff --git a/DeepLabV3Plus-Pytorch/datasets/voc.py b/DeepLabV3Plus-Pytorch/datasets/voc.py
new file mode 100644
index 0000000..c2a2668
--- /dev/null
+++ b/DeepLabV3Plus-Pytorch/datasets/voc.py
@@ -0,0 +1,167 @@
+import os
+import sys
+import tarfile
+import collections
+import torch.utils.data as data
+import shutil
+import numpy as np
+
+from PIL import Image
+from torchvision.datasets.utils import download_url, check_integrity
+
+DATASET_YEAR_DICT = {
+ '2012': {
+ 'url': 'http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar',
+ 'filename': 'VOCtrainval_11-May-2012.tar',
+ 'md5': '6cd6e144f989b92b3379bac3b3de84fd',
+ 'base_dir': 'VOCdevkit/VOC2012'
+ },
+ '2011': {
+ 'url': 'http://host.robots.ox.ac.uk/pascal/VOC/voc2011/VOCtrainval_25-May-2011.tar',
+ 'filename': 'VOCtrainval_25-May-2011.tar',
+ 'md5': '6c3384ef61512963050cb5d687e5bf1e',
+ 'base_dir': 'TrainVal/VOCdevkit/VOC2011'
+ },
+ '2010': {
+ 'url': 'http://host.robots.ox.ac.uk/pascal/VOC/voc2010/VOCtrainval_03-May-2010.tar',
+ 'filename': 'VOCtrainval_03-May-2010.tar',
+ 'md5': 'da459979d0c395079b5c75ee67908abb',
+ 'base_dir': 'VOCdevkit/VOC2010'
+ },
+ '2009': {
+ 'url': 'http://host.robots.ox.ac.uk/pascal/VOC/voc2009/VOCtrainval_11-May-2009.tar',
+ 'filename': 'VOCtrainval_11-May-2009.tar',
+ 'md5': '59065e4b188729180974ef6572f6a212',
+ 'base_dir': 'VOCdevkit/VOC2009'
+ },
+ '2008': {
+ 'url': 'http://host.robots.ox.ac.uk/pascal/VOC/voc2008/VOCtrainval_14-Jul-2008.tar',
+ 'filename': 'VOCtrainval_11-May-2012.tar',
+ 'md5': '2629fa636546599198acfcfbfcf1904a',
+ 'base_dir': 'VOCdevkit/VOC2008'
+ },
+ '2007': {
+ 'url': 'http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar',
+ 'filename': 'VOCtrainval_06-Nov-2007.tar',
+ 'md5': 'c52e279531787c972589f7e41ab4ae64',
+ 'base_dir': 'VOCdevkit/VOC2007'
+ }
+}
+
+
+def voc_cmap(N=256, normalized=False):
+ def bitget(byteval, idx):
+ return ((byteval & (1 << idx)) != 0)
+
+ dtype = 'float32' if normalized else 'uint8'
+ cmap = np.zeros((N, 3), dtype=dtype)
+ for i in range(N):
+ r = g = b = 0
+ c = i
+ for j in range(8):
+ r = r | (bitget(c, 0) << 7-j)
+ g = g | (bitget(c, 1) << 7-j)
+ b = b | (bitget(c, 2) << 7-j)
+ c = c >> 3
+
+ cmap[i] = np.array([r, g, b])
+
+ cmap = cmap/255 if normalized else cmap
+ return cmap
+
+class VOCSegmentation(data.Dataset):
+ """`Pascal VOC `_ Segmentation Dataset.
+ Args:
+ root (string): Root directory of the VOC Dataset.
+ year (string, optional): The dataset year, supports years 2007 to 2012.
+ image_set (string, optional): Select the image_set to use, ``train``, ``trainval`` or ``val``
+ download (bool, optional): If true, downloads the dataset from the internet and
+ puts it in root directory. If dataset is already downloaded, it is not
+ downloaded again.
+ transform (callable, optional): A function/transform that takes in an PIL image
+ and returns a transformed version. E.g, ``transforms.RandomCrop``
+ """
+ cmap = voc_cmap()
+ def __init__(self,
+ root,
+ year='2012',
+ image_set='train',
+ download=False,
+ transform=None,
+ ret_fname=False):
+
+ year = '2012'
+ self.root = os.path.expanduser(root)
+ self.year = year
+ self.url = DATASET_YEAR_DICT[year]['url']
+ self.filename = DATASET_YEAR_DICT[year]['filename']
+ self.md5 = DATASET_YEAR_DICT[year]['md5']
+ self.transform = transform
+ self.ret_fname = ret_fname
+
+ self.image_set = image_set
+ #base_dir = DATASET_YEAR_DICT[year]['base_dir']
+ #voc_root = os.path.join(self.root, base_dir)
+ voc_root = self.root
+ image_dir = os.path.join(voc_root, 'JPEGImages')
+
+ if download:
+ download_extract(self.url, self.root, self.filename, self.md5)
+
+ if not os.path.isdir(voc_root):
+ raise RuntimeError('Dataset not found or corrupted.' +
+ ' You can use download=True to download it')
+
+ if image_set=='train':
+ mask_dir = os.path.join(voc_root, 'refined_pseudo_segmentation_labels')
+ assert os.path.exists(mask_dir), "refined_pseudo_segmentation_labels not found, please refer to README.md and prepare it manually"
+ split_f = './datasets/data/train_aug.txt'
+ else:
+ mask_dir = os.path.join(voc_root, 'SegmentationClass')
+ splits_dir = os.path.join(voc_root, 'ImageSets/Segmentation')
+ split_f = os.path.join(splits_dir, image_set.rstrip('\n') + '.txt')
+
+ print("split_f : ", split_f, os.path.exists(split_f))
+ if not os.path.exists(split_f):
+ raise ValueError(
+ 'Wrong image_set entered! Please use image_set="train" '
+ 'or image_set="trainval" or image_set="val"')
+
+ with open(os.path.join(split_f), "r") as f:
+ self.file_names = [x.strip() for x in f.readlines()]
+
+ self.images = [os.path.join(image_dir, x + ".jpg") for x in self.file_names]
+ self.masks = [os.path.join(mask_dir, x + ".png") for x in self.file_names]
+ assert (len(self.images) == len(self.masks))
+
+
+ def __getitem__(self, index):
+ """
+ Args:
+ index (int): Index
+ Returns:
+ tuple: (image, target) where target is the image segmentation.
+ """
+ img = Image.open(self.images[index]).convert('RGB')
+ target = Image.open(self.masks[index])
+ if self.transform is not None:
+ img, target = self.transform(img, target)
+
+ if self.ret_fname:
+ return img, target, self.file_names[index]
+
+ return img, target
+
+
+ def __len__(self):
+ return len(self.images)
+
+ @classmethod
+ def decode_target(cls, mask):
+ """decode semantic mask to RGB image"""
+ return cls.cmap[mask]
+
+def download_extract(url, root, filename, md5):
+ download_url(url, root, filename, md5)
+ with tarfile.open(os.path.join(root, filename), "r") as tar:
+ tar.extractall(path=root)
\ No newline at end of file
diff --git a/DeepLabV3Plus-Pytorch/eval.py b/DeepLabV3Plus-Pytorch/eval.py
new file mode 100644
index 0000000..c8380a4
--- /dev/null
+++ b/DeepLabV3Plus-Pytorch/eval.py
@@ -0,0 +1,242 @@
+from tqdm import tqdm
+import network
+import utils
+import os
+import random
+import argparse
+import numpy as np
+import time
+import joblib
+import multiprocessing
+
+from torch.utils import data
+from datasets import VOCSegmentation, Cityscapes
+from utils import ext_transforms as et
+from metrics import StreamSegMetrics
+
+import torch
+import torch.nn as nn
+import torch.nn.functional as F
+from utils.visualizer import Visualizer
+from utils.utils import AverageMeter
+
+from PIL import Image
+import matplotlib
+import matplotlib.pyplot as plt
+from utils.crf import DenseCRF
+
+torch.backends.cudnn.benchmark = True
+
+def get_argparser():
+ parser = argparse.ArgumentParser()
+
+ # Datset Options
+ parser.add_argument("--data_root", type=str, default='./datasets/data',
+ help="path to Dataset")
+ parser.add_argument("--num_classes", type=int, default=21,
+ help="num classes 21 for VOC")
+
+ # Deeplab Options
+ parser.add_argument("--model", type=str, default='deeplabv3plus_mobilenet',
+ choices=['deeplabv3_resnet50', 'deeplabv3plus_resnet50',
+ 'deeplabv3_resnet101', 'deeplabv3plus_resnet101',
+ 'deeplabv3_mobilenet', 'deeplabv3plus_mobilenet'], help='model name')
+ parser.add_argument("--separable_conv", action='store_true', default=False,
+ help="apply separable conv to decoder and aspp")
+ parser.add_argument("--output_stride", type=int, default=16, choices=[8, 16])
+
+ # Train Options
+ parser.add_argument("--crop_val", action='store_true', default=False,
+ help='crop validation (default: False)')
+ parser.add_argument("--crop_size", type=int, default=513)
+ parser.add_argument("--val_batch_size", type=int, default=4,
+ help='batch size for validation (default: 4)')
+ parser.add_argument("--ckpt", default=None, type=str,
+ help="restore from checkpoint")
+
+ parser.add_argument("--gpu_id", type=str, default='0',
+ help="GPU ID")
+ parser.add_argument("--random_seed", type=int, default=2,
+ help="random seed (default: 2)")
+ # PASCAL VOC Options
+ parser.add_argument("--year", type=str, default='2012_aug',
+ choices=['2012_aug', '2012', '2011', '2009', '2008', '2007'], help='year of VOC')
+
+ # Visdom options
+ parser.add_argument("--logit_dir", type=str, default='./logits')
+
+ return parser
+
+
+def get_dataset(opts):
+ """ Dataset And Augmentation
+ """
+ if opts.crop_val:
+ val_transform = et.ExtCompose([
+ et.ExtResize(opts.crop_size),
+ et.ExtCenterCrop(opts.crop_size),
+ et.ExtToTensor(),
+ et.ExtNormalize(mean=[0.485, 0.456, 0.406],
+ std=[0.229, 0.224, 0.225]),
+ ])
+ else:
+ val_transform = et.ExtCompose([
+ et.ExtToTensor(),
+ et.ExtNormalize(mean=[0.485, 0.456, 0.406],
+ std=[0.229, 0.224, 0.225]),
+ ])
+
+ val_dst = VOCSegmentation(root=opts.data_root, year=opts.year,
+ image_set='val', download=False,
+ transform=val_transform, ret_fname=True)
+
+ return val_dst
+
+
+def validate(opts, model, loader, device, metrics):
+ """Do validation and return specified samples"""
+ metrics.reset()
+
+ with torch.no_grad():
+ for i, (images, labels, fnames) in enumerate(loader):
+ print("[%04d/%04d] " % (i, len(loader)), end="\r")
+ images = images.to(device, dtype=torch.float32)
+ labels = labels.to(device, dtype=torch.long)
+
+ outputs = model(images)
+ preds = outputs.detach().max(dim=1)[1].cpu().numpy()
+ targets = labels.cpu().numpy()
+
+ metrics.update(targets, preds)
+
+ for b in range(outputs.size(0)):
+ fname = fnames[b]
+ np.save(os.path.join(opts.logit_dir, fname + ".npy"), outputs[b].detach().cpu().numpy().astype(np.float16))
+
+ score = metrics.get_results()
+
+ return score
+
+
+def crf_inference(opts, dataset, metrics):
+ metrics.reset()
+
+ mean = [0.485, 0.456, 0.406]
+ std = [0.229, 0.224, 0.225]
+
+ postprocessor = DenseCRF(
+ iter_max=10,
+ pos_xy_std=1,
+ pos_w=3,
+ bi_xy_std=67,
+ bi_rgb_std=3,
+ bi_w=4,
+ )
+
+ def process(i):
+ image, gt_label, fname = dataset.__getitem__(i)
+
+ filename = os.path.join(opts.logit_dir, fname + ".npy")
+ logit = np.load(filename)
+
+ _, H, W = image.shape
+ logit = torch.FloatTensor(logit)[None, ...]
+ logit = F.interpolate(logit, size=(H, W), mode="bilinear", align_corners=False)
+ prob = F.softmax(logit, dim=1)[0].numpy()
+ gt_label = gt_label.cpu().numpy()
+
+ image = image.permute(1, 2, 0).cpu().numpy()
+ image *= std
+ image += mean
+ image *= 255
+ image = image.astype(np.uint8)
+ prob = postprocessor(image, prob)
+ pred_label = np.argmax(prob, axis=0)
+
+ return pred_label, gt_label
+
+ # CRF in multi-process
+ results = joblib.Parallel(n_jobs=multiprocessing.cpu_count(), verbose=10, pre_dispatch="all")(
+ [joblib.delayed(process)(i) for i in range(len(dataset))]
+ )
+
+ preds, gts = zip(*results)
+
+ for pred, gt in zip(preds, gts):
+ metrics.update(gt, pred)
+
+ score = metrics.get_results()
+
+ return score
+
+
+
+def main():
+ opts = get_argparser().parse_args()
+ os.environ['CUDA_VISIBLE_DEVICES'] = opts.gpu_id
+ device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
+ print("Device: %s" % device)
+
+ # Setup random seed
+ torch.manual_seed(opts.random_seed)
+ np.random.seed(opts.random_seed)
+ random.seed(opts.random_seed)
+
+ os.makedirs(opts.logit_dir, exist_ok=True)
+
+ # Setup dataloader
+ if not opts.crop_val:
+ opts.val_batch_size = 1
+
+ val_dst = get_dataset(opts)
+ val_loader = data.DataLoader(
+ val_dst, batch_size=opts.val_batch_size, shuffle=False, num_workers=4)
+
+ print("Dataset: voc, Val set: %d" %
+ ( len(val_dst)) )
+
+ # Set up model
+ model_map = {
+ 'deeplabv3_resnet50': network.deeplabv3_resnet50,
+ 'deeplabv3plus_resnet50': network.deeplabv3plus_resnet50,
+ 'deeplabv3_resnet101': network.deeplabv3_resnet101,
+ 'deeplabv3plus_resnet101': network.deeplabv3plus_resnet101,
+ 'deeplabv3_mobilenet': network.deeplabv3_mobilenet,
+ 'deeplabv3plus_mobilenet': network.deeplabv3plus_mobilenet
+ }
+
+ model = model_map[opts.model](num_classes=opts.num_classes, output_stride=opts.output_stride)
+ if opts.separable_conv and 'plus' in opts.model:
+ network.convert_to_separable_conv(model.classifier)
+ utils.set_bn_momentum(model.backbone, momentum=0.01)
+
+ # Set up metrics
+ metrics = StreamSegMetrics(opts.num_classes)
+
+ # Restore
+ if opts.ckpt is not None and os.path.isfile(opts.ckpt):
+ # https://github.com/VainF/DeepLabV3Plus-Pytorch/issues/8#issuecomment-605601402, @PytaichukBohdan
+ checkpoint = torch.load(opts.ckpt, map_location=torch.device('cpu'))
+ model.load_state_dict(checkpoint["model_state"])
+ model = nn.DataParallel(model)
+ model.to(device)
+ print("Model restored from %s" % opts.ckpt)
+ del checkpoint # free memory
+ else:
+ assert "no checkpoint"
+
+ #========== Eval ==========#
+ model.eval()
+ val_score = validate(
+ opts=opts, model=model, loader=val_loader, device=device, metrics=metrics)
+ print(metrics.to_str(val_score))
+
+ print("\n\n----------- crf -------------")
+ crf_score = crf_inference(opts, val_dst, metrics)
+ print(metrics.to_str(crf_score))
+
+ os.system(f"rm -rf {opts.logit_dir}")
+
+
+if __name__ == '__main__':
+ main()
diff --git a/DeepLabV3Plus-Pytorch/main.py b/DeepLabV3Plus-Pytorch/main.py
new file mode 100644
index 0000000..2e99282
--- /dev/null
+++ b/DeepLabV3Plus-Pytorch/main.py
@@ -0,0 +1,406 @@
+from tqdm import tqdm
+import network
+import utils
+import os
+import random
+import argparse
+import numpy as np
+import time
+
+from torch.utils import data
+from datasets import VOCSegmentation, Cityscapes
+from utils import ext_transforms as et
+from metrics import StreamSegMetrics
+
+import torch
+import torch.nn as nn
+from utils.visualizer import Visualizer
+from utils.utils import AverageMeter
+
+from PIL import Image
+import matplotlib
+import matplotlib.pyplot as plt
+
+torch.backends.cudnn.benchmark = True
+
+def get_argparser():
+ parser = argparse.ArgumentParser()
+
+ # Datset Options
+ parser.add_argument("--data_root", type=str, default='./datasets/data',
+ help="path to Dataset")
+ parser.add_argument("--dataset", type=str, default='voc',
+ choices=['voc', 'cityscapes'], help='Name of dataset')
+ parser.add_argument("--num_classes", type=int, default=None,
+ help="num classes (default: None)")
+
+ # Deeplab Options
+ parser.add_argument("--model", type=str, default='deeplabv3plus_mobilenet',
+ choices=['deeplabv3_resnet50', 'deeplabv3plus_resnet50',
+ 'deeplabv3_resnet101', 'deeplabv3plus_resnet101',
+ 'deeplabv3_mobilenet', 'deeplabv3plus_mobilenet'], help='model name')
+ parser.add_argument("--separable_conv", action='store_true', default=False,
+ help="apply separable conv to decoder and aspp")
+ parser.add_argument("--output_stride", type=int, default=16, choices=[8, 16])
+
+ # Train Options
+ parser.add_argument("--amp", action='store_true', default=False)
+ parser.add_argument("--test_only", action='store_true', default=False)
+ parser.add_argument("--save_val_results", action='store_true', default=False,
+ help="save segmentation results to \"./results\"")
+ parser.add_argument("--total_itrs", type=int, default=30e3,
+ help="epoch number (default: 30k)")
+ parser.add_argument("--lr", type=float, default=0.01,
+ help="learning rate (default: 0.01)")
+ parser.add_argument("--lr_policy", type=str, default='poly', choices=['poly', 'step'],
+ help="learning rate scheduler policy")
+ parser.add_argument("--step_size", type=int, default=10000)
+ parser.add_argument("--crop_val", action='store_true', default=False,
+ help='crop validation (default: False)')
+ parser.add_argument("--batch_size", type=int, default=16,
+ help='batch size (default: 16)')
+ parser.add_argument("--val_batch_size", type=int, default=4,
+ help='batch size for validation (default: 4)')
+ parser.add_argument("--crop_size", type=int, default=513)
+
+ parser.add_argument("--ckpt", default=None, type=str,
+ help="restore from checkpoint")
+ parser.add_argument("--continue_training", action='store_true', default=False)
+
+ parser.add_argument("--loss_type", type=str, default='cross_entropy',
+ choices=['cross_entropy', 'focal_loss'], help="loss type (default: False)")
+ parser.add_argument("--gpu_id", type=str, default='0',
+ help="GPU ID")
+ parser.add_argument("--weight_decay", type=float, default=1e-4,
+ help='weight decay (default: 1e-4)')
+ parser.add_argument("--random_seed", type=int, default=2,
+ help="random seed (default: 2)")
+ parser.add_argument("--print_interval", type=int, default=10,
+ help="print interval of loss (default: 10)")
+ parser.add_argument("--val_interval", type=int, default=100,
+ help="epoch interval for eval (default: 100)")
+ parser.add_argument("--download", action='store_true', default=False,
+ help="download datasets")
+
+ # PASCAL VOC Options
+ parser.add_argument("--year", type=str, default='2012_aug',
+ choices=['2012_aug', '2012', '2011', '2009', '2008', '2007'], help='year of VOC')
+
+ # Visdom options
+ parser.add_argument("--enable_vis", action='store_true', default=False,
+ help="use visdom for visualization")
+ parser.add_argument("--vis_port", type=str, default='13570',
+ help='port for visdom')
+ parser.add_argument("--vis_env", type=str, default='main',
+ help='env for visdom')
+ parser.add_argument("--vis_num_samples", type=int, default=8,
+ help='number of samples for visualization (default: 8)')
+ return parser
+
+
+def get_dataset(opts):
+ """ Dataset And Augmentation
+ """
+ if opts.dataset == 'voc':
+ train_transform = et.ExtCompose([
+ #et.ExtResize(size=opts.crop_size),
+ et.ExtRandomScale((0.5, 2.0)),
+ et.ExtRandomCrop(size=(opts.crop_size, opts.crop_size), pad_if_needed=True),
+ et.ExtRandomHorizontalFlip(),
+ et.ExtToTensor(),
+ et.ExtNormalize(mean=[0.485, 0.456, 0.406],
+ std=[0.229, 0.224, 0.225]),
+ ])
+ if opts.crop_val:
+ val_transform = et.ExtCompose([
+ et.ExtResize(opts.crop_size),
+ et.ExtCenterCrop(opts.crop_size),
+ et.ExtToTensor(),
+ et.ExtNormalize(mean=[0.485, 0.456, 0.406],
+ std=[0.229, 0.224, 0.225]),
+ ])
+ else:
+ val_transform = et.ExtCompose([
+ et.ExtToTensor(),
+ et.ExtNormalize(mean=[0.485, 0.456, 0.406],
+ std=[0.229, 0.224, 0.225]),
+ ])
+ train_dst = VOCSegmentation(root=opts.data_root, year=opts.year,
+ image_set='train', download=opts.download, transform=train_transform)
+ val_dst = VOCSegmentation(root=opts.data_root, year=opts.year,
+ image_set='val', download=False, transform=val_transform)
+
+ if opts.dataset == 'cityscapes':
+ train_transform = et.ExtCompose([
+ #et.ExtResize( 512 ),
+ et.ExtRandomCrop(size=(opts.crop_size, opts.crop_size)),
+ et.ExtColorJitter( brightness=0.5, contrast=0.5, saturation=0.5 ),
+ et.ExtRandomHorizontalFlip(),
+ et.ExtToTensor(),
+ et.ExtNormalize(mean=[0.485, 0.456, 0.406],
+ std=[0.229, 0.224, 0.225]),
+ ])
+
+ val_transform = et.ExtCompose([
+ #et.ExtResize( 512 ),
+ et.ExtToTensor(),
+ et.ExtNormalize(mean=[0.485, 0.456, 0.406],
+ std=[0.229, 0.224, 0.225]),
+ ])
+
+ train_dst = Cityscapes(root=opts.data_root,
+ split='train', transform=train_transform)
+ val_dst = Cityscapes(root=opts.data_root,
+ split='val', transform=val_transform)
+ return train_dst, val_dst
+
+
+def validate(opts, model, loader, device, metrics, ret_samples_ids=None):
+ """Do validation and return specified samples"""
+ metrics.reset()
+ ret_samples = []
+ if opts.save_val_results:
+ if not os.path.exists('results'):
+ os.mkdir('results')
+ denorm = utils.Denormalize(mean=[0.485, 0.456, 0.406],
+ std=[0.229, 0.224, 0.225])
+ img_id = 0
+
+ with torch.no_grad():
+ for i, (images, labels) in tqdm(enumerate(loader)):
+
+ images = images.to(device, dtype=torch.float32)
+ labels = labels.to(device, dtype=torch.long)
+
+ outputs = model(images)
+ preds = outputs.detach().max(dim=1)[1].cpu().numpy()
+ targets = labels.cpu().numpy()
+
+ metrics.update(targets, preds)
+ if ret_samples_ids is not None and i in ret_samples_ids: # get vis samples
+ ret_samples.append(
+ (images[0].detach().cpu().numpy(), targets[0], preds[0]))
+
+ if opts.save_val_results:
+ for i in range(len(images)):
+ image = images[i].detach().cpu().numpy()
+ target = targets[i]
+ pred = preds[i]
+
+ image = (denorm(image) * 255).transpose(1, 2, 0).astype(np.uint8)
+ target = loader.dataset.decode_target(target).astype(np.uint8)
+ pred = loader.dataset.decode_target(pred).astype(np.uint8)
+
+ Image.fromarray(image).save('results/%d_image.png' % img_id)
+ Image.fromarray(target).save('results/%d_target.png' % img_id)
+ Image.fromarray(pred).save('results/%d_pred.png' % img_id)
+
+ fig = plt.figure()
+ plt.imshow(image)
+ plt.axis('off')
+ plt.imshow(pred, alpha=0.7)
+ ax = plt.gca()
+ ax.xaxis.set_major_locator(matplotlib.ticker.NullLocator())
+ ax.yaxis.set_major_locator(matplotlib.ticker.NullLocator())
+ plt.savefig('results/%d_overlay.png' % img_id, bbox_inches='tight', pad_inches=0)
+ plt.close()
+ img_id += 1
+
+ score = metrics.get_results()
+ return score, ret_samples
+
+
+def main():
+ opts = get_argparser().parse_args()
+ if opts.dataset.lower() == 'voc':
+ opts.num_classes = 21
+ elif opts.dataset.lower() == 'cityscapes':
+ opts.num_classes = 19
+
+ # Setup visualization
+ vis = Visualizer(port=opts.vis_port,
+ env=opts.vis_env) if opts.enable_vis else None
+ if vis is not None: # display options
+ vis.vis_table("Options", vars(opts))
+
+ os.environ['CUDA_VISIBLE_DEVICES'] = opts.gpu_id
+ device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
+ print("Device: %s" % device)
+
+ # Setup random seed
+ torch.manual_seed(opts.random_seed)
+ np.random.seed(opts.random_seed)
+ random.seed(opts.random_seed)
+
+ # Setup dataloader
+ if opts.dataset=='voc' and not opts.crop_val:
+ opts.val_batch_size = 1
+
+ train_dst, val_dst = get_dataset(opts)
+ train_loader = data.DataLoader(
+ train_dst, batch_size=opts.batch_size, shuffle=True, num_workers=2)
+ val_loader = data.DataLoader(
+ val_dst, batch_size=opts.val_batch_size, shuffle=True, num_workers=2)
+ print("Dataset: %s, Train set: %d, Val set: %d" %
+ (opts.dataset, len(train_dst), len(val_dst)))
+
+ # Set up model
+ model_map = {
+ 'deeplabv3_resnet50': network.deeplabv3_resnet50,
+ 'deeplabv3plus_resnet50': network.deeplabv3plus_resnet50,
+ 'deeplabv3_resnet101': network.deeplabv3_resnet101,
+ 'deeplabv3plus_resnet101': network.deeplabv3plus_resnet101,
+ 'deeplabv3_mobilenet': network.deeplabv3_mobilenet,
+ 'deeplabv3plus_mobilenet': network.deeplabv3plus_mobilenet
+ }
+
+ model = model_map[opts.model](num_classes=opts.num_classes, output_stride=opts.output_stride)
+ if opts.separable_conv and 'plus' in opts.model:
+ network.convert_to_separable_conv(model.classifier)
+ utils.set_bn_momentum(model.backbone, momentum=0.01)
+
+ # Set up metrics
+ metrics = StreamSegMetrics(opts.num_classes)
+
+ # Set up optimizer
+ optimizer = torch.optim.SGD(params=[
+ {'params': model.backbone.parameters(), 'lr': 0.1*opts.lr},
+ {'params': model.classifier.parameters(), 'lr': opts.lr},
+ ], lr=opts.lr, momentum=0.9, weight_decay=opts.weight_decay)
+ #optimizer = torch.optim.SGD(params=model.parameters(), lr=opts.lr, momentum=0.9, weight_decay=opts.weight_decay)
+ #torch.optim.lr_scheduler.StepLR(optimizer, step_size=opts.lr_decay_step, gamma=opts.lr_decay_factor)
+ if opts.lr_policy=='poly':
+ scheduler = utils.PolyLR(optimizer, opts.total_itrs, power=0.9)
+ elif opts.lr_policy=='step':
+ scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=opts.step_size, gamma=0.1)
+
+ # Set up criterion
+ #criterion = utils.get_loss(opts.loss_type)
+ if opts.loss_type == 'focal_loss':
+ criterion = utils.FocalLoss(ignore_index=255, size_average=True)
+ elif opts.loss_type == 'cross_entropy':
+ criterion = nn.CrossEntropyLoss(ignore_index=255, reduction='mean')
+
+ def save_ckpt(path):
+ """ save current model
+ """
+ torch.save({
+ "cur_itrs": cur_itrs,
+ "model_state": model.module.state_dict(),
+ "optimizer_state": optimizer.state_dict(),
+ "scheduler_state": scheduler.state_dict(),
+ "best_score": best_score,
+ }, path)
+ print("Model saved as %s" % path)
+
+ utils.mkdir('checkpoints')
+ # Restore
+ best_score = 0.0
+ cur_itrs = 0
+ cur_epochs = 0
+ if opts.ckpt is not None and os.path.isfile(opts.ckpt):
+ # https://github.com/VainF/DeepLabV3Plus-Pytorch/issues/8#issuecomment-605601402, @PytaichukBohdan
+ checkpoint = torch.load(opts.ckpt, map_location=torch.device('cpu'))
+ model.load_state_dict(checkpoint["model_state"])
+ model = nn.DataParallel(model)
+ model.to(device)
+ if opts.continue_training:
+ optimizer.load_state_dict(checkpoint["optimizer_state"])
+ scheduler.load_state_dict(checkpoint["scheduler_state"])
+ cur_itrs = checkpoint["cur_itrs"]
+ best_score = checkpoint['best_score']
+ print("Training state restored from %s" % opts.ckpt)
+ print("Model restored from %s" % opts.ckpt)
+ del checkpoint # free memory
+ else:
+ print("[!] Retrain")
+ model = nn.DataParallel(model)
+ model.to(device)
+
+ #========== Train Loop ==========#
+ vis_sample_id = np.random.randint(0, len(val_loader), opts.vis_num_samples,
+ np.int32) if opts.enable_vis else None # sample idxs for visualization
+ denorm = utils.Denormalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) # denormalization for ori images
+
+ if opts.test_only:
+ model.eval()
+ val_score, ret_samples = validate(
+ opts=opts, model=model, loader=val_loader, device=device, metrics=metrics, ret_samples_ids=vis_sample_id)
+ print(metrics.to_str(val_score))
+ return
+
+ scaler = torch.cuda.amp.GradScaler(enabled=opts.amp)
+
+ avg_loss = AverageMeter()
+ avg_time = AverageMeter()
+
+ interval_loss = 0
+ while True: #cur_itrs < opts.total_itrs:
+ # ===== Train =====
+ avg_loss.reset()
+ avg_time.reset()
+ model.train()
+ cur_epochs += 1
+ end_time = time.time()
+
+ for (images, labels) in train_loader:
+ cur_itrs += 1
+
+ images = images.to(device, dtype=torch.float32)
+ labels = labels.to(device, dtype=torch.long)
+
+ optimizer.zero_grad()
+
+ with torch.cuda.amp.autocast(enabled=opts.amp):
+ outputs = model(images)
+ loss = criterion(outputs, labels)
+
+ scaler.scale(loss).backward()
+ scaler.step(optimizer)
+ scaler.update()
+
+ scheduler.step()
+ avg_loss.update(loss.item())
+ avg_time.update(time.time() - end_time)
+ end_time = time.time()
+
+ if vis is not None:
+ vis.vis_scalar('Loss', cur_itrs, avg_loss.avg)
+
+ if (cur_itrs) % 10 == 0:
+ print(" Epoch %d, Itrs %d/%d, Loss=%6f, Time=%.2f , LR=%.8f" %
+ (cur_epochs, cur_itrs, opts.total_itrs,
+ avg_loss.avg, avg_time.avg*1000, optimizer.param_groups[0]['lr']))
+
+ if (cur_itrs) % opts.val_interval == 0:
+ #save_ckpt('checkpoints/latest_%s_%s_os%d.pth' %
+ # (opts.model, opts.dataset, opts.output_stride))
+ print("validation...")
+ model.eval()
+ val_score, ret_samples = validate(
+ opts=opts, model=model, loader=val_loader, device=device, metrics=metrics, ret_samples_ids=vis_sample_id)
+ print(metrics.to_str(val_score))
+ if val_score['Mean IoU'] > best_score: # save best model
+ best_score = val_score['Mean IoU']
+ save_ckpt('checkpoints/best_%s_%s_os%d.pth' %
+ (opts.model, opts.dataset,opts.output_stride))
+
+ if vis is not None: # visualize validation score and samples
+ vis.vis_scalar("[Val] Overall Acc", cur_itrs, val_score['Overall Acc'])
+ vis.vis_scalar("[Val] Mean IoU", cur_itrs, val_score['Mean IoU'])
+ vis.vis_table("[Val] Class IoU", val_score['Class IoU'])
+
+ for k, (img, target, lbl) in enumerate(ret_samples):
+ img = (denorm(img) * 255).astype(np.uint8)
+ target = train_dst.decode_target(target).transpose(2, 0, 1).astype(np.uint8)
+ lbl = train_dst.decode_target(lbl).transpose(2, 0, 1).astype(np.uint8)
+ concat_img = np.concatenate((img, target, lbl), axis=2) # concat along width
+ vis.vis_image('Sample %d' % k, concat_img)
+ model.train()
+
+ if cur_itrs >= opts.total_itrs:
+ return
+
+
+if __name__ == '__main__':
+ main()
diff --git a/DeepLabV3Plus-Pytorch/metrics/__init__.py b/DeepLabV3Plus-Pytorch/metrics/__init__.py
new file mode 100644
index 0000000..7042c87
--- /dev/null
+++ b/DeepLabV3Plus-Pytorch/metrics/__init__.py
@@ -0,0 +1,2 @@
+from .stream_metrics import StreamSegMetrics, AverageMeter
+
diff --git a/DeepLabV3Plus-Pytorch/metrics/stream_metrics.py b/DeepLabV3Plus-Pytorch/metrics/stream_metrics.py
new file mode 100644
index 0000000..33b8fe9
--- /dev/null
+++ b/DeepLabV3Plus-Pytorch/metrics/stream_metrics.py
@@ -0,0 +1,110 @@
+import numpy as np
+from sklearn.metrics import confusion_matrix
+
+class _StreamMetrics(object):
+ def __init__(self):
+ """ Overridden by subclasses """
+ raise NotImplementedError()
+
+ def update(self, gt, pred):
+ """ Overridden by subclasses """
+ raise NotImplementedError()
+
+ def get_results(self):
+ """ Overridden by subclasses """
+ raise NotImplementedError()
+
+ def to_str(self, metrics):
+ """ Overridden by subclasses """
+ raise NotImplementedError()
+
+ def reset(self):
+ """ Overridden by subclasses """
+ raise NotImplementedError()
+
+class StreamSegMetrics(_StreamMetrics):
+ """
+ Stream Metrics for Semantic Segmentation Task
+ """
+ def __init__(self, n_classes):
+ self.n_classes = n_classes
+ self.confusion_matrix = np.zeros((n_classes, n_classes))
+
+ def update(self, label_trues, label_preds):
+ for lt, lp in zip(label_trues, label_preds):
+ self.confusion_matrix += self._fast_hist( lt.flatten(), lp.flatten() )
+
+ @staticmethod
+ def to_str(results):
+ string = "\n"
+ for k, v in results.items():
+ if k!="Class IoU":
+ string += "%s: %f\n"%(k, v)
+
+ #string+='Class IoU:\n'
+ #for k, v in results['Class IoU'].items():
+ # string += "\tclass %d: %f\n"%(k, v)
+ return string
+
+ def _fast_hist(self, label_true, label_pred):
+ mask = (label_true >= 0) & (label_true < self.n_classes)
+ hist = np.bincount(
+ self.n_classes * label_true[mask].astype(int) + label_pred[mask],
+ minlength=self.n_classes ** 2,
+ ).reshape(self.n_classes, self.n_classes)
+ return hist
+
+ def get_results(self):
+ """Returns accuracy score evaluation result.
+ - overall accuracy
+ - mean accuracy
+ - mean IU
+ - fwavacc
+ """
+ hist = self.confusion_matrix
+ acc = np.diag(hist).sum() / hist.sum()
+ acc_cls = np.diag(hist) / hist.sum(axis=1)
+ acc_cls = np.nanmean(acc_cls)
+ iu = np.diag(hist) / (hist.sum(axis=1) + hist.sum(axis=0) - np.diag(hist))
+ mean_iu = np.nanmean(iu)
+ freq = hist.sum(axis=1) / hist.sum()
+ fwavacc = (freq[freq > 0] * iu[freq > 0]).sum()
+ cls_iu = dict(zip(range(self.n_classes), iu))
+
+ return {
+ "Overall Acc": acc,
+ "Mean Acc": acc_cls,
+ "FreqW Acc": fwavacc,
+ "Mean IoU": mean_iu,
+ "Class IoU": cls_iu,
+ }
+
+ def reset(self):
+ self.confusion_matrix = np.zeros((self.n_classes, self.n_classes))
+
+class AverageMeter(object):
+ """Computes average values"""
+ def __init__(self):
+ self.book = dict()
+
+ def reset_all(self):
+ self.book.clear()
+
+ def reset(self, id):
+ item = self.book.get(id, None)
+ if item is not None:
+ item[0] = 0
+ item[1] = 0
+
+ def update(self, id, val):
+ record = self.book.get(id, None)
+ if record is None:
+ self.book[id] = [val, 1]
+ else:
+ record[0]+=val
+ record[1]+=1
+
+ def get_results(self, id):
+ record = self.book.get(id, None)
+ assert record is not None
+ return record[0] / record[1]
diff --git a/DeepLabV3Plus-Pytorch/network/__init__.py b/DeepLabV3Plus-Pytorch/network/__init__.py
new file mode 100644
index 0000000..ad24f33
--- /dev/null
+++ b/DeepLabV3Plus-Pytorch/network/__init__.py
@@ -0,0 +1,2 @@
+from .modeling import *
+from ._deeplab import convert_to_separable_conv
\ No newline at end of file
diff --git a/DeepLabV3Plus-Pytorch/network/_deeplab.py b/DeepLabV3Plus-Pytorch/network/_deeplab.py
new file mode 100644
index 0000000..c82f7e9
--- /dev/null
+++ b/DeepLabV3Plus-Pytorch/network/_deeplab.py
@@ -0,0 +1,178 @@
+import torch
+from torch import nn
+from torch.nn import functional as F
+
+from .utils import _SimpleSegmentationModel
+
+
+__all__ = ["DeepLabV3"]
+
+
+class DeepLabV3(_SimpleSegmentationModel):
+ """
+ Implements DeepLabV3 model from
+ `"Rethinking Atrous Convolution for Semantic Image Segmentation"
+ `_.
+
+ Arguments:
+ backbone (nn.Module): the network used to compute the features for the model.
+ The backbone should return an OrderedDict[Tensor], with the key being
+ "out" for the last feature map used, and "aux" if an auxiliary classifier
+ is used.
+ classifier (nn.Module): module that takes the "out" element returned from
+ the backbone and returns a dense prediction.
+ aux_classifier (nn.Module, optional): auxiliary classifier used during training
+ """
+ pass
+
+class DeepLabHeadV3Plus(nn.Module):
+ def __init__(self, in_channels, low_level_channels, num_classes, aspp_dilate=[12, 24, 36]):
+ super(DeepLabHeadV3Plus, self).__init__()
+ self.project = nn.Sequential(
+ nn.Conv2d(low_level_channels, 48, 1, bias=False),
+ nn.BatchNorm2d(48),
+ nn.ReLU(inplace=True),
+ )
+
+ self.aspp = ASPP(in_channels, aspp_dilate)
+
+ self.classifier = nn.Sequential(
+ nn.Conv2d(304, 256, 3, padding=1, bias=False),
+ nn.BatchNorm2d(256),
+ nn.ReLU(inplace=True),
+ nn.Conv2d(256, num_classes, 1)
+ )
+ self._init_weight()
+
+ def forward(self, feature):
+ low_level_feature = self.project( feature['low_level'] )
+ output_feature = self.aspp(feature['out'])
+ output_feature = F.interpolate(output_feature, size=low_level_feature.shape[2:], mode='bilinear', align_corners=False)
+ return self.classifier( torch.cat( [ low_level_feature, output_feature ], dim=1 ) )
+
+ def _init_weight(self):
+ for m in self.modules():
+ if isinstance(m, nn.Conv2d):
+ nn.init.kaiming_normal_(m.weight)
+ elif isinstance(m, (nn.BatchNorm2d, nn.GroupNorm)):
+ nn.init.constant_(m.weight, 1)
+ nn.init.constant_(m.bias, 0)
+
+class DeepLabHead(nn.Module):
+ def __init__(self, in_channels, num_classes, aspp_dilate=[12, 24, 36]):
+ super(DeepLabHead, self).__init__()
+
+ self.classifier = nn.Sequential(
+ ASPP(in_channels, aspp_dilate),
+ nn.Conv2d(256, 256, 3, padding=1, bias=False),
+ nn.BatchNorm2d(256),
+ nn.ReLU(inplace=True),
+ nn.Conv2d(256, num_classes, 1)
+ )
+ self._init_weight()
+
+ def forward(self, feature):
+ return self.classifier( feature['out'] )
+
+ def _init_weight(self):
+ for m in self.modules():
+ if isinstance(m, nn.Conv2d):
+ nn.init.kaiming_normal_(m.weight)
+ elif isinstance(m, (nn.BatchNorm2d, nn.GroupNorm)):
+ nn.init.constant_(m.weight, 1)
+ nn.init.constant_(m.bias, 0)
+
+class AtrousSeparableConvolution(nn.Module):
+ """ Atrous Separable Convolution
+ """
+ def __init__(self, in_channels, out_channels, kernel_size,
+ stride=1, padding=0, dilation=1, bias=True):
+ super(AtrousSeparableConvolution, self).__init__()
+ self.body = nn.Sequential(
+ # Separable Conv
+ nn.Conv2d( in_channels, in_channels, kernel_size=kernel_size, stride=stride, padding=padding, dilation=dilation, bias=bias, groups=in_channels ),
+ # PointWise Conv
+ nn.Conv2d( in_channels, out_channels, kernel_size=1, stride=1, padding=0, bias=bias),
+ )
+
+ self._init_weight()
+
+ def forward(self, x):
+ return self.body(x)
+
+ def _init_weight(self):
+ for m in self.modules():
+ if isinstance(m, nn.Conv2d):
+ nn.init.kaiming_normal_(m.weight)
+ elif isinstance(m, (nn.BatchNorm2d, nn.GroupNorm)):
+ nn.init.constant_(m.weight, 1)
+ nn.init.constant_(m.bias, 0)
+
+class ASPPConv(nn.Sequential):
+ def __init__(self, in_channels, out_channels, dilation):
+ modules = [
+ nn.Conv2d(in_channels, out_channels, 3, padding=dilation, dilation=dilation, bias=False),
+ nn.BatchNorm2d(out_channels),
+ nn.ReLU(inplace=True)
+ ]
+ super(ASPPConv, self).__init__(*modules)
+
+class ASPPPooling(nn.Sequential):
+ def __init__(self, in_channels, out_channels):
+ super(ASPPPooling, self).__init__(
+ nn.AdaptiveAvgPool2d(1),
+ nn.Conv2d(in_channels, out_channels, 1, bias=False),
+ nn.BatchNorm2d(out_channels),
+ nn.ReLU(inplace=True))
+
+ def forward(self, x):
+ size = x.shape[-2:]
+ x = super(ASPPPooling, self).forward(x)
+ return F.interpolate(x, size=size, mode='bilinear', align_corners=False)
+
+class ASPP(nn.Module):
+ def __init__(self, in_channels, atrous_rates):
+ super(ASPP, self).__init__()
+ out_channels = 256
+ modules = []
+ modules.append(nn.Sequential(
+ nn.Conv2d(in_channels, out_channels, 1, bias=False),
+ nn.BatchNorm2d(out_channels),
+ nn.ReLU(inplace=True)))
+
+ rate1, rate2, rate3 = tuple(atrous_rates)
+ modules.append(ASPPConv(in_channels, out_channels, rate1))
+ modules.append(ASPPConv(in_channels, out_channels, rate2))
+ modules.append(ASPPConv(in_channels, out_channels, rate3))
+ modules.append(ASPPPooling(in_channels, out_channels))
+
+ self.convs = nn.ModuleList(modules)
+
+ self.project = nn.Sequential(
+ nn.Conv2d(5 * out_channels, out_channels, 1, bias=False),
+ nn.BatchNorm2d(out_channels),
+ nn.ReLU(inplace=True),
+ nn.Dropout(0.1),)
+
+ def forward(self, x):
+ res = []
+ for conv in self.convs:
+ res.append(conv(x))
+ res = torch.cat(res, dim=1)
+ return self.project(res)
+
+
+
+def convert_to_separable_conv(module):
+ new_module = module
+ if isinstance(module, nn.Conv2d) and module.kernel_size[0]>1:
+ new_module = AtrousSeparableConvolution(module.in_channels,
+ module.out_channels,
+ module.kernel_size,
+ module.stride,
+ module.padding,
+ module.dilation,
+ module.bias)
+ for name, child in module.named_children():
+ new_module.add_module(name, convert_to_separable_conv(child))
+ return new_module
\ No newline at end of file
diff --git a/DeepLabV3Plus-Pytorch/network/backbone/__init__.py b/DeepLabV3Plus-Pytorch/network/backbone/__init__.py
new file mode 100644
index 0000000..afe983f
--- /dev/null
+++ b/DeepLabV3Plus-Pytorch/network/backbone/__init__.py
@@ -0,0 +1,2 @@
+from . import resnet
+from . import mobilenetv2
diff --git a/DeepLabV3Plus-Pytorch/network/backbone/mobilenetv2.py b/DeepLabV3Plus-Pytorch/network/backbone/mobilenetv2.py
new file mode 100644
index 0000000..46fa16a
--- /dev/null
+++ b/DeepLabV3Plus-Pytorch/network/backbone/mobilenetv2.py
@@ -0,0 +1,187 @@
+from torch import nn
+from torchvision.models.utils import load_state_dict_from_url
+import torch.nn.functional as F
+
+__all__ = ['MobileNetV2', 'mobilenet_v2']
+
+
+model_urls = {
+ 'mobilenet_v2': 'https://download.pytorch.org/models/mobilenet_v2-b0353104.pth',
+}
+
+
+def _make_divisible(v, divisor, min_value=None):
+ """
+ This function is taken from the original tf repo.
+ It ensures that all layers have a channel number that is divisible by 8
+ It can be seen here:
+ https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet/mobilenet.py
+ :param v:
+ :param divisor:
+ :param min_value:
+ :return:
+ """
+ if min_value is None:
+ min_value = divisor
+ new_v = max(min_value, int(v + divisor / 2) // divisor * divisor)
+ # Make sure that round down does not go down by more than 10%.
+ if new_v < 0.9 * v:
+ new_v += divisor
+ return new_v
+
+
+class ConvBNReLU(nn.Sequential):
+ def __init__(self, in_planes, out_planes, kernel_size=3, stride=1, dilation=1, groups=1):
+ #padding = (kernel_size - 1) // 2
+ super(ConvBNReLU, self).__init__(
+ nn.Conv2d(in_planes, out_planes, kernel_size, stride, 0, dilation=dilation, groups=groups, bias=False),
+ nn.BatchNorm2d(out_planes),
+ nn.ReLU6(inplace=True)
+ )
+
+def fixed_padding(kernel_size, dilation):
+ kernel_size_effective = kernel_size + (kernel_size - 1) * (dilation - 1)
+ pad_total = kernel_size_effective - 1
+ pad_beg = pad_total // 2
+ pad_end = pad_total - pad_beg
+ return (pad_beg, pad_end, pad_beg, pad_end)
+
+class InvertedResidual(nn.Module):
+ def __init__(self, inp, oup, stride, dilation, expand_ratio):
+ super(InvertedResidual, self).__init__()
+ self.stride = stride
+ assert stride in [1, 2]
+
+ hidden_dim = int(round(inp * expand_ratio))
+ self.use_res_connect = self.stride == 1 and inp == oup
+
+ layers = []
+ if expand_ratio != 1:
+ # pw
+ layers.append(ConvBNReLU(inp, hidden_dim, kernel_size=1))
+
+ layers.extend([
+ # dw
+ ConvBNReLU(hidden_dim, hidden_dim, stride=stride, dilation=dilation, groups=hidden_dim),
+ # pw-linear
+ nn.Conv2d(hidden_dim, oup, 1, 1, 0, bias=False),
+ nn.BatchNorm2d(oup),
+ ])
+ self.conv = nn.Sequential(*layers)
+
+ self.input_padding = fixed_padding( 3, dilation )
+
+ def forward(self, x):
+ x_pad = F.pad(x, self.input_padding)
+ if self.use_res_connect:
+ return x + self.conv(x_pad)
+ else:
+ return self.conv(x_pad)
+
+class MobileNetV2(nn.Module):
+ def __init__(self, num_classes=1000, output_stride=8, width_mult=1.0, inverted_residual_setting=None, round_nearest=8):
+ """
+ MobileNet V2 main class
+
+ Args:
+ num_classes (int): Number of classes
+ width_mult (float): Width multiplier - adjusts number of channels in each layer by this amount
+ inverted_residual_setting: Network structure
+ round_nearest (int): Round the number of channels in each layer to be a multiple of this number
+ Set to 1 to turn off rounding
+ """
+ super(MobileNetV2, self).__init__()
+ block = InvertedResidual
+ input_channel = 32
+ last_channel = 1280
+ self.output_stride = output_stride
+ current_stride = 1
+ if inverted_residual_setting is None:
+ inverted_residual_setting = [
+ # t, c, n, s
+ [1, 16, 1, 1],
+ [6, 24, 2, 2],
+ [6, 32, 3, 2],
+ [6, 64, 4, 2],
+ [6, 96, 3, 1],
+ [6, 160, 3, 2],
+ [6, 320, 1, 1],
+ ]
+
+ # only check the first element, assuming user knows t,c,n,s are required
+ if len(inverted_residual_setting) == 0 or len(inverted_residual_setting[0]) != 4:
+ raise ValueError("inverted_residual_setting should be non-empty "
+ "or a 4-element list, got {}".format(inverted_residual_setting))
+
+ # building first layer
+ input_channel = _make_divisible(input_channel * width_mult, round_nearest)
+ self.last_channel = _make_divisible(last_channel * max(1.0, width_mult), round_nearest)
+ features = [ConvBNReLU(3, input_channel, stride=2)]
+ current_stride *= 2
+ dilation=1
+ previous_dilation = 1
+
+ # building inverted residual blocks
+ for t, c, n, s in inverted_residual_setting:
+ output_channel = _make_divisible(c * width_mult, round_nearest)
+ previous_dilation = dilation
+ if current_stride == output_stride:
+ stride = 1
+ dilation *= s
+ else:
+ stride = s
+ current_stride *= s
+ output_channel = int(c * width_mult)
+
+ for i in range(n):
+ if i==0:
+ features.append(block(input_channel, output_channel, stride, previous_dilation, expand_ratio=t))
+ else:
+ features.append(block(input_channel, output_channel, 1, dilation, expand_ratio=t))
+ input_channel = output_channel
+ # building last several layers
+ features.append(ConvBNReLU(input_channel, self.last_channel, kernel_size=1))
+ # make it nn.Sequential
+ self.features = nn.Sequential(*features)
+
+ # building classifier
+ self.classifier = nn.Sequential(
+ nn.Dropout(0.2),
+ nn.Linear(self.last_channel, num_classes),
+ )
+
+ # weight initialization
+ for m in self.modules():
+ if isinstance(m, nn.Conv2d):
+ nn.init.kaiming_normal_(m.weight, mode='fan_out')
+ if m.bias is not None:
+ nn.init.zeros_(m.bias)
+ elif isinstance(m, nn.BatchNorm2d):
+ nn.init.ones_(m.weight)
+ nn.init.zeros_(m.bias)
+ elif isinstance(m, nn.Linear):
+ nn.init.normal_(m.weight, 0, 0.01)
+ nn.init.zeros_(m.bias)
+
+ def forward(self, x):
+ x = self.features(x)
+ x = x.mean([2, 3])
+ x = self.classifier(x)
+ return x
+
+
+def mobilenet_v2(pretrained=False, progress=True, **kwargs):
+ """
+ Constructs a MobileNetV2 architecture from
+ `"MobileNetV2: Inverted Residuals and Linear Bottlenecks" `_.
+
+ Args:
+ pretrained (bool): If True, returns a model pre-trained on ImageNet
+ progress (bool): If True, displays a progress bar of the download to stderr
+ """
+ model = MobileNetV2(**kwargs)
+ if pretrained:
+ state_dict = load_state_dict_from_url(model_urls['mobilenet_v2'],
+ progress=progress)
+ model.load_state_dict(state_dict)
+ return model
diff --git a/DeepLabV3Plus-Pytorch/network/backbone/resnet.py b/DeepLabV3Plus-Pytorch/network/backbone/resnet.py
new file mode 100644
index 0000000..cebee56
--- /dev/null
+++ b/DeepLabV3Plus-Pytorch/network/backbone/resnet.py
@@ -0,0 +1,343 @@
+import torch
+import torch.nn as nn
+from torchvision.models.utils import load_state_dict_from_url
+
+
+__all__ = ['ResNet', 'resnet18', 'resnet34', 'resnet50', 'resnet101',
+ 'resnet152', 'resnext50_32x4d', 'resnext101_32x8d',
+ 'wide_resnet50_2', 'wide_resnet101_2']
+
+
+model_urls = {
+ 'resnet18': 'https://download.pytorch.org/models/resnet18-5c106cde.pth',
+ 'resnet34': 'https://download.pytorch.org/models/resnet34-333f7ec4.pth',
+ 'resnet50': 'https://download.pytorch.org/models/resnet50-19c8e357.pth',
+ 'resnet101': 'https://download.pytorch.org/models/resnet101-5d3b4d8f.pth',
+ 'resnet152': 'https://download.pytorch.org/models/resnet152-b121ed2d.pth',
+ 'resnext50_32x4d': 'https://download.pytorch.org/models/resnext50_32x4d-7cdf4587.pth',
+ 'resnext101_32x8d': 'https://download.pytorch.org/models/resnext101_32x8d-8ba56ff5.pth',
+ 'wide_resnet50_2': 'https://download.pytorch.org/models/wide_resnet50_2-95faca4d.pth',
+ 'wide_resnet101_2': 'https://download.pytorch.org/models/wide_resnet101_2-32ee1156.pth',
+}
+
+
+def conv3x3(in_planes, out_planes, stride=1, groups=1, dilation=1):
+ """3x3 convolution with padding"""
+ return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride,
+ padding=dilation, groups=groups, bias=False, dilation=dilation)
+
+
+def conv1x1(in_planes, out_planes, stride=1):
+ """1x1 convolution"""
+ return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False)
+
+
+class BasicBlock(nn.Module):
+ expansion = 1
+
+ def __init__(self, inplanes, planes, stride=1, downsample=None, groups=1,
+ base_width=64, dilation=1, norm_layer=None):
+ super(BasicBlock, self).__init__()
+ if norm_layer is None:
+ norm_layer = nn.BatchNorm2d
+ if groups != 1 or base_width != 64:
+ raise ValueError('BasicBlock only supports groups=1 and base_width=64')
+ if dilation > 1:
+ raise NotImplementedError("Dilation > 1 not supported in BasicBlock")
+ # Both self.conv1 and self.downsample layers downsample the input when stride != 1
+ self.conv1 = conv3x3(inplanes, planes, stride)
+ self.bn1 = norm_layer(planes)
+ self.relu = nn.ReLU(inplace=True)
+ self.conv2 = conv3x3(planes, planes)
+ self.bn2 = norm_layer(planes)
+ self.downsample = downsample
+ self.stride = stride
+
+ def forward(self, x):
+ identity = x
+
+ out = self.conv1(x)
+ out = self.bn1(out)
+ out = self.relu(out)
+
+ out = self.conv2(out)
+ out = self.bn2(out)
+
+ if self.downsample is not None:
+ identity = self.downsample(x)
+
+ out += identity
+ out = self.relu(out)
+
+ return out
+
+
+class Bottleneck(nn.Module):
+ expansion = 4
+
+ def __init__(self, inplanes, planes, stride=1, downsample=None, groups=1,
+ base_width=64, dilation=1, norm_layer=None):
+ super(Bottleneck, self).__init__()
+ if norm_layer is None:
+ norm_layer = nn.BatchNorm2d
+ width = int(planes * (base_width / 64.)) * groups
+ # Both self.conv2 and self.downsample layers downsample the input when stride != 1
+ self.conv1 = conv1x1(inplanes, width)
+ self.bn1 = norm_layer(width)
+ self.conv2 = conv3x3(width, width, stride, groups, dilation)
+ self.bn2 = norm_layer(width)
+ self.conv3 = conv1x1(width, planes * self.expansion)
+ self.bn3 = norm_layer(planes * self.expansion)
+ self.relu = nn.ReLU(inplace=True)
+ self.downsample = downsample
+ self.stride = stride
+
+ def forward(self, x):
+ identity = x
+
+ out = self.conv1(x)
+ out = self.bn1(out)
+ out = self.relu(out)
+
+ out = self.conv2(out)
+ out = self.bn2(out)
+ out = self.relu(out)
+
+ out = self.conv3(out)
+ out = self.bn3(out)
+
+ if self.downsample is not None:
+ identity = self.downsample(x)
+
+ out += identity
+ out = self.relu(out)
+
+ return out
+
+
+class ResNet(nn.Module):
+
+ def __init__(self, block, layers, num_classes=1000, zero_init_residual=False,
+ groups=1, width_per_group=64, replace_stride_with_dilation=None,
+ norm_layer=None):
+ super(ResNet, self).__init__()
+ if norm_layer is None:
+ norm_layer = nn.BatchNorm2d
+ self._norm_layer = norm_layer
+
+ self.inplanes = 64
+ self.dilation = 1
+ if replace_stride_with_dilation is None:
+ # each element in the tuple indicates if we should replace
+ # the 2x2 stride with a dilated convolution instead
+ replace_stride_with_dilation = [False, False, False]
+ if len(replace_stride_with_dilation) != 3:
+ raise ValueError("replace_stride_with_dilation should be None "
+ "or a 3-element tuple, got {}".format(replace_stride_with_dilation))
+ self.groups = groups
+ self.base_width = width_per_group
+ self.conv1 = nn.Conv2d(3, self.inplanes, kernel_size=7, stride=2, padding=3,
+ bias=False)
+ self.bn1 = norm_layer(self.inplanes)
+ self.relu = nn.ReLU(inplace=True)
+ self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)
+ self.layer1 = self._make_layer(block, 64, layers[0])
+ self.layer2 = self._make_layer(block, 128, layers[1], stride=2,
+ dilate=replace_stride_with_dilation[0])
+ self.layer3 = self._make_layer(block, 256, layers[2], stride=2,
+ dilate=replace_stride_with_dilation[1])
+ self.layer4 = self._make_layer(block, 512, layers[3], stride=2,
+ dilate=replace_stride_with_dilation[2])
+ self.avgpool = nn.AdaptiveAvgPool2d((1, 1))
+ self.fc = nn.Linear(512 * block.expansion, num_classes)
+
+ for m in self.modules():
+ if isinstance(m, nn.Conv2d):
+ nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')
+ elif isinstance(m, (nn.BatchNorm2d, nn.GroupNorm)):
+ nn.init.constant_(m.weight, 1)
+ nn.init.constant_(m.bias, 0)
+
+ # Zero-initialize the last BN in each residual branch,
+ # so that the residual branch starts with zeros, and each residual block behaves like an identity.
+ # This improves the model by 0.2~0.3% according to https://arxiv.org/abs/1706.02677
+ if zero_init_residual:
+ for m in self.modules():
+ if isinstance(m, Bottleneck):
+ nn.init.constant_(m.bn3.weight, 0)
+ elif isinstance(m, BasicBlock):
+ nn.init.constant_(m.bn2.weight, 0)
+
+ def _make_layer(self, block, planes, blocks, stride=1, dilate=False):
+ norm_layer = self._norm_layer
+ downsample = None
+ previous_dilation = self.dilation
+ if dilate:
+ self.dilation *= stride
+ stride = 1
+ if stride != 1 or self.inplanes != planes * block.expansion:
+ downsample = nn.Sequential(
+ conv1x1(self.inplanes, planes * block.expansion, stride),
+ norm_layer(planes * block.expansion),
+ )
+
+ layers = []
+ layers.append(block(self.inplanes, planes, stride, downsample, self.groups,
+ self.base_width, previous_dilation, norm_layer))
+ self.inplanes = planes * block.expansion
+ for _ in range(1, blocks):
+ layers.append(block(self.inplanes, planes, groups=self.groups,
+ base_width=self.base_width, dilation=self.dilation,
+ norm_layer=norm_layer))
+
+ return nn.Sequential(*layers)
+
+ def forward(self, x):
+ x = self.conv1(x)
+ x = self.bn1(x)
+ x = self.relu(x)
+ x = self.maxpool(x)
+
+ x = self.layer1(x)
+ x = self.layer2(x)
+ x = self.layer3(x)
+ x = self.layer4(x)
+
+ x = self.avgpool(x)
+ x = torch.flatten(x, 1)
+ x = self.fc(x)
+
+ return x
+
+
+def _resnet(arch, block, layers, pretrained, progress, **kwargs):
+ model = ResNet(block, layers, **kwargs)
+ if pretrained:
+ state_dict = load_state_dict_from_url(model_urls[arch],
+ progress=progress)
+ model.load_state_dict(state_dict)
+ return model
+
+
+def resnet18(pretrained=False, progress=True, **kwargs):
+ r"""ResNet-18 model from
+ `"Deep Residual Learning for Image Recognition" `_
+
+ Args:
+ pretrained (bool): If True, returns a model pre-trained on ImageNet
+ progress (bool): If True, displays a progress bar of the download to stderr
+ """
+ return _resnet('resnet18', BasicBlock, [2, 2, 2, 2], pretrained, progress,
+ **kwargs)
+
+
+def resnet34(pretrained=False, progress=True, **kwargs):
+ r"""ResNet-34 model from
+ `"Deep Residual Learning for Image Recognition" `_
+
+ Args:
+ pretrained (bool): If True, returns a model pre-trained on ImageNet
+ progress (bool): If True, displays a progress bar of the download to stderr
+ """
+ return _resnet('resnet34', BasicBlock, [3, 4, 6, 3], pretrained, progress,
+ **kwargs)
+
+
+def resnet50(pretrained=False, progress=True, **kwargs):
+ r"""ResNet-50 model from
+ `"Deep Residual Learning for Image Recognition" `_
+
+ Args:
+ pretrained (bool): If True, returns a model pre-trained on ImageNet
+ progress (bool): If True, displays a progress bar of the download to stderr
+ """
+ return _resnet('resnet50', Bottleneck, [3, 4, 6, 3], pretrained, progress,
+ **kwargs)
+
+
+def resnet101(pretrained=False, progress=True, **kwargs):
+ r"""ResNet-101 model from
+ `"Deep Residual Learning for Image Recognition" `_
+
+ Args:
+ pretrained (bool): If True, returns a model pre-trained on ImageNet
+ progress (bool): If True, displays a progress bar of the download to stderr
+ """
+ return _resnet('resnet101', Bottleneck, [3, 4, 23, 3], pretrained, progress,
+ **kwargs)
+
+
+def resnet152(pretrained=False, progress=True, **kwargs):
+ r"""ResNet-152 model from
+ `"Deep Residual Learning for Image Recognition" `_
+
+ Args:
+ pretrained (bool): If True, returns a model pre-trained on ImageNet
+ progress (bool): If True, displays a progress bar of the download to stderr
+ """
+ return _resnet('resnet152', Bottleneck, [3, 8, 36, 3], pretrained, progress,
+ **kwargs)
+
+
+def resnext50_32x4d(pretrained=False, progress=True, **kwargs):
+ r"""ResNeXt-50 32x4d model from
+ `"Aggregated Residual Transformation for Deep Neural Networks" `_
+
+ Args:
+ pretrained (bool): If True, returns a model pre-trained on ImageNet
+ progress (bool): If True, displays a progress bar of the download to stderr
+ """
+ kwargs['groups'] = 32
+ kwargs['width_per_group'] = 4
+ return _resnet('resnext50_32x4d', Bottleneck, [3, 4, 6, 3],
+ pretrained, progress, **kwargs)
+
+
+def resnext101_32x8d(pretrained=False, progress=True, **kwargs):
+ r"""ResNeXt-101 32x8d model from
+ `"Aggregated Residual Transformation for Deep Neural Networks" `_
+
+ Args:
+ pretrained (bool): If True, returns a model pre-trained on ImageNet
+ progress (bool): If True, displays a progress bar of the download to stderr
+ """
+ kwargs['groups'] = 32
+ kwargs['width_per_group'] = 8
+ return _resnet('resnext101_32x8d', Bottleneck, [3, 4, 23, 3],
+ pretrained, progress, **kwargs)
+
+
+def wide_resnet50_2(pretrained=False, progress=True, **kwargs):
+ r"""Wide ResNet-50-2 model from
+ `"Wide Residual Networks" `_
+
+ The model is the same as ResNet except for the bottleneck number of channels
+ which is twice larger in every block. The number of channels in outer 1x1
+ convolutions is the same, e.g. last block in ResNet-50 has 2048-512-2048
+ channels, and in Wide ResNet-50-2 has 2048-1024-2048.
+
+ Args:
+ pretrained (bool): If True, returns a model pre-trained on ImageNet
+ progress (bool): If True, displays a progress bar of the download to stderr
+ """
+ kwargs['width_per_group'] = 64 * 2
+ return _resnet('wide_resnet50_2', Bottleneck, [3, 4, 6, 3],
+ pretrained, progress, **kwargs)
+
+
+def wide_resnet101_2(pretrained=False, progress=True, **kwargs):
+ r"""Wide ResNet-101-2 model from
+ `"Wide Residual Networks" `_
+
+ The model is the same as ResNet except for the bottleneck number of channels
+ which is twice larger in every block. The number of channels in outer 1x1
+ convolutions is the same, e.g. last block in ResNet-50 has 2048-512-2048
+ channels, and in Wide ResNet-50-2 has 2048-1024-2048.
+
+ Args:
+ pretrained (bool): If True, returns a model pre-trained on ImageNet
+ progress (bool): If True, displays a progress bar of the download to stderr
+ """
+ kwargs['width_per_group'] = 64 * 2
+ return _resnet('wide_resnet101_2', Bottleneck, [3, 4, 23, 3],
+ pretrained, progress, **kwargs)
diff --git a/DeepLabV3Plus-Pytorch/network/modeling.py b/DeepLabV3Plus-Pytorch/network/modeling.py
new file mode 100644
index 0000000..b053083
--- /dev/null
+++ b/DeepLabV3Plus-Pytorch/network/modeling.py
@@ -0,0 +1,137 @@
+from .utils import IntermediateLayerGetter
+from ._deeplab import DeepLabHead, DeepLabHeadV3Plus, DeepLabV3
+from .backbone import resnet
+from .backbone import mobilenetv2
+
+def _segm_resnet(name, backbone_name, num_classes, output_stride, pretrained_backbone):
+
+ if output_stride==8:
+ replace_stride_with_dilation=[False, True, True]
+ aspp_dilate = [12, 24, 36]
+ else:
+ replace_stride_with_dilation=[False, False, True]
+ aspp_dilate = [6, 12, 18]
+
+ backbone = resnet.__dict__[backbone_name](
+ pretrained=pretrained_backbone,
+ replace_stride_with_dilation=replace_stride_with_dilation)
+
+ inplanes = 2048
+ low_level_planes = 256
+
+ if name=='deeplabv3plus':
+ return_layers = {'layer4': 'out', 'layer1': 'low_level'}
+ classifier = DeepLabHeadV3Plus(inplanes, low_level_planes, num_classes, aspp_dilate)
+ elif name=='deeplabv3':
+ return_layers = {'layer4': 'out'}
+ classifier = DeepLabHead(inplanes , num_classes, aspp_dilate)
+ backbone = IntermediateLayerGetter(backbone, return_layers=return_layers)
+
+ model = DeepLabV3(backbone, classifier)
+ return model
+
+def _segm_mobilenet(name, backbone_name, num_classes, output_stride, pretrained_backbone):
+ if output_stride==8:
+ aspp_dilate = [12, 24, 36]
+ else:
+ aspp_dilate = [6, 12, 18]
+
+ backbone = mobilenetv2.mobilenet_v2(pretrained=pretrained_backbone, output_stride=output_stride)
+
+ # rename layers
+ backbone.low_level_features = backbone.features[0:4]
+ backbone.high_level_features = backbone.features[4:-1]
+ backbone.features = None
+ backbone.classifier = None
+
+ inplanes = 320
+ low_level_planes = 24
+
+ if name=='deeplabv3plus':
+ return_layers = {'high_level_features': 'out', 'low_level_features': 'low_level'}
+ classifier = DeepLabHeadV3Plus(inplanes, low_level_planes, num_classes, aspp_dilate)
+ elif name=='deeplabv3':
+ return_layers = {'high_level_features': 'out'}
+ classifier = DeepLabHead(inplanes , num_classes, aspp_dilate)
+ backbone = IntermediateLayerGetter(backbone, return_layers=return_layers)
+
+ model = DeepLabV3(backbone, classifier)
+ return model
+
+def _load_model(arch_type, backbone, num_classes, output_stride, pretrained_backbone):
+
+ if backbone=='mobilenetv2':
+ model = _segm_mobilenet(arch_type, backbone, num_classes, output_stride=output_stride, pretrained_backbone=pretrained_backbone)
+ elif backbone.startswith('resnet'):
+ model = _segm_resnet(arch_type, backbone, num_classes, output_stride=output_stride, pretrained_backbone=pretrained_backbone)
+ else:
+ raise NotImplementedError
+ return model
+
+
+# Deeplab v3
+
+def deeplabv3_resnet50(num_classes=21, output_stride=8, pretrained_backbone=True):
+ """Constructs a DeepLabV3 model with a ResNet-50 backbone.
+
+ Args:
+ num_classes (int): number of classes.
+ output_stride (int): output stride for deeplab.
+ pretrained_backbone (bool): If True, use the pretrained backbone.
+ """
+ return _load_model('deeplabv3', 'resnet50', num_classes, output_stride=output_stride, pretrained_backbone=pretrained_backbone)
+
+def deeplabv3_resnet101(num_classes=21, output_stride=8, pretrained_backbone=True):
+ """Constructs a DeepLabV3 model with a ResNet-101 backbone.
+
+ Args:
+ num_classes (int): number of classes.
+ output_stride (int): output stride for deeplab.
+ pretrained_backbone (bool): If True, use the pretrained backbone.
+ """
+ return _load_model('deeplabv3', 'resnet101', num_classes, output_stride=output_stride, pretrained_backbone=pretrained_backbone)
+
+def deeplabv3_mobilenet(num_classes=21, output_stride=8, pretrained_backbone=True, **kwargs):
+ """Constructs a DeepLabV3 model with a MobileNetv2 backbone.
+
+ Args:
+ num_classes (int): number of classes.
+ output_stride (int): output stride for deeplab.
+ pretrained_backbone (bool): If True, use the pretrained backbone.
+ """
+ return _load_model('deeplabv3', 'mobilenetv2', num_classes, output_stride=output_stride, pretrained_backbone=pretrained_backbone)
+
+
+# Deeplab v3+
+
+def deeplabv3plus_resnet50(num_classes=21, output_stride=8, pretrained_backbone=True):
+ """Constructs a DeepLabV3 model with a ResNet-50 backbone.
+
+ Args:
+ num_classes (int): number of classes.
+ output_stride (int): output stride for deeplab.
+ pretrained_backbone (bool): If True, use the pretrained backbone.
+ """
+ return _load_model('deeplabv3plus', 'resnet50', num_classes, output_stride=output_stride, pretrained_backbone=pretrained_backbone)
+
+
+def deeplabv3plus_resnet101(num_classes=21, output_stride=8, pretrained_backbone=True):
+ """Constructs a DeepLabV3+ model with a ResNet-101 backbone.
+
+ Args:
+ num_classes (int): number of classes.
+ output_stride (int): output stride for deeplab.
+ pretrained_backbone (bool): If True, use the pretrained backbone.
+ """
+ return _load_model('deeplabv3plus', 'resnet101', num_classes, output_stride=output_stride, pretrained_backbone=pretrained_backbone)
+
+
+def deeplabv3plus_mobilenet(num_classes=21, output_stride=8, pretrained_backbone=True):
+ """Constructs a DeepLabV3+ model with a MobileNetv2 backbone.
+
+ Args:
+ num_classes (int): number of classes.
+ output_stride (int): output stride for deeplab.
+ pretrained_backbone (bool): If True, use the pretrained backbone.
+ """
+ return _load_model('deeplabv3plus', 'mobilenetv2', num_classes, output_stride=output_stride, pretrained_backbone=pretrained_backbone)
\ No newline at end of file
diff --git a/DeepLabV3Plus-Pytorch/network/utils.py b/DeepLabV3Plus-Pytorch/network/utils.py
new file mode 100644
index 0000000..d6e2782
--- /dev/null
+++ b/DeepLabV3Plus-Pytorch/network/utils.py
@@ -0,0 +1,76 @@
+import torch
+import torch.nn as nn
+import numpy as np
+import torch.nn.functional as F
+from collections import OrderedDict
+
+class _SimpleSegmentationModel(nn.Module):
+ def __init__(self, backbone, classifier):
+ super(_SimpleSegmentationModel, self).__init__()
+ self.backbone = backbone
+ self.classifier = classifier
+
+ def forward(self, x):
+ input_shape = x.shape[-2:]
+ features = self.backbone(x)
+ x = self.classifier(features)
+ x = F.interpolate(x, size=input_shape, mode='bilinear', align_corners=False)
+ return x
+
+
+class IntermediateLayerGetter(nn.ModuleDict):
+ """
+ Module wrapper that returns intermediate layers from a model
+
+ It has a strong assumption that the modules have been registered
+ into the model in the same order as they are used.
+ This means that one should **not** reuse the same nn.Module
+ twice in the forward if you want this to work.
+
+ Additionally, it is only able to query submodules that are directly
+ assigned to the model. So if `model` is passed, `model.feature1` can
+ be returned, but not `model.feature1.layer2`.
+
+ Arguments:
+ model (nn.Module): model on which we will extract the features
+ return_layers (Dict[name, new_name]): a dict containing the names
+ of the modules for which the activations will be returned as
+ the key of the dict, and the value of the dict is the name
+ of the returned activation (which the user can specify).
+
+ Examples::
+
+ >>> m = torchvision.models.resnet18(pretrained=True)
+ >>> # extract layer1 and layer3, giving as names `feat1` and feat2`
+ >>> new_m = torchvision.models._utils.IntermediateLayerGetter(m,
+ >>> {'layer1': 'feat1', 'layer3': 'feat2'})
+ >>> out = new_m(torch.rand(1, 3, 224, 224))
+ >>> print([(k, v.shape) for k, v in out.items()])
+ >>> [('feat1', torch.Size([1, 64, 56, 56])),
+ >>> ('feat2', torch.Size([1, 256, 14, 14]))]
+ """
+ def __init__(self, model, return_layers):
+ if not set(return_layers).issubset([name for name, _ in model.named_children()]):
+ raise ValueError("return_layers are not present in model")
+
+ orig_return_layers = return_layers
+ return_layers = {k: v for k, v in return_layers.items()}
+ layers = OrderedDict()
+ for name, module in model.named_children():
+ layers[name] = module
+ if name in return_layers:
+ del return_layers[name]
+ if not return_layers:
+ break
+
+ super(IntermediateLayerGetter, self).__init__(layers)
+ self.return_layers = orig_return_layers
+
+ def forward(self, x):
+ out = OrderedDict()
+ for name, module in self.named_children():
+ x = module(x)
+ if name in self.return_layers:
+ out_name = self.return_layers[name]
+ out[out_name] = x
+ return out
diff --git a/DeepLabV3Plus-Pytorch/requirements.txt b/DeepLabV3Plus-Pytorch/requirements.txt
new file mode 100644
index 0000000..48b62a8
--- /dev/null
+++ b/DeepLabV3Plus-Pytorch/requirements.txt
@@ -0,0 +1,8 @@
+torch
+torchvision
+numpy
+pillow
+scikit-learn
+tqdm
+matplotlib
+visdom
\ No newline at end of file
diff --git a/DeepLabV3Plus-Pytorch/train.sh b/DeepLabV3Plus-Pytorch/train.sh
new file mode 100755
index 0000000..28350c7
--- /dev/null
+++ b/DeepLabV3Plus-Pytorch/train.sh
@@ -0,0 +1,13 @@
+ROOT=/data/DB/VOC2012/
+MODEL=deeplabv3plus_resnet101 # deeplabv3plus_resnet101, deeplabv3_resnet101
+ITER=20000
+BATCH=32
+LR=0.05
+
+
+# training with 2 GPUs
+CUDA_VISLBLE_DEVICES=0,1 python main.py --data_root ${ROOT} --model ${MODEL} --gpu_id 0,1 --amp --total_itrs ${ITER} --batch_size ${BATCH} --lr ${LR}
+
+
+# evalutation with crf
+CUDA_VISIBLE_DEVICES=0,1 python eval.py --gpu_id 0,1 --data_root ${ROOT} --model ${MODEL} --val_batch_size 16 --ckpt checkpoints/best_${MODEL}_voc_os16.pth
\ No newline at end of file
diff --git a/DeepLabV3Plus-Pytorch/utils/__init__.py b/DeepLabV3Plus-Pytorch/utils/__init__.py
new file mode 100644
index 0000000..172d9f8
--- /dev/null
+++ b/DeepLabV3Plus-Pytorch/utils/__init__.py
@@ -0,0 +1,4 @@
+from .utils import *
+from .visualizer import Visualizer
+from .scheduler import PolyLR
+from .loss import FocalLoss
\ No newline at end of file
diff --git a/DeepLabV3Plus-Pytorch/utils/crf.py b/DeepLabV3Plus-Pytorch/utils/crf.py
new file mode 100755
index 0000000..5449883
--- /dev/null
+++ b/DeepLabV3Plus-Pytorch/utils/crf.py
@@ -0,0 +1,41 @@
+#!/usr/bin/env python
+# coding: utf-8
+#
+# Author: Kazuto Nakashima
+# URL: https://kazuto1011.github.io
+# Date: 09 January 2019
+
+
+import numpy as np
+import pydensecrf.densecrf as dcrf
+import pydensecrf.utils as utils
+
+
+class DenseCRF(object):
+ def __init__(self, iter_max, pos_w, pos_xy_std, bi_w, bi_xy_std, bi_rgb_std):
+ self.iter_max = iter_max
+ self.pos_w = pos_w
+ self.pos_xy_std = pos_xy_std
+ self.bi_w = bi_w
+ self.bi_xy_std = bi_xy_std
+ self.bi_rgb_std = bi_rgb_std
+
+ def __call__(self, image, probmap):
+ C, H, W = probmap.shape
+
+ U = utils.unary_from_softmax(probmap)
+ U = np.ascontiguousarray(U)
+
+ image = np.ascontiguousarray(image)
+
+ d = dcrf.DenseCRF2D(W, H, C)
+ d.setUnaryEnergy(U)
+ d.addPairwiseGaussian(sxy=self.pos_xy_std, compat=self.pos_w)
+ d.addPairwiseBilateral(
+ sxy=self.bi_xy_std, srgb=self.bi_rgb_std, rgbim=image, compat=self.bi_w
+ )
+
+ Q = d.inference(self.iter_max)
+ Q = np.array(Q).reshape((C, H, W))
+
+ return Q
diff --git a/DeepLabV3Plus-Pytorch/utils/ext_transforms.py b/DeepLabV3Plus-Pytorch/utils/ext_transforms.py
new file mode 100644
index 0000000..7a7bd9e
--- /dev/null
+++ b/DeepLabV3Plus-Pytorch/utils/ext_transforms.py
@@ -0,0 +1,571 @@
+import torchvision
+import torch
+import torchvision.transforms.functional as F
+import random
+import numbers
+import numpy as np
+from PIL import Image
+
+
+#
+# Extended Transforms for Semantic Segmentation
+#
+class ExtRandomHorizontalFlip(object):
+ """Horizontally flip the given PIL Image randomly with a given probability.
+
+ Args:
+ p (float): probability of the image being flipped. Default value is 0.5
+ """
+
+ def __init__(self, p=0.5):
+ self.p = p
+
+ def __call__(self, img, lbl):
+ """
+ Args:
+ img (PIL Image): Image to be flipped.
+
+ Returns:
+ PIL Image: Randomly flipped image.
+ """
+ if random.random() < self.p:
+ return F.hflip(img), F.hflip(lbl)
+ return img, lbl
+
+ def __repr__(self):
+ return self.__class__.__name__ + '(p={})'.format(self.p)
+
+
+
+class ExtCompose(object):
+ """Composes several transforms together.
+ Args:
+ transforms (list of ``Transform`` objects): list of transforms to compose.
+ Example:
+ >>> transforms.Compose([
+ >>> transforms.CenterCrop(10),
+ >>> transforms.ToTensor(),
+ >>> ])
+ """
+
+ def __init__(self, transforms):
+ self.transforms = transforms
+
+ def __call__(self, img, lbl):
+ for t in self.transforms:
+ img, lbl = t(img, lbl)
+ return img, lbl
+
+ def __repr__(self):
+ format_string = self.__class__.__name__ + '('
+ for t in self.transforms:
+ format_string += '\n'
+ format_string += ' {0}'.format(t)
+ format_string += '\n)'
+ return format_string
+
+
+class ExtCenterCrop(object):
+ """Crops the given PIL Image at the center.
+ Args:
+ size (sequence or int): Desired output size of the crop. If size is an
+ int instead of sequence like (h, w), a square crop (size, size) is
+ made.
+ """
+
+ def __init__(self, size):
+ if isinstance(size, numbers.Number):
+ self.size = (int(size), int(size))
+ else:
+ self.size = size
+
+ def __call__(self, img, lbl):
+ """
+ Args:
+ img (PIL Image): Image to be cropped.
+ Returns:
+ PIL Image: Cropped image.
+ """
+ return F.center_crop(img, self.size), F.center_crop(lbl, self.size)
+
+ def __repr__(self):
+ return self.__class__.__name__ + '(size={0})'.format(self.size)
+
+
+class ExtRandomScale(object):
+ def __init__(self, scale_range, interpolation=Image.BILINEAR):
+ self.scale_range = scale_range
+ self.interpolation = interpolation
+
+ def __call__(self, img, lbl):
+ """
+ Args:
+ img (PIL Image): Image to be scaled.
+ lbl (PIL Image): Label to be scaled.
+ Returns:
+ PIL Image: Rescaled image.
+ PIL Image: Rescaled label.
+ """
+ assert img.size == lbl.size
+ scale = random.uniform(self.scale_range[0], self.scale_range[1])
+ target_size = ( int(img.size[1]*scale), int(img.size[0]*scale) )
+ return F.resize(img, target_size, self.interpolation), F.resize(lbl, target_size, Image.NEAREST)
+
+ def __repr__(self):
+ interpolate_str = _pil_interpolation_to_str[self.interpolation]
+ return self.__class__.__name__ + '(size={0}, interpolation={1})'.format(self.size, interpolate_str)
+
+class ExtScale(object):
+ """Resize the input PIL Image to the given scale.
+ Args:
+ Scale (sequence or int): scale factors
+ interpolation (int, optional): Desired interpolation. Default is
+ ``PIL.Image.BILINEAR``
+ """
+
+ def __init__(self, scale, interpolation=Image.BILINEAR):
+ self.scale = scale
+ self.interpolation = interpolation
+
+ def __call__(self, img, lbl):
+ """
+ Args:
+ img (PIL Image): Image to be scaled.
+ lbl (PIL Image): Label to be scaled.
+ Returns:
+ PIL Image: Rescaled image.
+ PIL Image: Rescaled label.
+ """
+ assert img.size == lbl.size
+ target_size = ( int(img.size[1]*self.scale), int(img.size[0]*self.scale) ) # (H, W)
+ return F.resize(img, target_size, self.interpolation), F.resize(lbl, target_size, Image.NEAREST)
+
+ def __repr__(self):
+ interpolate_str = _pil_interpolation_to_str[self.interpolation]
+ return self.__class__.__name__ + '(size={0}, interpolation={1})'.format(self.size, interpolate_str)
+
+
+class ExtRandomRotation(object):
+ """Rotate the image by angle.
+ Args:
+ degrees (sequence or float or int): Range of degrees to select from.
+ If degrees is a number instead of sequence like (min, max), the range of degrees
+ will be (-degrees, +degrees).
+ resample ({PIL.Image.NEAREST, PIL.Image.BILINEAR, PIL.Image.BICUBIC}, optional):
+ An optional resampling filter.
+ See http://pillow.readthedocs.io/en/3.4.x/handbook/concepts.html#filters
+ If omitted, or if the image has mode "1" or "P", it is set to PIL.Image.NEAREST.
+ expand (bool, optional): Optional expansion flag.
+ If true, expands the output to make it large enough to hold the entire rotated image.
+ If false or omitted, make the output image the same size as the input image.
+ Note that the expand flag assumes rotation around the center and no translation.
+ center (2-tuple, optional): Optional center of rotation.
+ Origin is the upper left corner.
+ Default is the center of the image.
+ """
+
+ def __init__(self, degrees, resample=False, expand=False, center=None):
+ if isinstance(degrees, numbers.Number):
+ if degrees < 0:
+ raise ValueError("If degrees is a single number, it must be positive.")
+ self.degrees = (-degrees, degrees)
+ else:
+ if len(degrees) != 2:
+ raise ValueError("If degrees is a sequence, it must be of len 2.")
+ self.degrees = degrees
+
+ self.resample = resample
+ self.expand = expand
+ self.center = center
+
+ @staticmethod
+ def get_params(degrees):
+ """Get parameters for ``rotate`` for a random rotation.
+ Returns:
+ sequence: params to be passed to ``rotate`` for random rotation.
+ """
+ angle = random.uniform(degrees[0], degrees[1])
+
+ return angle
+
+ def __call__(self, img, lbl):
+ """
+ img (PIL Image): Image to be rotated.
+ lbl (PIL Image): Label to be rotated.
+ Returns:
+ PIL Image: Rotated image.
+ PIL Image: Rotated label.
+ """
+
+ angle = self.get_params(self.degrees)
+
+ return F.rotate(img, angle, self.resample, self.expand, self.center), F.rotate(lbl, angle, self.resample, self.expand, self.center)
+
+ def __repr__(self):
+ format_string = self.__class__.__name__ + '(degrees={0}'.format(self.degrees)
+ format_string += ', resample={0}'.format(self.resample)
+ format_string += ', expand={0}'.format(self.expand)
+ if self.center is not None:
+ format_string += ', center={0}'.format(self.center)
+ format_string += ')'
+ return format_string
+
+class ExtRandomHorizontalFlip(object):
+ """Horizontally flip the given PIL Image randomly with a given probability.
+ Args:
+ p (float): probability of the image being flipped. Default value is 0.5
+ """
+
+ def __init__(self, p=0.5):
+ self.p = p
+
+ def __call__(self, img, lbl):
+ """
+ Args:
+ img (PIL Image): Image to be flipped.
+ Returns:
+ PIL Image: Randomly flipped image.
+ """
+ if random.random() < self.p:
+ return F.hflip(img), F.hflip(lbl)
+ return img, lbl
+
+ def __repr__(self):
+ return self.__class__.__name__ + '(p={})'.format(self.p)
+
+
+class ExtRandomVerticalFlip(object):
+ """Vertically flip the given PIL Image randomly with a given probability.
+ Args:
+ p (float): probability of the image being flipped. Default value is 0.5
+ """
+
+ def __init__(self, p=0.5):
+ self.p = p
+
+ def __call__(self, img, lbl):
+ """
+ Args:
+ img (PIL Image): Image to be flipped.
+ lbl (PIL Image): Label to be flipped.
+ Returns:
+ PIL Image: Randomly flipped image.
+ PIL Image: Randomly flipped label.
+ """
+ if random.random() < self.p:
+ return F.vflip(img), F.vflip(lbl)
+ return img, lbl
+
+ def __repr__(self):
+ return self.__class__.__name__ + '(p={})'.format(self.p)
+
+class ExtPad(object):
+ def __init__(self, diviser=32):
+ self.diviser = diviser
+
+ def __call__(self, img, lbl):
+ h, w = img.size
+ ph = (h//32+1)*32 - h if h%32!=0 else 0
+ pw = (w//32+1)*32 - w if w%32!=0 else 0
+ im = F.pad(img, ( pw//2, pw-pw//2, ph//2, ph-ph//2) )
+ lbl = F.pad(lbl, ( pw//2, pw-pw//2, ph//2, ph-ph//2))
+ return im, lbl
+
+class ExtToTensor(object):
+ """Convert a ``PIL Image`` or ``numpy.ndarray`` to tensor.
+ Converts a PIL Image or numpy.ndarray (H x W x C) in the range
+ [0, 255] to a torch.FloatTensor of shape (C x H x W) in the range [0.0, 1.0].
+ """
+ def __init__(self, normalize=True, target_type='uint8'):
+ self.normalize = normalize
+ self.target_type = target_type
+ def __call__(self, pic, lbl):
+ """
+ Note that labels will not be normalized to [0, 1].
+ Args:
+ pic (PIL Image or numpy.ndarray): Image to be converted to tensor.
+ lbl (PIL Image or numpy.ndarray): Label to be converted to tensor.
+ Returns:
+ Tensor: Converted image and label
+ """
+ if self.normalize:
+ return F.to_tensor(pic), torch.from_numpy( np.array( lbl, dtype=self.target_type) )
+ else:
+ return torch.from_numpy( np.array( pic, dtype=np.float32).transpose(2, 0, 1) ), torch.from_numpy( np.array( lbl, dtype=self.target_type) )
+
+ def __repr__(self):
+ return self.__class__.__name__ + '()'
+
+class ExtNormalize(object):
+ """Normalize a tensor image with mean and standard deviation.
+ Given mean: ``(M1,...,Mn)`` and std: ``(S1,..,Sn)`` for ``n`` channels, this transform
+ will normalize each channel of the input ``torch.*Tensor`` i.e.
+ ``input[channel] = (input[channel] - mean[channel]) / std[channel]``
+ Args:
+ mean (sequence): Sequence of means for each channel.
+ std (sequence): Sequence of standard deviations for each channel.
+ """
+
+ def __init__(self, mean, std):
+ self.mean = mean
+ self.std = std
+
+ def __call__(self, tensor, lbl):
+ """
+ Args:
+ tensor (Tensor): Tensor image of size (C, H, W) to be normalized.
+ tensor (Tensor): Tensor of label. A dummy input for ExtCompose
+ Returns:
+ Tensor: Normalized Tensor image.
+ Tensor: Unchanged Tensor label
+ """
+ return F.normalize(tensor, self.mean, self.std), lbl
+
+ def __repr__(self):
+ return self.__class__.__name__ + '(mean={0}, std={1})'.format(self.mean, self.std)
+
+
+class ExtRandomCrop(object):
+ """Crop the given PIL Image at a random location.
+ Args:
+ size (sequence or int): Desired output size of the crop. If size is an
+ int instead of sequence like (h, w), a square crop (size, size) is
+ made.
+ padding (int or sequence, optional): Optional padding on each border
+ of the image. Default is 0, i.e no padding. If a sequence of length
+ 4 is provided, it is used to pad left, top, right, bottom borders
+ respectively.
+ pad_if_needed (boolean): It will pad the image if smaller than the
+ desired size to avoid raising an exception.
+ """
+
+ def __init__(self, size, padding=0, pad_if_needed=False):
+ if isinstance(size, numbers.Number):
+ self.size = (int(size), int(size))
+ else:
+ self.size = size
+ self.padding = padding
+ self.pad_if_needed = pad_if_needed
+
+ @staticmethod
+ def get_params(img, output_size):
+ """Get parameters for ``crop`` for a random crop.
+ Args:
+ img (PIL Image): Image to be cropped.
+ output_size (tuple): Expected output size of the crop.
+ Returns:
+ tuple: params (i, j, h, w) to be passed to ``crop`` for random crop.
+ """
+ w, h = img.size
+ th, tw = output_size
+ if w == tw and h == th:
+ return 0, 0, h, w
+
+ i = random.randint(0, h - th)
+ j = random.randint(0, w - tw)
+ return i, j, th, tw
+
+ def __call__(self, img, lbl):
+ """
+ Args:
+ img (PIL Image): Image to be cropped.
+ lbl (PIL Image): Label to be cropped.
+ Returns:
+ PIL Image: Cropped image.
+ PIL Image: Cropped label.
+ """
+ assert img.size == lbl.size, 'size of img and lbl should be the same. %s, %s'%(img.size, lbl.size)
+ if self.padding > 0:
+ img = F.pad(img, self.padding)
+ lbl = F.pad(lbl, self.padding)
+
+ # pad the width if needed
+ if self.pad_if_needed and img.size[0] < self.size[1]:
+ img = F.pad(img, padding=int((1 + self.size[1] - img.size[0]) / 2))
+ lbl = F.pad(lbl, padding=int((1 + self.size[1] - lbl.size[0]) / 2))
+
+ # pad the height if needed
+ if self.pad_if_needed and img.size[1] < self.size[0]:
+ img = F.pad(img, padding=int((1 + self.size[0] - img.size[1]) / 2))
+ lbl = F.pad(lbl, padding=int((1 + self.size[0] - lbl.size[1]) / 2))
+
+ i, j, h, w = self.get_params(img, self.size)
+
+ return F.crop(img, i, j, h, w), F.crop(lbl, i, j, h, w)
+
+ def __repr__(self):
+ return self.__class__.__name__ + '(size={0}, padding={1})'.format(self.size, self.padding)
+
+
+class ExtResize(object):
+ """Resize the input PIL Image to the given size.
+ Args:
+ size (sequence or int): Desired output size. If size is a sequence like
+ (h, w), output size will be matched to this. If size is an int,
+ smaller edge of the image will be matched to this number.
+ i.e, if height > width, then image will be rescaled to
+ (size * height / width, size)
+ interpolation (int, optional): Desired interpolation. Default is
+ ``PIL.Image.BILINEAR``
+ """
+
+ def __init__(self, size, interpolation=Image.BILINEAR):
+ assert isinstance(size, int) or (isinstance(size, collections.Iterable) and len(size) == 2)
+ self.size = size
+ self.interpolation = interpolation
+
+ def __call__(self, img, lbl):
+ """
+ Args:
+ img (PIL Image): Image to be scaled.
+ Returns:
+ PIL Image: Rescaled image.
+ """
+ return F.resize(img, self.size, self.interpolation), F.resize(lbl, self.size, Image.NEAREST)
+
+ def __repr__(self):
+ interpolate_str = _pil_interpolation_to_str[self.interpolation]
+ return self.__class__.__name__ + '(size={0}, interpolation={1})'.format(self.size, interpolate_str)
+
+class ExtColorJitter(object):
+ """Randomly change the brightness, contrast and saturation of an image.
+
+ Args:
+ brightness (float or tuple of float (min, max)): How much to jitter brightness.
+ brightness_factor is chosen uniformly from [max(0, 1 - brightness), 1 + brightness]
+ or the given [min, max]. Should be non negative numbers.
+ contrast (float or tuple of float (min, max)): How much to jitter contrast.
+ contrast_factor is chosen uniformly from [max(0, 1 - contrast), 1 + contrast]
+ or the given [min, max]. Should be non negative numbers.
+ saturation (float or tuple of float (min, max)): How much to jitter saturation.
+ saturation_factor is chosen uniformly from [max(0, 1 - saturation), 1 + saturation]
+ or the given [min, max]. Should be non negative numbers.
+ hue (float or tuple of float (min, max)): How much to jitter hue.
+ hue_factor is chosen uniformly from [-hue, hue] or the given [min, max].
+ Should have 0<= hue <= 0.5 or -0.5 <= min <= max <= 0.5.
+ """
+ def __init__(self, brightness=0, contrast=0, saturation=0, hue=0):
+ self.brightness = self._check_input(brightness, 'brightness')
+ self.contrast = self._check_input(contrast, 'contrast')
+ self.saturation = self._check_input(saturation, 'saturation')
+ self.hue = self._check_input(hue, 'hue', center=0, bound=(-0.5, 0.5),
+ clip_first_on_zero=False)
+
+ def _check_input(self, value, name, center=1, bound=(0, float('inf')), clip_first_on_zero=True):
+ if isinstance(value, numbers.Number):
+ if value < 0:
+ raise ValueError("If {} is a single number, it must be non negative.".format(name))
+ value = [center - value, center + value]
+ if clip_first_on_zero:
+ value[0] = max(value[0], 0)
+ elif isinstance(value, (tuple, list)) and len(value) == 2:
+ if not bound[0] <= value[0] <= value[1] <= bound[1]:
+ raise ValueError("{} values should be between {}".format(name, bound))
+ else:
+ raise TypeError("{} should be a single number or a list/tuple with lenght 2.".format(name))
+
+ # if value is 0 or (1., 1.) for brightness/contrast/saturation
+ # or (0., 0.) for hue, do nothing
+ if value[0] == value[1] == center:
+ value = None
+ return value
+
+ @staticmethod
+ def get_params(brightness, contrast, saturation, hue):
+ """Get a randomized transform to be applied on image.
+
+ Arguments are same as that of __init__.
+
+ Returns:
+ Transform which randomly adjusts brightness, contrast and
+ saturation in a random order.
+ """
+ transforms = []
+
+ if brightness is not None:
+ brightness_factor = random.uniform(brightness[0], brightness[1])
+ transforms.append(Lambda(lambda img: F.adjust_brightness(img, brightness_factor)))
+
+ if contrast is not None:
+ contrast_factor = random.uniform(contrast[0], contrast[1])
+ transforms.append(Lambda(lambda img: F.adjust_contrast(img, contrast_factor)))
+
+ if saturation is not None:
+ saturation_factor = random.uniform(saturation[0], saturation[1])
+ transforms.append(Lambda(lambda img: F.adjust_saturation(img, saturation_factor)))
+
+ if hue is not None:
+ hue_factor = random.uniform(hue[0], hue[1])
+ transforms.append(Lambda(lambda img: F.adjust_hue(img, hue_factor)))
+
+ random.shuffle(transforms)
+ transform = Compose(transforms)
+
+ return transform
+
+ def __call__(self, img, lbl):
+ """
+ Args:
+ img (PIL Image): Input image.
+
+ Returns:
+ PIL Image: Color jittered image.
+ """
+ transform = self.get_params(self.brightness, self.contrast,
+ self.saturation, self.hue)
+ return transform(img), lbl
+
+ def __repr__(self):
+ format_string = self.__class__.__name__ + '('
+ format_string += 'brightness={0}'.format(self.brightness)
+ format_string += ', contrast={0}'.format(self.contrast)
+ format_string += ', saturation={0}'.format(self.saturation)
+ format_string += ', hue={0})'.format(self.hue)
+ return format_string
+
+class Lambda(object):
+ """Apply a user-defined lambda as a transform.
+
+ Args:
+ lambd (function): Lambda/function to be used for transform.
+ """
+
+ def __init__(self, lambd):
+ assert callable(lambd), repr(type(lambd).__name__) + " object is not callable"
+ self.lambd = lambd
+
+ def __call__(self, img):
+ return self.lambd(img)
+
+ def __repr__(self):
+ return self.__class__.__name__ + '()'
+
+
+class Compose(object):
+ """Composes several transforms together.
+
+ Args:
+ transforms (list of ``Transform`` objects): list of transforms to compose.
+
+ Example:
+ >>> transforms.Compose([
+ >>> transforms.CenterCrop(10),
+ >>> transforms.ToTensor(),
+ >>> ])
+ """
+
+ def __init__(self, transforms):
+ self.transforms = transforms
+
+ def __call__(self, img):
+ for t in self.transforms:
+ img = t(img)
+ return img
+
+ def __repr__(self):
+ format_string = self.__class__.__name__ + '('
+ for t in self.transforms:
+ format_string += '\n'
+ format_string += ' {0}'.format(t)
+ format_string += '\n)'
+ return format_string
\ No newline at end of file
diff --git a/DeepLabV3Plus-Pytorch/utils/loss.py b/DeepLabV3Plus-Pytorch/utils/loss.py
new file mode 100644
index 0000000..64a5f54
--- /dev/null
+++ b/DeepLabV3Plus-Pytorch/utils/loss.py
@@ -0,0 +1,21 @@
+import torch.nn as nn
+import torch.nn.functional as F
+import torch
+
+class FocalLoss(nn.Module):
+ def __init__(self, alpha=1, gamma=0, size_average=True, ignore_index=255):
+ super(FocalLoss, self).__init__()
+ self.alpha = alpha
+ self.gamma = gamma
+ self.ignore_index = ignore_index
+ self.size_average = size_average
+
+ def forward(self, inputs, targets):
+ ce_loss = F.cross_entropy(
+ inputs, targets, reduction='none', ignore_index=self.ignore_index)
+ pt = torch.exp(-ce_loss)
+ focal_loss = self.alpha * (1-pt)**self.gamma * ce_loss
+ if self.size_average:
+ return focal_loss.mean()
+ else:
+ return focal_loss.sum()
\ No newline at end of file
diff --git a/DeepLabV3Plus-Pytorch/utils/scheduler.py b/DeepLabV3Plus-Pytorch/utils/scheduler.py
new file mode 100644
index 0000000..65ffcec
--- /dev/null
+++ b/DeepLabV3Plus-Pytorch/utils/scheduler.py
@@ -0,0 +1,12 @@
+from torch.optim.lr_scheduler import _LRScheduler, StepLR
+
+class PolyLR(_LRScheduler):
+ def __init__(self, optimizer, max_iters, power=0.9, last_epoch=-1, min_lr=1e-6):
+ self.power = power
+ self.max_iters = max_iters # avoid zero lr
+ self.min_lr = min_lr
+ super(PolyLR, self).__init__(optimizer, last_epoch)
+
+ def get_lr(self):
+ return [ max( base_lr * ( 1 - self.last_epoch/self.max_iters )**self.power, self.min_lr)
+ for base_lr in self.base_lrs]
\ No newline at end of file
diff --git a/DeepLabV3Plus-Pytorch/utils/utils.py b/DeepLabV3Plus-Pytorch/utils/utils.py
new file mode 100644
index 0000000..b5be062
--- /dev/null
+++ b/DeepLabV3Plus-Pytorch/utils/utils.py
@@ -0,0 +1,55 @@
+from torchvision.transforms.functional import normalize
+import torch.nn as nn
+import numpy as np
+import os
+
+def denormalize(tensor, mean, std):
+ mean = np.array(mean)
+ std = np.array(std)
+
+ _mean = -mean/std
+ _std = 1/std
+ return normalize(tensor, _mean, _std)
+
+class Denormalize(object):
+ def __init__(self, mean, std):
+ mean = np.array(mean)
+ std = np.array(std)
+ self._mean = -mean/std
+ self._std = 1/std
+
+ def __call__(self, tensor):
+ if isinstance(tensor, np.ndarray):
+ return (tensor - self._mean.reshape(-1,1,1)) / self._std.reshape(-1,1,1)
+ return normalize(tensor, self._mean, self._std)
+
+def set_bn_momentum(model, momentum=0.1):
+ for m in model.modules():
+ if isinstance(m, nn.BatchNorm2d):
+ m.momentum = momentum
+
+def fix_bn(model):
+ for m in model.modules():
+ if isinstance(m, nn.BatchNorm2d):
+ m.eval()
+
+def mkdir(path):
+ if not os.path.exists(path):
+ os.mkdir(path)
+
+class AverageMeter(object):
+ """Computes and stores the average and current value"""
+ def __init__(self):
+ self.reset()
+
+ def reset(self):
+ self.val = 0
+ self.avg = 0
+ self.sum = 0
+ self.count = 0
+
+ def update(self, val, n=1):
+ self.val = val
+ self.sum += val * n
+ self.count += n
+ self.avg = self.sum / self.count
diff --git a/DeepLabV3Plus-Pytorch/utils/visualizer.py b/DeepLabV3Plus-Pytorch/utils/visualizer.py
new file mode 100644
index 0000000..d1280e2
--- /dev/null
+++ b/DeepLabV3Plus-Pytorch/utils/visualizer.py
@@ -0,0 +1,87 @@
+from visdom import Visdom
+import json
+
+class Visualizer(object):
+ """ Visualizer
+ """
+ def __init__(self, port='13579', env='main', id=None):
+ #self.cur_win = {}
+ self.vis = Visdom(port=port, env=env)
+ self.id = id
+ self.env = env
+ # Restore
+ #ori_win = self.vis.get_window_data()
+ #ori_win = json.loads(ori_win)
+ #print(ori_win)
+ #self.cur_win = { v['title']: k for k, v in ori_win.items() }
+
+ def vis_scalar(self, name, x, y, opts=None):
+ if not isinstance(x, list):
+ x = [x]
+ if not isinstance(y, list):
+ y = [y]
+
+ if self.id is not None:
+ name = "[%s]"%self.id + name
+ default_opts = { 'title': name }
+ if opts is not None:
+ default_opts.update(opts)
+
+ #win = self.cur_win.get(name, None)
+ #if win is not None:
+ self.vis.line( X=x, Y=y, win=name, opts=default_opts, update='append')
+ #else:
+ # self.cur_win[name] = self.vis.line( X=x, Y=y, opts=default_opts)
+
+ def vis_image(self, name, img, env=None, opts=None):
+ """ vis image in visdom
+ """
+ if env is None:
+ env = self.env
+ if self.id is not None:
+ name = "[%s]"%self.id + name
+ #win = self.cur_win.get(name, None)
+ default_opts = { 'title': name }
+ if opts is not None:
+ default_opts.update(opts)
+ #if win is not None:
+ self.vis.image( img=img, win=name, opts=opts, env=env )
+ #else:
+ # self.cur_win[name] = self.vis.image( img=img, opts=default_opts, env=env )
+
+ def vis_table(self, name, tbl, opts=None):
+ #win = self.cur_win.get(name, None)
+
+ tbl_str = " "
+ tbl_str+=" \
+ Term | \
+ Value | \
+
"
+ for k, v in tbl.items():
+ tbl_str+= " \
+ %s | \
+ %s | \
+
"%(k, v)
+
+ tbl_str+="
"
+
+ default_opts = { 'title': name }
+ if opts is not None:
+ default_opts.update(opts)
+ #if win is not None:
+ self.vis.text(tbl_str, win=name, opts=default_opts)
+ #else:
+ #self.cur_win[name] = self.vis.text(tbl_str, opts=default_opts)
+
+
+if __name__=='__main__':
+ import numpy as np
+ vis = Visualizer(port=35588, env='main')
+ tbl = {"lr": 214, "momentum": 0.9}
+ vis.vis_table("test_table", tbl)
+ tbl = {"lr": 244444, "momentum": 0.9, "haha": "hoho"}
+ vis.vis_table("test_table", tbl)
+
+ vis.vis_scalar(name='loss', x=0, y=1)
+ vis.vis_scalar(name='loss', x=2, y=4)
+ vis.vis_scalar(name='loss', x=4, y=6)
\ No newline at end of file
diff --git a/README.md b/README.md
index 9053dc2..24598bd 100644
--- a/README.md
+++ b/README.md
@@ -8,6 +8,8 @@ Discriminative Region Suppression for Weakly-Supervised Semantic Segmentation [[
We propose the discriminative region suppression (DRS) module that is a simple yet effective method to expand object activation regions. DRS suppresses the attention on discriminative regions and spreads it to adjacent non-discriminative regions, generating dense localization maps.
+[2021.06.10] we support DeepLab-V3 segmentation network!
+
![DRS module](https://github.com/qjadud1994/DRS/blob/main/docs/DRS_module.png)
@@ -57,6 +59,8 @@ bash run.sh
## Training the DeepLab-V2 using pseudo labels
We adopt the DeepLab-V2 pytorch implementation from https://github.com/kazuto1011/deeplab-pytorch.
+* According to the [DeepLab-V2 pytorch implementation](https://github.com/kazuto1011/deeplab-pytorch#download-pre-trained-caffemodels) , we requires an initial weights [[download]](https://drive.google.com/file/d/1Wj8Maj9KGQgwtDfvIp8FChsdAIgDvliT/view?usp=sharing).
+
~~~
cd DeepLab-V2-PyTorch/
@@ -70,13 +74,30 @@ bash train.sh
bash eval.sh
~~~
+## Training the DeepLab-V3+ using pseudo labels
+We adopt the DeepLab-V3+ pytorch implementation from https://github.com/VainF/DeepLabV3Plus-Pytorch.
+
+Note that **DeepLab-V2** suffers from the small batch issue, therefore, they utilize COCO pretrained weight and freeze batch-normalization layers; DeepLab-V2 without COCO-pretrained weight cannot reproduce their performance even in fully-supervised setting.
+
+In contrast, **DeepLab-V3 does not require the COCO-pretrained weight** due to the recent large memory GPUs and Synchronized BatchNorm.
+We argue that the choice of DeepLab-V3 network is more reasonable and better to measure the quality of pseudo labels.
+
+~~~
+cd DeepLabV3Plus-Pytorch/
+
+# training & evaluation the DeepLab-V3+ using pseudo labels
+vi run.sh # modify the dataset path --data_root
+bash run.sh
+~~~
+
| Model | mIoU | mIoU + CRF | pretrained |
| :----: | :----: | :----: | :----: |
| DeepLab-V2 with ResNet-101 | 69.4% | 70.4% | [[link]](https://drive.google.com/drive/folders/1zJnRI5WRnv4cL9XY5jAojwIcO7MrUwun?usp=sharing)
+| DeepLab-V3+ with ResNet-101 | 70.4% | 71.0% | [[link]](https://drive.google.com/file/d/1W1LV3gvBPRr2lIlWdvqZ-cs87qYT8Nax/view?usp=sharing)
* Note that the pretrained weight path
`./DeepLab-V2-Pytorch/data/models/Deeplabv2_pseudo_segmentation_labels/deeplabv2_resnet101_msc/train_cls/checkpoint_final.pth`
-* According to the [DeepLab-V2 pytorch implementation](https://github.com/kazuto1011/deeplab-pytorch#download-pre-trained-caffemodels) we used, we requires an initial weights [[download]](https://drive.google.com/file/d/1Wj8Maj9KGQgwtDfvIp8FChsdAIgDvliT/view?usp=sharing).
+