├── .gitignore
├── README.md
├── gen_pgt.py
├── infer_AuxAff.py
├── iter_learn.sh
├── main.py
├── mis
├── example.jpg
├── framework.jpg
├── framework2.jpg
├── sota_coco.png
└── sota_voc.png
├── network
├── AuxSegNet.py
├── non_local.py
└── resnet38d.py
├── prerequisite.txt
├── step
├── gen_pgt.py
├── infer_AuxAff.py
└── train_AuxAff.py
├── tool
├── exutils.py
├── imutils.py
├── pyutils.py
└── torchutils.py
├── train_AuxAff.py
└── voc12
├── cls_labels.npy
├── test.txt
├── train_aug_id.txt
└── val_id.txt
/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 | *$py.class
5 |
6 | # C extensions
7 | *.so
8 |
9 | # Distribution / packaging
10 | .Python
11 | build/
12 | develop-eggs/
13 | dist/
14 | downloads/
15 | eggs/
16 | .eggs/
17 | lib/
18 | lib64/
19 | parts/
20 | sdist/
21 | var/
22 | wheels/
23 | pip-wheel-metadata/
24 | share/python-wheels/
25 | *.egg-info/
26 | .installed.cfg
27 | *.egg
28 | MANIFEST
29 |
30 | # PyInstaller
31 | # Usually these files are written by a python script from a template
32 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
33 | *.manifest
34 | *.spec
35 |
36 | # Installer logs
37 | pip-log.txt
38 | pip-delete-this-directory.txt
39 |
40 | # Unit test / coverage reports
41 | htmlcov/
42 | .tox/
43 | .nox/
44 | .coverage
45 | .coverage.*
46 | .cache
47 | nosetests.xml
48 | coverage.xml
49 | *.cover
50 | *.py,cover
51 | .hypothesis/
52 | .pytest_cache/
53 |
54 | # Translations
55 | *.mo
56 | *.pot
57 |
58 | # Django stuff:
59 | *.log
60 | local_settings.py
61 | db.sqlite3
62 | db.sqlite3-journal
63 |
64 | # Flask stuff:
65 | instance/
66 | .webassets-cache
67 |
68 | # Scrapy stuff:
69 | .scrapy
70 |
71 | # Sphinx documentation
72 | docs/_build/
73 |
74 | # PyBuilder
75 | target/
76 |
77 | # Jupyter Notebook
78 | .ipynb_checkpoints
79 |
80 | # IPython
81 | profile_default/
82 | ipython_config.py
83 |
84 | # pyenv
85 | .python-version
86 |
87 | # pipenv
88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies
90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not
91 | # install all needed dependencies.
92 | #Pipfile.lock
93 |
94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow
95 | __pypackages__/
96 |
97 | # Celery stuff
98 | celerybeat-schedule
99 | celerybeat.pid
100 |
101 | # SageMath parsed files
102 | *.sage.py
103 |
104 | # Environments
105 | .env
106 | .venv
107 | env/
108 | venv/
109 | ENV/
110 | env.bak/
111 | venv.bak/
112 |
113 | # Spyder project settings
114 | .spyderproject
115 | .spyproject
116 |
117 | # Rope project settings
118 | .ropeproject
119 |
120 | # mkdocs documentation
121 | /site
122 |
123 | # mypy
124 | .mypy_cache/
125 | .dmypy.json
126 | dmypy.json
127 |
128 | # Pyre type checker
129 | .pyre/
130 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # AuxSegNet
2 |
3 | The pytorch code for our ICCV 2021 paper [Leveraging Auxiliary Tasks with Affinity Learning for Weakly Supervised Semantic Segmentation](https://arxiv.org/abs/2107.11787).
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | ## Prerequisite
14 | - Ubuntu 18.04, with Python 3.6 and the following python dependencies.
15 | ```
16 | pip install -r prerequisite.txt
17 | ```
18 | - Download [the PASCAL VOC 2012 development kit](http://host.robots.ox.ac.uk/pascal/VOC/voc2012).
19 |
20 | ## Usage
21 |
22 |
23 | #### 1. Prepare initial pseudo labels
24 | - Off-the-shelf saliency maps used as the initial saliency pseudo labels. [[DSS]](https://drive.google.com/open?id=1Ls2HBtg3jUiuk3WUuMtdUOVUFCgvE8IX)
25 | - Extract the class activation maps (CAM) from a pre-trained single-task classification network. [[ResNet38]](https://drive.google.com/file/d/1xESB7017zlZHqxEWuh1Rb89UhjTGIKOA/view?usp=sharing)
26 | - Generate the initial pseudo segmentation labels using the above saliency and CAM maps via [[heuristic fusion]](https://github.com/xulianuwa/AuxSegNet/blob/597506a4f44cca81d11c986217e5318361e8f65e/tool/imutils.py#L36).
27 | #### 2. Train the AuxSegNet
28 |
29 | ```
30 | python train_AuxAff.py --img_path 'Path to the training images'\
31 | --seg_pgt_path 'Path to the pseudo segmentation labels' \
32 | --sal_pgt_path 'Path to the pseudo saliency labels' \
33 | --init_weights 'Path to the initialization weights' \
34 | --save_path 'Path to save the trained AuxSegNet model'
35 | ```
36 |
37 |
38 | #### 3. Pseudo label updating
39 | ```
40 | python gen_pgt.py --weights 'path to the trained AuxSegNet weights'\
41 | --img_path 'Path to the training images'\
42 | --SALpath 'Path to the pre-trained saliency maps' \
43 | --seg_pgt_path 'Path to save updated pseudo segmentation labels' \
44 | --sal_pgt_path 'Path to save updated pseudo saliency labels'
45 | ```
46 | #### 4. Iterate Step 2 and 3
47 |
48 | #### (Optional) Integrated iterative model learning and label updating (Step 2-4)
49 | ```
50 | bash iter_learn.sh
51 | ```
52 | #### 5. Inference
53 | ```
54 | python infer_AuxAff.py --img_path 'Path to the training images'\
55 | --weights 'Path to the trained AuxSegNet weights'\
56 | --save_path 'Path to save the segmentation results'
57 |
58 | ```
59 | ## Performance comparison with SOTA
60 |
61 | Segmentation results on the PASCAL VOC 2012 dataset
62 |
63 |
64 |
65 |
66 |
67 | [comment]: <> (| Method | Val (mIoU) | Test (mIoU) | )
68 |
69 | [comment]: <> (| ------------- |:-------------:|:-----:|)
70 |
71 | [comment]: <> (|ICD (CVPR20)|67.8|68.0|)
72 |
73 | [comment]: <> (|Zhang et al. (ECCV20)|66.6|66.7|)
74 |
75 | [comment]: <> (|Sun et al. (ECCV20)|66.2|66.9|)
76 |
77 | [comment]: <> (| AuxSegNet (ours) | **69.0** | **68.6** | )
78 |
79 | Segmentation results on the MS COCO dataset
80 |
81 |
82 |
83 |
84 |
85 | ## Citation
86 | Please consider citing our paper if the code is helpful in your research and development.
87 | ```
88 | @inproceedings{xu2021leveraging,
89 | title={Leveraging Auxiliary Tasks with Affinity Learning for Weakly Supervised Semantic Segmentation},
90 | author={Xu, Lian and Ouyang, Wanli and Bennamoun, Mohammed and Boussaid, Farid and Sohel, Ferdous and Xu, Dan},
91 | booktitle={Proceedings of the IEEE/CVF International Conference on Computer Vision (ICCV)},
92 | year={2021}
93 | }
94 | ```
95 |
--------------------------------------------------------------------------------
/gen_pgt.py:
--------------------------------------------------------------------------------
1 | import torch
2 | import torch.nn.functional as F
3 | from torch.backends import cudnn
4 |
5 | cudnn.enabled = True
6 | import importlib
7 | import argparse
8 | import os.path
9 | from tqdm import tqdm
10 |
11 | from tool.imutils import fusion_cam, put_palette, crf_for_sal, save_as_png
12 |
13 | import cv2
14 | import numpy as np
15 | from pathlib import Path
16 |
17 |
18 | if __name__ == '__main__':
19 |
20 | parser = argparse.ArgumentParser()
21 | parser.add_argument("--gpu_id", type=str, default='0', help='GPU_id')
22 | parser.add_argument("--weights", default="", type=str)
23 | parser.add_argument("--network", default="AuxSegNet", type=str)
24 | parser.add_argument("--list_path", default="./voc12/train_aug_id.txt", type=str)
25 | parser.add_argument("--num_classes", default=21, type=int)
26 |
27 | parser.add_argument("--sal_pgt_path", default=None, type=str)
28 | parser.add_argument("--seg_pgt_path", default=None, type=str)
29 | parser.add_argument("--SALpath", default=None, type=str)
30 | parser.add_argument("--img_path", default="", type=str)
31 |
32 |
33 | args = parser.parse_args()
34 |
35 | gpu_id = args.gpu_id
36 | os.environ["CUDA_VISIBLE_DEVICES"] = gpu_id
37 |
38 | cls_labels_dict = np.load('voc12/cls_labels.npy', allow_pickle=True).item()
39 |
40 | Path(args.sal_pgt_path).mkdir(parents=True, exist_ok=True)
41 | Path(args.seg_pgt_path).mkdir(parents=True, exist_ok=True)
42 |
43 | model = getattr(importlib.import_module('network.' + args.network), 'SegNet')(num_classes=args.num_classes)
44 |
45 | model.load_state_dict(torch.load(args.weights))
46 | model.eval()
47 | model.cuda()
48 |
49 | im_path = args.img_path
50 | img_list = open(args.list_path).readlines()
51 |
52 | with torch.no_grad():
53 | for idx in tqdm(range(len(img_list))):
54 | i = img_list[idx]
55 | img_temp = cv2.imread(os.path.join(im_path, i.strip() + '.jpg'))
56 | img_temp = cv2.cvtColor(img_temp, cv2.COLOR_BGR2RGB).astype(np.float)
57 | img_original = img_temp.astype(np.uint8)
58 | img_temp[:, :, 0] = (img_temp[:, :, 0] / 255. - 0.485) / 0.229
59 | img_temp[:, :, 1] = (img_temp[:, :, 1] / 255. - 0.456) / 0.224
60 | img_temp[:, :, 2] = (img_temp[:, :, 2] / 255. - 0.406) / 0.225
61 |
62 | sal_temp_np = cv2.imread(os.path.join(args.SALpath, i.strip() + '.png'), 0) / 255.
63 | sal_temp = torch.from_numpy(sal_temp_np[np.newaxis, :]).cuda()
64 |
65 | img_label = cls_labels_dict[i.strip()]
66 | label_i = cls_labels_dict[i.strip()]
67 | label_i = torch.from_numpy(label_i)
68 | label_i = label_i.unsqueeze(0).cuda()
69 | input = torch.from_numpy(img_temp[np.newaxis, :].transpose(0, 3, 1, 2)).float().cuda()
70 | N, C, H, W = input.size()
71 |
72 | _, cam, b_mask, ref_bmask, init_seg, seg, ct_aff = model(x=input.cuda(), require_cam=True)
73 |
74 | cam = F.relu(cam.clone())
75 | cam = cam / (torch.max(torch.max(cam, dim=2, keepdim=True)[0], dim=3, keepdim=True)[0] + 1e-5)
76 | refined_cam = cam.view(cam.size(0), cam.size(1), -1).permute(0, 2, 1).contiguous()
77 | refined_cam = torch.matmul(ct_aff, refined_cam)
78 | refined_cam = refined_cam.permute(0, 2, 1).contiguous().view(*cam.size())
79 | refined_cam = F.interpolate(refined_cam, size=(H,W), mode='bilinear', align_corners=False)
80 |
81 | ref_bmask = F.sigmoid(ref_bmask)
82 | ref_sal = F.interpolate(ref_bmask, size=(H, W), mode='bilinear', align_corners=False)
83 | ref_sal_np = ref_sal.detach().cpu().numpy().squeeze()
84 | fused_sal = (ref_sal_np + sal_temp_np) / 2
85 | fused_sal = crf_for_sal(img_original, fused_sal)
86 | save_as_png(fused_sal.squeeze(), i.strip(), args.sal_pgt_path)
87 | updated_sal = torch.from_numpy(fused_sal[np.newaxis, :]).cuda()
88 |
89 | pgt = fusion_cam(refined_cam, updated_sal, label_i, args, [i.strip()])
90 | pgt_np = pgt.detach().cpu().numpy().squeeze()
91 | save_name = os.path.join(args.seg_pgt_path, i.strip() + '.png')
92 | put_palette(pgt_np, save_name)
--------------------------------------------------------------------------------
/infer_AuxAff.py:
--------------------------------------------------------------------------------
1 | import numpy as np
2 | import torch
3 | from torch.backends import cudnn
4 | cudnn.enabled = True
5 | import importlib
6 | from tool import imutils
7 | import argparse
8 | import cv2
9 | import os.path
10 | import torch.nn.functional as F
11 | from tqdm import tqdm
12 | from pathlib import Path
13 |
14 | def _crf_with_alpha(pred_prob, ori_img):
15 | crf_score = imutils.crf_inference_inf(ori_img, pred_prob, labels=21)
16 | return crf_score
17 |
18 | def str2bool(v):
19 | if v.lower() in ('yes','true','t','y','1','True'):
20 | return True
21 | elif v.lower() in ('no','false','f','n','0','False'):
22 | return False
23 |
24 |
25 | if __name__ == '__main__':
26 |
27 | parser = argparse.ArgumentParser()
28 | parser.add_argument('--gpu_id', type=str, default='0', help='GPU_id')
29 | parser.add_argument("--weights", default="", type=str)
30 | parser.add_argument("--network", default="AuxSegNet", type=str)
31 | parser.add_argument("--save_path", default=None, type=str)
32 | parser.add_argument("--list_path", default="./voc12/val_id.txt", type=str)
33 | parser.add_argument("--img_path", default="", type=str)
34 | parser.add_argument("--num_classes", default=21, type=int)
35 | parser.add_argument("--use_crf", default=False, type=str2bool)
36 | args = parser.parse_args()
37 |
38 | gpu_id = args.gpu_id
39 | os.environ["CUDA_VISIBLE_DEVICES"] = gpu_id
40 |
41 | Path(args.save_path).mkdir(parents=True, exist_ok=True)
42 |
43 | model = getattr(importlib.import_module('network.' + args.network), 'SegNet')(num_classes=args.num_classes)
44 |
45 | model.load_state_dict(torch.load(args.weights))
46 | model.eval()
47 | model.cuda()
48 | im_path = args.img_path
49 | img_list = open(args.list_path).readlines()
50 |
51 | with torch.no_grad():
52 | for idx in tqdm(range(len(img_list))):
53 | i = img_list[idx]
54 |
55 | img_temp = cv2.imread(os.path.join(im_path, i.strip() + '.jpg'))
56 | img_temp = cv2.cvtColor(img_temp, cv2.COLOR_BGR2RGB).astype(np.float)
57 | img_original = img_temp.astype(np.uint8)
58 |
59 | img_temp[:, :, 0] = (img_temp[:, :, 0] / 255. - 0.485) / 0.229
60 | img_temp[:, :, 1] = (img_temp[:, :, 1] / 255. - 0.456) / 0.224
61 | img_temp[:, :, 2] = (img_temp[:, :, 2] / 255. - 0.406) / 0.225
62 |
63 | input = torch.from_numpy(img_temp[np.newaxis, :].transpose(0, 3, 1, 2)).float().cuda()
64 |
65 | N, C, H, W = input.size()
66 | init_prob, prob = model(x=input, require_cls=False, require_sal=False)
67 |
68 | prob = F.interpolate(prob, (H, W), mode='bilinear', align_corners=False)
69 | prob = F.softmax(prob, dim=1)
70 | output = prob.cpu().data[0].numpy()
71 |
72 | if args.use_crf:
73 | crf_output = _crf_with_alpha(output, img_original)
74 | pred = np.argmax(crf_output, 0)
75 | else:
76 | pred = np.argmax(output, axis=0)
77 |
78 | save_path = os.path.join(args.save_path, i.strip() + '.png')
79 | cv2.imwrite(save_path, pred.astype(np.uint8))
--------------------------------------------------------------------------------
/iter_learn.sh:
--------------------------------------------------------------------------------
1 | python main.py --init_weights \
2 | --image_path \
3 | --init_salpgt_path \
4 | --init_segpgt_path \
5 | --model_path \
6 | --sal_pgt_path \
7 | --seg_pgt_path \
8 | --seg_output_path
--------------------------------------------------------------------------------
/main.py:
--------------------------------------------------------------------------------
1 | from torch.backends import cudnn
2 | cudnn.enabled = True
3 | import argparse
4 | import os
5 | import step.train_AuxAff, step.gen_pgt, step.infer_AuxAff
6 |
7 |
8 | def str2bool(v):
9 | if v.lower() in ('yes','true','t','y','1','True'):
10 | return True
11 | elif v.lower() in ('no','false','f','n','0','False'):
12 | return False
13 |
14 | if __name__ == '__main__':
15 |
16 | parser = argparse.ArgumentParser()
17 | parser.add_argument('--gpu_id', type=str, default='0', help='GPU_id')
18 |
19 | # Dataset parameters
20 | parser.add_argument("--train_list", default="voc12/train_aug_id.txt", type=str)
21 | parser.add_argument("--test_list", default="voc12/val_id.txt", type=str)
22 | parser.add_argument("--image_path", default="", type=str)
23 | parser.add_argument("--init_salpgt_path", default="", type=str, help='off-the-shelf saliency maps')
24 | parser.add_argument("--init_segpgt_path", default="", type=str, help='initial semantic segmentation pseudo label maps')
25 | parser.add_argument("--num_classes", default=21, type=int)
26 |
27 | # Parameters for training AuxSegNet
28 | parser.add_argument("--network", default='AuxSegNet', type=str)
29 | parser.add_argument("--batch_size", default=4, type=int)
30 | parser.add_argument("--num_epochs", default=15, type=int)
31 | parser.add_argument("--lr", default=0.0007, type=float)
32 | parser.add_argument("--num_workers", default=16, type=int)
33 | parser.add_argument("--wt_dec", default=1e-5, type=float)
34 | parser.add_argument("--init_weights", default='', type=str)
35 |
36 | parser.add_argument("--session_name", default="AuxSegNet_", type=str)
37 | parser.add_argument("--crop_size", default=321, type=int)
38 | parser.add_argument('--print_intervals', type=int, default=50)
39 |
40 | parser.add_argument('--sal_loss_weight', type=float, default=1.0)
41 | parser.add_argument('--cls_loss_weight', type=float, default=1.0)
42 | parser.add_argument('--seg_loss_weight', type=float, default=1.0)
43 |
44 | parser.add_argument("--num_steps", default=4, type=int, help='number of steps for the iterative affinity learning')
45 |
46 | # Parameters for testing AuxSegNet
47 | parser.add_argument("--use_crf", default=False, type=str2bool)
48 |
49 | # Output paths
50 | parser.add_argument("--model_path", default=None, type=str, help='path to save trained AuxSegNet models')
51 | parser.add_argument("--sal_pgt_path", default=None, type=str, help='path to save updated saliency pgt')
52 | parser.add_argument("--seg_pgt_path", default=None, type=str, help='path to save updated semantic segmentation pgt')
53 | parser.add_argument("--seg_output_path", default=None, type=str, help='path to save semantic segmentation output results')
54 |
55 | args = parser.parse_args()
56 |
57 | for s in range(args.num_steps):
58 | if s > 0:
59 | args.init_weights = os.path.join(args.model_path, args.session_name + 's' + str(s-1) + '.pth')
60 |
61 | print(f'Training the AuxSegNet at the {s}-th step')
62 | step.train_AuxAff.run(args, step_index=s)
63 | print(f'Pseudo label updating at the {s}-th step')
64 | step.gen_pgt.run(args, step_index=s)
65 |
66 | if s == args.num_steps - 1:
67 | print('Testing the AuxSegNet')
68 | step.infer_AuxAff.run(args, step_index=s)
69 |
--------------------------------------------------------------------------------
/mis/example.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xulianuwa/AuxSegNet/9f40a5d349e2405b42a541a3534e51eb58b04077/mis/example.jpg
--------------------------------------------------------------------------------
/mis/framework.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xulianuwa/AuxSegNet/9f40a5d349e2405b42a541a3534e51eb58b04077/mis/framework.jpg
--------------------------------------------------------------------------------
/mis/framework2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xulianuwa/AuxSegNet/9f40a5d349e2405b42a541a3534e51eb58b04077/mis/framework2.jpg
--------------------------------------------------------------------------------
/mis/sota_coco.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xulianuwa/AuxSegNet/9f40a5d349e2405b42a541a3534e51eb58b04077/mis/sota_coco.png
--------------------------------------------------------------------------------
/mis/sota_voc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xulianuwa/AuxSegNet/9f40a5d349e2405b42a541a3534e51eb58b04077/mis/sota_voc.png
--------------------------------------------------------------------------------
/network/AuxSegNet.py:
--------------------------------------------------------------------------------
1 | import torch
2 | import torch.nn as nn
3 | import torch.nn.functional as F
4 | import network.resnet38d
5 | from network.non_local import NLBlock
6 |
7 |
8 | class Net(network.resnet38d.Net):
9 | def __init__(self, num_classes=21):
10 | super().__init__()
11 |
12 | self.dropout7 = torch.nn.Dropout2d(0.5)
13 |
14 | self.fc8 = nn.Conv2d(4096, num_classes - 1, (1, 1), bias=False)
15 | torch.nn.init.xavier_uniform_(self.fc8.weight)
16 |
17 | self.seg_conv1 = nn.Conv2d(4096, 128, (3, 3), padding=6, dilation=(6, 6), bias=True)
18 | torch.nn.init.xavier_uniform_(self.seg_conv1.weight)
19 |
20 | self.seg_conv2 = nn.Conv2d(128, 128, (3, 3), padding=12, dilation=(12, 12), bias=True)
21 | torch.nn.init.xavier_uniform_(self.seg_conv2.weight)
22 |
23 | self.seg_conv3 = nn.Conv2d(128, 128, (3, 3), padding=18, dilation=(18, 18), bias=True)
24 | torch.nn.init.xavier_uniform_(self.seg_conv3.weight)
25 |
26 | self.seg_conv4 = nn.Conv2d(128, num_classes, (1, 1), bias=False)
27 | torch.nn.init.xavier_uniform_(self.seg_conv4.weight)
28 |
29 | self.sal_conv1 = nn.Conv2d(4096, 128, (3, 3), padding=6, dilation=(6, 6), bias=True)
30 | torch.nn.init.xavier_uniform_(self.sal_conv1.weight)
31 |
32 | self.sal_conv2 = nn.Conv2d(128, 128, (3, 3), padding=12, dilation=(12, 12), bias=True)
33 | torch.nn.init.xavier_uniform_(self.sal_conv2.weight)
34 |
35 | self.sal_conv3 = nn.Conv2d(128, 128, (3, 3), padding=18, dilation=(18, 18), bias=True)
36 | torch.nn.init.xavier_uniform_(self.sal_conv3.weight)
37 |
38 | self.sal_conv4 = nn.Conv2d(128, 1, (1, 1), bias=False)
39 | torch.nn.init.xavier_uniform_(self.sal_conv4.weight)
40 |
41 | self.seg_att = NLBlock(in_channels=128, inter_channels=128)
42 | self.sal_att = NLBlock(in_channels=128, inter_channels=128)
43 |
44 | self.seg_g = nn.Conv2d(128, 128, (1, 1))
45 | self.seg_W = nn.Conv2d(128, 128, (1, 1))
46 | self.sal_g = nn.Conv2d(128, 128, (1, 1))
47 | self.sal_W = nn.Conv2d(128, 128, (1, 1))
48 | self.cross_att = nn.Sequential(nn.Conv2d(2, 2, (3, 3), padding=1, bias=False),
49 | nn.ReLU(),
50 | nn.Conv2d(2, 2, (1, 1)),
51 | nn.Softmax(dim=1))
52 |
53 | def forward(self, x, return_aff = False):
54 | batch_size = x.size(0)
55 |
56 | x_seg = super().forward(x)
57 | x_sal = x_seg.clone()
58 | x_cls = x_seg.clone()
59 | x_cam = x_seg.clone()
60 |
61 | x_cls = self.dropout7(x_cls)
62 | x_cls = F.avg_pool2d(
63 | x_cls, kernel_size=(x_cls.size(2), x_cls.size(3)), padding=0)
64 | x_cls = self.fc8(x_cls)
65 | x_cls = x_cls.view(x_cls.size(0), -1)
66 | cam = F.conv2d(x_cam, self.fc8.weight)
67 |
68 | x_seg = F.relu(self.seg_conv1(x_seg))
69 | x_seg = F.relu(self.seg_conv2(x_seg))
70 | seg_feats = x_seg
71 |
72 | x_sal = F.relu(self.sal_conv1(x_sal))
73 | x_sal = F.relu(self.sal_conv2(x_sal))
74 | sal_feats = x_sal
75 |
76 | seg_aff = self.seg_att(seg_feats)
77 | sal_aff = self.sal_att(sal_feats)
78 |
79 | g_seg_feats = self.seg_g(seg_feats)
80 | g_seg_feats = g_seg_feats.view(batch_size, seg_feats.size(1), -1)
81 | g_seg_feats = g_seg_feats.permute(0, 2, 1).contiguous()
82 | refined_seg_feats = torch.matmul(seg_aff, g_seg_feats)
83 | refined_seg_feats = refined_seg_feats.permute(0, 2, 1).contiguous()
84 | refined_seg_feats = refined_seg_feats.view(*seg_feats.size())
85 | W_seg_feats = self.seg_W(refined_seg_feats)
86 | seg_feats = seg_feats + W_seg_feats
87 |
88 | seg_feats = F.relu(self.seg_conv3(seg_feats))
89 | init_seg_mask = self.seg_conv4(seg_feats)
90 |
91 | g_sal_feats = self.sal_g(sal_feats)
92 | g_sal_feats = g_sal_feats.view(batch_size, sal_feats.size(1), -1).permute(0, 2, 1).contiguous()
93 | refined_sal_feats = torch.matmul(sal_aff, g_sal_feats)
94 | refined_sal_feats = refined_sal_feats.permute(0, 2, 1).contiguous().view(*sal_feats.size())
95 | sal_feats = sal_feats + self.sal_W(refined_sal_feats)
96 |
97 | sal_feats = F.relu(self.sal_conv3(sal_feats))
98 | init_sal_mask = self.sal_conv4(sal_feats)
99 |
100 | if len(seg_aff.size()) != 4:
101 | seg_aff = seg_aff.unsqueeze(1)
102 | sal_aff = sal_aff.unsqueeze(1)
103 |
104 | cross_aff = torch.cat((seg_aff, sal_aff), dim=1)
105 | cross_w = self.cross_att(cross_aff)
106 | cross_aff = cross_aff[:, 0] * cross_w[:, 0] + cross_aff[:, 1] * cross_w[:, 1]
107 |
108 | sal_mask = init_sal_mask.view(batch_size, init_sal_mask.size(1), -1)
109 | sal_mask = sal_mask.permute(0, 2, 1).contiguous()
110 | refined_sal_mask = torch.matmul(cross_aff, sal_mask)
111 | refined_sal_mask = refined_sal_mask.permute(0, 2, 1).contiguous().view(*init_sal_mask.size())
112 |
113 | seg_mask = init_seg_mask.view(batch_size, init_seg_mask.size(1), -1)
114 | seg_mask = seg_mask.permute(0, 2, 1).contiguous()
115 | refined_seg_mask = torch.matmul(cross_aff, seg_mask)
116 | refined_seg_mask = refined_seg_mask.permute(0, 2, 1).contiguous().view(*init_seg_mask.size())
117 |
118 | if return_aff:
119 | return x_cls, cam, init_sal_mask, refined_sal_mask, init_seg_mask, refined_seg_mask, cross_aff
120 | else:
121 | return x_cls, cam, init_sal_mask, refined_sal_mask, init_seg_mask, refined_seg_mask
122 |
123 |
124 | class SegNet(Net):
125 | def __init__(self, num_classes=21):
126 | super().__init__(num_classes=num_classes)
127 |
128 | def forward(self, x, require_seg=True, require_cls=True, require_sal=True, require_cam=False):
129 |
130 | if require_seg == True and require_cls == True and require_sal == True and require_cam == False:
131 | x_cls, cam, init_sal, refined_sal, init_seg, refined_seg = super().forward(x)
132 | return x_cls, init_sal, refined_sal, init_seg, refined_seg
133 |
134 | if require_seg == True and require_cls == True and require_sal == True and require_cam == True:
135 | x_cls, cam, init_sal, refined_sal, init_seg, refined_seg, aff = super().forward(x, return_aff=True)
136 | return x_cls, cam, init_sal, refined_sal, init_seg, refined_seg, aff
137 |
138 | if require_cls == False and require_seg == True and require_sal == False:
139 | x_cls, cam, init_sal, refined_sal, init_seg, refined_seg = super().forward(x)
140 | return init_seg, refined_seg
141 |
142 | def get_10x_lr_params(self):
143 | for name, param in self.named_parameters():
144 | if 'seg' in name or 'sal' in name or 'fc8' in name:
145 | yield param
146 |
147 | def get_1x_lr_params(self):
148 | for name, param in self.named_parameters():
149 | if 'seg' not in name and 'sal' not in name and 'fc8' not in name:
150 | yield param
--------------------------------------------------------------------------------
/network/non_local.py:
--------------------------------------------------------------------------------
1 | from torch import nn
2 | from torch.nn import functional as F
3 | import torch
4 |
5 | class NLBlock(nn.Module):
6 | def __init__(self, in_channels, inter_channels=None, bn_layer=True):
7 | super(NLBlock, self).__init__()
8 | self.in_channels = in_channels
9 | self.inter_channels = inter_channels
10 | self.g = nn.Conv2d(in_channels=self.in_channels, out_channels=self.inter_channels, kernel_size=(1,1))
11 |
12 | if bn_layer:
13 | self.W_z = nn.Sequential(
14 | nn.Conv2d(in_channels=self.inter_channels, out_channels=self.in_channels, kernel_size=(1,1)),
15 | nn.BatchNorm2d(self.in_channels)
16 | )
17 | nn.init.constant_(self.W_z[1].weight, 0)
18 | nn.init.constant_(self.W_z[1].bias, 0)
19 | else:
20 | self.W_z = nn.Conv2d(in_channels=self.inter_channels, out_channels=self.in_channels, kernel_size=(1,1))
21 | nn.init.constant_(self.W_z.weight, 0)
22 | nn.init.constant_(self.W_z.bias, 0)
23 |
24 | self.theta = nn.Conv2d(in_channels=self.in_channels, out_channels=self.inter_channels, kernel_size=(1,1))
25 | self.phi = nn.Conv2d(in_channels=self.in_channels, out_channels=self.inter_channels, kernel_size=(1,1))
26 |
27 | def forward(self, x):
28 | batch_size = x.size(0)
29 | theta_x = self.theta(x).view(batch_size, self.inter_channels, -1)
30 | phi_x = self.phi(x).view(batch_size, self.inter_channels, -1)
31 | theta_x = theta_x.permute(0, 2, 1)
32 | f = torch.matmul(theta_x, phi_x)
33 | f_div_C = F.softmax(f, dim=-1)
34 | return f_div_C
35 |
--------------------------------------------------------------------------------
/network/resnet38d.py:
--------------------------------------------------------------------------------
1 | import torch
2 | from torch import nn
3 | import numpy as np
4 |
5 | import torch.nn.functional as F
6 |
7 | class ResBlock(nn.Module):
8 | def __init__(self, in_channels, mid_channels, out_channels, stride=1, first_dilation=None, dilation=1):
9 | super(ResBlock, self).__init__()
10 |
11 | self.same_shape = (in_channels == out_channels and stride == 1)
12 |
13 | if first_dilation == None: first_dilation = dilation
14 |
15 | self.bn_branch2a = nn.BatchNorm2d(in_channels)
16 |
17 | self.conv_branch2a = nn.Conv2d(in_channels, mid_channels, 3, stride,
18 | padding=first_dilation, dilation=first_dilation, bias=False)
19 |
20 | self.bn_branch2b1 = nn.BatchNorm2d(mid_channels)
21 |
22 | self.conv_branch2b1 = nn.Conv2d(mid_channels, out_channels, 3, padding=dilation, dilation=dilation, bias=False)
23 |
24 | if not self.same_shape:
25 | self.conv_branch1 = nn.Conv2d(in_channels, out_channels, 1, stride, bias=False)
26 |
27 | def forward(self, x, get_x_bn_relu=False):
28 |
29 | branch2 = self.bn_branch2a(x)
30 | branch2 = F.relu(branch2)
31 |
32 | x_bn_relu = branch2
33 |
34 | if not self.same_shape:
35 | branch1 = self.conv_branch1(branch2)
36 | else:
37 | branch1 = x
38 |
39 | branch2 = self.conv_branch2a(branch2)
40 | branch2 = self.bn_branch2b1(branch2)
41 | branch2 = F.relu(branch2)
42 | branch2 = self.conv_branch2b1(branch2)
43 |
44 | x = branch1 + branch2
45 |
46 | if get_x_bn_relu:
47 | return x, x_bn_relu
48 |
49 | return x
50 |
51 | def __call__(self, x, get_x_bn_relu=False):
52 | return self.forward(x, get_x_bn_relu=get_x_bn_relu)
53 |
54 | class ResBlock_bot(nn.Module):
55 | def __init__(self, in_channels, out_channels, stride=1, dilation=1, dropout=0.):
56 | super(ResBlock_bot, self).__init__()
57 |
58 | self.same_shape = (in_channels == out_channels and stride == 1)
59 |
60 | self.bn_branch2a = nn.BatchNorm2d(in_channels)
61 | self.conv_branch2a = nn.Conv2d(in_channels, out_channels//4, 1, stride, bias=False)
62 |
63 | self.bn_branch2b1 = nn.BatchNorm2d(out_channels//4)
64 | self.dropout_2b1 = torch.nn.Dropout2d(dropout)
65 | self.conv_branch2b1 = nn.Conv2d(out_channels//4, out_channels//2, 3, padding=dilation, dilation=dilation, bias=False)
66 |
67 | self.bn_branch2b2 = nn.BatchNorm2d(out_channels//2)
68 | self.dropout_2b2 = torch.nn.Dropout2d(dropout)
69 | self.conv_branch2b2 = nn.Conv2d(out_channels//2, out_channels, 1, bias=False)
70 |
71 | if not self.same_shape:
72 | self.conv_branch1 = nn.Conv2d(in_channels, out_channels, 1, stride, bias=False)
73 |
74 | def forward(self, x, get_x_bn_relu=False):
75 |
76 | branch2 = self.bn_branch2a(x)
77 | branch2 = F.relu(branch2)
78 | x_bn_relu = branch2
79 |
80 | branch1 = self.conv_branch1(branch2)
81 |
82 | branch2 = self.conv_branch2a(branch2)
83 |
84 | branch2 = self.bn_branch2b1(branch2)
85 | branch2 = F.relu(branch2)
86 | branch2 = self.dropout_2b1(branch2)
87 | branch2 = self.conv_branch2b1(branch2)
88 |
89 | branch2 = self.bn_branch2b2(branch2)
90 | branch2 = F.relu(branch2)
91 | branch2 = self.dropout_2b2(branch2)
92 | branch2 = self.conv_branch2b2(branch2)
93 |
94 | x = branch1 + branch2
95 |
96 | if get_x_bn_relu:
97 | return x, x_bn_relu
98 |
99 | return x
100 |
101 | def __call__(self, x, get_x_bn_relu=False):
102 | return self.forward(x, get_x_bn_relu=get_x_bn_relu)
103 |
104 | class Normalize():
105 | def __init__(self, mean = (0.485, 0.456, 0.406), std = (0.229, 0.224, 0.225)):
106 |
107 | self.mean = mean
108 | self.std = std
109 |
110 | def __call__(self, img):
111 | imgarr = np.asarray(img)
112 | proc_img = np.empty_like(imgarr, np.float32)
113 |
114 | proc_img[..., 0] = (imgarr[..., 0] / 255. - self.mean[0]) / self.std[0]
115 | proc_img[..., 1] = (imgarr[..., 1] / 255. - self.mean[1]) / self.std[1]
116 | proc_img[..., 2] = (imgarr[..., 2] / 255. - self.mean[2]) / self.std[2]
117 |
118 | return proc_img
119 |
120 | class Net(nn.Module):
121 | def __init__(self):
122 | super(Net, self).__init__()
123 |
124 | self.conv1a = nn.Conv2d(3, 64, 3, padding=1, bias=False)
125 |
126 | self.b2 = ResBlock(64, 128, 128, stride=2)
127 | self.b2_1 = ResBlock(128, 128, 128)
128 | self.b2_2 = ResBlock(128, 128, 128)
129 |
130 | self.b3 = ResBlock(128, 256, 256, stride=2)
131 | self.b3_1 = ResBlock(256, 256, 256)
132 | self.b3_2 = ResBlock(256, 256, 256)
133 |
134 | self.b4 = ResBlock(256, 512, 512, stride=2)
135 | self.b4_1 = ResBlock(512, 512, 512)
136 | self.b4_2 = ResBlock(512, 512, 512)
137 | self.b4_3 = ResBlock(512, 512, 512)
138 | self.b4_4 = ResBlock(512, 512, 512)
139 | self.b4_5 = ResBlock(512, 512, 512)
140 |
141 | self.b5 = ResBlock(512, 512, 1024, stride=1, first_dilation=1, dilation=2)
142 | self.b5_1 = ResBlock(1024, 512, 1024, dilation=2)
143 | self.b5_2 = ResBlock(1024, 512, 1024, dilation=2)
144 |
145 | self.b6 = ResBlock_bot(1024, 2048, stride=1, dilation=4, dropout=0.3)
146 |
147 | self.b7 = ResBlock_bot(2048, 4096, dilation=4, dropout=0.5)
148 |
149 | self.bn7 = nn.BatchNorm2d(4096)
150 |
151 | self.not_training = [self.conv1a]
152 |
153 | self.normalize = Normalize()
154 |
155 | return
156 |
157 | def forward(self, x):
158 | return self.forward_as_dict(x)['conv6']
159 |
160 | def forward_as_dict(self, x):
161 |
162 | x = self.conv1a(x)
163 |
164 | x = self.b2(x)
165 | x = self.b2_1(x)
166 | x = self.b2_2(x)
167 |
168 | x = self.b3(x)
169 | x = self.b3_1(x)
170 | x = self.b3_2(x)
171 |
172 | x = self.b4(x)
173 | x = self.b4_1(x)
174 | x = self.b4_2(x)
175 | x = self.b4_3(x)
176 | x = self.b4_4(x)
177 | x = self.b4_5(x)
178 |
179 | x, conv4 = self.b5(x, get_x_bn_relu=True)
180 | x = self.b5_1(x)
181 | x = self.b5_2(x)
182 |
183 | x, conv5 = self.b6(x, get_x_bn_relu=True)
184 |
185 | x = self.b7(x)
186 | conv6 = F.relu(self.bn7(x))
187 |
188 | return dict({'conv4': conv4, 'conv5': conv5, 'conv6': conv6})
189 |
190 |
191 | def train(self, mode=True):
192 |
193 | super().train(mode)
194 |
195 | for layer in self.not_training:
196 |
197 | if isinstance(layer, torch.nn.Conv2d):
198 | layer.weight.requires_grad = False
199 |
200 | elif isinstance(layer, torch.nn.Module):
201 | for c in layer.children():
202 | c.weight.requires_grad = False
203 | if c.bias is not None:
204 | c.bias.requires_grad = False
205 |
206 | for layer in self.modules():
207 |
208 | if isinstance(layer, torch.nn.BatchNorm2d):
209 | layer.eval()
210 | layer.bias.requires_grad = False
211 | layer.weight.requires_grad = False
212 |
213 | return
214 |
215 | def convert_mxnet_to_torch(filename):
216 | import mxnet
217 |
218 | save_dict = mxnet.nd.load(filename)
219 |
220 | renamed_dict = dict()
221 |
222 | bn_param_mx_pt = {'beta': 'bias', 'gamma': 'weight', 'mean': 'running_mean', 'var': 'running_var'}
223 |
224 | for k, v in save_dict.items():
225 |
226 | v = torch.from_numpy(v.asnumpy())
227 | toks = k.split('_')
228 |
229 | if 'conv1a' in toks[0]:
230 | renamed_dict['conv1a.weight'] = v
231 |
232 | elif 'linear1000' in toks[0]:
233 | pass
234 |
235 | elif 'branch' in toks[1]:
236 |
237 | pt_name = []
238 |
239 | if toks[0][-1] != 'a':
240 | pt_name.append('b' + toks[0][-3] + '_' + toks[0][-1])
241 | else:
242 | pt_name.append('b' + toks[0][-2])
243 |
244 | if 'res' in toks[0]:
245 | layer_type = 'conv'
246 | last_name = 'weight'
247 |
248 | else: # 'bn' in toks[0]:
249 | layer_type = 'bn'
250 | last_name = bn_param_mx_pt[toks[-1]]
251 |
252 | pt_name.append(layer_type + '_' + toks[1])
253 |
254 | pt_name.append(last_name)
255 |
256 | torch_name = '.'.join(pt_name)
257 | renamed_dict[torch_name] = v
258 |
259 | else:
260 | last_name = bn_param_mx_pt[toks[-1]]
261 | renamed_dict['bn7.' + last_name] = v
262 |
263 | return renamed_dict
264 |
265 |
--------------------------------------------------------------------------------
/prerequisite.txt:
--------------------------------------------------------------------------------
1 | numpy
2 | opencv-python
3 | tqdm
4 | torch
5 | torchvision
6 | Pillow
7 | pydensecrf
--------------------------------------------------------------------------------
/step/gen_pgt.py:
--------------------------------------------------------------------------------
1 | import torch
2 | import torch.nn.functional as F
3 | from torch.backends import cudnn
4 | cudnn.enabled = True
5 | import importlib
6 | import os.path
7 | from tqdm import tqdm
8 | from tool.imutils import fusion_cam, put_palette, crf_for_sal, save_as_png
9 | import cv2
10 | import numpy as np
11 | import sys
12 | sys.path.append("..")
13 |
14 | def run(args, step_index):
15 |
16 | sal_pgt_path = os.path.join(args.sal_pgt_path, str(step_index))
17 | os.makedirs(sal_pgt_path, exist_ok=True)
18 |
19 | seg_pgt_path = os.path.join(args.seg_pgt_path, str(step_index))
20 | os.makedirs(seg_pgt_path, exist_ok=True)
21 | model_path = os.path.join(args.model_path, args.session_name + 's' + str(step_index) + '.pth')
22 |
23 | gpu_id = args.gpu_id
24 | os.environ["CUDA_VISIBLE_DEVICES"] = gpu_id
25 | cls_labels_dict = np.load('voc12/cls_labels.npy', allow_pickle=True).item()
26 |
27 | model = getattr(importlib.import_module('network.' + args.network), 'SegNet')(num_classes=args.num_classes)
28 |
29 | model.load_state_dict(torch.load(model_path))
30 | model.eval()
31 | model.cuda()
32 |
33 | im_path = args.image_path
34 | img_list = open(args.train_list).readlines()
35 |
36 | with torch.no_grad():
37 | for idx in tqdm(range(len(img_list))):
38 | i = img_list[idx]
39 | img_temp = cv2.imread(os.path.join(im_path, i.strip() + '.jpg'))
40 | img_temp = cv2.cvtColor(img_temp, cv2.COLOR_BGR2RGB).astype(np.float)
41 | img_original = img_temp.astype(np.uint8)
42 | img_temp[:, :, 0] = (img_temp[:, :, 0] / 255. - 0.485) / 0.229
43 | img_temp[:, :, 1] = (img_temp[:, :, 1] / 255. - 0.456) / 0.224
44 | img_temp[:, :, 2] = (img_temp[:, :, 2] / 255. - 0.406) / 0.225
45 |
46 | sal_temp_np = cv2.imread(os.path.join(args.init_salpgt_path, i.strip() + '.png'), 0) / 255.
47 | label_i = cls_labels_dict[i.strip()]
48 | label_i = torch.from_numpy(label_i)
49 | label_i = label_i.unsqueeze(0).cuda()
50 | input = torch.from_numpy(img_temp[np.newaxis, :].transpose(0, 3, 1, 2)).float().cuda()
51 | N, C, H, W = input.size()
52 |
53 | _, cam, b_mask, ref_bmask, init_seg, seg, ct_aff = model(x=input.cuda(), require_cam=True)
54 |
55 | cam = F.relu(cam.clone())
56 | cam = cam / (torch.max(torch.max(cam, dim=2, keepdim=True)[0], dim=3, keepdim=True)[0] + 1e-5)
57 | refined_cam = cam.view(cam.size(0), cam.size(1), -1).permute(0, 2, 1).contiguous()
58 | refined_cam = torch.matmul(ct_aff, refined_cam)
59 | refined_cam = refined_cam.permute(0, 2, 1).contiguous().view(*cam.size())
60 | refined_cam = F.interpolate(refined_cam, size=(H,W), mode='bilinear', align_corners=False)
61 |
62 | ref_bmask = F.sigmoid(ref_bmask)
63 | ref_sal = F.interpolate(ref_bmask, size=(H, W), mode='bilinear', align_corners=False)
64 | ref_sal_np = ref_sal.detach().cpu().numpy().squeeze()
65 | fused_sal = (ref_sal_np + sal_temp_np) / 2
66 | fused_sal = crf_for_sal(img_original, fused_sal)
67 | save_as_png(fused_sal.squeeze(), i.strip(), sal_pgt_path)
68 | updated_sal = torch.from_numpy(fused_sal[np.newaxis, :]).cuda()
69 |
70 | pgt = fusion_cam(refined_cam, updated_sal, label_i, args, [i.strip()])
71 | pgt_np = pgt.detach().cpu().numpy().squeeze()
72 | save_name = os.path.join(seg_pgt_path, i.strip() + '.png')
73 | put_palette(pgt_np, save_name)
--------------------------------------------------------------------------------
/step/infer_AuxAff.py:
--------------------------------------------------------------------------------
1 | import numpy as np
2 | import torch
3 | from torch.backends import cudnn
4 | cudnn.enabled = True
5 | import importlib
6 | from tool import imutils
7 | import cv2
8 | import os.path
9 | import torch.nn.functional as F
10 | from tqdm import tqdm
11 |
12 | def _crf_with_alpha(pred_prob, ori_img):
13 | crf_score = imutils.crf_inference_inf(ori_img, pred_prob, labels=21)
14 | return crf_score
15 |
16 |
17 | def run(args, step_index):
18 |
19 | seg_output_path = os.path.join(args.seg_output_path, str(step_index))
20 | os.makedirs(seg_output_path)
21 | gpu_id = args.gpu_id
22 | os.environ["CUDA_VISIBLE_DEVICES"] = gpu_id
23 | model = getattr(importlib.import_module('network.' + args.network), 'SegNet')(num_classes=args.num_classes)
24 |
25 | model_path = os.path.join(args.model_path, args.session_name + 's' + str(step_index) + '.pth')
26 | model.load_state_dict(torch.load(model_path))
27 | model.eval()
28 | model.cuda()
29 | im_path = args.image_path
30 | img_list = open(args.test_list).readlines()
31 |
32 | with torch.no_grad():
33 | for idx in tqdm(range(len(img_list))):
34 | i = img_list[idx]
35 |
36 | img_temp = cv2.imread(os.path.join(im_path, i.strip() + '.jpg'))
37 | img_temp = cv2.cvtColor(img_temp, cv2.COLOR_BGR2RGB).astype(np.float)
38 | img_original = img_temp.astype(np.uint8)
39 |
40 | img_temp[:, :, 0] = (img_temp[:, :, 0] / 255. - 0.485) / 0.229
41 | img_temp[:, :, 1] = (img_temp[:, :, 1] / 255. - 0.456) / 0.224
42 | img_temp[:, :, 2] = (img_temp[:, :, 2] / 255. - 0.406) / 0.225
43 |
44 | input = torch.from_numpy(img_temp[np.newaxis, :].transpose(0, 3, 1, 2)).float().cuda()
45 |
46 | N, C, H, W = input.size()
47 | init_prob, prob = model(x=input, require_cls=False, require_sal=False)
48 |
49 | prob = F.interpolate(prob, (H, W), mode='bilinear', align_corners=False)
50 | prob = F.softmax(prob, dim=1)
51 | output = prob.cpu().data[0].numpy()
52 |
53 | if args.use_crf:
54 | crf_output = _crf_with_alpha(output, img_original)
55 | pred = np.argmax(crf_output, 0)
56 | else:
57 | pred = np.argmax(output, axis=0)
58 |
59 | save_path = os.path.join(seg_output_path, i.strip() + '.png')
60 | cv2.imwrite(save_path, pred.astype(np.uint8))
--------------------------------------------------------------------------------
/step/train_AuxAff.py:
--------------------------------------------------------------------------------
1 | from torch.backends import cudnn
2 | cudnn.enabled = True
3 | from tool import pyutils, torchutils
4 | import importlib
5 | import tool.exutils as exutils
6 | import torch.nn.functional as F
7 | import torch
8 | import os
9 | import numpy as np
10 |
11 |
12 | def run(args, step_index):
13 | gpu_id = args.gpu_id
14 | os.environ["CUDA_VISIBLE_DEVICES"] = gpu_id
15 |
16 | save_path = args.model_path
17 | os.makedirs(save_path, exist_ok=True)
18 |
19 | pyutils.Logger(os.path.join(args.model_path, args.session_name + '.log'))
20 |
21 | criterion = torch.nn.CrossEntropyLoss(weight=None, ignore_index=255, reduction='elementwise_mean').cuda()
22 |
23 | model = getattr(importlib.import_module('network.' + args.network), 'SegNet')(num_classes=args.num_classes)
24 |
25 |
26 | weights_dict = torch.load(args.init_weights)
27 | model.load_state_dict(weights_dict, strict=False)
28 |
29 | img_list = exutils.read_file(args.train_list)
30 | train_size = len(img_list)
31 | max_step = (train_size // args.batch_size) * args.num_epochs
32 |
33 | data_list = []
34 | for i in range(200):
35 | np.random.shuffle(img_list)
36 | data_list.extend(img_list)
37 |
38 | optimizer = torchutils.PolyOptimizer_cls([
39 | {'params': model.get_1x_lr_params(), 'lr': args.lr},
40 | {'params': model.get_10x_lr_params(), 'lr': 10 * args.lr}
41 | ], lr=args.lr, weight_decay=args.wt_dec, max_step=max_step)
42 |
43 | model = torch.nn.DataParallel(model).cuda()
44 | model.train()
45 |
46 | avg_meter = pyutils.AverageMeter('loss')
47 |
48 | timer = pyutils.Timer("Session started: ")
49 |
50 | data_gen = exutils.chunker(data_list, args.batch_size)
51 |
52 | for iter in range(max_step + 1):
53 | chunk = data_gen.__next__()
54 | images, ori_images, sal_images, seg_labels, label, img_names = exutils.get_data_from_chunk(chunk, args, step_index)
55 |
56 | b, _, w, h = ori_images.shape
57 | label = label.cuda(non_blocking=True)
58 | seg_labels = seg_labels.long().cuda()
59 | sal_images = sal_images.cuda()
60 | images = images.cuda()
61 |
62 | x_cls, init_sal, refined_sal, init_seg, refined_seg = model(x=images)
63 |
64 | ##################################### image classification ###########################################
65 | cls_loss = F.multilabel_soft_margin_loss(x_cls, label)
66 |
67 | ##################################### saliency detection ###########################################
68 | init_sal = F.interpolate(init_sal, size=(w, h), mode='bilinear', align_corners=False)
69 | sal_labels = sal_images.unsqueeze(1)
70 | init_sal_loss = F.binary_cross_entropy_with_logits(init_sal, sal_labels)
71 |
72 | refined_sal = F.interpolate(refined_sal, size=(w, h), mode='bilinear', align_corners=False)
73 | refined_sal_loss = F.binary_cross_entropy_with_logits(refined_sal, sal_labels)
74 |
75 | ##################################### segmentation ###########################################
76 | init_seg = F.interpolate(init_seg, size=(w, h), mode='bilinear', align_corners=False)
77 | init_seg_loss = criterion(init_seg, seg_labels)
78 |
79 | refined_seg = F.interpolate(refined_seg, size=(w, h), mode='bilinear', align_corners=False)
80 | refined_seg_loss = criterion(refined_seg, seg_labels)
81 |
82 |
83 | loss = args.cls_loss_weight * cls_loss + args.sal_loss_weight * init_sal_loss + \
84 | args.sal_loss_weight * refined_sal_loss + args.seg_loss_weight * init_seg_loss + args.seg_loss_weight * refined_seg_loss
85 |
86 | avg_meter.add({'loss': loss.item()})
87 |
88 | optimizer.zero_grad()
89 | loss.backward()
90 | optimizer.step()
91 |
92 | if (optimizer.global_step - 1) % args.print_intervals == 0:
93 | timer.update_progress(optimizer.global_step / max_step)
94 |
95 | print('Iter:%5d/%5d' % (optimizer.global_step - 1, max_step),
96 | 'Loss:%.4f' % (avg_meter.pop('loss')),
97 | 'imps:%.1f' % ((iter + 1) * args.batch_size / timer.get_stage_elapsed()),
98 | 'Fin:%s' % (timer.str_est_finish()),
99 | 'lr: %.5f' % (optimizer.param_groups[0]['lr']), flush=True)
100 |
101 | torch.save(model.module.state_dict(), os.path.join(save_path, args.session_name + 's' + str(step_index) +'.pth'))
--------------------------------------------------------------------------------
/tool/exutils.py:
--------------------------------------------------------------------------------
1 | import numpy as np
2 | import torch
3 | import cv2
4 | import random
5 | import os
6 | import PIL.Image as Image
7 |
8 |
9 | def read_file(path_to_file):
10 | with open(path_to_file) as f:
11 | img_list = []
12 | for line in f:
13 | img_list.append(line.strip())
14 | return img_list
15 |
16 |
17 | def chunker(seq, size):
18 | return (seq[pos:pos + size] for pos in range(0, len(seq), size))
19 |
20 |
21 | def flip(I, flip_p):
22 | if flip_p > 0.5:
23 | return np.fliplr(I)
24 | else:
25 | return I
26 |
27 |
28 | def scale_im(img_temp, scale):
29 | new_dims = (int(img_temp.shape[1] * scale), int(img_temp.shape[0] * scale))
30 | return cv2.resize(img_temp, new_dims).astype(float)
31 |
32 |
33 | def scale_gt(img_temp, scale):
34 | new_dims = (int(img_temp.shape[1] * scale), int(img_temp.shape[0] * scale))
35 | return cv2.resize(img_temp, new_dims, interpolation=cv2.INTER_NEAREST).astype(float)
36 |
37 |
38 | def load_image_label_list_from_npy(img_name_list):
39 | cls_labels_dict = np.load('voc12/cls_labels.npy', allow_pickle=True).item()
40 |
41 | return [cls_labels_dict[img_name] for img_name in img_name_list]
42 |
43 |
44 | def RandomCrop(imgarr, cropsize):
45 | h, w, c = imgarr.shape
46 |
47 | ch = min(cropsize, h)
48 | cw = min(cropsize, w)
49 |
50 | w_space = w - cropsize
51 | h_space = h - cropsize
52 |
53 | if w_space > 0:
54 | cont_left = 0
55 | img_left = random.randrange(w_space + 1)
56 | else:
57 | cont_left = random.randrange(-w_space + 1)
58 | img_left = 0
59 |
60 | if h_space > 0:
61 | cont_top = 0
62 | img_top = random.randrange(h_space + 1)
63 | else:
64 | cont_top = random.randrange(-h_space + 1)
65 | img_top = 0
66 |
67 | img_container = np.zeros((cropsize, cropsize, imgarr.shape[-1]), np.float32)
68 |
69 | cropping = np.zeros((cropsize, cropsize), np.bool)
70 |
71 | img_container[cont_top:cont_top + ch, cont_left:cont_left + cw] = \
72 | imgarr[img_top:img_top + ch, img_left:img_left + cw]
73 | cropping[cont_top:cont_top + ch, cont_left:cont_left + cw] = 1
74 |
75 | return img_container, cropping
76 |
77 |
78 |
79 | def crop(img_temp, dim, new_p=True, h_p=0, w_p=0):
80 | h = img_temp.shape[0]
81 | w = img_temp.shape[1]
82 | trig_h = trig_w = False
83 | if (h > dim):
84 | if (new_p):
85 | h_p = int(random.uniform(0, 1) * (h - dim))
86 | if len(img_temp.shape) == 2:
87 | img_temp = img_temp[h_p:h_p + dim, :]
88 | else:
89 | img_temp = img_temp[h_p:h_p + dim, :, :]
90 | elif (h < dim):
91 | trig_h = True
92 | if (w > dim):
93 | if (new_p):
94 | w_p = int(random.uniform(0, 1) * (w - dim))
95 | if len(img_temp.shape) == 2:
96 | img_temp = img_temp[:, w_p:w_p + dim]
97 | else:
98 | img_temp = img_temp[:, w_p:w_p + dim, :]
99 | elif (w < dim):
100 | trig_w = True
101 | if (trig_h or trig_w):
102 | if len(img_temp.shape) == 2:
103 | pad = np.zeros((dim, dim))
104 | pad[:img_temp.shape[0], :img_temp.shape[1]] = img_temp
105 | else:
106 | pad = np.zeros((dim, dim, 3))
107 | pad[:img_temp.shape[0], :img_temp.shape[1], :] = img_temp
108 | return (pad, h_p, w_p)
109 | else:
110 | return (img_temp, h_p, w_p)
111 |
112 |
113 | def get_data_from_chunk(chunk, args):
114 | img_path = args.img_path
115 |
116 | scale = np.random.uniform(0.7, 1.3)
117 | dim = args.crop_size
118 | images = np.zeros((dim, dim, 3, len(chunk)))
119 | ori_images = np.zeros((dim, dim, 3, len(chunk)), dtype=np.uint8)
120 | sal_images = np.zeros((dim, dim, len(chunk)))
121 | gt_images = np.zeros((dim, dim, len(chunk)))
122 | labels = load_image_label_list_from_npy(chunk)
123 | labels = torch.from_numpy(np.array(labels))
124 |
125 | img_names = []
126 |
127 | for i, pieces in enumerate(chunk):
128 | piece = pieces.replace('.jpg','').strip()
129 | img_names.append(piece)
130 | flip_p = np.random.uniform(0, 1)
131 | img_temp = cv2.imread(os.path.join(img_path, piece + '.jpg'))
132 | img_temp = cv2.cvtColor(img_temp, cv2.COLOR_BGR2RGB).astype(np.float)
133 | sal_temp = cv2.imread(os.path.join(args.sal_pgt_path, piece + '.png'), 0) / 255.
134 |
135 | gt_temp = np.asarray(Image.open(os.path.join(args.seg_pgt_path, piece + '.png')))
136 | img_temp = scale_im(img_temp, scale)
137 | sal_temp = scale_im(sal_temp, scale)
138 | gt_temp = scale_gt(gt_temp, scale)
139 | img_temp = flip(img_temp, flip_p)
140 | sal_temp = flip(sal_temp, flip_p)
141 | gt_temp = flip(gt_temp, flip_p)
142 |
143 | img_temp[:, :, 0] = (img_temp[:, :, 0] / 255. - 0.485) / 0.229
144 | img_temp[:, :, 1] = (img_temp[:, :, 1] / 255. - 0.456) / 0.224
145 | img_temp[:, :, 2] = (img_temp[:, :, 2] / 255. - 0.406) / 0.225
146 |
147 | img_temp, img_temp_h_p, img_temp_w_p = crop(img_temp, dim)
148 | gt_temp = crop(gt_temp, dim, False, img_temp_h_p, img_temp_w_p)[0]
149 | gt_images[:, :, i] = gt_temp[:, :]
150 | sal_temp = crop(sal_temp, dim, False, img_temp_h_p, img_temp_w_p)[0]
151 | sal_temp[sal_temp > 0.5] = 1.0
152 | sal_temp[sal_temp <= 0.5] = 0.0
153 | sal_images[:, :, i] = sal_temp[:, :]
154 |
155 | ori_temp = np.zeros_like(img_temp)
156 | ori_temp[:, :, 0] = (img_temp[:, :, 0] * 0.229 + 0.485) * 255.
157 | ori_temp[:, :, 1] = (img_temp[:, :, 1] * 0.224 + 0.456) * 255.
158 | ori_temp[:, :, 2] = (img_temp[:, :, 2] * 0.225 + 0.406) * 255.
159 | ori_images[:, :, :, i] = ori_temp.astype(np.uint8)
160 |
161 | images[:, :, :, i] = img_temp
162 |
163 | images = images.transpose((3, 2, 0, 1))
164 | ori_images = ori_images.transpose((3, 2, 0, 1))
165 | gt_images = gt_images.transpose((2, 0, 1))
166 | gt_images = torch.from_numpy(gt_images).float()
167 | sal_images = sal_images.transpose((2, 0, 1))
168 | sal_images = torch.from_numpy(sal_images).float()
169 | images = torch.from_numpy(images).float()
170 | return images, ori_images, sal_images, gt_images, labels, img_names
171 |
--------------------------------------------------------------------------------
/tool/imutils.py:
--------------------------------------------------------------------------------
1 | import numpy as np
2 | import pydensecrf.densecrf as dcrf
3 | import torch
4 | import PIL.Image as Image
5 | import os
6 | import cv2
7 |
8 |
9 | palette = [0, 0, 0, 128, 0, 0, 0, 128, 0, 128, 128, 0, 0, 0, 128, 128, 0, 128, 0, 128, 128, 128, 128, 128,
10 | 64, 0, 0, 192, 0, 0, 64, 128, 0, 192, 128, 0, 64, 0, 128, 192, 0, 128, 64, 128, 128, 192, 128, 128,
11 | 0, 64, 0, 128, 64, 0, 0, 192, 0, 128, 192, 0, 0, 64, 128, 128, 64, 128, 0, 192, 128, 128, 192, 128,
12 | 64, 64, 0, 192, 64, 0, 64, 192, 0, 192, 192, 0]
13 |
14 | def put_palette(seg_label, out_name):
15 | out = seg_label.astype(np.uint8)
16 | out = Image.fromarray(out, mode='P')
17 | out.putpalette(palette)
18 | out.save(out_name)
19 |
20 | def show_cam_on_image(img, mask, img_name, save_path):
21 | img = np.float32(img) / 255.
22 | heatmap = cv2.applyColorMap(np.uint8(255 * mask), cv2.COLORMAP_JET)
23 | heatmap = np.float32(heatmap) / 255
24 | cam = heatmap + img
25 | cam = cam / np.max(cam)
26 | cam = np.uint8(255 * cam)
27 | cv2.imwrite(os.path.join(save_path, img_name + ".jpg"), cam)
28 |
29 | def save_as_png(mask, save_name, save_path):
30 | out_name = save_name + '.png'
31 | out = mask * 255
32 | out = Image.fromarray(out.astype(np.uint8), mode='P')
33 | out.save(os.path.join(save_path, out_name))
34 |
35 |
36 | def fusion_cam(cam, sal_images, label, args, name='toy'):
37 | if len(sal_images.size()) == 4:
38 | sal_images = sal_images.squeeze(1)
39 |
40 | cam = cam * label.unsqueeze(-1).unsqueeze(-1).cuda()
41 | cam_max = torch.max(cam, dim=1)[0]
42 |
43 | cam_object_region = cam_max > 0.2
44 | sal_object_region = sal_images > 0.06
45 | object_region = sal_object_region * cam_object_region
46 | not_sure_region1 = sal_object_region * (~cam_object_region)
47 | not_sure_region2 = (~sal_object_region) * (cam_object_region)
48 | not_sure_region = not_sure_region1 | not_sure_region2
49 |
50 | gt = torch.argmax(cam, dim=1) + 1
51 | gt = gt.float() * object_region.float()
52 |
53 | for b in range(gt.size(0)):
54 | gt[b, not_sure_region[b]] = 255
55 | seg_name = os.path.join(args.seg_pgt_path, name[b] + '.png')
56 | output_i = gt[b].detach().cpu().numpy()
57 | put_palette(output_i, seg_name)
58 | return gt.long()
59 |
60 | def crf_inference_inf(img, probs, t=10, scale_factor=1, labels=21):
61 | import pydensecrf.densecrf as dcrf
62 | from pydensecrf.utils import unary_from_softmax
63 |
64 | h, w = img.shape[:2]
65 | n_labels = labels
66 |
67 | d = dcrf.DenseCRF2D(w, h, n_labels)
68 |
69 | unary = unary_from_softmax(probs)
70 | unary = np.ascontiguousarray(unary)
71 |
72 | img_c = np.ascontiguousarray(img)
73 |
74 | d.setUnaryEnergy(unary)
75 | d.addPairwiseGaussian(sxy=4/scale_factor, compat=3)
76 | d.addPairwiseBilateral(sxy=83/scale_factor, srgb=5, rgbim=np.copy(img_c), compat=3)
77 | Q = d.inference(t)
78 |
79 | return np.array(Q).reshape((n_labels, h, w))
80 |
81 | def sigmoid(x):
82 | return 1 / (1 + np.exp(-x))
83 |
84 | def crf_for_sal(img, anno, EPSILON=1e-8, tau=1.05):
85 | img = np.array(img)
86 | d = dcrf.DenseCRF2D(img.shape[1], img.shape[0], 2)
87 | n_energy = -np.log((1.0 - anno + EPSILON)) / (tau * sigmoid(1 - anno))
88 | p_energy = -np.log(anno + EPSILON) / (tau * sigmoid(anno))
89 | U = np.zeros((2, img.shape[0] * img.shape[1]), dtype='float32')
90 | U[0, :] = n_energy.flatten()
91 | U[1, :] = p_energy.flatten()
92 | d.setUnaryEnergy(U)
93 |
94 | d.addPairwiseGaussian(sxy=3, compat=3)
95 | d.addPairwiseBilateral(sxy=60, srgb=5, rgbim=np.ascontiguousarray(np.copy(img)), compat=5)
96 |
97 | # Do the inference
98 | infer = np.array(d.inference(1)).astype('float32')
99 | res = np.expand_dims(infer[1, :].reshape(img.shape[:2]), 0)
100 |
101 | return res
--------------------------------------------------------------------------------
/tool/pyutils.py:
--------------------------------------------------------------------------------
1 | import time
2 | import sys
3 |
4 | class Logger(object):
5 | def __init__(self, outfile):
6 | self.terminal = sys.stdout
7 | self.log = open(outfile, "w")
8 | sys.stdout = self
9 |
10 | def write(self, message):
11 | self.terminal.write(message)
12 | self.log.write(message)
13 |
14 | def flush(self):
15 | self.terminal.flush()
16 |
17 |
18 | class AverageMeter:
19 | def __init__(self, *keys):
20 | self.__data = dict()
21 | for k in keys:
22 | self.__data[k] = [0.0, 0]
23 |
24 | def add(self, dict):
25 | for k, v in dict.items():
26 | self.__data[k][0] += v
27 | self.__data[k][1] += 1
28 |
29 | def get(self, *keys):
30 | if len(keys) == 1:
31 | return self.__data[keys[0]][0] / self.__data[keys[0]][1]
32 | else:
33 | v_list = [self.__data[k][0] / self.__data[k][1] for k in keys]
34 | return tuple(v_list)
35 |
36 | def pop(self, key=None):
37 | if key is None:
38 | for k in self.__data.keys():
39 | self.__data[k] = [0.0, 0]
40 | else:
41 | v = self.get(key)
42 | self.__data[key] = [0.0, 0]
43 | return v
44 |
45 |
46 | class Timer:
47 | def __init__(self, starting_msg = None):
48 | self.start = time.time()
49 | self.stage_start = self.start
50 |
51 | if starting_msg is not None:
52 | print(starting_msg, time.ctime(time.time()))
53 |
54 |
55 | def update_progress(self, progress):
56 | self.elapsed = time.time() - self.start
57 | self.est_total = self.elapsed / progress
58 | self.est_remaining = self.est_total - self.elapsed
59 | self.est_finish = int(self.start + self.est_total)
60 |
61 |
62 | def str_est_finish(self):
63 | return str(time.ctime(self.est_finish))
64 |
65 | def get_stage_elapsed(self):
66 | return time.time() - self.stage_start
67 |
68 | def reset_stage(self):
69 | self.stage_start = time.time()
70 |
71 |
72 | from multiprocessing.pool import ThreadPool
73 |
74 | class BatchThreader:
75 |
76 | def __init__(self, func, args_list, batch_size, prefetch_size=4, processes=12):
77 | self.batch_size = batch_size
78 | self.prefetch_size = prefetch_size
79 |
80 | self.pool = ThreadPool(processes=processes)
81 | self.async_result = []
82 |
83 | self.func = func
84 | self.left_args_list = args_list
85 | self.n_tasks = len(args_list)
86 |
87 | # initial work
88 | self.__start_works(self.__get_n_pending_works())
89 |
90 |
91 | def __start_works(self, times):
92 | for _ in range(times):
93 | args = self.left_args_list.pop(0)
94 | self.async_result.append(
95 | self.pool.apply_async(self.func, args))
96 |
97 |
98 | def __get_n_pending_works(self):
99 | return min((self.prefetch_size + 1) * self.batch_size - len(self.async_result)
100 | , len(self.left_args_list))
101 |
102 |
103 |
104 | def pop_results(self):
105 |
106 | n_inwork = len(self.async_result)
107 |
108 | n_fetch = min(n_inwork, self.batch_size)
109 | rtn = [self.async_result.pop(0).get()
110 | for _ in range(n_fetch)]
111 |
112 | to_fill = self.__get_n_pending_works()
113 | if to_fill == 0:
114 | self.pool.close()
115 | else:
116 | self.__start_works(to_fill)
117 |
118 | return rtn
119 |
120 |
121 |
122 |
123 |
124 |
125 |
--------------------------------------------------------------------------------
/tool/torchutils.py:
--------------------------------------------------------------------------------
1 |
2 | import torch
3 |
4 | class PolyOptimizer(torch.optim.SGD):
5 |
6 | def __init__(self, params, lr, weight_decay, max_step, momentum=0.9):
7 | super().__init__(params, lr, weight_decay)
8 |
9 | self.global_step = 0
10 | self.max_step = max_step
11 | self.momentum = momentum
12 |
13 | self.__initial_lr = [group['lr'] for group in self.param_groups]
14 |
15 |
16 | def step(self, closure=None):
17 | if self.global_step < (0.5*self.max_step):
18 | lr_mult = (1 - self.global_step / (0.5*self.max_step)) ** self.momentum
19 |
20 | for i in range(len(self.param_groups)):
21 | self.param_groups[i]['lr'] = self.__initial_lr[i] * lr_mult
22 |
23 | elif self.global_step < self.max_step:
24 | lr_mult = (1 - (self.global_step-(0.5*self.max_step)) / (self.max_step-(0.5*self.max_step))) ** self.momentum
25 |
26 | for i in range(len(self.param_groups)):
27 | self.param_groups[i]['lr'] = 0.0007 * lr_mult
28 |
29 | super().step(closure)
30 |
31 | self.global_step += 1
32 |
33 |
34 | class PolyOptimizer_cls(torch.optim.SGD):
35 |
36 | def __init__(self, params, lr, weight_decay, max_step, momentum=0.9):
37 | super().__init__(params, lr, weight_decay)
38 |
39 | self.global_step = 0
40 | self.max_step = max_step
41 | self.momentum = momentum
42 |
43 | self.__initial_lr = [group['lr'] for group in self.param_groups]
44 |
45 |
46 | def step(self, closure=None):
47 |
48 | if self.global_step < self.max_step:
49 | lr_mult = (1 - self.global_step / self.max_step) ** self.momentum
50 |
51 | for i in range(len(self.param_groups)):
52 | if i == 4:
53 | self.param_groups[i]['lr'] = self.__initial_lr[i]
54 | else:
55 | self.param_groups[i]['lr'] = self.__initial_lr[i] * lr_mult
56 |
57 | super().step(closure)
58 |
59 | self.global_step += 1
60 |
--------------------------------------------------------------------------------
/train_AuxAff.py:
--------------------------------------------------------------------------------
1 | from torch.backends import cudnn
2 |
3 | cudnn.enabled = True
4 | from tool import pyutils, torchutils
5 | import argparse
6 | import importlib
7 | import tool.exutils as exutils
8 |
9 | import torch.nn.functional as F
10 | from pathlib import Path
11 |
12 | import torch
13 | import os
14 | import numpy as np
15 |
16 |
17 | if __name__ == '__main__':
18 |
19 | parser = argparse.ArgumentParser()
20 | parser.add_argument('--gpu_ids', type=str, default='0', help='GPU_id')
21 |
22 | parser.add_argument("--list_path", default="voc12/train_aug_id.txt", type=str)
23 | parser.add_argument("--img_path", default="", type=str)
24 | parser.add_argument("--save_path", default=None, type=str)
25 | parser.add_argument("--sal_pgt_path", default=None, type=str)
26 | parser.add_argument("--seg_pgt_path", default=None, type=str)
27 |
28 | parser.add_argument("--batch_size", default=4, type=int)
29 | parser.add_argument("--num_classes", default=21, type=int)
30 | parser.add_argument("--num_epochs", default=15, type=int)
31 | parser.add_argument("--network", default='AuxSegNet', type=str)
32 | parser.add_argument("--lr", default=0.0007, type=float)
33 | parser.add_argument("--num_workers", default=16, type=int)
34 | parser.add_argument("--wt_dec", default=1e-5, type=float)
35 | parser.add_argument("--init_weights", default='', type=str)
36 |
37 | parser.add_argument("--session_name", default="AuxSegNet_", type=str)
38 | parser.add_argument("--crop_size", default=321, type=int)
39 |
40 | parser.add_argument('--print_intervals', type=int, default=50)
41 |
42 | parser.add_argument('--sal_loss_weight', type=float, default=1.0)
43 | parser.add_argument('--cls_loss_weight', type=float, default=1.0)
44 | parser.add_argument('--seg_loss_weight', type=float, default=1.0)
45 |
46 | args = parser.parse_args()
47 |
48 | gpu_id = args.gpu_ids
49 | os.environ["CUDA_VISIBLE_DEVICES"] = gpu_id
50 |
51 | save_path = args.save_path
52 | Path(args.save_path).mkdir(parents=True, exist_ok=True)
53 |
54 | pyutils.Logger(os.path.join(args.save_path, args.session_name + '.log'))
55 |
56 | criterion = torch.nn.CrossEntropyLoss(weight=None, ignore_index=255, reduction='elementwise_mean').cuda()
57 |
58 | model = getattr(importlib.import_module('network.' + args.network), 'SegNet')(num_classes=args.num_classes)
59 |
60 |
61 | weights_dict = torch.load(args.init_weights)
62 | model.load_state_dict(weights_dict, strict=False)
63 |
64 |
65 | img_list = exutils.read_file(args.list_path)
66 | train_size = len(img_list)
67 | max_step = (train_size // args.batch_size) * args.num_epochs
68 |
69 | data_list = []
70 | for i in range(200):
71 | np.random.shuffle(img_list)
72 | data_list.extend(img_list)
73 |
74 | optimizer = torchutils.PolyOptimizer_cls([
75 | {'params': model.get_1x_lr_params(), 'lr': args.lr},
76 | {'params': model.get_10x_lr_params(), 'lr': 10 * args.lr}
77 | ], lr=args.lr, weight_decay=args.wt_dec, max_step=max_step)
78 |
79 | model = torch.nn.DataParallel(model).cuda()
80 | model.train()
81 |
82 | avg_meter = pyutils.AverageMeter('loss')
83 |
84 | timer = pyutils.Timer("Session started: ")
85 |
86 | data_gen = exutils.chunker(data_list, args.batch_size)
87 |
88 | for iter in range(max_step + 1):
89 | chunk = data_gen.__next__()
90 | img_list = chunk
91 |
92 | images, ori_images, sal_images, seg_labels, label, img_names = exutils.get_data_from_chunk(chunk, args)
93 |
94 | b, _, w, h = ori_images.shape
95 | label = label.cuda(non_blocking=True)
96 | seg_labels = seg_labels.long().cuda()
97 | sal_images = sal_images.cuda()
98 | images = images.cuda()
99 |
100 | x_cls, init_sal, refined_sal, init_seg, refined_seg = model(x=images)
101 |
102 | ##################################### image classification ###########################################
103 | cls_loss = F.multilabel_soft_margin_loss(x_cls, label)
104 |
105 | ##################################### saliency detection ###########################################
106 | init_sal = F.interpolate(init_sal, size=(w, h), mode='bilinear', align_corners=False)
107 | sal_labels = sal_images.unsqueeze(1)
108 | init_sal_loss = F.binary_cross_entropy_with_logits(init_sal, sal_labels)
109 |
110 | refined_sal = F.interpolate(refined_sal, size=(w, h), mode='bilinear', align_corners=False)
111 | refined_sal_loss = F.binary_cross_entropy_with_logits(refined_sal, sal_labels)
112 |
113 | ##################################### segmentation ###########################################
114 | init_seg = F.interpolate(init_seg, size=(w, h), mode='bilinear', align_corners=False)
115 | init_seg_loss = criterion(init_seg, seg_labels)
116 |
117 | refined_seg = F.interpolate(refined_seg, size=(w, h), mode='bilinear', align_corners=False)
118 | refined_seg_loss = criterion(refined_seg, seg_labels)
119 |
120 |
121 | loss = args.cls_loss_weight * cls_loss + args.sal_loss_weight * init_sal_loss + \
122 | args.sal_loss_weight * refined_sal_loss + args.seg_loss_weight * init_seg_loss + args.seg_loss_weight * refined_seg_loss
123 |
124 | avg_meter.add({'loss': loss.item()})
125 |
126 | optimizer.zero_grad()
127 | loss.backward()
128 | optimizer.step()
129 |
130 | if (optimizer.global_step - 1) % args.print_intervals == 0:
131 | timer.update_progress(optimizer.global_step / max_step)
132 |
133 | print('Iter:%5d/%5d' % (optimizer.global_step - 1, max_step),
134 | 'Loss:%.4f' % (avg_meter.pop('loss')),
135 | 'imps:%.1f' % ((iter + 1) * args.batch_size / timer.get_stage_elapsed()),
136 | 'Fin:%s' % (timer.str_est_finish()),
137 | 'lr: %.5f' % (optimizer.param_groups[0]['lr']), flush=True)
138 |
139 | torch.save(model.module.state_dict(), os.path.join(save_path, args.session_name + 'final.pth'))
--------------------------------------------------------------------------------
/voc12/cls_labels.npy:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xulianuwa/AuxSegNet/9f40a5d349e2405b42a541a3534e51eb58b04077/voc12/cls_labels.npy
--------------------------------------------------------------------------------
/voc12/test.txt:
--------------------------------------------------------------------------------
1 | /JPEGImages/2008_000006.jpg
2 | /JPEGImages/2008_000011.jpg
3 | /JPEGImages/2008_000012.jpg
4 | /JPEGImages/2008_000018.jpg
5 | /JPEGImages/2008_000024.jpg
6 | /JPEGImages/2008_000030.jpg
7 | /JPEGImages/2008_000031.jpg
8 | /JPEGImages/2008_000046.jpg
9 | /JPEGImages/2008_000047.jpg
10 | /JPEGImages/2008_000048.jpg
11 | /JPEGImages/2008_000057.jpg
12 | /JPEGImages/2008_000058.jpg
13 | /JPEGImages/2008_000068.jpg
14 | /JPEGImages/2008_000072.jpg
15 | /JPEGImages/2008_000079.jpg
16 | /JPEGImages/2008_000081.jpg
17 | /JPEGImages/2008_000083.jpg
18 | /JPEGImages/2008_000088.jpg
19 | /JPEGImages/2008_000094.jpg
20 | /JPEGImages/2008_000101.jpg
21 | /JPEGImages/2008_000104.jpg
22 | /JPEGImages/2008_000106.jpg
23 | /JPEGImages/2008_000108.jpg
24 | /JPEGImages/2008_000110.jpg
25 | /JPEGImages/2008_000111.jpg
26 | /JPEGImages/2008_000126.jpg
27 | /JPEGImages/2008_000127.jpg
28 | /JPEGImages/2008_000129.jpg
29 | /JPEGImages/2008_000130.jpg
30 | /JPEGImages/2008_000135.jpg
31 | /JPEGImages/2008_000150.jpg
32 | /JPEGImages/2008_000152.jpg
33 | /JPEGImages/2008_000156.jpg
34 | /JPEGImages/2008_000159.jpg
35 | /JPEGImages/2008_000160.jpg
36 | /JPEGImages/2008_000161.jpg
37 | /JPEGImages/2008_000166.jpg
38 | /JPEGImages/2008_000167.jpg
39 | /JPEGImages/2008_000168.jpg
40 | /JPEGImages/2008_000169.jpg
41 | /JPEGImages/2008_000171.jpg
42 | /JPEGImages/2008_000175.jpg
43 | /JPEGImages/2008_000178.jpg
44 | /JPEGImages/2008_000186.jpg
45 | /JPEGImages/2008_000198.jpg
46 | /JPEGImages/2008_000206.jpg
47 | /JPEGImages/2008_000208.jpg
48 | /JPEGImages/2008_000209.jpg
49 | /JPEGImages/2008_000211.jpg
50 | /JPEGImages/2008_000220.jpg
51 | /JPEGImages/2008_000224.jpg
52 | /JPEGImages/2008_000230.jpg
53 | /JPEGImages/2008_000240.jpg
54 | /JPEGImages/2008_000248.jpg
55 | /JPEGImages/2008_000249.jpg
56 | /JPEGImages/2008_000250.jpg
57 | /JPEGImages/2008_000256.jpg
58 | /JPEGImages/2008_000279.jpg
59 | /JPEGImages/2008_000282.jpg
60 | /JPEGImages/2008_000285.jpg
61 | /JPEGImages/2008_000286.jpg
62 | /JPEGImages/2008_000296.jpg
63 | /JPEGImages/2008_000300.jpg
64 | /JPEGImages/2008_000322.jpg
65 | /JPEGImages/2008_000324.jpg
66 | /JPEGImages/2008_000337.jpg
67 | /JPEGImages/2008_000366.jpg
68 | /JPEGImages/2008_000369.jpg
69 | /JPEGImages/2008_000377.jpg
70 | /JPEGImages/2008_000384.jpg
71 | /JPEGImages/2008_000390.jpg
72 | /JPEGImages/2008_000404.jpg
73 | /JPEGImages/2008_000411.jpg
74 | /JPEGImages/2008_000434.jpg
75 | /JPEGImages/2008_000440.jpg
76 | /JPEGImages/2008_000460.jpg
77 | /JPEGImages/2008_000467.jpg
78 | /JPEGImages/2008_000478.jpg
79 | /JPEGImages/2008_000485.jpg
80 | /JPEGImages/2008_000487.jpg
81 | /JPEGImages/2008_000490.jpg
82 | /JPEGImages/2008_000503.jpg
83 | /JPEGImages/2008_000504.jpg
84 | /JPEGImages/2008_000507.jpg
85 | /JPEGImages/2008_000513.jpg
86 | /JPEGImages/2008_000523.jpg
87 | /JPEGImages/2008_000529.jpg
88 | /JPEGImages/2008_000556.jpg
89 | /JPEGImages/2008_000565.jpg
90 | /JPEGImages/2008_000580.jpg
91 | /JPEGImages/2008_000590.jpg
92 | /JPEGImages/2008_000596.jpg
93 | /JPEGImages/2008_000597.jpg
94 | /JPEGImages/2008_000600.jpg
95 | /JPEGImages/2008_000603.jpg
96 | /JPEGImages/2008_000604.jpg
97 | /JPEGImages/2008_000612.jpg
98 | /JPEGImages/2008_000617.jpg
99 | /JPEGImages/2008_000621.jpg
100 | /JPEGImages/2008_000627.jpg
101 | /JPEGImages/2008_000633.jpg
102 | /JPEGImages/2008_000643.jpg
103 | /JPEGImages/2008_000644.jpg
104 | /JPEGImages/2008_000649.jpg
105 | /JPEGImages/2008_000651.jpg
106 | /JPEGImages/2008_000664.jpg
107 | /JPEGImages/2008_000665.jpg
108 | /JPEGImages/2008_000680.jpg
109 | /JPEGImages/2008_000681.jpg
110 | /JPEGImages/2008_000684.jpg
111 | /JPEGImages/2008_000685.jpg
112 | /JPEGImages/2008_000688.jpg
113 | /JPEGImages/2008_000693.jpg
114 | /JPEGImages/2008_000698.jpg
115 | /JPEGImages/2008_000707.jpg
116 | /JPEGImages/2008_000709.jpg
117 | /JPEGImages/2008_000712.jpg
118 | /JPEGImages/2008_000747.jpg
119 | /JPEGImages/2008_000751.jpg
120 | /JPEGImages/2008_000754.jpg
121 | /JPEGImages/2008_000762.jpg
122 | /JPEGImages/2008_000767.jpg
123 | /JPEGImages/2008_000768.jpg
124 | /JPEGImages/2008_000773.jpg
125 | /JPEGImages/2008_000774.jpg
126 | /JPEGImages/2008_000779.jpg
127 | /JPEGImages/2008_000797.jpg
128 | /JPEGImages/2008_000813.jpg
129 | /JPEGImages/2008_000816.jpg
130 | /JPEGImages/2008_000846.jpg
131 | /JPEGImages/2008_000866.jpg
132 | /JPEGImages/2008_000871.jpg
133 | /JPEGImages/2008_000872.jpg
134 | /JPEGImages/2008_000891.jpg
135 | /JPEGImages/2008_000892.jpg
136 | /JPEGImages/2008_000894.jpg
137 | /JPEGImages/2008_000896.jpg
138 | /JPEGImages/2008_000898.jpg
139 | /JPEGImages/2008_000909.jpg
140 | /JPEGImages/2008_000913.jpg
141 | /JPEGImages/2008_000920.jpg
142 | /JPEGImages/2008_000933.jpg
143 | /JPEGImages/2008_000935.jpg
144 | /JPEGImages/2008_000937.jpg
145 | /JPEGImages/2008_000938.jpg
146 | /JPEGImages/2008_000954.jpg
147 | /JPEGImages/2008_000958.jpg
148 | /JPEGImages/2008_000963.jpg
149 | /JPEGImages/2008_000967.jpg
150 | /JPEGImages/2008_000974.jpg
151 | /JPEGImages/2008_000986.jpg
152 | /JPEGImages/2008_000994.jpg
153 | /JPEGImages/2008_000995.jpg
154 | /JPEGImages/2008_001008.jpg
155 | /JPEGImages/2008_001010.jpg
156 | /JPEGImages/2008_001014.jpg
157 | /JPEGImages/2008_001016.jpg
158 | /JPEGImages/2008_001025.jpg
159 | /JPEGImages/2008_001029.jpg
160 | /JPEGImages/2008_001037.jpg
161 | /JPEGImages/2008_001059.jpg
162 | /JPEGImages/2008_001061.jpg
163 | /JPEGImages/2008_001072.jpg
164 | /JPEGImages/2008_001124.jpg
165 | /JPEGImages/2008_001126.jpg
166 | /JPEGImages/2008_001131.jpg
167 | /JPEGImages/2008_001138.jpg
168 | /JPEGImages/2008_001144.jpg
169 | /JPEGImages/2008_001151.jpg
170 | /JPEGImages/2008_001156.jpg
171 | /JPEGImages/2008_001179.jpg
172 | /JPEGImages/2008_001181.jpg
173 | /JPEGImages/2008_001184.jpg
174 | /JPEGImages/2008_001186.jpg
175 | /JPEGImages/2008_001197.jpg
176 | /JPEGImages/2008_001207.jpg
177 | /JPEGImages/2008_001212.jpg
178 | /JPEGImages/2008_001233.jpg
179 | /JPEGImages/2008_001234.jpg
180 | /JPEGImages/2008_001258.jpg
181 | /JPEGImages/2008_001268.jpg
182 | /JPEGImages/2008_001279.jpg
183 | /JPEGImages/2008_001281.jpg
184 | /JPEGImages/2008_001288.jpg
185 | /JPEGImages/2008_001291.jpg
186 | /JPEGImages/2008_001298.jpg
187 | /JPEGImages/2008_001309.jpg
188 | /JPEGImages/2008_001315.jpg
189 | /JPEGImages/2008_001316.jpg
190 | /JPEGImages/2008_001319.jpg
191 | /JPEGImages/2008_001327.jpg
192 | /JPEGImages/2008_001328.jpg
193 | /JPEGImages/2008_001332.jpg
194 | /JPEGImages/2008_001341.jpg
195 | /JPEGImages/2008_001347.jpg
196 | /JPEGImages/2008_001355.jpg
197 | /JPEGImages/2008_001378.jpg
198 | /JPEGImages/2008_001386.jpg
199 | /JPEGImages/2008_001400.jpg
200 | /JPEGImages/2008_001409.jpg
201 | /JPEGImages/2008_001411.jpg
202 | /JPEGImages/2008_001416.jpg
203 | /JPEGImages/2008_001418.jpg
204 | /JPEGImages/2008_001435.jpg
205 | /JPEGImages/2008_001459.jpg
206 | /JPEGImages/2008_001469.jpg
207 | /JPEGImages/2008_001474.jpg
208 | /JPEGImages/2008_001477.jpg
209 | /JPEGImages/2008_001483.jpg
210 | /JPEGImages/2008_001484.jpg
211 | /JPEGImages/2008_001485.jpg
212 | /JPEGImages/2008_001496.jpg
213 | /JPEGImages/2008_001507.jpg
214 | /JPEGImages/2008_001511.jpg
215 | /JPEGImages/2008_001519.jpg
216 | /JPEGImages/2008_001557.jpg
217 | /JPEGImages/2008_001567.jpg
218 | /JPEGImages/2008_001570.jpg
219 | /JPEGImages/2008_001571.jpg
220 | /JPEGImages/2008_001572.jpg
221 | /JPEGImages/2008_001579.jpg
222 | /JPEGImages/2008_001587.jpg
223 | /JPEGImages/2008_001608.jpg
224 | /JPEGImages/2008_001611.jpg
225 | /JPEGImages/2008_001614.jpg
226 | /JPEGImages/2008_001621.jpg
227 | /JPEGImages/2008_001639.jpg
228 | /JPEGImages/2008_001658.jpg
229 | /JPEGImages/2008_001678.jpg
230 | /JPEGImages/2008_001700.jpg
231 | /JPEGImages/2008_001713.jpg
232 | /JPEGImages/2008_001720.jpg
233 | /JPEGImages/2008_001755.jpg
234 | /JPEGImages/2008_001779.jpg
235 | /JPEGImages/2008_001785.jpg
236 | /JPEGImages/2008_001793.jpg
237 | /JPEGImages/2008_001794.jpg
238 | /JPEGImages/2008_001803.jpg
239 | /JPEGImages/2008_001818.jpg
240 | /JPEGImages/2008_001848.jpg
241 | /JPEGImages/2008_001855.jpg
242 | /JPEGImages/2008_001857.jpg
243 | /JPEGImages/2008_001861.jpg
244 | /JPEGImages/2008_001875.jpg
245 | /JPEGImages/2008_001878.jpg
246 | /JPEGImages/2008_001886.jpg
247 | /JPEGImages/2008_001897.jpg
248 | /JPEGImages/2008_001916.jpg
249 | /JPEGImages/2008_001925.jpg
250 | /JPEGImages/2008_001949.jpg
251 | /JPEGImages/2008_001953.jpg
252 | /JPEGImages/2008_001972.jpg
253 | /JPEGImages/2008_001999.jpg
254 | /JPEGImages/2008_002027.jpg
255 | /JPEGImages/2008_002040.jpg
256 | /JPEGImages/2008_002057.jpg
257 | /JPEGImages/2008_002070.jpg
258 | /JPEGImages/2008_002075.jpg
259 | /JPEGImages/2008_002095.jpg
260 | /JPEGImages/2008_002104.jpg
261 | /JPEGImages/2008_002105.jpg
262 | /JPEGImages/2008_002106.jpg
263 | /JPEGImages/2008_002136.jpg
264 | /JPEGImages/2008_002137.jpg
265 | /JPEGImages/2008_002147.jpg
266 | /JPEGImages/2008_002149.jpg
267 | /JPEGImages/2008_002163.jpg
268 | /JPEGImages/2008_002173.jpg
269 | /JPEGImages/2008_002174.jpg
270 | /JPEGImages/2008_002184.jpg
271 | /JPEGImages/2008_002186.jpg
272 | /JPEGImages/2008_002188.jpg
273 | /JPEGImages/2008_002190.jpg
274 | /JPEGImages/2008_002203.jpg
275 | /JPEGImages/2008_002211.jpg
276 | /JPEGImages/2008_002217.jpg
277 | /JPEGImages/2008_002228.jpg
278 | /JPEGImages/2008_002233.jpg
279 | /JPEGImages/2008_002246.jpg
280 | /JPEGImages/2008_002257.jpg
281 | /JPEGImages/2008_002261.jpg
282 | /JPEGImages/2008_002285.jpg
283 | /JPEGImages/2008_002287.jpg
284 | /JPEGImages/2008_002295.jpg
285 | /JPEGImages/2008_002303.jpg
286 | /JPEGImages/2008_002306.jpg
287 | /JPEGImages/2008_002309.jpg
288 | /JPEGImages/2008_002310.jpg
289 | /JPEGImages/2008_002318.jpg
290 | /JPEGImages/2008_002320.jpg
291 | /JPEGImages/2008_002332.jpg
292 | /JPEGImages/2008_002337.jpg
293 | /JPEGImages/2008_002345.jpg
294 | /JPEGImages/2008_002348.jpg
295 | /JPEGImages/2008_002352.jpg
296 | /JPEGImages/2008_002360.jpg
297 | /JPEGImages/2008_002381.jpg
298 | /JPEGImages/2008_002387.jpg
299 | /JPEGImages/2008_002388.jpg
300 | /JPEGImages/2008_002393.jpg
301 | /JPEGImages/2008_002406.jpg
302 | /JPEGImages/2008_002440.jpg
303 | /JPEGImages/2008_002455.jpg
304 | /JPEGImages/2008_002460.jpg
305 | /JPEGImages/2008_002462.jpg
306 | /JPEGImages/2008_002480.jpg
307 | /JPEGImages/2008_002518.jpg
308 | /JPEGImages/2008_002525.jpg
309 | /JPEGImages/2008_002535.jpg
310 | /JPEGImages/2008_002544.jpg
311 | /JPEGImages/2008_002553.jpg
312 | /JPEGImages/2008_002569.jpg
313 | /JPEGImages/2008_002572.jpg
314 | /JPEGImages/2008_002587.jpg
315 | /JPEGImages/2008_002635.jpg
316 | /JPEGImages/2008_002655.jpg
317 | /JPEGImages/2008_002695.jpg
318 | /JPEGImages/2008_002702.jpg
319 | /JPEGImages/2008_002706.jpg
320 | /JPEGImages/2008_002707.jpg
321 | /JPEGImages/2008_002722.jpg
322 | /JPEGImages/2008_002745.jpg
323 | /JPEGImages/2008_002757.jpg
324 | /JPEGImages/2008_002779.jpg
325 | /JPEGImages/2008_002805.jpg
326 | /JPEGImages/2008_002871.jpg
327 | /JPEGImages/2008_002895.jpg
328 | /JPEGImages/2008_002905.jpg
329 | /JPEGImages/2008_002923.jpg
330 | /JPEGImages/2008_002927.jpg
331 | /JPEGImages/2008_002939.jpg
332 | /JPEGImages/2008_002941.jpg
333 | /JPEGImages/2008_002962.jpg
334 | /JPEGImages/2008_002975.jpg
335 | /JPEGImages/2008_003000.jpg
336 | /JPEGImages/2008_003031.jpg
337 | /JPEGImages/2008_003038.jpg
338 | /JPEGImages/2008_003042.jpg
339 | /JPEGImages/2008_003069.jpg
340 | /JPEGImages/2008_003070.jpg
341 | /JPEGImages/2008_003115.jpg
342 | /JPEGImages/2008_003116.jpg
343 | /JPEGImages/2008_003130.jpg
344 | /JPEGImages/2008_003137.jpg
345 | /JPEGImages/2008_003138.jpg
346 | /JPEGImages/2008_003139.jpg
347 | /JPEGImages/2008_003165.jpg
348 | /JPEGImages/2008_003171.jpg
349 | /JPEGImages/2008_003176.jpg
350 | /JPEGImages/2008_003192.jpg
351 | /JPEGImages/2008_003194.jpg
352 | /JPEGImages/2008_003195.jpg
353 | /JPEGImages/2008_003198.jpg
354 | /JPEGImages/2008_003227.jpg
355 | /JPEGImages/2008_003247.jpg
356 | /JPEGImages/2008_003262.jpg
357 | /JPEGImages/2008_003298.jpg
358 | /JPEGImages/2008_003299.jpg
359 | /JPEGImages/2008_003307.jpg
360 | /JPEGImages/2008_003337.jpg
361 | /JPEGImages/2008_003353.jpg
362 | /JPEGImages/2008_003355.jpg
363 | /JPEGImages/2008_003363.jpg
364 | /JPEGImages/2008_003383.jpg
365 | /JPEGImages/2008_003389.jpg
366 | /JPEGImages/2008_003392.jpg
367 | /JPEGImages/2008_003399.jpg
368 | /JPEGImages/2008_003436.jpg
369 | /JPEGImages/2008_003457.jpg
370 | /JPEGImages/2008_003465.jpg
371 | /JPEGImages/2008_003481.jpg
372 | /JPEGImages/2008_003539.jpg
373 | /JPEGImages/2008_003548.jpg
374 | /JPEGImages/2008_003550.jpg
375 | /JPEGImages/2008_003567.jpg
376 | /JPEGImages/2008_003568.jpg
377 | /JPEGImages/2008_003606.jpg
378 | /JPEGImages/2008_003615.jpg
379 | /JPEGImages/2008_003654.jpg
380 | /JPEGImages/2008_003670.jpg
381 | /JPEGImages/2008_003700.jpg
382 | /JPEGImages/2008_003705.jpg
383 | /JPEGImages/2008_003727.jpg
384 | /JPEGImages/2008_003731.jpg
385 | /JPEGImages/2008_003734.jpg
386 | /JPEGImages/2008_003760.jpg
387 | /JPEGImages/2008_003804.jpg
388 | /JPEGImages/2008_003807.jpg
389 | /JPEGImages/2008_003810.jpg
390 | /JPEGImages/2008_003822.jpg
391 | /JPEGImages/2008_003833.jpg
392 | /JPEGImages/2008_003877.jpg
393 | /JPEGImages/2008_003879.jpg
394 | /JPEGImages/2008_003895.jpg
395 | /JPEGImages/2008_003901.jpg
396 | /JPEGImages/2008_003903.jpg
397 | /JPEGImages/2008_003911.jpg
398 | /JPEGImages/2008_003919.jpg
399 | /JPEGImages/2008_003927.jpg
400 | /JPEGImages/2008_003937.jpg
401 | /JPEGImages/2008_003946.jpg
402 | /JPEGImages/2008_003950.jpg
403 | /JPEGImages/2008_003955.jpg
404 | /JPEGImages/2008_003981.jpg
405 | /JPEGImages/2008_003991.jpg
406 | /JPEGImages/2008_004009.jpg
407 | /JPEGImages/2008_004039.jpg
408 | /JPEGImages/2008_004052.jpg
409 | /JPEGImages/2008_004063.jpg
410 | /JPEGImages/2008_004070.jpg
411 | /JPEGImages/2008_004078.jpg
412 | /JPEGImages/2008_004104.jpg
413 | /JPEGImages/2008_004139.jpg
414 | /JPEGImages/2008_004177.jpg
415 | /JPEGImages/2008_004181.jpg
416 | /JPEGImages/2008_004200.jpg
417 | /JPEGImages/2008_004219.jpg
418 | /JPEGImages/2008_004236.jpg
419 | /JPEGImages/2008_004250.jpg
420 | /JPEGImages/2008_004266.jpg
421 | /JPEGImages/2008_004299.jpg
422 | /JPEGImages/2008_004320.jpg
423 | /JPEGImages/2008_004334.jpg
424 | /JPEGImages/2008_004343.jpg
425 | /JPEGImages/2008_004349.jpg
426 | /JPEGImages/2008_004366.jpg
427 | /JPEGImages/2008_004386.jpg
428 | /JPEGImages/2008_004401.jpg
429 | /JPEGImages/2008_004423.jpg
430 | /JPEGImages/2008_004448.jpg
431 | /JPEGImages/2008_004481.jpg
432 | /JPEGImages/2008_004516.jpg
433 | /JPEGImages/2008_004536.jpg
434 | /JPEGImages/2008_004582.jpg
435 | /JPEGImages/2008_004609.jpg
436 | /JPEGImages/2008_004638.jpg
437 | /JPEGImages/2008_004642.jpg
438 | /JPEGImages/2008_004644.jpg
439 | /JPEGImages/2008_004669.jpg
440 | /JPEGImages/2008_004673.jpg
441 | /JPEGImages/2008_004691.jpg
442 | /JPEGImages/2008_004693.jpg
443 | /JPEGImages/2008_004709.jpg
444 | /JPEGImages/2008_004715.jpg
445 | /JPEGImages/2008_004757.jpg
446 | /JPEGImages/2008_004775.jpg
447 | /JPEGImages/2008_004782.jpg
448 | /JPEGImages/2008_004785.jpg
449 | /JPEGImages/2008_004798.jpg
450 | /JPEGImages/2008_004848.jpg
451 | /JPEGImages/2008_004861.jpg
452 | /JPEGImages/2008_004870.jpg
453 | /JPEGImages/2008_004877.jpg
454 | /JPEGImages/2008_004884.jpg
455 | /JPEGImages/2008_004891.jpg
456 | /JPEGImages/2008_004901.jpg
457 | /JPEGImages/2008_004919.jpg
458 | /JPEGImages/2008_005058.jpg
459 | /JPEGImages/2008_005069.jpg
460 | /JPEGImages/2008_005086.jpg
461 | /JPEGImages/2008_005087.jpg
462 | /JPEGImages/2008_005112.jpg
463 | /JPEGImages/2008_005113.jpg
464 | /JPEGImages/2008_005118.jpg
465 | /JPEGImages/2008_005128.jpg
466 | /JPEGImages/2008_005129.jpg
467 | /JPEGImages/2008_005153.jpg
468 | /JPEGImages/2008_005161.jpg
469 | /JPEGImages/2008_005162.jpg
470 | /JPEGImages/2008_005165.jpg
471 | /JPEGImages/2008_005187.jpg
472 | /JPEGImages/2008_005227.jpg
473 | /JPEGImages/2008_005308.jpg
474 | /JPEGImages/2008_005318.jpg
475 | /JPEGImages/2008_005320.jpg
476 | /JPEGImages/2008_005351.jpg
477 | /JPEGImages/2008_005372.jpg
478 | /JPEGImages/2008_005383.jpg
479 | /JPEGImages/2008_005391.jpg
480 | /JPEGImages/2008_005407.jpg
481 | /JPEGImages/2008_005420.jpg
482 | /JPEGImages/2008_005440.jpg
483 | /JPEGImages/2008_005487.jpg
484 | /JPEGImages/2008_005493.jpg
485 | /JPEGImages/2008_005520.jpg
486 | /JPEGImages/2008_005551.jpg
487 | /JPEGImages/2008_005556.jpg
488 | /JPEGImages/2008_005576.jpg
489 | /JPEGImages/2008_005578.jpg
490 | /JPEGImages/2008_005594.jpg
491 | /JPEGImages/2008_005619.jpg
492 | /JPEGImages/2008_005629.jpg
493 | /JPEGImages/2008_005644.jpg
494 | /JPEGImages/2008_005645.jpg
495 | /JPEGImages/2008_005651.jpg
496 | /JPEGImages/2008_005661.jpg
497 | /JPEGImages/2008_005662.jpg
498 | /JPEGImages/2008_005667.jpg
499 | /JPEGImages/2008_005694.jpg
500 | /JPEGImages/2008_005697.jpg
501 | /JPEGImages/2008_005709.jpg
502 | /JPEGImages/2008_005710.jpg
503 | /JPEGImages/2008_005733.jpg
504 | /JPEGImages/2008_005749.jpg
505 | /JPEGImages/2008_005753.jpg
506 | /JPEGImages/2008_005771.jpg
507 | /JPEGImages/2008_005781.jpg
508 | /JPEGImages/2008_005793.jpg
509 | /JPEGImages/2008_005802.jpg
510 | /JPEGImages/2008_005833.jpg
511 | /JPEGImages/2008_005844.jpg
512 | /JPEGImages/2008_005908.jpg
513 | /JPEGImages/2008_005931.jpg
514 | /JPEGImages/2008_005952.jpg
515 | /JPEGImages/2008_006016.jpg
516 | /JPEGImages/2008_006030.jpg
517 | /JPEGImages/2008_006033.jpg
518 | /JPEGImages/2008_006054.jpg
519 | /JPEGImages/2008_006073.jpg
520 | /JPEGImages/2008_006091.jpg
521 | /JPEGImages/2008_006142.jpg
522 | /JPEGImages/2008_006150.jpg
523 | /JPEGImages/2008_006206.jpg
524 | /JPEGImages/2008_006217.jpg
525 | /JPEGImages/2008_006264.jpg
526 | /JPEGImages/2008_006283.jpg
527 | /JPEGImages/2008_006308.jpg
528 | /JPEGImages/2008_006313.jpg
529 | /JPEGImages/2008_006333.jpg
530 | /JPEGImages/2008_006343.jpg
531 | /JPEGImages/2008_006381.jpg
532 | /JPEGImages/2008_006391.jpg
533 | /JPEGImages/2008_006423.jpg
534 | /JPEGImages/2008_006428.jpg
535 | /JPEGImages/2008_006440.jpg
536 | /JPEGImages/2008_006444.jpg
537 | /JPEGImages/2008_006473.jpg
538 | /JPEGImages/2008_006505.jpg
539 | /JPEGImages/2008_006531.jpg
540 | /JPEGImages/2008_006560.jpg
541 | /JPEGImages/2008_006571.jpg
542 | /JPEGImages/2008_006582.jpg
543 | /JPEGImages/2008_006594.jpg
544 | /JPEGImages/2008_006601.jpg
545 | /JPEGImages/2008_006633.jpg
546 | /JPEGImages/2008_006653.jpg
547 | /JPEGImages/2008_006678.jpg
548 | /JPEGImages/2008_006755.jpg
549 | /JPEGImages/2008_006772.jpg
550 | /JPEGImages/2008_006788.jpg
551 | /JPEGImages/2008_006799.jpg
552 | /JPEGImages/2008_006809.jpg
553 | /JPEGImages/2008_006838.jpg
554 | /JPEGImages/2008_006845.jpg
555 | /JPEGImages/2008_006852.jpg
556 | /JPEGImages/2008_006894.jpg
557 | /JPEGImages/2008_006905.jpg
558 | /JPEGImages/2008_006947.jpg
559 | /JPEGImages/2008_006983.jpg
560 | /JPEGImages/2008_007049.jpg
561 | /JPEGImages/2008_007065.jpg
562 | /JPEGImages/2008_007068.jpg
563 | /JPEGImages/2008_007111.jpg
564 | /JPEGImages/2008_007148.jpg
565 | /JPEGImages/2008_007159.jpg
566 | /JPEGImages/2008_007193.jpg
567 | /JPEGImages/2008_007228.jpg
568 | /JPEGImages/2008_007235.jpg
569 | /JPEGImages/2008_007249.jpg
570 | /JPEGImages/2008_007255.jpg
571 | /JPEGImages/2008_007268.jpg
572 | /JPEGImages/2008_007275.jpg
573 | /JPEGImages/2008_007292.jpg
574 | /JPEGImages/2008_007299.jpg
575 | /JPEGImages/2008_007306.jpg
576 | /JPEGImages/2008_007316.jpg
577 | /JPEGImages/2008_007400.jpg
578 | /JPEGImages/2008_007401.jpg
579 | /JPEGImages/2008_007419.jpg
580 | /JPEGImages/2008_007437.jpg
581 | /JPEGImages/2008_007483.jpg
582 | /JPEGImages/2008_007487.jpg
583 | /JPEGImages/2008_007520.jpg
584 | /JPEGImages/2008_007551.jpg
585 | /JPEGImages/2008_007603.jpg
586 | /JPEGImages/2008_007616.jpg
587 | /JPEGImages/2008_007654.jpg
588 | /JPEGImages/2008_007663.jpg
589 | /JPEGImages/2008_007708.jpg
590 | /JPEGImages/2008_007795.jpg
591 | /JPEGImages/2008_007801.jpg
592 | /JPEGImages/2008_007859.jpg
593 | /JPEGImages/2008_007903.jpg
594 | /JPEGImages/2008_007920.jpg
595 | /JPEGImages/2008_007926.jpg
596 | /JPEGImages/2008_008014.jpg
597 | /JPEGImages/2008_008017.jpg
598 | /JPEGImages/2008_008060.jpg
599 | /JPEGImages/2008_008077.jpg
600 | /JPEGImages/2008_008107.jpg
601 | /JPEGImages/2008_008108.jpg
602 | /JPEGImages/2008_008119.jpg
603 | /JPEGImages/2008_008126.jpg
604 | /JPEGImages/2008_008133.jpg
605 | /JPEGImages/2008_008144.jpg
606 | /JPEGImages/2008_008216.jpg
607 | /JPEGImages/2008_008244.jpg
608 | /JPEGImages/2008_008248.jpg
609 | /JPEGImages/2008_008250.jpg
610 | /JPEGImages/2008_008260.jpg
611 | /JPEGImages/2008_008277.jpg
612 | /JPEGImages/2008_008280.jpg
613 | /JPEGImages/2008_008290.jpg
614 | /JPEGImages/2008_008304.jpg
615 | /JPEGImages/2008_008340.jpg
616 | /JPEGImages/2008_008371.jpg
617 | /JPEGImages/2008_008390.jpg
618 | /JPEGImages/2008_008397.jpg
619 | /JPEGImages/2008_008409.jpg
620 | /JPEGImages/2008_008412.jpg
621 | /JPEGImages/2008_008419.jpg
622 | /JPEGImages/2008_008454.jpg
623 | /JPEGImages/2008_008491.jpg
624 | /JPEGImages/2008_008498.jpg
625 | /JPEGImages/2008_008565.jpg
626 | /JPEGImages/2008_008599.jpg
627 | /JPEGImages/2008_008603.jpg
628 | /JPEGImages/2008_008631.jpg
629 | /JPEGImages/2008_008634.jpg
630 | /JPEGImages/2008_008640.jpg
631 | /JPEGImages/2008_008646.jpg
632 | /JPEGImages/2008_008660.jpg
633 | /JPEGImages/2008_008663.jpg
634 | /JPEGImages/2008_008664.jpg
635 | /JPEGImages/2008_008709.jpg
636 | /JPEGImages/2008_008720.jpg
637 | /JPEGImages/2008_008747.jpg
638 | /JPEGImages/2008_008768.jpg
639 | /JPEGImages/2009_000004.jpg
640 | /JPEGImages/2009_000019.jpg
641 | /JPEGImages/2009_000024.jpg
642 | /JPEGImages/2009_000025.jpg
643 | /JPEGImages/2009_000053.jpg
644 | /JPEGImages/2009_000076.jpg
645 | /JPEGImages/2009_000107.jpg
646 | /JPEGImages/2009_000110.jpg
647 | /JPEGImages/2009_000115.jpg
648 | /JPEGImages/2009_000117.jpg
649 | /JPEGImages/2009_000175.jpg
650 | /JPEGImages/2009_000220.jpg
651 | /JPEGImages/2009_000259.jpg
652 | /JPEGImages/2009_000275.jpg
653 | /JPEGImages/2009_000314.jpg
654 | /JPEGImages/2009_000368.jpg
655 | /JPEGImages/2009_000373.jpg
656 | /JPEGImages/2009_000384.jpg
657 | /JPEGImages/2009_000388.jpg
658 | /JPEGImages/2009_000423.jpg
659 | /JPEGImages/2009_000433.jpg
660 | /JPEGImages/2009_000434.jpg
661 | /JPEGImages/2009_000458.jpg
662 | /JPEGImages/2009_000475.jpg
663 | /JPEGImages/2009_000481.jpg
664 | /JPEGImages/2009_000495.jpg
665 | /JPEGImages/2009_000514.jpg
666 | /JPEGImages/2009_000555.jpg
667 | /JPEGImages/2009_000556.jpg
668 | /JPEGImages/2009_000561.jpg
669 | /JPEGImages/2009_000571.jpg
670 | /JPEGImages/2009_000581.jpg
671 | /JPEGImages/2009_000605.jpg
672 | /JPEGImages/2009_000609.jpg
673 | /JPEGImages/2009_000644.jpg
674 | /JPEGImages/2009_000654.jpg
675 | /JPEGImages/2009_000671.jpg
676 | /JPEGImages/2009_000733.jpg
677 | /JPEGImages/2009_000740.jpg
678 | /JPEGImages/2009_000766.jpg
679 | /JPEGImages/2009_000775.jpg
680 | /JPEGImages/2009_000776.jpg
681 | /JPEGImages/2009_000795.jpg
682 | /JPEGImages/2009_000850.jpg
683 | /JPEGImages/2009_000881.jpg
684 | /JPEGImages/2009_000900.jpg
685 | /JPEGImages/2009_000914.jpg
686 | /JPEGImages/2009_000941.jpg
687 | /JPEGImages/2009_000977.jpg
688 | /JPEGImages/2009_000984.jpg
689 | /JPEGImages/2009_000986.jpg
690 | /JPEGImages/2009_001005.jpg
691 | /JPEGImages/2009_001015.jpg
692 | /JPEGImages/2009_001058.jpg
693 | /JPEGImages/2009_001072.jpg
694 | /JPEGImages/2009_001087.jpg
695 | /JPEGImages/2009_001092.jpg
696 | /JPEGImages/2009_001109.jpg
697 | /JPEGImages/2009_001114.jpg
698 | /JPEGImages/2009_001115.jpg
699 | /JPEGImages/2009_001141.jpg
700 | /JPEGImages/2009_001174.jpg
701 | /JPEGImages/2009_001175.jpg
702 | /JPEGImages/2009_001182.jpg
703 | /JPEGImages/2009_001222.jpg
704 | /JPEGImages/2009_001228.jpg
705 | /JPEGImages/2009_001246.jpg
706 | /JPEGImages/2009_001262.jpg
707 | /JPEGImages/2009_001274.jpg
708 | /JPEGImages/2009_001284.jpg
709 | /JPEGImages/2009_001297.jpg
710 | /JPEGImages/2009_001331.jpg
711 | /JPEGImages/2009_001336.jpg
712 | /JPEGImages/2009_001337.jpg
713 | /JPEGImages/2009_001379.jpg
714 | /JPEGImages/2009_001392.jpg
715 | /JPEGImages/2009_001451.jpg
716 | /JPEGImages/2009_001485.jpg
717 | /JPEGImages/2009_001488.jpg
718 | /JPEGImages/2009_001497.jpg
719 | /JPEGImages/2009_001504.jpg
720 | /JPEGImages/2009_001506.jpg
721 | /JPEGImages/2009_001573.jpg
722 | /JPEGImages/2009_001576.jpg
723 | /JPEGImages/2009_001603.jpg
724 | /JPEGImages/2009_001613.jpg
725 | /JPEGImages/2009_001652.jpg
726 | /JPEGImages/2009_001661.jpg
727 | /JPEGImages/2009_001668.jpg
728 | /JPEGImages/2009_001680.jpg
729 | /JPEGImages/2009_001688.jpg
730 | /JPEGImages/2009_001697.jpg
731 | /JPEGImages/2009_001729.jpg
732 | /JPEGImages/2009_001771.jpg
733 | /JPEGImages/2009_001785.jpg
734 | /JPEGImages/2009_001793.jpg
735 | /JPEGImages/2009_001814.jpg
736 | /JPEGImages/2009_001866.jpg
737 | /JPEGImages/2009_001872.jpg
738 | /JPEGImages/2009_001880.jpg
739 | /JPEGImages/2009_001883.jpg
740 | /JPEGImages/2009_001891.jpg
741 | /JPEGImages/2009_001913.jpg
742 | /JPEGImages/2009_001938.jpg
743 | /JPEGImages/2009_001946.jpg
744 | /JPEGImages/2009_001953.jpg
745 | /JPEGImages/2009_001969.jpg
746 | /JPEGImages/2009_001978.jpg
747 | /JPEGImages/2009_001995.jpg
748 | /JPEGImages/2009_002007.jpg
749 | /JPEGImages/2009_002036.jpg
750 | /JPEGImages/2009_002041.jpg
751 | /JPEGImages/2009_002049.jpg
752 | /JPEGImages/2009_002051.jpg
753 | /JPEGImages/2009_002062.jpg
754 | /JPEGImages/2009_002063.jpg
755 | /JPEGImages/2009_002067.jpg
756 | /JPEGImages/2009_002085.jpg
757 | /JPEGImages/2009_002092.jpg
758 | /JPEGImages/2009_002114.jpg
759 | /JPEGImages/2009_002115.jpg
760 | /JPEGImages/2009_002142.jpg
761 | /JPEGImages/2009_002148.jpg
762 | /JPEGImages/2009_002157.jpg
763 | /JPEGImages/2009_002181.jpg
764 | /JPEGImages/2009_002220.jpg
765 | /JPEGImages/2009_002284.jpg
766 | /JPEGImages/2009_002287.jpg
767 | /JPEGImages/2009_002300.jpg
768 | /JPEGImages/2009_002310.jpg
769 | /JPEGImages/2009_002315.jpg
770 | /JPEGImages/2009_002334.jpg
771 | /JPEGImages/2009_002337.jpg
772 | /JPEGImages/2009_002354.jpg
773 | /JPEGImages/2009_002357.jpg
774 | /JPEGImages/2009_002411.jpg
775 | /JPEGImages/2009_002426.jpg
776 | /JPEGImages/2009_002458.jpg
777 | /JPEGImages/2009_002459.jpg
778 | /JPEGImages/2009_002461.jpg
779 | /JPEGImages/2009_002466.jpg
780 | /JPEGImages/2009_002481.jpg
781 | /JPEGImages/2009_002483.jpg
782 | /JPEGImages/2009_002503.jpg
783 | /JPEGImages/2009_002581.jpg
784 | /JPEGImages/2009_002583.jpg
785 | /JPEGImages/2009_002589.jpg
786 | /JPEGImages/2009_002600.jpg
787 | /JPEGImages/2009_002601.jpg
788 | /JPEGImages/2009_002602.jpg
789 | /JPEGImages/2009_002641.jpg
790 | /JPEGImages/2009_002646.jpg
791 | /JPEGImages/2009_002656.jpg
792 | /JPEGImages/2009_002666.jpg
793 | /JPEGImages/2009_002720.jpg
794 | /JPEGImages/2009_002767.jpg
795 | /JPEGImages/2009_002768.jpg
796 | /JPEGImages/2009_002794.jpg
797 | /JPEGImages/2009_002821.jpg
798 | /JPEGImages/2009_002825.jpg
799 | /JPEGImages/2009_002839.jpg
800 | /JPEGImages/2009_002840.jpg
801 | /JPEGImages/2009_002859.jpg
802 | /JPEGImages/2009_002860.jpg
803 | /JPEGImages/2009_002881.jpg
804 | /JPEGImages/2009_002889.jpg
805 | /JPEGImages/2009_002892.jpg
806 | /JPEGImages/2009_002895.jpg
807 | /JPEGImages/2009_002896.jpg
808 | /JPEGImages/2009_002900.jpg
809 | /JPEGImages/2009_002924.jpg
810 | /JPEGImages/2009_002966.jpg
811 | /JPEGImages/2009_002973.jpg
812 | /JPEGImages/2009_002981.jpg
813 | /JPEGImages/2009_003004.jpg
814 | /JPEGImages/2009_003021.jpg
815 | /JPEGImages/2009_003028.jpg
816 | /JPEGImages/2009_003037.jpg
817 | /JPEGImages/2009_003038.jpg
818 | /JPEGImages/2009_003055.jpg
819 | /JPEGImages/2009_003085.jpg
820 | /JPEGImages/2009_003100.jpg
821 | /JPEGImages/2009_003106.jpg
822 | /JPEGImages/2009_003117.jpg
823 | /JPEGImages/2009_003139.jpg
824 | /JPEGImages/2009_003170.jpg
825 | /JPEGImages/2009_003179.jpg
826 | /JPEGImages/2009_003184.jpg
827 | /JPEGImages/2009_003186.jpg
828 | /JPEGImages/2009_003190.jpg
829 | /JPEGImages/2009_003221.jpg
830 | /JPEGImages/2009_003236.jpg
831 | /JPEGImages/2009_003242.jpg
832 | /JPEGImages/2009_003244.jpg
833 | /JPEGImages/2009_003260.jpg
834 | /JPEGImages/2009_003264.jpg
835 | /JPEGImages/2009_003274.jpg
836 | /JPEGImages/2009_003283.jpg
837 | /JPEGImages/2009_003296.jpg
838 | /JPEGImages/2009_003332.jpg
839 | /JPEGImages/2009_003341.jpg
840 | /JPEGImages/2009_003354.jpg
841 | /JPEGImages/2009_003370.jpg
842 | /JPEGImages/2009_003371.jpg
843 | /JPEGImages/2009_003374.jpg
844 | /JPEGImages/2009_003391.jpg
845 | /JPEGImages/2009_003393.jpg
846 | /JPEGImages/2009_003404.jpg
847 | /JPEGImages/2009_003405.jpg
848 | /JPEGImages/2009_003414.jpg
849 | /JPEGImages/2009_003428.jpg
850 | /JPEGImages/2009_003470.jpg
851 | /JPEGImages/2009_003474.jpg
852 | /JPEGImages/2009_003532.jpg
853 | /JPEGImages/2009_003536.jpg
854 | /JPEGImages/2009_003578.jpg
855 | /JPEGImages/2009_003580.jpg
856 | /JPEGImages/2009_003620.jpg
857 | /JPEGImages/2009_003621.jpg
858 | /JPEGImages/2009_003680.jpg
859 | /JPEGImages/2009_003699.jpg
860 | /JPEGImages/2009_003727.jpg
861 | /JPEGImages/2009_003737.jpg
862 | /JPEGImages/2009_003780.jpg
863 | /JPEGImages/2009_003811.jpg
864 | /JPEGImages/2009_003824.jpg
865 | /JPEGImages/2009_003831.jpg
866 | /JPEGImages/2009_003844.jpg
867 | /JPEGImages/2009_003850.jpg
868 | /JPEGImages/2009_003851.jpg
869 | /JPEGImages/2009_003864.jpg
870 | /JPEGImages/2009_003868.jpg
871 | /JPEGImages/2009_003869.jpg
872 | /JPEGImages/2009_003893.jpg
873 | /JPEGImages/2009_003909.jpg
874 | /JPEGImages/2009_003924.jpg
875 | /JPEGImages/2009_003925.jpg
876 | /JPEGImages/2009_003960.jpg
877 | /JPEGImages/2009_003979.jpg
878 | /JPEGImages/2009_003990.jpg
879 | /JPEGImages/2009_003997.jpg
880 | /JPEGImages/2009_004006.jpg
881 | /JPEGImages/2009_004010.jpg
882 | /JPEGImages/2009_004066.jpg
883 | /JPEGImages/2009_004077.jpg
884 | /JPEGImages/2009_004081.jpg
885 | /JPEGImages/2009_004097.jpg
886 | /JPEGImages/2009_004098.jpg
887 | /JPEGImages/2009_004136.jpg
888 | /JPEGImages/2009_004216.jpg
889 | /JPEGImages/2009_004220.jpg
890 | /JPEGImages/2009_004266.jpg
891 | /JPEGImages/2009_004269.jpg
892 | /JPEGImages/2009_004286.jpg
893 | /JPEGImages/2009_004296.jpg
894 | /JPEGImages/2009_004321.jpg
895 | /JPEGImages/2009_004342.jpg
896 | /JPEGImages/2009_004343.jpg
897 | /JPEGImages/2009_004344.jpg
898 | /JPEGImages/2009_004385.jpg
899 | /JPEGImages/2009_004408.jpg
900 | /JPEGImages/2009_004420.jpg
901 | /JPEGImages/2009_004441.jpg
902 | /JPEGImages/2009_004447.jpg
903 | /JPEGImages/2009_004461.jpg
904 | /JPEGImages/2009_004467.jpg
905 | /JPEGImages/2009_004485.jpg
906 | /JPEGImages/2009_004488.jpg
907 | /JPEGImages/2009_004516.jpg
908 | /JPEGImages/2009_004521.jpg
909 | /JPEGImages/2009_004544.jpg
910 | /JPEGImages/2009_004596.jpg
911 | /JPEGImages/2009_004613.jpg
912 | /JPEGImages/2009_004615.jpg
913 | /JPEGImages/2009_004618.jpg
914 | /JPEGImages/2009_004621.jpg
915 | /JPEGImages/2009_004646.jpg
916 | /JPEGImages/2009_004659.jpg
917 | /JPEGImages/2009_004663.jpg
918 | /JPEGImages/2009_004666.jpg
919 | /JPEGImages/2009_004691.jpg
920 | /JPEGImages/2009_004715.jpg
921 | /JPEGImages/2009_004726.jpg
922 | /JPEGImages/2009_004753.jpg
923 | /JPEGImages/2009_004776.jpg
924 | /JPEGImages/2009_004811.jpg
925 | /JPEGImages/2009_004814.jpg
926 | /JPEGImages/2009_004818.jpg
927 | /JPEGImages/2009_004835.jpg
928 | /JPEGImages/2009_004863.jpg
929 | /JPEGImages/2009_004894.jpg
930 | /JPEGImages/2009_004909.jpg
931 | /JPEGImages/2009_004928.jpg
932 | /JPEGImages/2009_004937.jpg
933 | /JPEGImages/2009_004954.jpg
934 | /JPEGImages/2009_004966.jpg
935 | /JPEGImages/2009_004970.jpg
936 | /JPEGImages/2009_004976.jpg
937 | /JPEGImages/2009_005004.jpg
938 | /JPEGImages/2009_005011.jpg
939 | /JPEGImages/2009_005053.jpg
940 | /JPEGImages/2009_005072.jpg
941 | /JPEGImages/2009_005115.jpg
942 | /JPEGImages/2009_005146.jpg
943 | /JPEGImages/2009_005151.jpg
944 | /JPEGImages/2009_005164.jpg
945 | /JPEGImages/2009_005179.jpg
946 | /JPEGImages/2009_005224.jpg
947 | /JPEGImages/2009_005243.jpg
948 | /JPEGImages/2009_005249.jpg
949 | /JPEGImages/2009_005252.jpg
950 | /JPEGImages/2009_005254.jpg
951 | /JPEGImages/2009_005258.jpg
952 | /JPEGImages/2009_005264.jpg
953 | /JPEGImages/2009_005266.jpg
954 | /JPEGImages/2009_005276.jpg
955 | /JPEGImages/2009_005290.jpg
956 | /JPEGImages/2009_005295.jpg
957 | /JPEGImages/2010_000004.jpg
958 | /JPEGImages/2010_000005.jpg
959 | /JPEGImages/2010_000006.jpg
960 | /JPEGImages/2010_000032.jpg
961 | /JPEGImages/2010_000062.jpg
962 | /JPEGImages/2010_000093.jpg
963 | /JPEGImages/2010_000094.jpg
964 | /JPEGImages/2010_000161.jpg
965 | /JPEGImages/2010_000176.jpg
966 | /JPEGImages/2010_000223.jpg
967 | /JPEGImages/2010_000226.jpg
968 | /JPEGImages/2010_000236.jpg
969 | /JPEGImages/2010_000239.jpg
970 | /JPEGImages/2010_000287.jpg
971 | /JPEGImages/2010_000300.jpg
972 | /JPEGImages/2010_000301.jpg
973 | /JPEGImages/2010_000328.jpg
974 | /JPEGImages/2010_000378.jpg
975 | /JPEGImages/2010_000405.jpg
976 | /JPEGImages/2010_000407.jpg
977 | /JPEGImages/2010_000472.jpg
978 | /JPEGImages/2010_000479.jpg
979 | /JPEGImages/2010_000491.jpg
980 | /JPEGImages/2010_000533.jpg
981 | /JPEGImages/2010_000535.jpg
982 | /JPEGImages/2010_000542.jpg
983 | /JPEGImages/2010_000554.jpg
984 | /JPEGImages/2010_000580.jpg
985 | /JPEGImages/2010_000594.jpg
986 | /JPEGImages/2010_000596.jpg
987 | /JPEGImages/2010_000599.jpg
988 | /JPEGImages/2010_000606.jpg
989 | /JPEGImages/2010_000615.jpg
990 | /JPEGImages/2010_000654.jpg
991 | /JPEGImages/2010_000659.jpg
992 | /JPEGImages/2010_000693.jpg
993 | /JPEGImages/2010_000698.jpg
994 | /JPEGImages/2010_000730.jpg
995 | /JPEGImages/2010_000734.jpg
996 | /JPEGImages/2010_000741.jpg
997 | /JPEGImages/2010_000755.jpg
998 | /JPEGImages/2010_000768.jpg
999 | /JPEGImages/2010_000794.jpg
1000 | /JPEGImages/2010_000813.jpg
1001 | /JPEGImages/2010_000817.jpg
1002 | /JPEGImages/2010_000834.jpg
1003 | /JPEGImages/2010_000839.jpg
1004 | /JPEGImages/2010_000848.jpg
1005 | /JPEGImages/2010_000881.jpg
1006 | /JPEGImages/2010_000888.jpg
1007 | /JPEGImages/2010_000900.jpg
1008 | /JPEGImages/2010_000903.jpg
1009 | /JPEGImages/2010_000924.jpg
1010 | /JPEGImages/2010_000946.jpg
1011 | /JPEGImages/2010_000953.jpg
1012 | /JPEGImages/2010_000957.jpg
1013 | /JPEGImages/2010_000967.jpg
1014 | /JPEGImages/2010_000992.jpg
1015 | /JPEGImages/2010_000998.jpg
1016 | /JPEGImages/2010_001053.jpg
1017 | /JPEGImages/2010_001067.jpg
1018 | /JPEGImages/2010_001114.jpg
1019 | /JPEGImages/2010_001132.jpg
1020 | /JPEGImages/2010_001138.jpg
1021 | /JPEGImages/2010_001169.jpg
1022 | /JPEGImages/2010_001171.jpg
1023 | /JPEGImages/2010_001228.jpg
1024 | /JPEGImages/2010_001260.jpg
1025 | /JPEGImages/2010_001268.jpg
1026 | /JPEGImages/2010_001280.jpg
1027 | /JPEGImages/2010_001298.jpg
1028 | /JPEGImages/2010_001302.jpg
1029 | /JPEGImages/2010_001308.jpg
1030 | /JPEGImages/2010_001324.jpg
1031 | /JPEGImages/2010_001332.jpg
1032 | /JPEGImages/2010_001335.jpg
1033 | /JPEGImages/2010_001345.jpg
1034 | /JPEGImages/2010_001346.jpg
1035 | /JPEGImages/2010_001349.jpg
1036 | /JPEGImages/2010_001373.jpg
1037 | /JPEGImages/2010_001381.jpg
1038 | /JPEGImages/2010_001392.jpg
1039 | /JPEGImages/2010_001396.jpg
1040 | /JPEGImages/2010_001420.jpg
1041 | /JPEGImages/2010_001500.jpg
1042 | /JPEGImages/2010_001506.jpg
1043 | /JPEGImages/2010_001521.jpg
1044 | /JPEGImages/2010_001532.jpg
1045 | /JPEGImages/2010_001558.jpg
1046 | /JPEGImages/2010_001598.jpg
1047 | /JPEGImages/2010_001611.jpg
1048 | /JPEGImages/2010_001631.jpg
1049 | /JPEGImages/2010_001639.jpg
1050 | /JPEGImages/2010_001651.jpg
1051 | /JPEGImages/2010_001663.jpg
1052 | /JPEGImages/2010_001664.jpg
1053 | /JPEGImages/2010_001728.jpg
1054 | /JPEGImages/2010_001778.jpg
1055 | /JPEGImages/2010_001861.jpg
1056 | /JPEGImages/2010_001874.jpg
1057 | /JPEGImages/2010_001900.jpg
1058 | /JPEGImages/2010_001905.jpg
1059 | /JPEGImages/2010_001969.jpg
1060 | /JPEGImages/2010_002008.jpg
1061 | /JPEGImages/2010_002014.jpg
1062 | /JPEGImages/2010_002049.jpg
1063 | /JPEGImages/2010_002052.jpg
1064 | /JPEGImages/2010_002091.jpg
1065 | /JPEGImages/2010_002115.jpg
1066 | /JPEGImages/2010_002119.jpg
1067 | /JPEGImages/2010_002134.jpg
1068 | /JPEGImages/2010_002156.jpg
1069 | /JPEGImages/2010_002160.jpg
1070 | /JPEGImages/2010_002186.jpg
1071 | /JPEGImages/2010_002210.jpg
1072 | /JPEGImages/2010_002241.jpg
1073 | /JPEGImages/2010_002252.jpg
1074 | /JPEGImages/2010_002258.jpg
1075 | /JPEGImages/2010_002262.jpg
1076 | /JPEGImages/2010_002273.jpg
1077 | /JPEGImages/2010_002290.jpg
1078 | /JPEGImages/2010_002292.jpg
1079 | /JPEGImages/2010_002347.jpg
1080 | /JPEGImages/2010_002358.jpg
1081 | /JPEGImages/2010_002360.jpg
1082 | /JPEGImages/2010_002367.jpg
1083 | /JPEGImages/2010_002416.jpg
1084 | /JPEGImages/2010_002451.jpg
1085 | /JPEGImages/2010_002481.jpg
1086 | /JPEGImages/2010_002490.jpg
1087 | /JPEGImages/2010_002495.jpg
1088 | /JPEGImages/2010_002588.jpg
1089 | /JPEGImages/2010_002607.jpg
1090 | /JPEGImages/2010_002609.jpg
1091 | /JPEGImages/2010_002610.jpg
1092 | /JPEGImages/2010_002641.jpg
1093 | /JPEGImages/2010_002685.jpg
1094 | /JPEGImages/2010_002699.jpg
1095 | /JPEGImages/2010_002719.jpg
1096 | /JPEGImages/2010_002735.jpg
1097 | /JPEGImages/2010_002751.jpg
1098 | /JPEGImages/2010_002804.jpg
1099 | /JPEGImages/2010_002835.jpg
1100 | /JPEGImages/2010_002852.jpg
1101 | /JPEGImages/2010_002885.jpg
1102 | /JPEGImages/2010_002889.jpg
1103 | /JPEGImages/2010_002904.jpg
1104 | /JPEGImages/2010_002908.jpg
1105 | /JPEGImages/2010_002916.jpg
1106 | /JPEGImages/2010_002974.jpg
1107 | /JPEGImages/2010_002977.jpg
1108 | /JPEGImages/2010_003005.jpg
1109 | /JPEGImages/2010_003021.jpg
1110 | /JPEGImages/2010_003030.jpg
1111 | /JPEGImages/2010_003038.jpg
1112 | /JPEGImages/2010_003046.jpg
1113 | /JPEGImages/2010_003052.jpg
1114 | /JPEGImages/2010_003089.jpg
1115 | /JPEGImages/2010_003110.jpg
1116 | /JPEGImages/2010_003118.jpg
1117 | /JPEGImages/2010_003171.jpg
1118 | /JPEGImages/2010_003217.jpg
1119 | /JPEGImages/2010_003221.jpg
1120 | /JPEGImages/2010_003228.jpg
1121 | /JPEGImages/2010_003243.jpg
1122 | /JPEGImages/2010_003271.jpg
1123 | /JPEGImages/2010_003295.jpg
1124 | /JPEGImages/2010_003306.jpg
1125 | /JPEGImages/2010_003324.jpg
1126 | /JPEGImages/2010_003363.jpg
1127 | /JPEGImages/2010_003382.jpg
1128 | /JPEGImages/2010_003388.jpg
1129 | /JPEGImages/2010_003389.jpg
1130 | /JPEGImages/2010_003392.jpg
1131 | /JPEGImages/2010_003430.jpg
1132 | /JPEGImages/2010_003442.jpg
1133 | /JPEGImages/2010_003459.jpg
1134 | /JPEGImages/2010_003485.jpg
1135 | /JPEGImages/2010_003486.jpg
1136 | /JPEGImages/2010_003500.jpg
1137 | /JPEGImages/2010_003523.jpg
1138 | /JPEGImages/2010_003542.jpg
1139 | /JPEGImages/2010_003552.jpg
1140 | /JPEGImages/2010_003570.jpg
1141 | /JPEGImages/2010_003572.jpg
1142 | /JPEGImages/2010_003586.jpg
1143 | /JPEGImages/2010_003615.jpg
1144 | /JPEGImages/2010_003623.jpg
1145 | /JPEGImages/2010_003657.jpg
1146 | /JPEGImages/2010_003666.jpg
1147 | /JPEGImages/2010_003705.jpg
1148 | /JPEGImages/2010_003710.jpg
1149 | /JPEGImages/2010_003720.jpg
1150 | /JPEGImages/2010_003733.jpg
1151 | /JPEGImages/2010_003750.jpg
1152 | /JPEGImages/2010_003767.jpg
1153 | /JPEGImages/2010_003802.jpg
1154 | /JPEGImages/2010_003809.jpg
1155 | /JPEGImages/2010_003830.jpg
1156 | /JPEGImages/2010_003832.jpg
1157 | /JPEGImages/2010_003836.jpg
1158 | /JPEGImages/2010_003838.jpg
1159 | /JPEGImages/2010_003850.jpg
1160 | /JPEGImages/2010_003867.jpg
1161 | /JPEGImages/2010_003882.jpg
1162 | /JPEGImages/2010_003909.jpg
1163 | /JPEGImages/2010_003922.jpg
1164 | /JPEGImages/2010_003923.jpg
1165 | /JPEGImages/2010_003978.jpg
1166 | /JPEGImages/2010_003989.jpg
1167 | /JPEGImages/2010_003990.jpg
1168 | /JPEGImages/2010_004000.jpg
1169 | /JPEGImages/2010_004003.jpg
1170 | /JPEGImages/2010_004068.jpg
1171 | /JPEGImages/2010_004076.jpg
1172 | /JPEGImages/2010_004117.jpg
1173 | /JPEGImages/2010_004136.jpg
1174 | /JPEGImages/2010_004142.jpg
1175 | /JPEGImages/2010_004195.jpg
1176 | /JPEGImages/2010_004200.jpg
1177 | /JPEGImages/2010_004202.jpg
1178 | /JPEGImages/2010_004232.jpg
1179 | /JPEGImages/2010_004261.jpg
1180 | /JPEGImages/2010_004266.jpg
1181 | /JPEGImages/2010_004273.jpg
1182 | /JPEGImages/2010_004305.jpg
1183 | /JPEGImages/2010_004403.jpg
1184 | /JPEGImages/2010_004433.jpg
1185 | /JPEGImages/2010_004434.jpg
1186 | /JPEGImages/2010_004435.jpg
1187 | /JPEGImages/2010_004438.jpg
1188 | /JPEGImages/2010_004442.jpg
1189 | /JPEGImages/2010_004473.jpg
1190 | /JPEGImages/2010_004482.jpg
1191 | /JPEGImages/2010_004487.jpg
1192 | /JPEGImages/2010_004489.jpg
1193 | /JPEGImages/2010_004512.jpg
1194 | /JPEGImages/2010_004525.jpg
1195 | /JPEGImages/2010_004527.jpg
1196 | /JPEGImages/2010_004532.jpg
1197 | /JPEGImages/2010_004566.jpg
1198 | /JPEGImages/2010_004568.jpg
1199 | /JPEGImages/2010_004579.jpg
1200 | /JPEGImages/2010_004611.jpg
1201 | /JPEGImages/2010_004641.jpg
1202 | /JPEGImages/2010_004688.jpg
1203 | /JPEGImages/2010_004699.jpg
1204 | /JPEGImages/2010_004702.jpg
1205 | /JPEGImages/2010_004716.jpg
1206 | /JPEGImages/2010_004754.jpg
1207 | /JPEGImages/2010_004767.jpg
1208 | /JPEGImages/2010_004776.jpg
1209 | /JPEGImages/2010_004811.jpg
1210 | /JPEGImages/2010_004837.jpg
1211 | /JPEGImages/2010_004839.jpg
1212 | /JPEGImages/2010_004845.jpg
1213 | /JPEGImages/2010_004860.jpg
1214 | /JPEGImages/2010_004867.jpg
1215 | /JPEGImages/2010_004881.jpg
1216 | /JPEGImages/2010_004939.jpg
1217 | /JPEGImages/2010_005001.jpg
1218 | /JPEGImages/2010_005047.jpg
1219 | /JPEGImages/2010_005051.jpg
1220 | /JPEGImages/2010_005091.jpg
1221 | /JPEGImages/2010_005095.jpg
1222 | /JPEGImages/2010_005125.jpg
1223 | /JPEGImages/2010_005140.jpg
1224 | /JPEGImages/2010_005177.jpg
1225 | /JPEGImages/2010_005178.jpg
1226 | /JPEGImages/2010_005194.jpg
1227 | /JPEGImages/2010_005197.jpg
1228 | /JPEGImages/2010_005200.jpg
1229 | /JPEGImages/2010_005205.jpg
1230 | /JPEGImages/2010_005212.jpg
1231 | /JPEGImages/2010_005248.jpg
1232 | /JPEGImages/2010_005294.jpg
1233 | /JPEGImages/2010_005298.jpg
1234 | /JPEGImages/2010_005313.jpg
1235 | /JPEGImages/2010_005324.jpg
1236 | /JPEGImages/2010_005328.jpg
1237 | /JPEGImages/2010_005329.jpg
1238 | /JPEGImages/2010_005380.jpg
1239 | /JPEGImages/2010_005404.jpg
1240 | /JPEGImages/2010_005407.jpg
1241 | /JPEGImages/2010_005411.jpg
1242 | /JPEGImages/2010_005423.jpg
1243 | /JPEGImages/2010_005499.jpg
1244 | /JPEGImages/2010_005509.jpg
1245 | /JPEGImages/2010_005510.jpg
1246 | /JPEGImages/2010_005544.jpg
1247 | /JPEGImages/2010_005549.jpg
1248 | /JPEGImages/2010_005590.jpg
1249 | /JPEGImages/2010_005639.jpg
1250 | /JPEGImages/2010_005699.jpg
1251 | /JPEGImages/2010_005704.jpg
1252 | /JPEGImages/2010_005707.jpg
1253 | /JPEGImages/2010_005711.jpg
1254 | /JPEGImages/2010_005726.jpg
1255 | /JPEGImages/2010_005741.jpg
1256 | /JPEGImages/2010_005765.jpg
1257 | /JPEGImages/2010_005790.jpg
1258 | /JPEGImages/2010_005792.jpg
1259 | /JPEGImages/2010_005797.jpg
1260 | /JPEGImages/2010_005812.jpg
1261 | /JPEGImages/2010_005850.jpg
1262 | /JPEGImages/2010_005861.jpg
1263 | /JPEGImages/2010_005869.jpg
1264 | /JPEGImages/2010_005908.jpg
1265 | /JPEGImages/2010_005915.jpg
1266 | /JPEGImages/2010_005946.jpg
1267 | /JPEGImages/2010_005965.jpg
1268 | /JPEGImages/2010_006044.jpg
1269 | /JPEGImages/2010_006047.jpg
1270 | /JPEGImages/2010_006052.jpg
1271 | /JPEGImages/2010_006081.jpg
1272 | /JPEGImages/2011_000001.jpg
1273 | /JPEGImages/2011_000013.jpg
1274 | /JPEGImages/2011_000014.jpg
1275 | /JPEGImages/2011_000020.jpg
1276 | /JPEGImages/2011_000032.jpg
1277 | /JPEGImages/2011_000042.jpg
1278 | /JPEGImages/2011_000063.jpg
1279 | /JPEGImages/2011_000115.jpg
1280 | /JPEGImages/2011_000120.jpg
1281 | /JPEGImages/2011_000240.jpg
1282 | /JPEGImages/2011_000244.jpg
1283 | /JPEGImages/2011_000254.jpg
1284 | /JPEGImages/2011_000261.jpg
1285 | /JPEGImages/2011_000262.jpg
1286 | /JPEGImages/2011_000271.jpg
1287 | /JPEGImages/2011_000274.jpg
1288 | /JPEGImages/2011_000306.jpg
1289 | /JPEGImages/2011_000311.jpg
1290 | /JPEGImages/2011_000316.jpg
1291 | /JPEGImages/2011_000328.jpg
1292 | /JPEGImages/2011_000351.jpg
1293 | /JPEGImages/2011_000352.jpg
1294 | /JPEGImages/2011_000406.jpg
1295 | /JPEGImages/2011_000414.jpg
1296 | /JPEGImages/2011_000448.jpg
1297 | /JPEGImages/2011_000451.jpg
1298 | /JPEGImages/2011_000470.jpg
1299 | /JPEGImages/2011_000473.jpg
1300 | /JPEGImages/2011_000515.jpg
1301 | /JPEGImages/2011_000537.jpg
1302 | /JPEGImages/2011_000576.jpg
1303 | /JPEGImages/2011_000603.jpg
1304 | /JPEGImages/2011_000616.jpg
1305 | /JPEGImages/2011_000636.jpg
1306 | /JPEGImages/2011_000639.jpg
1307 | /JPEGImages/2011_000654.jpg
1308 | /JPEGImages/2011_000660.jpg
1309 | /JPEGImages/2011_000664.jpg
1310 | /JPEGImages/2011_000667.jpg
1311 | /JPEGImages/2011_000670.jpg
1312 | /JPEGImages/2011_000676.jpg
1313 | /JPEGImages/2011_000721.jpg
1314 | /JPEGImages/2011_000723.jpg
1315 | /JPEGImages/2011_000762.jpg
1316 | /JPEGImages/2011_000766.jpg
1317 | /JPEGImages/2011_000786.jpg
1318 | /JPEGImages/2011_000802.jpg
1319 | /JPEGImages/2011_000810.jpg
1320 | /JPEGImages/2011_000821.jpg
1321 | /JPEGImages/2011_000841.jpg
1322 | /JPEGImages/2011_000844.jpg
1323 | /JPEGImages/2011_000846.jpg
1324 | /JPEGImages/2011_000869.jpg
1325 | /JPEGImages/2011_000890.jpg
1326 | /JPEGImages/2011_000915.jpg
1327 | /JPEGImages/2011_000924.jpg
1328 | /JPEGImages/2011_000937.jpg
1329 | /JPEGImages/2011_000939.jpg
1330 | /JPEGImages/2011_000952.jpg
1331 | /JPEGImages/2011_000968.jpg
1332 | /JPEGImages/2011_000974.jpg
1333 | /JPEGImages/2011_001037.jpg
1334 | /JPEGImages/2011_001072.jpg
1335 | /JPEGImages/2011_001085.jpg
1336 | /JPEGImages/2011_001089.jpg
1337 | /JPEGImages/2011_001090.jpg
1338 | /JPEGImages/2011_001099.jpg
1339 | /JPEGImages/2011_001104.jpg
1340 | /JPEGImages/2011_001112.jpg
1341 | /JPEGImages/2011_001120.jpg
1342 | /JPEGImages/2011_001132.jpg
1343 | /JPEGImages/2011_001151.jpg
1344 | /JPEGImages/2011_001194.jpg
1345 | /JPEGImages/2011_001258.jpg
1346 | /JPEGImages/2011_001274.jpg
1347 | /JPEGImages/2011_001314.jpg
1348 | /JPEGImages/2011_001317.jpg
1349 | /JPEGImages/2011_001321.jpg
1350 | /JPEGImages/2011_001379.jpg
1351 | /JPEGImages/2011_001425.jpg
1352 | /JPEGImages/2011_001431.jpg
1353 | /JPEGImages/2011_001443.jpg
1354 | /JPEGImages/2011_001446.jpg
1355 | /JPEGImages/2011_001452.jpg
1356 | /JPEGImages/2011_001454.jpg
1357 | /JPEGImages/2011_001477.jpg
1358 | /JPEGImages/2011_001509.jpg
1359 | /JPEGImages/2011_001512.jpg
1360 | /JPEGImages/2011_001515.jpg
1361 | /JPEGImages/2011_001528.jpg
1362 | /JPEGImages/2011_001554.jpg
1363 | /JPEGImages/2011_001561.jpg
1364 | /JPEGImages/2011_001580.jpg
1365 | /JPEGImages/2011_001587.jpg
1366 | /JPEGImages/2011_001623.jpg
1367 | /JPEGImages/2011_001648.jpg
1368 | /JPEGImages/2011_001651.jpg
1369 | /JPEGImages/2011_001654.jpg
1370 | /JPEGImages/2011_001684.jpg
1371 | /JPEGImages/2011_001696.jpg
1372 | /JPEGImages/2011_001697.jpg
1373 | /JPEGImages/2011_001760.jpg
1374 | /JPEGImages/2011_001761.jpg
1375 | /JPEGImages/2011_001798.jpg
1376 | /JPEGImages/2011_001807.jpg
1377 | /JPEGImages/2011_001851.jpg
1378 | /JPEGImages/2011_001852.jpg
1379 | /JPEGImages/2011_001853.jpg
1380 | /JPEGImages/2011_001888.jpg
1381 | /JPEGImages/2011_001940.jpg
1382 | /JPEGImages/2011_002014.jpg
1383 | /JPEGImages/2011_002028.jpg
1384 | /JPEGImages/2011_002056.jpg
1385 | /JPEGImages/2011_002061.jpg
1386 | /JPEGImages/2011_002068.jpg
1387 | /JPEGImages/2011_002076.jpg
1388 | /JPEGImages/2011_002090.jpg
1389 | /JPEGImages/2011_002095.jpg
1390 | /JPEGImages/2011_002104.jpg
1391 | /JPEGImages/2011_002136.jpg
1392 | /JPEGImages/2011_002138.jpg
1393 | /JPEGImages/2011_002151.jpg
1394 | /JPEGImages/2011_002153.jpg
1395 | /JPEGImages/2011_002155.jpg
1396 | /JPEGImages/2011_002197.jpg
1397 | /JPEGImages/2011_002198.jpg
1398 | /JPEGImages/2011_002243.jpg
1399 | /JPEGImages/2011_002250.jpg
1400 | /JPEGImages/2011_002257.jpg
1401 | /JPEGImages/2011_002262.jpg
1402 | /JPEGImages/2011_002264.jpg
1403 | /JPEGImages/2011_002296.jpg
1404 | /JPEGImages/2011_002314.jpg
1405 | /JPEGImages/2011_002331.jpg
1406 | /JPEGImages/2011_002333.jpg
1407 | /JPEGImages/2011_002411.jpg
1408 | /JPEGImages/2011_002417.jpg
1409 | /JPEGImages/2011_002425.jpg
1410 | /JPEGImages/2011_002437.jpg
1411 | /JPEGImages/2011_002444.jpg
1412 | /JPEGImages/2011_002445.jpg
1413 | /JPEGImages/2011_002449.jpg
1414 | /JPEGImages/2011_002468.jpg
1415 | /JPEGImages/2011_002469.jpg
1416 | /JPEGImages/2011_002473.jpg
1417 | /JPEGImages/2011_002508.jpg
1418 | /JPEGImages/2011_002523.jpg
1419 | /JPEGImages/2011_002534.jpg
1420 | /JPEGImages/2011_002557.jpg
1421 | /JPEGImages/2011_002564.jpg
1422 | /JPEGImages/2011_002572.jpg
1423 | /JPEGImages/2011_002597.jpg
1424 | /JPEGImages/2011_002622.jpg
1425 | /JPEGImages/2011_002632.jpg
1426 | /JPEGImages/2011_002635.jpg
1427 | /JPEGImages/2011_002643.jpg
1428 | /JPEGImages/2011_002653.jpg
1429 | /JPEGImages/2011_002667.jpg
1430 | /JPEGImages/2011_002681.jpg
1431 | /JPEGImages/2011_002707.jpg
1432 | /JPEGImages/2011_002736.jpg
1433 | /JPEGImages/2011_002759.jpg
1434 | /JPEGImages/2011_002783.jpg
1435 | /JPEGImages/2011_002792.jpg
1436 | /JPEGImages/2011_002799.jpg
1437 | /JPEGImages/2011_002824.jpg
1438 | /JPEGImages/2011_002835.jpg
1439 | /JPEGImages/2011_002866.jpg
1440 | /JPEGImages/2011_002876.jpg
1441 | /JPEGImages/2011_002888.jpg
1442 | /JPEGImages/2011_002894.jpg
1443 | /JPEGImages/2011_002903.jpg
1444 | /JPEGImages/2011_002905.jpg
1445 | /JPEGImages/2011_002986.jpg
1446 | /JPEGImages/2011_003045.jpg
1447 | /JPEGImages/2011_003064.jpg
1448 | /JPEGImages/2011_003070.jpg
1449 | /JPEGImages/2011_003083.jpg
1450 | /JPEGImages/2011_003093.jpg
1451 | /JPEGImages/2011_003096.jpg
1452 | /JPEGImages/2011_003102.jpg
1453 | /JPEGImages/2011_003156.jpg
1454 | /JPEGImages/2011_003170.jpg
1455 | /JPEGImages/2011_003178.jpg
1456 | /JPEGImages/2011_003231.jpg
1457 |
--------------------------------------------------------------------------------
/voc12/val_id.txt:
--------------------------------------------------------------------------------
1 | 2007_000033
2 | 2007_000042
3 | 2007_000061
4 | 2007_000123
5 | 2007_000129
6 | 2007_000175
7 | 2007_000187
8 | 2007_000323
9 | 2007_000332
10 | 2007_000346
11 | 2007_000452
12 | 2007_000464
13 | 2007_000491
14 | 2007_000529
15 | 2007_000559
16 | 2007_000572
17 | 2007_000629
18 | 2007_000636
19 | 2007_000661
20 | 2007_000663
21 | 2007_000676
22 | 2007_000727
23 | 2007_000762
24 | 2007_000783
25 | 2007_000799
26 | 2007_000804
27 | 2007_000830
28 | 2007_000837
29 | 2007_000847
30 | 2007_000862
31 | 2007_000925
32 | 2007_000999
33 | 2007_001154
34 | 2007_001175
35 | 2007_001239
36 | 2007_001284
37 | 2007_001288
38 | 2007_001289
39 | 2007_001299
40 | 2007_001311
41 | 2007_001321
42 | 2007_001377
43 | 2007_001408
44 | 2007_001423
45 | 2007_001430
46 | 2007_001457
47 | 2007_001458
48 | 2007_001526
49 | 2007_001568
50 | 2007_001585
51 | 2007_001586
52 | 2007_001587
53 | 2007_001594
54 | 2007_001630
55 | 2007_001677
56 | 2007_001678
57 | 2007_001717
58 | 2007_001733
59 | 2007_001761
60 | 2007_001763
61 | 2007_001774
62 | 2007_001884
63 | 2007_001955
64 | 2007_002046
65 | 2007_002094
66 | 2007_002119
67 | 2007_002132
68 | 2007_002260
69 | 2007_002266
70 | 2007_002268
71 | 2007_002284
72 | 2007_002376
73 | 2007_002378
74 | 2007_002387
75 | 2007_002400
76 | 2007_002412
77 | 2007_002426
78 | 2007_002427
79 | 2007_002445
80 | 2007_002470
81 | 2007_002539
82 | 2007_002565
83 | 2007_002597
84 | 2007_002618
85 | 2007_002619
86 | 2007_002624
87 | 2007_002643
88 | 2007_002648
89 | 2007_002719
90 | 2007_002728
91 | 2007_002823
92 | 2007_002824
93 | 2007_002852
94 | 2007_002903
95 | 2007_003011
96 | 2007_003020
97 | 2007_003022
98 | 2007_003051
99 | 2007_003088
100 | 2007_003101
101 | 2007_003106
102 | 2007_003110
103 | 2007_003131
104 | 2007_003134
105 | 2007_003137
106 | 2007_003143
107 | 2007_003169
108 | 2007_003188
109 | 2007_003194
110 | 2007_003195
111 | 2007_003201
112 | 2007_003349
113 | 2007_003367
114 | 2007_003373
115 | 2007_003499
116 | 2007_003503
117 | 2007_003506
118 | 2007_003530
119 | 2007_003571
120 | 2007_003587
121 | 2007_003611
122 | 2007_003621
123 | 2007_003682
124 | 2007_003711
125 | 2007_003714
126 | 2007_003742
127 | 2007_003786
128 | 2007_003841
129 | 2007_003848
130 | 2007_003861
131 | 2007_003872
132 | 2007_003917
133 | 2007_003957
134 | 2007_003991
135 | 2007_004033
136 | 2007_004052
137 | 2007_004112
138 | 2007_004121
139 | 2007_004143
140 | 2007_004189
141 | 2007_004190
142 | 2007_004193
143 | 2007_004241
144 | 2007_004275
145 | 2007_004281
146 | 2007_004380
147 | 2007_004392
148 | 2007_004405
149 | 2007_004468
150 | 2007_004483
151 | 2007_004510
152 | 2007_004538
153 | 2007_004558
154 | 2007_004644
155 | 2007_004649
156 | 2007_004712
157 | 2007_004722
158 | 2007_004856
159 | 2007_004866
160 | 2007_004902
161 | 2007_004969
162 | 2007_005058
163 | 2007_005074
164 | 2007_005107
165 | 2007_005114
166 | 2007_005149
167 | 2007_005173
168 | 2007_005281
169 | 2007_005294
170 | 2007_005296
171 | 2007_005304
172 | 2007_005331
173 | 2007_005354
174 | 2007_005358
175 | 2007_005428
176 | 2007_005460
177 | 2007_005469
178 | 2007_005509
179 | 2007_005547
180 | 2007_005600
181 | 2007_005608
182 | 2007_005626
183 | 2007_005689
184 | 2007_005696
185 | 2007_005705
186 | 2007_005759
187 | 2007_005803
188 | 2007_005813
189 | 2007_005828
190 | 2007_005844
191 | 2007_005845
192 | 2007_005857
193 | 2007_005911
194 | 2007_005915
195 | 2007_005978
196 | 2007_006028
197 | 2007_006035
198 | 2007_006046
199 | 2007_006076
200 | 2007_006086
201 | 2007_006117
202 | 2007_006171
203 | 2007_006241
204 | 2007_006260
205 | 2007_006277
206 | 2007_006348
207 | 2007_006364
208 | 2007_006373
209 | 2007_006444
210 | 2007_006449
211 | 2007_006549
212 | 2007_006553
213 | 2007_006560
214 | 2007_006647
215 | 2007_006678
216 | 2007_006680
217 | 2007_006698
218 | 2007_006761
219 | 2007_006802
220 | 2007_006837
221 | 2007_006841
222 | 2007_006864
223 | 2007_006866
224 | 2007_006946
225 | 2007_007007
226 | 2007_007084
227 | 2007_007109
228 | 2007_007130
229 | 2007_007165
230 | 2007_007168
231 | 2007_007195
232 | 2007_007196
233 | 2007_007203
234 | 2007_007211
235 | 2007_007235
236 | 2007_007341
237 | 2007_007414
238 | 2007_007417
239 | 2007_007470
240 | 2007_007477
241 | 2007_007493
242 | 2007_007498
243 | 2007_007524
244 | 2007_007534
245 | 2007_007624
246 | 2007_007651
247 | 2007_007688
248 | 2007_007748
249 | 2007_007795
250 | 2007_007810
251 | 2007_007815
252 | 2007_007818
253 | 2007_007836
254 | 2007_007849
255 | 2007_007881
256 | 2007_007996
257 | 2007_008051
258 | 2007_008084
259 | 2007_008106
260 | 2007_008110
261 | 2007_008204
262 | 2007_008222
263 | 2007_008256
264 | 2007_008260
265 | 2007_008339
266 | 2007_008374
267 | 2007_008415
268 | 2007_008430
269 | 2007_008543
270 | 2007_008547
271 | 2007_008596
272 | 2007_008645
273 | 2007_008670
274 | 2007_008708
275 | 2007_008722
276 | 2007_008747
277 | 2007_008802
278 | 2007_008815
279 | 2007_008897
280 | 2007_008944
281 | 2007_008964
282 | 2007_008973
283 | 2007_008980
284 | 2007_009015
285 | 2007_009068
286 | 2007_009084
287 | 2007_009088
288 | 2007_009096
289 | 2007_009221
290 | 2007_009245
291 | 2007_009251
292 | 2007_009252
293 | 2007_009258
294 | 2007_009320
295 | 2007_009323
296 | 2007_009331
297 | 2007_009346
298 | 2007_009392
299 | 2007_009413
300 | 2007_009419
301 | 2007_009446
302 | 2007_009458
303 | 2007_009521
304 | 2007_009562
305 | 2007_009592
306 | 2007_009654
307 | 2007_009655
308 | 2007_009684
309 | 2007_009687
310 | 2007_009691
311 | 2007_009706
312 | 2007_009750
313 | 2007_009756
314 | 2007_009764
315 | 2007_009794
316 | 2007_009817
317 | 2007_009841
318 | 2007_009897
319 | 2007_009911
320 | 2007_009923
321 | 2007_009938
322 | 2008_000009
323 | 2008_000016
324 | 2008_000073
325 | 2008_000075
326 | 2008_000080
327 | 2008_000107
328 | 2008_000120
329 | 2008_000123
330 | 2008_000149
331 | 2008_000182
332 | 2008_000213
333 | 2008_000215
334 | 2008_000223
335 | 2008_000233
336 | 2008_000234
337 | 2008_000239
338 | 2008_000254
339 | 2008_000270
340 | 2008_000271
341 | 2008_000345
342 | 2008_000359
343 | 2008_000391
344 | 2008_000401
345 | 2008_000464
346 | 2008_000469
347 | 2008_000474
348 | 2008_000501
349 | 2008_000510
350 | 2008_000533
351 | 2008_000573
352 | 2008_000589
353 | 2008_000602
354 | 2008_000630
355 | 2008_000657
356 | 2008_000661
357 | 2008_000662
358 | 2008_000666
359 | 2008_000673
360 | 2008_000700
361 | 2008_000725
362 | 2008_000731
363 | 2008_000763
364 | 2008_000765
365 | 2008_000782
366 | 2008_000795
367 | 2008_000811
368 | 2008_000848
369 | 2008_000853
370 | 2008_000863
371 | 2008_000911
372 | 2008_000919
373 | 2008_000943
374 | 2008_000992
375 | 2008_001013
376 | 2008_001028
377 | 2008_001040
378 | 2008_001070
379 | 2008_001074
380 | 2008_001076
381 | 2008_001078
382 | 2008_001135
383 | 2008_001150
384 | 2008_001170
385 | 2008_001231
386 | 2008_001249
387 | 2008_001260
388 | 2008_001283
389 | 2008_001308
390 | 2008_001379
391 | 2008_001404
392 | 2008_001433
393 | 2008_001439
394 | 2008_001478
395 | 2008_001491
396 | 2008_001504
397 | 2008_001513
398 | 2008_001514
399 | 2008_001531
400 | 2008_001546
401 | 2008_001547
402 | 2008_001580
403 | 2008_001629
404 | 2008_001640
405 | 2008_001682
406 | 2008_001688
407 | 2008_001715
408 | 2008_001821
409 | 2008_001874
410 | 2008_001885
411 | 2008_001895
412 | 2008_001966
413 | 2008_001971
414 | 2008_001992
415 | 2008_002043
416 | 2008_002152
417 | 2008_002205
418 | 2008_002212
419 | 2008_002239
420 | 2008_002240
421 | 2008_002241
422 | 2008_002269
423 | 2008_002273
424 | 2008_002358
425 | 2008_002379
426 | 2008_002383
427 | 2008_002429
428 | 2008_002464
429 | 2008_002467
430 | 2008_002492
431 | 2008_002495
432 | 2008_002504
433 | 2008_002521
434 | 2008_002536
435 | 2008_002588
436 | 2008_002623
437 | 2008_002680
438 | 2008_002681
439 | 2008_002775
440 | 2008_002778
441 | 2008_002835
442 | 2008_002859
443 | 2008_002864
444 | 2008_002900
445 | 2008_002904
446 | 2008_002929
447 | 2008_002936
448 | 2008_002942
449 | 2008_002958
450 | 2008_003003
451 | 2008_003026
452 | 2008_003034
453 | 2008_003076
454 | 2008_003105
455 | 2008_003108
456 | 2008_003110
457 | 2008_003135
458 | 2008_003141
459 | 2008_003155
460 | 2008_003210
461 | 2008_003238
462 | 2008_003270
463 | 2008_003330
464 | 2008_003333
465 | 2008_003369
466 | 2008_003379
467 | 2008_003451
468 | 2008_003461
469 | 2008_003477
470 | 2008_003492
471 | 2008_003499
472 | 2008_003511
473 | 2008_003546
474 | 2008_003576
475 | 2008_003577
476 | 2008_003676
477 | 2008_003709
478 | 2008_003733
479 | 2008_003777
480 | 2008_003782
481 | 2008_003821
482 | 2008_003846
483 | 2008_003856
484 | 2008_003858
485 | 2008_003874
486 | 2008_003876
487 | 2008_003885
488 | 2008_003886
489 | 2008_003926
490 | 2008_003976
491 | 2008_004069
492 | 2008_004101
493 | 2008_004140
494 | 2008_004172
495 | 2008_004175
496 | 2008_004212
497 | 2008_004279
498 | 2008_004339
499 | 2008_004345
500 | 2008_004363
501 | 2008_004367
502 | 2008_004396
503 | 2008_004399
504 | 2008_004453
505 | 2008_004477
506 | 2008_004552
507 | 2008_004562
508 | 2008_004575
509 | 2008_004610
510 | 2008_004612
511 | 2008_004621
512 | 2008_004624
513 | 2008_004654
514 | 2008_004659
515 | 2008_004687
516 | 2008_004701
517 | 2008_004704
518 | 2008_004705
519 | 2008_004754
520 | 2008_004758
521 | 2008_004854
522 | 2008_004910
523 | 2008_004995
524 | 2008_005049
525 | 2008_005089
526 | 2008_005097
527 | 2008_005105
528 | 2008_005145
529 | 2008_005197
530 | 2008_005217
531 | 2008_005242
532 | 2008_005245
533 | 2008_005254
534 | 2008_005262
535 | 2008_005338
536 | 2008_005398
537 | 2008_005399
538 | 2008_005422
539 | 2008_005439
540 | 2008_005445
541 | 2008_005525
542 | 2008_005544
543 | 2008_005628
544 | 2008_005633
545 | 2008_005637
546 | 2008_005642
547 | 2008_005676
548 | 2008_005680
549 | 2008_005691
550 | 2008_005727
551 | 2008_005738
552 | 2008_005812
553 | 2008_005904
554 | 2008_005915
555 | 2008_006008
556 | 2008_006036
557 | 2008_006055
558 | 2008_006063
559 | 2008_006108
560 | 2008_006130
561 | 2008_006143
562 | 2008_006159
563 | 2008_006216
564 | 2008_006219
565 | 2008_006229
566 | 2008_006254
567 | 2008_006275
568 | 2008_006325
569 | 2008_006327
570 | 2008_006341
571 | 2008_006408
572 | 2008_006480
573 | 2008_006523
574 | 2008_006526
575 | 2008_006528
576 | 2008_006553
577 | 2008_006554
578 | 2008_006703
579 | 2008_006722
580 | 2008_006752
581 | 2008_006784
582 | 2008_006835
583 | 2008_006874
584 | 2008_006981
585 | 2008_006986
586 | 2008_007025
587 | 2008_007031
588 | 2008_007048
589 | 2008_007120
590 | 2008_007123
591 | 2008_007143
592 | 2008_007194
593 | 2008_007219
594 | 2008_007273
595 | 2008_007350
596 | 2008_007378
597 | 2008_007392
598 | 2008_007402
599 | 2008_007497
600 | 2008_007498
601 | 2008_007507
602 | 2008_007513
603 | 2008_007527
604 | 2008_007548
605 | 2008_007596
606 | 2008_007677
607 | 2008_007737
608 | 2008_007797
609 | 2008_007804
610 | 2008_007811
611 | 2008_007814
612 | 2008_007828
613 | 2008_007836
614 | 2008_007945
615 | 2008_007994
616 | 2008_008051
617 | 2008_008103
618 | 2008_008127
619 | 2008_008221
620 | 2008_008252
621 | 2008_008268
622 | 2008_008296
623 | 2008_008301
624 | 2008_008335
625 | 2008_008362
626 | 2008_008392
627 | 2008_008393
628 | 2008_008421
629 | 2008_008434
630 | 2008_008469
631 | 2008_008629
632 | 2008_008682
633 | 2008_008711
634 | 2008_008746
635 | 2009_000012
636 | 2009_000013
637 | 2009_000022
638 | 2009_000032
639 | 2009_000037
640 | 2009_000039
641 | 2009_000074
642 | 2009_000080
643 | 2009_000087
644 | 2009_000096
645 | 2009_000121
646 | 2009_000136
647 | 2009_000149
648 | 2009_000156
649 | 2009_000201
650 | 2009_000205
651 | 2009_000219
652 | 2009_000242
653 | 2009_000309
654 | 2009_000318
655 | 2009_000335
656 | 2009_000351
657 | 2009_000354
658 | 2009_000387
659 | 2009_000391
660 | 2009_000412
661 | 2009_000418
662 | 2009_000421
663 | 2009_000426
664 | 2009_000440
665 | 2009_000446
666 | 2009_000455
667 | 2009_000457
668 | 2009_000469
669 | 2009_000487
670 | 2009_000488
671 | 2009_000523
672 | 2009_000573
673 | 2009_000619
674 | 2009_000628
675 | 2009_000641
676 | 2009_000664
677 | 2009_000675
678 | 2009_000704
679 | 2009_000705
680 | 2009_000712
681 | 2009_000716
682 | 2009_000723
683 | 2009_000727
684 | 2009_000730
685 | 2009_000731
686 | 2009_000732
687 | 2009_000771
688 | 2009_000825
689 | 2009_000828
690 | 2009_000839
691 | 2009_000840
692 | 2009_000845
693 | 2009_000879
694 | 2009_000892
695 | 2009_000919
696 | 2009_000924
697 | 2009_000931
698 | 2009_000935
699 | 2009_000964
700 | 2009_000989
701 | 2009_000991
702 | 2009_000998
703 | 2009_001008
704 | 2009_001082
705 | 2009_001108
706 | 2009_001160
707 | 2009_001215
708 | 2009_001240
709 | 2009_001255
710 | 2009_001278
711 | 2009_001299
712 | 2009_001300
713 | 2009_001314
714 | 2009_001332
715 | 2009_001333
716 | 2009_001363
717 | 2009_001391
718 | 2009_001411
719 | 2009_001433
720 | 2009_001505
721 | 2009_001535
722 | 2009_001536
723 | 2009_001565
724 | 2009_001607
725 | 2009_001644
726 | 2009_001663
727 | 2009_001683
728 | 2009_001684
729 | 2009_001687
730 | 2009_001718
731 | 2009_001731
732 | 2009_001765
733 | 2009_001768
734 | 2009_001775
735 | 2009_001804
736 | 2009_001816
737 | 2009_001818
738 | 2009_001850
739 | 2009_001851
740 | 2009_001854
741 | 2009_001941
742 | 2009_001991
743 | 2009_002012
744 | 2009_002035
745 | 2009_002042
746 | 2009_002082
747 | 2009_002094
748 | 2009_002097
749 | 2009_002122
750 | 2009_002150
751 | 2009_002155
752 | 2009_002164
753 | 2009_002165
754 | 2009_002171
755 | 2009_002185
756 | 2009_002202
757 | 2009_002221
758 | 2009_002238
759 | 2009_002239
760 | 2009_002265
761 | 2009_002268
762 | 2009_002291
763 | 2009_002295
764 | 2009_002317
765 | 2009_002320
766 | 2009_002346
767 | 2009_002366
768 | 2009_002372
769 | 2009_002382
770 | 2009_002390
771 | 2009_002415
772 | 2009_002445
773 | 2009_002487
774 | 2009_002521
775 | 2009_002527
776 | 2009_002535
777 | 2009_002539
778 | 2009_002549
779 | 2009_002562
780 | 2009_002568
781 | 2009_002571
782 | 2009_002573
783 | 2009_002584
784 | 2009_002591
785 | 2009_002594
786 | 2009_002604
787 | 2009_002618
788 | 2009_002635
789 | 2009_002638
790 | 2009_002649
791 | 2009_002651
792 | 2009_002727
793 | 2009_002732
794 | 2009_002749
795 | 2009_002753
796 | 2009_002771
797 | 2009_002808
798 | 2009_002856
799 | 2009_002887
800 | 2009_002888
801 | 2009_002928
802 | 2009_002936
803 | 2009_002975
804 | 2009_002982
805 | 2009_002990
806 | 2009_003003
807 | 2009_003005
808 | 2009_003043
809 | 2009_003059
810 | 2009_003063
811 | 2009_003065
812 | 2009_003071
813 | 2009_003080
814 | 2009_003105
815 | 2009_003123
816 | 2009_003193
817 | 2009_003196
818 | 2009_003217
819 | 2009_003224
820 | 2009_003241
821 | 2009_003269
822 | 2009_003273
823 | 2009_003299
824 | 2009_003304
825 | 2009_003311
826 | 2009_003323
827 | 2009_003343
828 | 2009_003378
829 | 2009_003387
830 | 2009_003406
831 | 2009_003433
832 | 2009_003450
833 | 2009_003466
834 | 2009_003481
835 | 2009_003494
836 | 2009_003498
837 | 2009_003504
838 | 2009_003507
839 | 2009_003517
840 | 2009_003523
841 | 2009_003542
842 | 2009_003549
843 | 2009_003551
844 | 2009_003564
845 | 2009_003569
846 | 2009_003576
847 | 2009_003589
848 | 2009_003607
849 | 2009_003640
850 | 2009_003666
851 | 2009_003696
852 | 2009_003703
853 | 2009_003707
854 | 2009_003756
855 | 2009_003771
856 | 2009_003773
857 | 2009_003804
858 | 2009_003806
859 | 2009_003810
860 | 2009_003849
861 | 2009_003857
862 | 2009_003858
863 | 2009_003895
864 | 2009_003903
865 | 2009_003904
866 | 2009_003928
867 | 2009_003938
868 | 2009_003971
869 | 2009_003991
870 | 2009_004021
871 | 2009_004033
872 | 2009_004043
873 | 2009_004070
874 | 2009_004072
875 | 2009_004084
876 | 2009_004099
877 | 2009_004125
878 | 2009_004140
879 | 2009_004217
880 | 2009_004221
881 | 2009_004247
882 | 2009_004248
883 | 2009_004255
884 | 2009_004298
885 | 2009_004324
886 | 2009_004455
887 | 2009_004494
888 | 2009_004497
889 | 2009_004504
890 | 2009_004507
891 | 2009_004509
892 | 2009_004540
893 | 2009_004568
894 | 2009_004579
895 | 2009_004581
896 | 2009_004590
897 | 2009_004592
898 | 2009_004594
899 | 2009_004635
900 | 2009_004653
901 | 2009_004687
902 | 2009_004721
903 | 2009_004730
904 | 2009_004732
905 | 2009_004738
906 | 2009_004748
907 | 2009_004789
908 | 2009_004799
909 | 2009_004801
910 | 2009_004848
911 | 2009_004859
912 | 2009_004867
913 | 2009_004882
914 | 2009_004886
915 | 2009_004895
916 | 2009_004942
917 | 2009_004969
918 | 2009_004987
919 | 2009_004993
920 | 2009_004994
921 | 2009_005038
922 | 2009_005078
923 | 2009_005087
924 | 2009_005089
925 | 2009_005137
926 | 2009_005148
927 | 2009_005156
928 | 2009_005158
929 | 2009_005189
930 | 2009_005190
931 | 2009_005217
932 | 2009_005219
933 | 2009_005220
934 | 2009_005231
935 | 2009_005260
936 | 2009_005262
937 | 2009_005302
938 | 2010_000003
939 | 2010_000038
940 | 2010_000065
941 | 2010_000083
942 | 2010_000084
943 | 2010_000087
944 | 2010_000110
945 | 2010_000159
946 | 2010_000160
947 | 2010_000163
948 | 2010_000174
949 | 2010_000216
950 | 2010_000238
951 | 2010_000241
952 | 2010_000256
953 | 2010_000272
954 | 2010_000284
955 | 2010_000309
956 | 2010_000318
957 | 2010_000330
958 | 2010_000335
959 | 2010_000342
960 | 2010_000372
961 | 2010_000422
962 | 2010_000426
963 | 2010_000427
964 | 2010_000502
965 | 2010_000530
966 | 2010_000552
967 | 2010_000559
968 | 2010_000572
969 | 2010_000573
970 | 2010_000622
971 | 2010_000628
972 | 2010_000639
973 | 2010_000666
974 | 2010_000679
975 | 2010_000682
976 | 2010_000683
977 | 2010_000724
978 | 2010_000738
979 | 2010_000764
980 | 2010_000788
981 | 2010_000814
982 | 2010_000836
983 | 2010_000874
984 | 2010_000904
985 | 2010_000906
986 | 2010_000907
987 | 2010_000918
988 | 2010_000929
989 | 2010_000941
990 | 2010_000952
991 | 2010_000961
992 | 2010_001000
993 | 2010_001010
994 | 2010_001011
995 | 2010_001016
996 | 2010_001017
997 | 2010_001024
998 | 2010_001036
999 | 2010_001061
1000 | 2010_001069
1001 | 2010_001070
1002 | 2010_001079
1003 | 2010_001104
1004 | 2010_001124
1005 | 2010_001149
1006 | 2010_001151
1007 | 2010_001174
1008 | 2010_001206
1009 | 2010_001246
1010 | 2010_001251
1011 | 2010_001256
1012 | 2010_001264
1013 | 2010_001292
1014 | 2010_001313
1015 | 2010_001327
1016 | 2010_001331
1017 | 2010_001351
1018 | 2010_001367
1019 | 2010_001376
1020 | 2010_001403
1021 | 2010_001448
1022 | 2010_001451
1023 | 2010_001522
1024 | 2010_001534
1025 | 2010_001553
1026 | 2010_001557
1027 | 2010_001563
1028 | 2010_001577
1029 | 2010_001579
1030 | 2010_001646
1031 | 2010_001656
1032 | 2010_001692
1033 | 2010_001699
1034 | 2010_001734
1035 | 2010_001752
1036 | 2010_001767
1037 | 2010_001768
1038 | 2010_001773
1039 | 2010_001820
1040 | 2010_001830
1041 | 2010_001851
1042 | 2010_001908
1043 | 2010_001913
1044 | 2010_001951
1045 | 2010_001956
1046 | 2010_001962
1047 | 2010_001966
1048 | 2010_001995
1049 | 2010_002017
1050 | 2010_002025
1051 | 2010_002030
1052 | 2010_002106
1053 | 2010_002137
1054 | 2010_002142
1055 | 2010_002146
1056 | 2010_002147
1057 | 2010_002150
1058 | 2010_002161
1059 | 2010_002200
1060 | 2010_002228
1061 | 2010_002232
1062 | 2010_002251
1063 | 2010_002271
1064 | 2010_002305
1065 | 2010_002310
1066 | 2010_002336
1067 | 2010_002348
1068 | 2010_002361
1069 | 2010_002390
1070 | 2010_002396
1071 | 2010_002422
1072 | 2010_002450
1073 | 2010_002480
1074 | 2010_002512
1075 | 2010_002531
1076 | 2010_002536
1077 | 2010_002538
1078 | 2010_002546
1079 | 2010_002623
1080 | 2010_002682
1081 | 2010_002691
1082 | 2010_002693
1083 | 2010_002701
1084 | 2010_002763
1085 | 2010_002792
1086 | 2010_002868
1087 | 2010_002900
1088 | 2010_002902
1089 | 2010_002921
1090 | 2010_002929
1091 | 2010_002939
1092 | 2010_002988
1093 | 2010_003014
1094 | 2010_003060
1095 | 2010_003123
1096 | 2010_003127
1097 | 2010_003132
1098 | 2010_003168
1099 | 2010_003183
1100 | 2010_003187
1101 | 2010_003207
1102 | 2010_003231
1103 | 2010_003239
1104 | 2010_003275
1105 | 2010_003276
1106 | 2010_003293
1107 | 2010_003302
1108 | 2010_003325
1109 | 2010_003362
1110 | 2010_003365
1111 | 2010_003381
1112 | 2010_003402
1113 | 2010_003409
1114 | 2010_003418
1115 | 2010_003446
1116 | 2010_003453
1117 | 2010_003468
1118 | 2010_003473
1119 | 2010_003495
1120 | 2010_003506
1121 | 2010_003514
1122 | 2010_003531
1123 | 2010_003532
1124 | 2010_003541
1125 | 2010_003547
1126 | 2010_003597
1127 | 2010_003675
1128 | 2010_003708
1129 | 2010_003716
1130 | 2010_003746
1131 | 2010_003758
1132 | 2010_003764
1133 | 2010_003768
1134 | 2010_003771
1135 | 2010_003772
1136 | 2010_003781
1137 | 2010_003813
1138 | 2010_003820
1139 | 2010_003854
1140 | 2010_003912
1141 | 2010_003915
1142 | 2010_003947
1143 | 2010_003956
1144 | 2010_003971
1145 | 2010_004041
1146 | 2010_004042
1147 | 2010_004056
1148 | 2010_004063
1149 | 2010_004104
1150 | 2010_004120
1151 | 2010_004149
1152 | 2010_004165
1153 | 2010_004208
1154 | 2010_004219
1155 | 2010_004226
1156 | 2010_004314
1157 | 2010_004320
1158 | 2010_004322
1159 | 2010_004337
1160 | 2010_004348
1161 | 2010_004355
1162 | 2010_004369
1163 | 2010_004382
1164 | 2010_004419
1165 | 2010_004432
1166 | 2010_004472
1167 | 2010_004479
1168 | 2010_004519
1169 | 2010_004520
1170 | 2010_004529
1171 | 2010_004543
1172 | 2010_004550
1173 | 2010_004551
1174 | 2010_004556
1175 | 2010_004559
1176 | 2010_004628
1177 | 2010_004635
1178 | 2010_004662
1179 | 2010_004697
1180 | 2010_004757
1181 | 2010_004763
1182 | 2010_004772
1183 | 2010_004783
1184 | 2010_004789
1185 | 2010_004795
1186 | 2010_004815
1187 | 2010_004825
1188 | 2010_004828
1189 | 2010_004856
1190 | 2010_004857
1191 | 2010_004861
1192 | 2010_004941
1193 | 2010_004946
1194 | 2010_004951
1195 | 2010_004980
1196 | 2010_004994
1197 | 2010_005013
1198 | 2010_005021
1199 | 2010_005046
1200 | 2010_005063
1201 | 2010_005108
1202 | 2010_005118
1203 | 2010_005159
1204 | 2010_005160
1205 | 2010_005166
1206 | 2010_005174
1207 | 2010_005180
1208 | 2010_005187
1209 | 2010_005206
1210 | 2010_005245
1211 | 2010_005252
1212 | 2010_005284
1213 | 2010_005305
1214 | 2010_005344
1215 | 2010_005353
1216 | 2010_005366
1217 | 2010_005401
1218 | 2010_005421
1219 | 2010_005428
1220 | 2010_005432
1221 | 2010_005433
1222 | 2010_005496
1223 | 2010_005501
1224 | 2010_005508
1225 | 2010_005531
1226 | 2010_005534
1227 | 2010_005575
1228 | 2010_005582
1229 | 2010_005606
1230 | 2010_005626
1231 | 2010_005644
1232 | 2010_005664
1233 | 2010_005705
1234 | 2010_005706
1235 | 2010_005709
1236 | 2010_005718
1237 | 2010_005719
1238 | 2010_005727
1239 | 2010_005762
1240 | 2010_005788
1241 | 2010_005860
1242 | 2010_005871
1243 | 2010_005877
1244 | 2010_005888
1245 | 2010_005899
1246 | 2010_005922
1247 | 2010_005991
1248 | 2010_005992
1249 | 2010_006026
1250 | 2010_006034
1251 | 2010_006054
1252 | 2010_006070
1253 | 2011_000045
1254 | 2011_000051
1255 | 2011_000054
1256 | 2011_000066
1257 | 2011_000070
1258 | 2011_000112
1259 | 2011_000173
1260 | 2011_000178
1261 | 2011_000185
1262 | 2011_000226
1263 | 2011_000234
1264 | 2011_000238
1265 | 2011_000239
1266 | 2011_000248
1267 | 2011_000283
1268 | 2011_000291
1269 | 2011_000310
1270 | 2011_000312
1271 | 2011_000338
1272 | 2011_000396
1273 | 2011_000412
1274 | 2011_000419
1275 | 2011_000435
1276 | 2011_000436
1277 | 2011_000438
1278 | 2011_000455
1279 | 2011_000456
1280 | 2011_000479
1281 | 2011_000481
1282 | 2011_000482
1283 | 2011_000503
1284 | 2011_000512
1285 | 2011_000521
1286 | 2011_000526
1287 | 2011_000536
1288 | 2011_000548
1289 | 2011_000566
1290 | 2011_000585
1291 | 2011_000598
1292 | 2011_000607
1293 | 2011_000618
1294 | 2011_000638
1295 | 2011_000658
1296 | 2011_000661
1297 | 2011_000669
1298 | 2011_000747
1299 | 2011_000780
1300 | 2011_000789
1301 | 2011_000807
1302 | 2011_000809
1303 | 2011_000813
1304 | 2011_000830
1305 | 2011_000843
1306 | 2011_000874
1307 | 2011_000888
1308 | 2011_000900
1309 | 2011_000912
1310 | 2011_000953
1311 | 2011_000969
1312 | 2011_001005
1313 | 2011_001014
1314 | 2011_001020
1315 | 2011_001047
1316 | 2011_001060
1317 | 2011_001064
1318 | 2011_001069
1319 | 2011_001071
1320 | 2011_001082
1321 | 2011_001110
1322 | 2011_001114
1323 | 2011_001159
1324 | 2011_001161
1325 | 2011_001190
1326 | 2011_001232
1327 | 2011_001263
1328 | 2011_001276
1329 | 2011_001281
1330 | 2011_001287
1331 | 2011_001292
1332 | 2011_001313
1333 | 2011_001341
1334 | 2011_001346
1335 | 2011_001350
1336 | 2011_001407
1337 | 2011_001416
1338 | 2011_001421
1339 | 2011_001434
1340 | 2011_001447
1341 | 2011_001489
1342 | 2011_001529
1343 | 2011_001530
1344 | 2011_001534
1345 | 2011_001546
1346 | 2011_001567
1347 | 2011_001589
1348 | 2011_001597
1349 | 2011_001601
1350 | 2011_001607
1351 | 2011_001613
1352 | 2011_001614
1353 | 2011_001619
1354 | 2011_001624
1355 | 2011_001642
1356 | 2011_001665
1357 | 2011_001669
1358 | 2011_001674
1359 | 2011_001708
1360 | 2011_001713
1361 | 2011_001714
1362 | 2011_001722
1363 | 2011_001726
1364 | 2011_001745
1365 | 2011_001748
1366 | 2011_001775
1367 | 2011_001782
1368 | 2011_001793
1369 | 2011_001794
1370 | 2011_001812
1371 | 2011_001862
1372 | 2011_001863
1373 | 2011_001868
1374 | 2011_001880
1375 | 2011_001910
1376 | 2011_001984
1377 | 2011_001988
1378 | 2011_002002
1379 | 2011_002040
1380 | 2011_002041
1381 | 2011_002064
1382 | 2011_002075
1383 | 2011_002098
1384 | 2011_002110
1385 | 2011_002121
1386 | 2011_002124
1387 | 2011_002150
1388 | 2011_002156
1389 | 2011_002178
1390 | 2011_002200
1391 | 2011_002223
1392 | 2011_002244
1393 | 2011_002247
1394 | 2011_002279
1395 | 2011_002295
1396 | 2011_002298
1397 | 2011_002308
1398 | 2011_002317
1399 | 2011_002322
1400 | 2011_002327
1401 | 2011_002343
1402 | 2011_002358
1403 | 2011_002371
1404 | 2011_002379
1405 | 2011_002391
1406 | 2011_002498
1407 | 2011_002509
1408 | 2011_002515
1409 | 2011_002532
1410 | 2011_002535
1411 | 2011_002548
1412 | 2011_002575
1413 | 2011_002578
1414 | 2011_002589
1415 | 2011_002592
1416 | 2011_002623
1417 | 2011_002641
1418 | 2011_002644
1419 | 2011_002662
1420 | 2011_002675
1421 | 2011_002685
1422 | 2011_002713
1423 | 2011_002730
1424 | 2011_002754
1425 | 2011_002812
1426 | 2011_002863
1427 | 2011_002879
1428 | 2011_002885
1429 | 2011_002929
1430 | 2011_002951
1431 | 2011_002975
1432 | 2011_002993
1433 | 2011_002997
1434 | 2011_003003
1435 | 2011_003011
1436 | 2011_003019
1437 | 2011_003030
1438 | 2011_003055
1439 | 2011_003085
1440 | 2011_003103
1441 | 2011_003114
1442 | 2011_003145
1443 | 2011_003146
1444 | 2011_003182
1445 | 2011_003197
1446 | 2011_003205
1447 | 2011_003240
1448 | 2011_003256
1449 | 2011_003271
--------------------------------------------------------------------------------