├── .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 --------------------------------------------------------------------------------