├── .gitignore ├── README.md ├── __init__.py ├── config.py ├── convert_voc12.py ├── eval_voc12.py ├── libs ├── __init__.py ├── datasets │ ├── VOC12 │ │ ├── __init__.py │ │ ├── image_reader.py │ │ ├── train.txt │ │ ├── utils.py │ │ └── val.txt │ ├── __init__.py │ └── dataset_factory.py ├── nets │ ├── __init__.py │ ├── deeplabv3.py │ ├── resnet_utils.py │ └── resnet_v1.py └── preprocess │ ├── utils.py │ └── voc.py ├── requirements.txt ├── setup.sh └── train_voc12.py /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | *.pyc 6 | 7 | # C extensions 8 | *.so 9 | 10 | # Distribution / packaging 11 | .Python 12 | env/ 13 | build/ 14 | develop-eggs/ 15 | dist/ 16 | downloads/ 17 | eggs/ 18 | .eggs/ 19 | lib/ 20 | lib64/ 21 | parts/ 22 | sdist/ 23 | var/ 24 | *.egg-info/ 25 | .installed.cfg 26 | *.egg 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *,cover 47 | .hypothesis/ 48 | .idea 49 | 50 | # Translations 51 | *.mo 52 | *.pot 53 | 54 | # Django stuff: 55 | *.log 56 | local_settings.py 57 | 58 | # Flask stuff: 59 | instance/ 60 | .webassets-cache 61 | 62 | # Scrapy stuff: 63 | .scrapy 64 | 65 | # Sphinx documentation 66 | docs/_build/ 67 | 68 | # PyBuilder 69 | target/ 70 | 71 | # IPython Notebook 72 | *.ipynb 73 | .ipynb_checkpoints 74 | 75 | # pyenv 76 | .python-version 77 | 78 | # Numpy 79 | *.npy 80 | *.npz 81 | 82 | # celery beat schedule file 83 | celerybeat-schedule 84 | 85 | # dotenv 86 | .env 87 | 88 | # virtualenv 89 | venv/ 90 | ENV/ 91 | 92 | # Spyder project settings 93 | .spyderproject 94 | 95 | # Rope project settings 96 | .ropeproject 97 | 98 | data/pretrained_models 99 | output 100 | 101 | # swap 102 | *.swp 103 | *.swo 104 | 105 | # checkpoints 106 | snapshots 107 | 108 | # shell helper 109 | train.sh 110 | test.sh 111 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DeepLabV3 Semantic Segmentation 2 | Reimplementation of DeepLabV3 Semantic Segmentation 3 | 4 | This is an (re-)implementation of [DeepLabv3 -- Rethinking Atrous Convolution for Semantic Image Segmentation](https://arxiv.org/abs/1706.05587) in TensorFlow for semantic image segmentation on the [PASCAL VOC dataset](http://host.robots.ox.ac.uk/pascal/VOC/). The implementation is based on [DrSleep's implementation on DeepLabV2](https://github.com/DrSleep/tensorflow-deeplab-resnet) and [CharlesShang's implementation on tfrecord](https://github.com/CharlesShang/FastMaskRCNN). 5 | 6 | ## Features 7 | - [x] Tensorflow support 8 | - [ ] Multi-GPUs on single machine (synchronous update) 9 | - [ ] Multi-GPUs on multi servers (asynchronous update) 10 | - [x] ImageNet pre-trained weights 11 | - [ ] Pre-training on MS COCO 12 | - [x] Evaluation on VOC 2012 13 | - [ ] Multi-scale evaluation on VOC 2012 14 | 15 | ## Requirement 16 | #### Tensorflow 1.4 17 | ``` 18 | python 3.5 19 | tensorflow 1.4 20 | CUDA 8.0 21 | cuDNN 6.0 22 | ``` 23 | 24 | #### Tensorflow 1.2 25 | ``` 26 | python 3.5 27 | tensorflow 1.2 28 | CUDA 8.0 29 | cuDNN 5.1 30 | ``` 31 | The code written in Tensorflow 1.4 are compatible with Tensorflow 1.2, tested on single GPU machine. 32 | 33 | #### Installation 34 | ``` 35 | sh setup.sh 36 | ``` 37 | 38 | ## Train 39 | 1. Configurate `config.py`. 40 | 2. Run `python3 convert_voc12.py --split-name=SPLIT_NAME`, this will generate a tfrecord file in `$DATA_DIRECTORY/records`. 41 | 3. Single GPU: Run `python3 train_voc12.py` (with validation mIOU every SAVE_PRED_EVERY). 42 | 43 | 44 | ## Performance 45 | This repository only implements MG(1, 2, 4), ASPP and Image Pooling. The training is started from scratch. (The training took me almost 2 days on a single GTX 1080 Ti. I changed the learning rate policy in the paper: instead of the 'poly' learning rate policy, I started the learning rate from 0.01, then set fixed learning rate to 0.005 and 0.001 when the seg_loss stopped to decrease, and used 0.001 for the rest of training. ) 46 | 47 | ### Updated 1/11/2018 48 | I continued training with learning rate 0.0001, there is a huge increase on validation mIOU. 49 | 50 | ### Updated 2/05/2018 51 | There was an improvement on the implementation of Multi-grid, thanks @howard-mahe. The new validation results should be updated soon. 52 | 53 | ### Updated 2/11/2018 54 | The new validation result was trained from scratch. I didn't implement the two stage training policy (fixing BN and stride 16 -> 8). I may try few more runs to see if there is an improvement on the performance, but I think it is a fine-tuning work. 55 | 56 | | mIOU | Validation | 57 | | --------- |:----------------:| 58 | | paper | 77.21% | 59 | | repo | 70.63% | 60 | 61 | The validation mIOU for this repo is achieved without multi-scale and left-right flippling. 62 | 63 | The improvement can be achieved by finetuning on hyperparameters such as **learning rate**, **batch size**, **optimizer**, **initializer** and **batch normalization**. I didn't spend too much time on training and the results are temporary. 64 | 65 | *Welcome to try and report your numbers.* 66 | -------------------------------------------------------------------------------- /__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eveningdong/DeepLabV3-Tensorflow/9c4a5b54bb870700022740c251cfdfe4626cfb0e/__init__.py -------------------------------------------------------------------------------- /config.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import os 3 | 4 | import argparse 5 | import numpy as np 6 | 7 | IMG_MEAN = np.array((104.00698793,116.66876762,122.67891434), dtype=np.float32) 8 | 9 | BATCH_SIZE = 4 10 | BN_WEIGHT_DECAY = 0.9997 11 | CKPT = 0 12 | DATA_DIRECTORY = '/storage/ndong/data/auto/VOC/VOCdevkit/VOC2012' 13 | DATA_NAME = 'VOC12' 14 | IGNORE_LABEL = 255 15 | IMAGENET = './data/pretrained_models' 16 | INPUT_SIZE = 513 17 | LEARNING_RATE = 0.01 18 | MOMENTUM = 0.9 19 | NUM_CLASSES = 21 20 | NUM_GPUS = 1 21 | NUM_LAYERS = 101 22 | NUM_STEPS = 600000 23 | NUM_TRAIN = 10582 24 | NUM_VAL = 1449 25 | POWER = 0.9 26 | RANDOM_SEED = 1234 27 | RESTORE_FROM = None 28 | SAVE_NUM_IMAGES = 1 29 | SAVE_PRED_EVERY = 1000 30 | SNAPSHOT_DIR = './snapshots' 31 | SPLIT_NAME = 'train' 32 | WEIGHT_DECAY = 1e-4 33 | 34 | parser = argparse.ArgumentParser(description="DeepLabV3") 35 | parser.add_argument("--batch-size", type=int, default=BATCH_SIZE, 36 | help="Number of images sent to the network in one step.") 37 | parser.add_argument("--bn-weight-decay", type=float, default=BN_WEIGHT_DECAY, 38 | help="Regularisation parameter for batch norm.") 39 | parser.add_argument("--ckpt", type=int, default=CKPT, 40 | help="Checkpoint to restore.") 41 | parser.add_argument("--data-dir", type=str, default=DATA_DIRECTORY, 42 | help="Path to the directory containing the PASCAL VOC dataset.") 43 | parser.add_argument("--data-name", type=str, default=DATA_NAME, 44 | help="Name of the dataset.") 45 | parser.add_argument("--freeze-bn", action="store_true", 46 | help="Whether to freeze batch norm params.") 47 | parser.add_argument("--ignore-label", type=int, default=IGNORE_LABEL, 48 | help="The index of the label to ignore during the training.") 49 | parser.add_argument("--imagenet", type=str, default=IMAGENET, 50 | help="Path to ImageNet pretrained weights.") 51 | parser.add_argument("--input-size", type=int, default=INPUT_SIZE, 52 | help="height and width of images.") 53 | parser.add_argument("--learning-rate", type=float, default=LEARNING_RATE, 54 | help="Base learning rate for training with polynomial decay.") 55 | parser.add_argument("--momentum", type=float, default=MOMENTUM, 56 | help="Momentum component of the optimiser.") 57 | parser.add_argument("--not-restore-last", action="store_true", 58 | help="Whether to not restore last (FC) layers.") 59 | parser.add_argument("--num-classes", type=int, default=NUM_CLASSES, 60 | help="Number of classes to predict (including background).") 61 | parser.add_argument("--num-gpus", type=int, default=NUM_GPUS, 62 | help="Number of GPUs to use.") 63 | parser.add_argument("--num-layers", type=int, default=NUM_LAYERS, 64 | help="Number of layes in ResNet).") 65 | parser.add_argument("--num-steps", type=int, default=NUM_STEPS, 66 | help="Number of training steps.") 67 | parser.add_argument("--power", type=float, default=POWER, 68 | help="Decay parameter to compute the learning rate.") 69 | parser.add_argument("--random-mirror", action="store_true", 70 | help="Whether to randomly mirror the inputs during the training.") 71 | parser.add_argument("--random-scale", action="store_true", 72 | help="Whether to randomly scale the inputs during the training.") 73 | parser.add_argument("--random-seed", type=int, default=RANDOM_SEED, 74 | help="Random seed to have reproducible results.") 75 | parser.add_argument("--restore-from", type=str, default=RESTORE_FROM, 76 | help="Where restore model parameters from.") 77 | parser.add_argument("--save-num-images", type=int, default=SAVE_NUM_IMAGES, 78 | help="How many images to save.") 79 | parser.add_argument("--save-pred-every", type=int, default=SAVE_PRED_EVERY, 80 | help="Save summaries and checkpoint every often.") 81 | parser.add_argument("--snapshot-dir", type=str, default=SNAPSHOT_DIR, 82 | help="Where to save snapshots of the model.") 83 | parser.add_argument("--split-name", type=str, default=SPLIT_NAME, 84 | help="Split name.") 85 | parser.add_argument("--weight-decay", type=float, default=WEIGHT_DECAY, 86 | help="Regularisation parameter for L2-loss.") 87 | 88 | args = parser.parse_args() -------------------------------------------------------------------------------- /convert_voc12.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | import numpy as np 4 | import tensorflow as tf 5 | 6 | from config import * 7 | from PIL import Image 8 | 9 | def _int64_feature(value): 10 | """Wrapper for inserting int64 features into Example proto.""" 11 | if not isinstance(value, list): 12 | value = [value] 13 | return tf.train.Feature(int64_list=tf.train.Int64List(value=value)) 14 | 15 | 16 | def _float64_feature(value): 17 | """Wrapper for inserting float64 features into Example proto.""" 18 | if not isinstance(value, list): 19 | value = [value] 20 | return tf.train.Feature(float_list=tf.train.FloatList(value=value)) 21 | 22 | 23 | def _bytes_feature(value): 24 | """Wrapper for inserting bytes features into Example proto.""" 25 | return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value])) 26 | 27 | 28 | def _convert_to_example(filename, image_buffer, segmentation, height, width): 29 | image_format = 'JPEG' 30 | segmentation_format = 'PNG' 31 | example = tf.train.Example(features=tf.train.Features(feature={ 32 | 'image/height': _int64_feature(height), 33 | 'image/width': _int64_feature(width), 34 | 'image/filename': _bytes_feature(tf.compat.as_bytes(os.path.basename(filename))), 35 | 'image/format': _bytes_feature(tf.compat.as_bytes(image_format)), 36 | 'image/encoded': _bytes_feature(tf.compat.as_bytes(image_buffer)), 37 | 'image/segmentation/format': _bytes_feature(tf.compat.as_bytes(segmentation_format)), 38 | 'image/segmentation/encoded': _bytes_feature(tf.compat.as_bytes(segmentation)), 39 | })) 40 | return example 41 | 42 | def _convert_to_tfrecord(record_dir): 43 | """Loads image files and writes files to a TFRecord. 44 | """ 45 | label_placeholder = tf.placeholder(dtype=tf.uint8) 46 | encoded_label = tf.image.encode_png(tf.expand_dims(label_placeholder, 2)) 47 | with tf.Session('') as sess: 48 | record_filename = os.path.join(record_dir, '{}_{}.tfrecord'.format(args.data_name, args.split_name)) 49 | with tf.python_io.TFRecordWriter(record_filename) as tfrecord_writer: 50 | with open('./libs/datasets/VOC12/{}.txt'.format(args.split_name), 'r') as f: 51 | count = 1 52 | if args.split_name == 'train': 53 | total = 10582 54 | elif args.split_name == 'val': 55 | total = 1449 56 | 57 | for line in f: 58 | line = line.strip() 59 | img, gt = line.split() 60 | img_path = args.data_dir + img 61 | gt_path = args.data_dir + gt 62 | with tf.gfile.FastGFile(img_path, 'rb') as ff: 63 | image_data = ff.read() 64 | segmentation = np.array(Image.open(gt_path)) 65 | h,w = segmentation.shape[0], segmentation.shape[1] 66 | label_string = sess.run(encoded_label, 67 | feed_dict={label_placeholder:segmentation}) 68 | example = _convert_to_example(img_path, image_data, label_string, 69 | h, w) 70 | tfrecord_writer.write(example.SerializeToString()) 71 | sys.stdout.write('Write {} {}/{}\n'.format(img_path, count, total)) 72 | sys.stdout.flush() 73 | count += 1 74 | 75 | sys.stdout.write('\n') 76 | sys.stdout.flush() 77 | 78 | 79 | if __name__ == '__main__': 80 | record_dir = os.path.join(args.data_dir, 'records') 81 | 82 | if not tf.gfile.Exists(record_dir): 83 | tf.gfile.MakeDirs(record_dir) 84 | 85 | # process the training, validation data: 86 | _convert_to_tfrecord(record_dir) 87 | 88 | print('\nFinished converting the VOC12 dataset!') -------------------------------------------------------------------------------- /eval_voc12.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import argparse 3 | import numpy as np 4 | import tensorflow as tf 5 | import time 6 | 7 | from config import * 8 | from datetime import datetime 9 | from libs.datasets.dataset_factory import read_data 10 | from libs.datasets.VOC12 import decode_labels, inv_preprocess, prepare_label 11 | from libs.nets import deeplabv3 12 | 13 | slim = tf.contrib.slim 14 | streaming_mean_iou = tf.contrib.metrics.streaming_mean_iou 15 | 16 | def save(saver, sess, logdir, step): 17 | '''Save weights. 18 | 19 | Args: 20 | saver: TensorFlow Saver object. 21 | sess: TensorFlow session. 22 | logdir: path to the snapshots directory. 23 | step: current training step. 24 | ''' 25 | model_name = 'model.ckpt' 26 | checkpoint_path = os.path.join(logdir, model_name) 27 | 28 | if not os.path.exists(logdir): 29 | os.makedirs(logdir) 30 | saver.save(sess, checkpoint_path, global_step=step) 31 | print('The checkpoint has been created.') 32 | 33 | def load(saver, sess, ckpt_dir): 34 | '''Load trained weights. 35 | 36 | Args: 37 | saver: TensorFlow Saver object. 38 | sess: TensorFlow session. 39 | ckpt_path: path to checkpoint file with parameters. 40 | ''' 41 | if args.ckpt == 0: 42 | ckpt = tf.train.get_checkpoint_state(ckpt_dir) 43 | ckpt_path = ckpt.model_checkpoint_path 44 | else: 45 | ckpt_path = ckpt_dir+'/model.ckpt-%i' % args.ckpt 46 | saver.restore(sess, ckpt_path) 47 | print("Restored model parameters from {}".format(ckpt_path)) 48 | 49 | def main(): 50 | """Create the model and start the training.""" 51 | tf.set_random_seed(args.random_seed) 52 | 53 | # Create queue coordinator. 54 | coord = tf.train.Coordinator() 55 | 56 | image_batch, label_batch = read_data(is_training=args.is_training) 57 | 58 | # Create network. 59 | net, end_points = deeplabv3(image_batch, 60 | num_classes=args.num_classes, 61 | depth=args.num_layers, 62 | is_training=False) 63 | 64 | # For a small batch size, it is better to keep 65 | # the statistics of the BN layers (running means and variances) 66 | # frozen, and to not update the values provided by the pre-trained model. 67 | # If is_training=True, the statistics will be updated during the training. 68 | # Note that is_training=False still updates BN parameters gamma (scale) and beta (offset) 69 | # if they are presented in var_list of the optimiser definition. 70 | 71 | # Which variables to load. Running means and variances are not trainable, 72 | # thus all_variables() should be restored. 73 | restore_var = [v for v in tf.global_variables() if 'fc' not in v.name or not args.not_restore_last] 74 | 75 | # Predictions. 76 | raw_output = end_points['resnet{}/logits'.format(args.num_layers)] 77 | # Predictions: ignoring all predictions with labels greater or equal than n_classes 78 | nh, nw = tf.shape(image_batch)[1], tf.shape(image_batch)[2] 79 | seg_logits = tf.image.resize_bilinear(raw_output, [nh, nw]) 80 | seg_pred = tf.argmax(seg_logits, axis=3) 81 | seg_pred = tf.expand_dims(seg_pred, 3) 82 | seg_pred = tf.reshape(seg_pred, [-1,]) 83 | 84 | seg_gt = tf.cast(label_batch, tf.int32) 85 | seg_gt = tf.reshape(seg_gt, [-1,]) 86 | mask = seg_gt <= args.num_classes - 1 87 | 88 | seg_pred = tf.boolean_mask(seg_pred, mask) 89 | seg_gt = tf.boolean_mask(seg_gt, mask) 90 | 91 | mean_iou, update_mean_iou = streaming_mean_iou(seg_pred, seg_gt, num_classes=args.num_classes) 92 | 93 | # Set up tf session and initialize variables. 94 | config = tf.ConfigProto() 95 | config.gpu_options.allow_growth = True 96 | sess = tf.Session(config=config) 97 | 98 | sess.run(tf.global_variables_initializer()) 99 | sess.run(tf.local_variables_initializer()) 100 | 101 | # Load variables if the checkpoint is provided. 102 | if args.ckpt > 0 or args.restore_from is not None: 103 | loader = tf.train.Saver(var_list=restore_var) 104 | load(loader, sess, args.snapshot_dir) 105 | 106 | # Start queue threads. 107 | threads = tf.train.start_queue_runners(coord=coord, sess=sess) 108 | 109 | tf.get_default_graph().finalize() 110 | 111 | for step in range(1449): 112 | start_time = time.time() 113 | mean_iou_float, _ = sess.run([mean_iou, update_mean_iou]) 114 | duration = time.time() - start_time 115 | sys.stdout.write('step {:d}, mean_iou: {:.6f}({:.3f} sec/step)\n'.format(step, mean_iou_float, duration)) 116 | sys.stdout.flush() 117 | 118 | if coord.should_stop(): 119 | coord.request_stop() 120 | coord.join(threads) 121 | 122 | if __name__ == '__main__': 123 | main() 124 | -------------------------------------------------------------------------------- /libs/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eveningdong/DeepLabV3-Tensorflow/9c4a5b54bb870700022740c251cfdfe4626cfb0e/libs/__init__.py -------------------------------------------------------------------------------- /libs/datasets/VOC12/__init__.py: -------------------------------------------------------------------------------- 1 | from libs.datasets.VOC12.image_reader import ImageReader 2 | from libs.datasets.VOC12.utils import decode_labels, inv_preprocess, prepare_label 3 | 4 | VOC_CATS = ['__background__', 'aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 5 | 'bus', 'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', 'horse', 6 | 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train', 7 | 'tvmonitor'] -------------------------------------------------------------------------------- /libs/datasets/VOC12/image_reader.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | import numpy as np 4 | import tensorflow as tf 5 | 6 | def image_scaling(img, label): 7 | """ 8 | Randomly scales the images between 0.5 to 2.0 times the original size. 9 | 10 | Args: 11 | img: Training image to scale. 12 | label: Segmentation mask to scale. 13 | """ 14 | 15 | scale = tf.random_uniform([1], minval=0.5, maxval=2.0, dtype=tf.float32, seed=None) 16 | h_new = tf.to_int32(tf.multiply(tf.to_float(tf.shape(img)[0]), scale)) 17 | w_new = tf.to_int32(tf.multiply(tf.to_float(tf.shape(img)[1]), scale)) 18 | new_shape = tf.squeeze(tf.stack([h_new, w_new]), squeeze_dims=[1]) 19 | img = tf.image.resize_images(img, new_shape) 20 | label = tf.image.resize_nearest_neighbor(tf.expand_dims(label, 0), new_shape) 21 | label = tf.squeeze(label, squeeze_dims=[0]) 22 | 23 | return img, label 24 | 25 | def image_mirroring(img, label): 26 | """ 27 | Randomly mirrors the images. 28 | 29 | Args: 30 | img: Training image to mirror. 31 | label: Segmentation mask to mirror. 32 | """ 33 | 34 | distort_left_right_random = tf.random_uniform([1], 0, 1.0, dtype=tf.float32)[0] 35 | mirror = tf.less(tf.stack([1.0, distort_left_right_random, 1.0]), 0.5) 36 | mirror = tf.boolean_mask([0, 1, 2], mirror) 37 | img = tf.reverse(img, mirror) 38 | label = tf.reverse(label, mirror) 39 | return img, label 40 | 41 | def random_crop_and_pad_image_and_labels(image, label, crop_h, crop_w, ignore_label=255): 42 | """ 43 | Randomly crop and pads the input images. 44 | 45 | Args: 46 | image: Training image to crop/ pad. 47 | label: Segmentation mask to crop/ pad. 48 | crop_h: Height of cropped segment. 49 | crop_w: Width of cropped segment. 50 | ignore_label: Label to ignore during the training. 51 | """ 52 | 53 | label = tf.cast(label, dtype=tf.float32) 54 | label = label - ignore_label # Needs to be subtracted and later added due to 0 padding. 55 | combined = tf.concat(axis=2, values=[image, label]) 56 | image_shape = tf.shape(image) 57 | combined_pad = tf.image.pad_to_bounding_box(combined, 0, 0, tf.maximum(crop_h, image_shape[0]), tf.maximum(crop_w, image_shape[1])) 58 | 59 | last_image_dim = tf.shape(image)[-1] 60 | last_label_dim = tf.shape(label)[-1] 61 | combined_crop = tf.random_crop(combined_pad, [crop_h,crop_w,4]) 62 | img_crop = combined_crop[:, :, :last_image_dim] 63 | label_crop = combined_crop[:, :, last_image_dim:] 64 | label_crop = label_crop + ignore_label 65 | label_crop = tf.cast(label_crop, dtype=tf.uint8) 66 | 67 | # Set static shape so that tensorflow knows shape at compile time. 68 | img_crop.set_shape((crop_h, crop_w, 3)) 69 | label_crop.set_shape((crop_h,crop_w, 1)) 70 | return img_crop, label_crop 71 | 72 | def read_labeled_image_list(data_dir, data_list): 73 | """Reads txt file containing paths to images and ground truth masks. 74 | 75 | Args: 76 | data_dir: path to the directory with images and masks. 77 | data_list: path to the file with lines of the form '/path/to/image /path/to/mask'. 78 | 79 | Returns: 80 | Two lists with all file names for images and masks, respectively. 81 | """ 82 | f = open(data_list, 'r') 83 | images = [] 84 | masks = [] 85 | for line in f: 86 | try: 87 | image, mask = line.strip("\n").split(' ') 88 | except ValueError: # Adhoc for test. 89 | image = mask = line.strip("\n") 90 | images.append(data_dir + image) 91 | masks.append(data_dir + mask) 92 | return images, masks 93 | 94 | def read_images_from_disk(input_queue, input_size, random_scale, random_mirror, ignore_label, img_mean): # optional pre-processing arguments 95 | """Read one image and its corresponding mask with optional pre-processing. 96 | 97 | Args: 98 | input_queue: tf queue with paths to the image and its mask. 99 | input_size: a tuple with (height, width) values. 100 | If not given, return images of original size. 101 | random_scale: whether to randomly scale the images prior 102 | to random crop. 103 | random_mirror: whether to randomly mirror the images prior 104 | to random crop. 105 | ignore_label: index of label to ignore during the training. 106 | img_mean: vector of mean colour values. 107 | 108 | Returns: 109 | Two tensors: the decoded image and its mask. 110 | """ 111 | 112 | img_contents = tf.read_file(input_queue[0]) 113 | label_contents = tf.read_file(input_queue[1]) 114 | 115 | img = tf.image.decode_jpeg(img_contents, channels=3) 116 | img_r, img_g, img_b = tf.split(axis=2, num_or_size_splits=3, value=img) 117 | img = tf.cast(tf.concat(axis=2, values=[img_b, img_g, img_r]), dtype=tf.float32) 118 | # Extract mean. 119 | img -= img_mean 120 | 121 | label = tf.image.decode_png(label_contents, channels=1) 122 | 123 | if input_size is not None: 124 | h, w = input_size 125 | 126 | # Randomly scale the images and labels. 127 | if random_scale: 128 | img, label = image_scaling(img, label) 129 | 130 | # Randomly mirror the images and labels. 131 | if random_mirror: 132 | img, label = image_mirroring(img, label) 133 | 134 | # Randomly crops the images and labels. 135 | img, label = random_crop_and_pad_image_and_labels(img, label, h, w, ignore_label) 136 | 137 | return img, label 138 | 139 | class ImageReader(object): 140 | '''Generic ImageReader which reads images and corresponding segmentation 141 | masks from the disk, and enqueues them into a TensorFlow queue. 142 | ''' 143 | 144 | def __init__(self, data_dir, data_list, input_size, 145 | random_scale, random_mirror, ignore_label, img_mean, coord): 146 | '''Initialise an ImageReader. 147 | 148 | Args: 149 | data_dir: path to the directory with images and masks. 150 | data_list: path to the file with lines of the form '/path/to/image /path/to/mask'. 151 | input_size: a tuple with (height, width) values, to which all the images will be resized. 152 | random_scale: whether to randomly scale the images prior to random crop. 153 | random_mirror: whether to randomly mirror the images prior to random crop. 154 | ignore_label: index of label to ignore during the training. 155 | img_mean: vector of mean colour values. 156 | coord: TensorFlow queue coordinator. 157 | ''' 158 | self.data_dir = data_dir 159 | self.data_list = data_list 160 | self.input_size = input_size 161 | self.coord = coord 162 | 163 | self.image_list, self.label_list = read_labeled_image_list(self.data_dir, self.data_list) 164 | self.images = tf.convert_to_tensor(self.image_list, dtype=tf.string) 165 | self.labels = tf.convert_to_tensor(self.label_list, dtype=tf.string) 166 | self.queue = tf.train.slice_input_producer([self.images, self.labels], 167 | shuffle=False) # not shuffling if it is val 168 | self.image, self.label = read_images_from_disk(self.queue, self.input_size, random_scale, random_mirror, ignore_label, img_mean) 169 | 170 | def dequeue(self, num_elements): 171 | '''Pack images and labels into a batch. 172 | 173 | Args: 174 | num_elements: the batch size. 175 | 176 | Returns: 177 | Two tensors of size (batch_size, h, w, {3, 1}) for images and masks.''' 178 | image_batch, label_batch = tf.train.shuffle_batch([self.image, self.label], num_elements, 2048, 64, num_threads=4) 179 | return image_batch, label_batch 180 | -------------------------------------------------------------------------------- /libs/datasets/VOC12/utils.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import tensorflow as tf 3 | 4 | from PIL import Image 5 | 6 | # colour map 7 | label_colours = [(0,0,0) 8 | # 0=background 9 | ,(128,0,0),(0,128,0),(128,128,0),(0,0,128),(128,0,128) 10 | # 1=aeroplane, 2=bicycle, 3=bird, 4=boat, 5=bottle 11 | ,(0,128,128),(128,128,128),(64,0,0),(192,0,0),(64,128,0) 12 | # 6=bus, 7=car, 8=cat, 9=chair, 10=cow 13 | ,(192,128,0),(64,0,128),(192,0,128),(64,128,128),(192,128,128) 14 | # 11=diningtable, 12=dog, 13=horse, 14=motorbike, 15=person 15 | ,(0,64,0),(128,64,0),(0,192,0),(128,192,0),(0,64,128)] 16 | # 16=potted plant, 17=sheep, 18=sofa, 19=train, 20=tv/monitor 17 | 18 | def decode_labels(mask, num_images=1, num_classes=21): 19 | """Decode batch of segmentation masks. 20 | 21 | Args: 22 | mask: result of inference after taking argmax. 23 | num_images: number of images to decode from the batch. 24 | num_classes: number of classes to predict (including background). 25 | 26 | Returns: 27 | A batch with num_images RGB images of the same size as the input. 28 | """ 29 | n, h, w, c = mask.shape 30 | assert(n >= num_images), 'Batch size %d should be greater or equal than number of images to save %d.' % (n, num_images) 31 | outputs = np.zeros((num_images, h, w, 3), dtype=np.uint8) 32 | for i in range(num_images): 33 | img = Image.new('RGB', (len(mask[i, 0]), len(mask[i]))) 34 | pixels = img.load() 35 | for j_, j in enumerate(mask[i, :, :, 0]): 36 | for k_, k in enumerate(j): 37 | if k < num_classes: 38 | pixels[k_,j_] = label_colours[k] 39 | outputs[i] = np.array(img) 40 | return outputs 41 | 42 | def prepare_label(input_batch, new_size, num_classes, one_hot=True): 43 | """Resize masks and perform one-hot encoding. 44 | 45 | Args: 46 | input_batch: input tensor of shape [batch_size H W 1]. 47 | new_size: a tensor with new height and width. 48 | num_classes: number of classes to predict (including background). 49 | one_hot: whether perform one-hot encoding. 50 | 51 | Returns: 52 | Outputs a tensor of shape [batch_size h w 21] 53 | with last dimension comprised of 0's and 1's only. 54 | """ 55 | with tf.name_scope('label_encode'): 56 | input_batch = tf.image.resize_nearest_neighbor(input_batch, new_size) # as labels are integer numbers, need to use NN interp. 57 | input_batch = tf.squeeze(input_batch, squeeze_dims=[3]) # reducing the channel dimension. 58 | if one_hot: 59 | input_batch = tf.one_hot(input_batch, depth=num_classes) 60 | return input_batch 61 | 62 | def inv_preprocess(imgs, num_images, img_mean): 63 | """Inverse preprocessing of the batch of images. 64 | Add the mean vector and convert from BGR to RGB. 65 | 66 | Args: 67 | imgs: batch of input images. 68 | num_images: number of images to apply the inverse transformations on. 69 | img_mean: vector of mean colour values. 70 | 71 | Returns: 72 | The batch of the size num_images with the same spatial dimensions as the input. 73 | """ 74 | n, h, w, c = imgs.shape 75 | assert(n >= num_images), 'Batch size %d should be greater or equal than number of images to save %d.' % (n, num_images) 76 | outputs = np.zeros((num_images, h, w, c), dtype=np.uint8) 77 | for i in range(num_images): 78 | outputs[i] = (imgs[i] + img_mean)[:, :, ::-1].astype(np.uint8) 79 | return outputs -------------------------------------------------------------------------------- /libs/datasets/VOC12/val.txt: -------------------------------------------------------------------------------- 1 | /JPEGImages/2007_000033.jpg /SegmentationClassAug/2007_000033.png 2 | /JPEGImages/2007_000042.jpg /SegmentationClassAug/2007_000042.png 3 | /JPEGImages/2007_000061.jpg /SegmentationClassAug/2007_000061.png 4 | /JPEGImages/2007_000123.jpg /SegmentationClassAug/2007_000123.png 5 | /JPEGImages/2007_000129.jpg /SegmentationClassAug/2007_000129.png 6 | /JPEGImages/2007_000175.jpg /SegmentationClassAug/2007_000175.png 7 | /JPEGImages/2007_000187.jpg /SegmentationClassAug/2007_000187.png 8 | /JPEGImages/2007_000323.jpg /SegmentationClassAug/2007_000323.png 9 | /JPEGImages/2007_000332.jpg /SegmentationClassAug/2007_000332.png 10 | /JPEGImages/2007_000346.jpg /SegmentationClassAug/2007_000346.png 11 | /JPEGImages/2007_000452.jpg /SegmentationClassAug/2007_000452.png 12 | /JPEGImages/2007_000464.jpg /SegmentationClassAug/2007_000464.png 13 | /JPEGImages/2007_000491.jpg /SegmentationClassAug/2007_000491.png 14 | /JPEGImages/2007_000529.jpg /SegmentationClassAug/2007_000529.png 15 | /JPEGImages/2007_000559.jpg /SegmentationClassAug/2007_000559.png 16 | /JPEGImages/2007_000572.jpg /SegmentationClassAug/2007_000572.png 17 | /JPEGImages/2007_000629.jpg /SegmentationClassAug/2007_000629.png 18 | /JPEGImages/2007_000636.jpg /SegmentationClassAug/2007_000636.png 19 | /JPEGImages/2007_000661.jpg /SegmentationClassAug/2007_000661.png 20 | /JPEGImages/2007_000663.jpg /SegmentationClassAug/2007_000663.png 21 | /JPEGImages/2007_000676.jpg /SegmentationClassAug/2007_000676.png 22 | /JPEGImages/2007_000727.jpg /SegmentationClassAug/2007_000727.png 23 | /JPEGImages/2007_000762.jpg /SegmentationClassAug/2007_000762.png 24 | /JPEGImages/2007_000783.jpg /SegmentationClassAug/2007_000783.png 25 | /JPEGImages/2007_000799.jpg /SegmentationClassAug/2007_000799.png 26 | /JPEGImages/2007_000804.jpg /SegmentationClassAug/2007_000804.png 27 | /JPEGImages/2007_000830.jpg /SegmentationClassAug/2007_000830.png 28 | /JPEGImages/2007_000837.jpg /SegmentationClassAug/2007_000837.png 29 | /JPEGImages/2007_000847.jpg /SegmentationClassAug/2007_000847.png 30 | /JPEGImages/2007_000862.jpg /SegmentationClassAug/2007_000862.png 31 | /JPEGImages/2007_000925.jpg /SegmentationClassAug/2007_000925.png 32 | /JPEGImages/2007_000999.jpg /SegmentationClassAug/2007_000999.png 33 | /JPEGImages/2007_001154.jpg /SegmentationClassAug/2007_001154.png 34 | /JPEGImages/2007_001175.jpg /SegmentationClassAug/2007_001175.png 35 | /JPEGImages/2007_001239.jpg /SegmentationClassAug/2007_001239.png 36 | /JPEGImages/2007_001284.jpg /SegmentationClassAug/2007_001284.png 37 | /JPEGImages/2007_001288.jpg /SegmentationClassAug/2007_001288.png 38 | /JPEGImages/2007_001289.jpg /SegmentationClassAug/2007_001289.png 39 | /JPEGImages/2007_001299.jpg /SegmentationClassAug/2007_001299.png 40 | /JPEGImages/2007_001311.jpg /SegmentationClassAug/2007_001311.png 41 | /JPEGImages/2007_001321.jpg /SegmentationClassAug/2007_001321.png 42 | /JPEGImages/2007_001377.jpg /SegmentationClassAug/2007_001377.png 43 | /JPEGImages/2007_001408.jpg /SegmentationClassAug/2007_001408.png 44 | /JPEGImages/2007_001423.jpg /SegmentationClassAug/2007_001423.png 45 | /JPEGImages/2007_001430.jpg /SegmentationClassAug/2007_001430.png 46 | /JPEGImages/2007_001457.jpg /SegmentationClassAug/2007_001457.png 47 | /JPEGImages/2007_001458.jpg /SegmentationClassAug/2007_001458.png 48 | /JPEGImages/2007_001526.jpg /SegmentationClassAug/2007_001526.png 49 | /JPEGImages/2007_001568.jpg /SegmentationClassAug/2007_001568.png 50 | /JPEGImages/2007_001585.jpg /SegmentationClassAug/2007_001585.png 51 | /JPEGImages/2007_001586.jpg /SegmentationClassAug/2007_001586.png 52 | /JPEGImages/2007_001587.jpg /SegmentationClassAug/2007_001587.png 53 | /JPEGImages/2007_001594.jpg /SegmentationClassAug/2007_001594.png 54 | /JPEGImages/2007_001630.jpg /SegmentationClassAug/2007_001630.png 55 | /JPEGImages/2007_001677.jpg /SegmentationClassAug/2007_001677.png 56 | /JPEGImages/2007_001678.jpg /SegmentationClassAug/2007_001678.png 57 | /JPEGImages/2007_001717.jpg /SegmentationClassAug/2007_001717.png 58 | /JPEGImages/2007_001733.jpg /SegmentationClassAug/2007_001733.png 59 | /JPEGImages/2007_001761.jpg /SegmentationClassAug/2007_001761.png 60 | /JPEGImages/2007_001763.jpg /SegmentationClassAug/2007_001763.png 61 | /JPEGImages/2007_001774.jpg /SegmentationClassAug/2007_001774.png 62 | /JPEGImages/2007_001884.jpg /SegmentationClassAug/2007_001884.png 63 | /JPEGImages/2007_001955.jpg /SegmentationClassAug/2007_001955.png 64 | /JPEGImages/2007_002046.jpg /SegmentationClassAug/2007_002046.png 65 | /JPEGImages/2007_002094.jpg /SegmentationClassAug/2007_002094.png 66 | /JPEGImages/2007_002119.jpg /SegmentationClassAug/2007_002119.png 67 | /JPEGImages/2007_002132.jpg /SegmentationClassAug/2007_002132.png 68 | /JPEGImages/2007_002260.jpg /SegmentationClassAug/2007_002260.png 69 | /JPEGImages/2007_002266.jpg /SegmentationClassAug/2007_002266.png 70 | /JPEGImages/2007_002268.jpg /SegmentationClassAug/2007_002268.png 71 | /JPEGImages/2007_002284.jpg /SegmentationClassAug/2007_002284.png 72 | /JPEGImages/2007_002376.jpg /SegmentationClassAug/2007_002376.png 73 | /JPEGImages/2007_002378.jpg /SegmentationClassAug/2007_002378.png 74 | /JPEGImages/2007_002387.jpg /SegmentationClassAug/2007_002387.png 75 | /JPEGImages/2007_002400.jpg /SegmentationClassAug/2007_002400.png 76 | /JPEGImages/2007_002412.jpg /SegmentationClassAug/2007_002412.png 77 | /JPEGImages/2007_002426.jpg /SegmentationClassAug/2007_002426.png 78 | /JPEGImages/2007_002427.jpg /SegmentationClassAug/2007_002427.png 79 | /JPEGImages/2007_002445.jpg /SegmentationClassAug/2007_002445.png 80 | /JPEGImages/2007_002470.jpg /SegmentationClassAug/2007_002470.png 81 | /JPEGImages/2007_002539.jpg /SegmentationClassAug/2007_002539.png 82 | /JPEGImages/2007_002565.jpg /SegmentationClassAug/2007_002565.png 83 | /JPEGImages/2007_002597.jpg /SegmentationClassAug/2007_002597.png 84 | /JPEGImages/2007_002618.jpg /SegmentationClassAug/2007_002618.png 85 | /JPEGImages/2007_002619.jpg /SegmentationClassAug/2007_002619.png 86 | /JPEGImages/2007_002624.jpg /SegmentationClassAug/2007_002624.png 87 | /JPEGImages/2007_002643.jpg /SegmentationClassAug/2007_002643.png 88 | /JPEGImages/2007_002648.jpg /SegmentationClassAug/2007_002648.png 89 | /JPEGImages/2007_002719.jpg /SegmentationClassAug/2007_002719.png 90 | /JPEGImages/2007_002728.jpg /SegmentationClassAug/2007_002728.png 91 | /JPEGImages/2007_002823.jpg /SegmentationClassAug/2007_002823.png 92 | /JPEGImages/2007_002824.jpg /SegmentationClassAug/2007_002824.png 93 | /JPEGImages/2007_002852.jpg /SegmentationClassAug/2007_002852.png 94 | /JPEGImages/2007_002903.jpg /SegmentationClassAug/2007_002903.png 95 | /JPEGImages/2007_003011.jpg /SegmentationClassAug/2007_003011.png 96 | /JPEGImages/2007_003020.jpg /SegmentationClassAug/2007_003020.png 97 | /JPEGImages/2007_003022.jpg /SegmentationClassAug/2007_003022.png 98 | /JPEGImages/2007_003051.jpg /SegmentationClassAug/2007_003051.png 99 | /JPEGImages/2007_003088.jpg /SegmentationClassAug/2007_003088.png 100 | /JPEGImages/2007_003101.jpg /SegmentationClassAug/2007_003101.png 101 | /JPEGImages/2007_003106.jpg /SegmentationClassAug/2007_003106.png 102 | /JPEGImages/2007_003110.jpg /SegmentationClassAug/2007_003110.png 103 | /JPEGImages/2007_003131.jpg /SegmentationClassAug/2007_003131.png 104 | /JPEGImages/2007_003134.jpg /SegmentationClassAug/2007_003134.png 105 | /JPEGImages/2007_003137.jpg /SegmentationClassAug/2007_003137.png 106 | /JPEGImages/2007_003143.jpg /SegmentationClassAug/2007_003143.png 107 | /JPEGImages/2007_003169.jpg /SegmentationClassAug/2007_003169.png 108 | /JPEGImages/2007_003188.jpg /SegmentationClassAug/2007_003188.png 109 | /JPEGImages/2007_003194.jpg /SegmentationClassAug/2007_003194.png 110 | /JPEGImages/2007_003195.jpg /SegmentationClassAug/2007_003195.png 111 | /JPEGImages/2007_003201.jpg /SegmentationClassAug/2007_003201.png 112 | /JPEGImages/2007_003349.jpg /SegmentationClassAug/2007_003349.png 113 | /JPEGImages/2007_003367.jpg /SegmentationClassAug/2007_003367.png 114 | /JPEGImages/2007_003373.jpg /SegmentationClassAug/2007_003373.png 115 | /JPEGImages/2007_003499.jpg /SegmentationClassAug/2007_003499.png 116 | /JPEGImages/2007_003503.jpg /SegmentationClassAug/2007_003503.png 117 | /JPEGImages/2007_003506.jpg /SegmentationClassAug/2007_003506.png 118 | /JPEGImages/2007_003530.jpg /SegmentationClassAug/2007_003530.png 119 | /JPEGImages/2007_003571.jpg /SegmentationClassAug/2007_003571.png 120 | /JPEGImages/2007_003587.jpg /SegmentationClassAug/2007_003587.png 121 | /JPEGImages/2007_003611.jpg /SegmentationClassAug/2007_003611.png 122 | /JPEGImages/2007_003621.jpg /SegmentationClassAug/2007_003621.png 123 | /JPEGImages/2007_003682.jpg /SegmentationClassAug/2007_003682.png 124 | /JPEGImages/2007_003711.jpg /SegmentationClassAug/2007_003711.png 125 | /JPEGImages/2007_003714.jpg /SegmentationClassAug/2007_003714.png 126 | /JPEGImages/2007_003742.jpg /SegmentationClassAug/2007_003742.png 127 | /JPEGImages/2007_003786.jpg /SegmentationClassAug/2007_003786.png 128 | /JPEGImages/2007_003841.jpg /SegmentationClassAug/2007_003841.png 129 | /JPEGImages/2007_003848.jpg /SegmentationClassAug/2007_003848.png 130 | /JPEGImages/2007_003861.jpg /SegmentationClassAug/2007_003861.png 131 | /JPEGImages/2007_003872.jpg /SegmentationClassAug/2007_003872.png 132 | /JPEGImages/2007_003917.jpg /SegmentationClassAug/2007_003917.png 133 | /JPEGImages/2007_003957.jpg /SegmentationClassAug/2007_003957.png 134 | /JPEGImages/2007_003991.jpg /SegmentationClassAug/2007_003991.png 135 | /JPEGImages/2007_004033.jpg /SegmentationClassAug/2007_004033.png 136 | /JPEGImages/2007_004052.jpg /SegmentationClassAug/2007_004052.png 137 | /JPEGImages/2007_004112.jpg /SegmentationClassAug/2007_004112.png 138 | /JPEGImages/2007_004121.jpg /SegmentationClassAug/2007_004121.png 139 | /JPEGImages/2007_004143.jpg /SegmentationClassAug/2007_004143.png 140 | /JPEGImages/2007_004189.jpg /SegmentationClassAug/2007_004189.png 141 | /JPEGImages/2007_004190.jpg /SegmentationClassAug/2007_004190.png 142 | /JPEGImages/2007_004193.jpg /SegmentationClassAug/2007_004193.png 143 | /JPEGImages/2007_004241.jpg /SegmentationClassAug/2007_004241.png 144 | /JPEGImages/2007_004275.jpg /SegmentationClassAug/2007_004275.png 145 | /JPEGImages/2007_004281.jpg /SegmentationClassAug/2007_004281.png 146 | /JPEGImages/2007_004380.jpg /SegmentationClassAug/2007_004380.png 147 | /JPEGImages/2007_004392.jpg /SegmentationClassAug/2007_004392.png 148 | /JPEGImages/2007_004405.jpg /SegmentationClassAug/2007_004405.png 149 | /JPEGImages/2007_004468.jpg /SegmentationClassAug/2007_004468.png 150 | /JPEGImages/2007_004483.jpg /SegmentationClassAug/2007_004483.png 151 | /JPEGImages/2007_004510.jpg /SegmentationClassAug/2007_004510.png 152 | /JPEGImages/2007_004538.jpg /SegmentationClassAug/2007_004538.png 153 | /JPEGImages/2007_004558.jpg /SegmentationClassAug/2007_004558.png 154 | /JPEGImages/2007_004644.jpg /SegmentationClassAug/2007_004644.png 155 | /JPEGImages/2007_004649.jpg /SegmentationClassAug/2007_004649.png 156 | /JPEGImages/2007_004712.jpg /SegmentationClassAug/2007_004712.png 157 | /JPEGImages/2007_004722.jpg /SegmentationClassAug/2007_004722.png 158 | /JPEGImages/2007_004856.jpg /SegmentationClassAug/2007_004856.png 159 | /JPEGImages/2007_004866.jpg /SegmentationClassAug/2007_004866.png 160 | /JPEGImages/2007_004902.jpg /SegmentationClassAug/2007_004902.png 161 | /JPEGImages/2007_004969.jpg /SegmentationClassAug/2007_004969.png 162 | /JPEGImages/2007_005058.jpg /SegmentationClassAug/2007_005058.png 163 | /JPEGImages/2007_005074.jpg /SegmentationClassAug/2007_005074.png 164 | /JPEGImages/2007_005107.jpg /SegmentationClassAug/2007_005107.png 165 | /JPEGImages/2007_005114.jpg /SegmentationClassAug/2007_005114.png 166 | /JPEGImages/2007_005149.jpg /SegmentationClassAug/2007_005149.png 167 | /JPEGImages/2007_005173.jpg /SegmentationClassAug/2007_005173.png 168 | /JPEGImages/2007_005281.jpg /SegmentationClassAug/2007_005281.png 169 | /JPEGImages/2007_005294.jpg /SegmentationClassAug/2007_005294.png 170 | /JPEGImages/2007_005296.jpg /SegmentationClassAug/2007_005296.png 171 | /JPEGImages/2007_005304.jpg /SegmentationClassAug/2007_005304.png 172 | /JPEGImages/2007_005331.jpg /SegmentationClassAug/2007_005331.png 173 | /JPEGImages/2007_005354.jpg /SegmentationClassAug/2007_005354.png 174 | /JPEGImages/2007_005358.jpg /SegmentationClassAug/2007_005358.png 175 | /JPEGImages/2007_005428.jpg /SegmentationClassAug/2007_005428.png 176 | /JPEGImages/2007_005460.jpg /SegmentationClassAug/2007_005460.png 177 | /JPEGImages/2007_005469.jpg /SegmentationClassAug/2007_005469.png 178 | /JPEGImages/2007_005509.jpg /SegmentationClassAug/2007_005509.png 179 | /JPEGImages/2007_005547.jpg /SegmentationClassAug/2007_005547.png 180 | /JPEGImages/2007_005600.jpg /SegmentationClassAug/2007_005600.png 181 | /JPEGImages/2007_005608.jpg /SegmentationClassAug/2007_005608.png 182 | /JPEGImages/2007_005626.jpg /SegmentationClassAug/2007_005626.png 183 | /JPEGImages/2007_005689.jpg /SegmentationClassAug/2007_005689.png 184 | /JPEGImages/2007_005696.jpg /SegmentationClassAug/2007_005696.png 185 | /JPEGImages/2007_005705.jpg /SegmentationClassAug/2007_005705.png 186 | /JPEGImages/2007_005759.jpg /SegmentationClassAug/2007_005759.png 187 | /JPEGImages/2007_005803.jpg /SegmentationClassAug/2007_005803.png 188 | /JPEGImages/2007_005813.jpg /SegmentationClassAug/2007_005813.png 189 | /JPEGImages/2007_005828.jpg /SegmentationClassAug/2007_005828.png 190 | /JPEGImages/2007_005844.jpg /SegmentationClassAug/2007_005844.png 191 | /JPEGImages/2007_005845.jpg /SegmentationClassAug/2007_005845.png 192 | /JPEGImages/2007_005857.jpg /SegmentationClassAug/2007_005857.png 193 | /JPEGImages/2007_005911.jpg /SegmentationClassAug/2007_005911.png 194 | /JPEGImages/2007_005915.jpg /SegmentationClassAug/2007_005915.png 195 | /JPEGImages/2007_005978.jpg /SegmentationClassAug/2007_005978.png 196 | /JPEGImages/2007_006028.jpg /SegmentationClassAug/2007_006028.png 197 | /JPEGImages/2007_006035.jpg /SegmentationClassAug/2007_006035.png 198 | /JPEGImages/2007_006046.jpg /SegmentationClassAug/2007_006046.png 199 | /JPEGImages/2007_006076.jpg /SegmentationClassAug/2007_006076.png 200 | /JPEGImages/2007_006086.jpg /SegmentationClassAug/2007_006086.png 201 | /JPEGImages/2007_006117.jpg /SegmentationClassAug/2007_006117.png 202 | /JPEGImages/2007_006171.jpg /SegmentationClassAug/2007_006171.png 203 | /JPEGImages/2007_006241.jpg /SegmentationClassAug/2007_006241.png 204 | /JPEGImages/2007_006260.jpg /SegmentationClassAug/2007_006260.png 205 | /JPEGImages/2007_006277.jpg /SegmentationClassAug/2007_006277.png 206 | /JPEGImages/2007_006348.jpg /SegmentationClassAug/2007_006348.png 207 | /JPEGImages/2007_006364.jpg /SegmentationClassAug/2007_006364.png 208 | /JPEGImages/2007_006373.jpg /SegmentationClassAug/2007_006373.png 209 | /JPEGImages/2007_006444.jpg /SegmentationClassAug/2007_006444.png 210 | /JPEGImages/2007_006449.jpg /SegmentationClassAug/2007_006449.png 211 | /JPEGImages/2007_006549.jpg /SegmentationClassAug/2007_006549.png 212 | /JPEGImages/2007_006553.jpg /SegmentationClassAug/2007_006553.png 213 | /JPEGImages/2007_006560.jpg /SegmentationClassAug/2007_006560.png 214 | /JPEGImages/2007_006647.jpg /SegmentationClassAug/2007_006647.png 215 | /JPEGImages/2007_006678.jpg /SegmentationClassAug/2007_006678.png 216 | /JPEGImages/2007_006680.jpg /SegmentationClassAug/2007_006680.png 217 | /JPEGImages/2007_006698.jpg /SegmentationClassAug/2007_006698.png 218 | /JPEGImages/2007_006761.jpg /SegmentationClassAug/2007_006761.png 219 | /JPEGImages/2007_006802.jpg /SegmentationClassAug/2007_006802.png 220 | /JPEGImages/2007_006837.jpg /SegmentationClassAug/2007_006837.png 221 | /JPEGImages/2007_006841.jpg /SegmentationClassAug/2007_006841.png 222 | /JPEGImages/2007_006864.jpg /SegmentationClassAug/2007_006864.png 223 | /JPEGImages/2007_006866.jpg /SegmentationClassAug/2007_006866.png 224 | /JPEGImages/2007_006946.jpg /SegmentationClassAug/2007_006946.png 225 | /JPEGImages/2007_007007.jpg /SegmentationClassAug/2007_007007.png 226 | /JPEGImages/2007_007084.jpg /SegmentationClassAug/2007_007084.png 227 | /JPEGImages/2007_007109.jpg /SegmentationClassAug/2007_007109.png 228 | /JPEGImages/2007_007130.jpg /SegmentationClassAug/2007_007130.png 229 | /JPEGImages/2007_007165.jpg /SegmentationClassAug/2007_007165.png 230 | /JPEGImages/2007_007168.jpg /SegmentationClassAug/2007_007168.png 231 | /JPEGImages/2007_007195.jpg /SegmentationClassAug/2007_007195.png 232 | /JPEGImages/2007_007196.jpg /SegmentationClassAug/2007_007196.png 233 | /JPEGImages/2007_007203.jpg /SegmentationClassAug/2007_007203.png 234 | /JPEGImages/2007_007211.jpg /SegmentationClassAug/2007_007211.png 235 | /JPEGImages/2007_007235.jpg /SegmentationClassAug/2007_007235.png 236 | /JPEGImages/2007_007341.jpg /SegmentationClassAug/2007_007341.png 237 | /JPEGImages/2007_007414.jpg /SegmentationClassAug/2007_007414.png 238 | /JPEGImages/2007_007417.jpg /SegmentationClassAug/2007_007417.png 239 | /JPEGImages/2007_007470.jpg /SegmentationClassAug/2007_007470.png 240 | /JPEGImages/2007_007477.jpg /SegmentationClassAug/2007_007477.png 241 | /JPEGImages/2007_007493.jpg /SegmentationClassAug/2007_007493.png 242 | /JPEGImages/2007_007498.jpg /SegmentationClassAug/2007_007498.png 243 | /JPEGImages/2007_007524.jpg /SegmentationClassAug/2007_007524.png 244 | /JPEGImages/2007_007534.jpg /SegmentationClassAug/2007_007534.png 245 | /JPEGImages/2007_007624.jpg /SegmentationClassAug/2007_007624.png 246 | /JPEGImages/2007_007651.jpg /SegmentationClassAug/2007_007651.png 247 | /JPEGImages/2007_007688.jpg /SegmentationClassAug/2007_007688.png 248 | /JPEGImages/2007_007748.jpg /SegmentationClassAug/2007_007748.png 249 | /JPEGImages/2007_007795.jpg /SegmentationClassAug/2007_007795.png 250 | /JPEGImages/2007_007810.jpg /SegmentationClassAug/2007_007810.png 251 | /JPEGImages/2007_007815.jpg /SegmentationClassAug/2007_007815.png 252 | /JPEGImages/2007_007818.jpg /SegmentationClassAug/2007_007818.png 253 | /JPEGImages/2007_007836.jpg /SegmentationClassAug/2007_007836.png 254 | /JPEGImages/2007_007849.jpg /SegmentationClassAug/2007_007849.png 255 | /JPEGImages/2007_007881.jpg /SegmentationClassAug/2007_007881.png 256 | /JPEGImages/2007_007996.jpg /SegmentationClassAug/2007_007996.png 257 | /JPEGImages/2007_008051.jpg /SegmentationClassAug/2007_008051.png 258 | /JPEGImages/2007_008084.jpg /SegmentationClassAug/2007_008084.png 259 | /JPEGImages/2007_008106.jpg /SegmentationClassAug/2007_008106.png 260 | /JPEGImages/2007_008110.jpg /SegmentationClassAug/2007_008110.png 261 | /JPEGImages/2007_008204.jpg /SegmentationClassAug/2007_008204.png 262 | /JPEGImages/2007_008222.jpg /SegmentationClassAug/2007_008222.png 263 | /JPEGImages/2007_008256.jpg /SegmentationClassAug/2007_008256.png 264 | /JPEGImages/2007_008260.jpg /SegmentationClassAug/2007_008260.png 265 | /JPEGImages/2007_008339.jpg /SegmentationClassAug/2007_008339.png 266 | /JPEGImages/2007_008374.jpg /SegmentationClassAug/2007_008374.png 267 | /JPEGImages/2007_008415.jpg /SegmentationClassAug/2007_008415.png 268 | /JPEGImages/2007_008430.jpg /SegmentationClassAug/2007_008430.png 269 | /JPEGImages/2007_008543.jpg /SegmentationClassAug/2007_008543.png 270 | /JPEGImages/2007_008547.jpg /SegmentationClassAug/2007_008547.png 271 | /JPEGImages/2007_008596.jpg /SegmentationClassAug/2007_008596.png 272 | /JPEGImages/2007_008645.jpg /SegmentationClassAug/2007_008645.png 273 | /JPEGImages/2007_008670.jpg /SegmentationClassAug/2007_008670.png 274 | /JPEGImages/2007_008708.jpg /SegmentationClassAug/2007_008708.png 275 | /JPEGImages/2007_008722.jpg /SegmentationClassAug/2007_008722.png 276 | /JPEGImages/2007_008747.jpg /SegmentationClassAug/2007_008747.png 277 | /JPEGImages/2007_008802.jpg /SegmentationClassAug/2007_008802.png 278 | /JPEGImages/2007_008815.jpg /SegmentationClassAug/2007_008815.png 279 | /JPEGImages/2007_008897.jpg /SegmentationClassAug/2007_008897.png 280 | /JPEGImages/2007_008944.jpg /SegmentationClassAug/2007_008944.png 281 | /JPEGImages/2007_008964.jpg /SegmentationClassAug/2007_008964.png 282 | /JPEGImages/2007_008973.jpg /SegmentationClassAug/2007_008973.png 283 | /JPEGImages/2007_008980.jpg /SegmentationClassAug/2007_008980.png 284 | /JPEGImages/2007_009015.jpg /SegmentationClassAug/2007_009015.png 285 | /JPEGImages/2007_009068.jpg /SegmentationClassAug/2007_009068.png 286 | /JPEGImages/2007_009084.jpg /SegmentationClassAug/2007_009084.png 287 | /JPEGImages/2007_009088.jpg /SegmentationClassAug/2007_009088.png 288 | /JPEGImages/2007_009096.jpg /SegmentationClassAug/2007_009096.png 289 | /JPEGImages/2007_009221.jpg /SegmentationClassAug/2007_009221.png 290 | /JPEGImages/2007_009245.jpg /SegmentationClassAug/2007_009245.png 291 | /JPEGImages/2007_009251.jpg /SegmentationClassAug/2007_009251.png 292 | /JPEGImages/2007_009252.jpg /SegmentationClassAug/2007_009252.png 293 | /JPEGImages/2007_009258.jpg /SegmentationClassAug/2007_009258.png 294 | /JPEGImages/2007_009320.jpg /SegmentationClassAug/2007_009320.png 295 | /JPEGImages/2007_009323.jpg /SegmentationClassAug/2007_009323.png 296 | /JPEGImages/2007_009331.jpg /SegmentationClassAug/2007_009331.png 297 | /JPEGImages/2007_009346.jpg /SegmentationClassAug/2007_009346.png 298 | /JPEGImages/2007_009392.jpg /SegmentationClassAug/2007_009392.png 299 | /JPEGImages/2007_009413.jpg /SegmentationClassAug/2007_009413.png 300 | /JPEGImages/2007_009419.jpg /SegmentationClassAug/2007_009419.png 301 | /JPEGImages/2007_009446.jpg /SegmentationClassAug/2007_009446.png 302 | /JPEGImages/2007_009458.jpg /SegmentationClassAug/2007_009458.png 303 | /JPEGImages/2007_009521.jpg /SegmentationClassAug/2007_009521.png 304 | /JPEGImages/2007_009562.jpg /SegmentationClassAug/2007_009562.png 305 | /JPEGImages/2007_009592.jpg /SegmentationClassAug/2007_009592.png 306 | /JPEGImages/2007_009654.jpg /SegmentationClassAug/2007_009654.png 307 | /JPEGImages/2007_009655.jpg /SegmentationClassAug/2007_009655.png 308 | /JPEGImages/2007_009684.jpg /SegmentationClassAug/2007_009684.png 309 | /JPEGImages/2007_009687.jpg /SegmentationClassAug/2007_009687.png 310 | /JPEGImages/2007_009691.jpg /SegmentationClassAug/2007_009691.png 311 | /JPEGImages/2007_009706.jpg /SegmentationClassAug/2007_009706.png 312 | /JPEGImages/2007_009750.jpg /SegmentationClassAug/2007_009750.png 313 | /JPEGImages/2007_009756.jpg /SegmentationClassAug/2007_009756.png 314 | /JPEGImages/2007_009764.jpg /SegmentationClassAug/2007_009764.png 315 | /JPEGImages/2007_009794.jpg /SegmentationClassAug/2007_009794.png 316 | /JPEGImages/2007_009817.jpg /SegmentationClassAug/2007_009817.png 317 | /JPEGImages/2007_009841.jpg /SegmentationClassAug/2007_009841.png 318 | /JPEGImages/2007_009897.jpg /SegmentationClassAug/2007_009897.png 319 | /JPEGImages/2007_009911.jpg /SegmentationClassAug/2007_009911.png 320 | /JPEGImages/2007_009923.jpg /SegmentationClassAug/2007_009923.png 321 | /JPEGImages/2007_009938.jpg /SegmentationClassAug/2007_009938.png 322 | /JPEGImages/2008_000009.jpg /SegmentationClassAug/2008_000009.png 323 | /JPEGImages/2008_000016.jpg /SegmentationClassAug/2008_000016.png 324 | /JPEGImages/2008_000073.jpg /SegmentationClassAug/2008_000073.png 325 | /JPEGImages/2008_000075.jpg /SegmentationClassAug/2008_000075.png 326 | /JPEGImages/2008_000080.jpg /SegmentationClassAug/2008_000080.png 327 | /JPEGImages/2008_000107.jpg /SegmentationClassAug/2008_000107.png 328 | /JPEGImages/2008_000120.jpg /SegmentationClassAug/2008_000120.png 329 | /JPEGImages/2008_000123.jpg /SegmentationClassAug/2008_000123.png 330 | /JPEGImages/2008_000149.jpg /SegmentationClassAug/2008_000149.png 331 | /JPEGImages/2008_000182.jpg /SegmentationClassAug/2008_000182.png 332 | /JPEGImages/2008_000213.jpg /SegmentationClassAug/2008_000213.png 333 | /JPEGImages/2008_000215.jpg /SegmentationClassAug/2008_000215.png 334 | /JPEGImages/2008_000223.jpg /SegmentationClassAug/2008_000223.png 335 | /JPEGImages/2008_000233.jpg /SegmentationClassAug/2008_000233.png 336 | /JPEGImages/2008_000234.jpg /SegmentationClassAug/2008_000234.png 337 | /JPEGImages/2008_000239.jpg /SegmentationClassAug/2008_000239.png 338 | /JPEGImages/2008_000254.jpg /SegmentationClassAug/2008_000254.png 339 | /JPEGImages/2008_000270.jpg /SegmentationClassAug/2008_000270.png 340 | /JPEGImages/2008_000271.jpg /SegmentationClassAug/2008_000271.png 341 | /JPEGImages/2008_000345.jpg /SegmentationClassAug/2008_000345.png 342 | /JPEGImages/2008_000359.jpg /SegmentationClassAug/2008_000359.png 343 | /JPEGImages/2008_000391.jpg /SegmentationClassAug/2008_000391.png 344 | /JPEGImages/2008_000401.jpg /SegmentationClassAug/2008_000401.png 345 | /JPEGImages/2008_000464.jpg /SegmentationClassAug/2008_000464.png 346 | /JPEGImages/2008_000469.jpg /SegmentationClassAug/2008_000469.png 347 | /JPEGImages/2008_000474.jpg /SegmentationClassAug/2008_000474.png 348 | /JPEGImages/2008_000501.jpg /SegmentationClassAug/2008_000501.png 349 | /JPEGImages/2008_000510.jpg /SegmentationClassAug/2008_000510.png 350 | /JPEGImages/2008_000533.jpg /SegmentationClassAug/2008_000533.png 351 | /JPEGImages/2008_000573.jpg /SegmentationClassAug/2008_000573.png 352 | /JPEGImages/2008_000589.jpg /SegmentationClassAug/2008_000589.png 353 | /JPEGImages/2008_000602.jpg /SegmentationClassAug/2008_000602.png 354 | /JPEGImages/2008_000630.jpg /SegmentationClassAug/2008_000630.png 355 | /JPEGImages/2008_000657.jpg /SegmentationClassAug/2008_000657.png 356 | /JPEGImages/2008_000661.jpg /SegmentationClassAug/2008_000661.png 357 | /JPEGImages/2008_000662.jpg /SegmentationClassAug/2008_000662.png 358 | /JPEGImages/2008_000666.jpg /SegmentationClassAug/2008_000666.png 359 | /JPEGImages/2008_000673.jpg /SegmentationClassAug/2008_000673.png 360 | /JPEGImages/2008_000700.jpg /SegmentationClassAug/2008_000700.png 361 | /JPEGImages/2008_000725.jpg /SegmentationClassAug/2008_000725.png 362 | /JPEGImages/2008_000731.jpg /SegmentationClassAug/2008_000731.png 363 | /JPEGImages/2008_000763.jpg /SegmentationClassAug/2008_000763.png 364 | /JPEGImages/2008_000765.jpg /SegmentationClassAug/2008_000765.png 365 | /JPEGImages/2008_000782.jpg /SegmentationClassAug/2008_000782.png 366 | /JPEGImages/2008_000795.jpg /SegmentationClassAug/2008_000795.png 367 | /JPEGImages/2008_000811.jpg /SegmentationClassAug/2008_000811.png 368 | /JPEGImages/2008_000848.jpg /SegmentationClassAug/2008_000848.png 369 | /JPEGImages/2008_000853.jpg /SegmentationClassAug/2008_000853.png 370 | /JPEGImages/2008_000863.jpg /SegmentationClassAug/2008_000863.png 371 | /JPEGImages/2008_000911.jpg /SegmentationClassAug/2008_000911.png 372 | /JPEGImages/2008_000919.jpg /SegmentationClassAug/2008_000919.png 373 | /JPEGImages/2008_000943.jpg /SegmentationClassAug/2008_000943.png 374 | /JPEGImages/2008_000992.jpg /SegmentationClassAug/2008_000992.png 375 | /JPEGImages/2008_001013.jpg /SegmentationClassAug/2008_001013.png 376 | /JPEGImages/2008_001028.jpg /SegmentationClassAug/2008_001028.png 377 | /JPEGImages/2008_001040.jpg /SegmentationClassAug/2008_001040.png 378 | /JPEGImages/2008_001070.jpg /SegmentationClassAug/2008_001070.png 379 | /JPEGImages/2008_001074.jpg /SegmentationClassAug/2008_001074.png 380 | /JPEGImages/2008_001076.jpg /SegmentationClassAug/2008_001076.png 381 | /JPEGImages/2008_001078.jpg /SegmentationClassAug/2008_001078.png 382 | /JPEGImages/2008_001135.jpg /SegmentationClassAug/2008_001135.png 383 | /JPEGImages/2008_001150.jpg /SegmentationClassAug/2008_001150.png 384 | /JPEGImages/2008_001170.jpg /SegmentationClassAug/2008_001170.png 385 | /JPEGImages/2008_001231.jpg /SegmentationClassAug/2008_001231.png 386 | /JPEGImages/2008_001249.jpg /SegmentationClassAug/2008_001249.png 387 | /JPEGImages/2008_001260.jpg /SegmentationClassAug/2008_001260.png 388 | /JPEGImages/2008_001283.jpg /SegmentationClassAug/2008_001283.png 389 | /JPEGImages/2008_001308.jpg /SegmentationClassAug/2008_001308.png 390 | /JPEGImages/2008_001379.jpg /SegmentationClassAug/2008_001379.png 391 | /JPEGImages/2008_001404.jpg /SegmentationClassAug/2008_001404.png 392 | /JPEGImages/2008_001433.jpg /SegmentationClassAug/2008_001433.png 393 | /JPEGImages/2008_001439.jpg /SegmentationClassAug/2008_001439.png 394 | /JPEGImages/2008_001478.jpg /SegmentationClassAug/2008_001478.png 395 | /JPEGImages/2008_001491.jpg /SegmentationClassAug/2008_001491.png 396 | /JPEGImages/2008_001504.jpg /SegmentationClassAug/2008_001504.png 397 | /JPEGImages/2008_001513.jpg /SegmentationClassAug/2008_001513.png 398 | /JPEGImages/2008_001514.jpg /SegmentationClassAug/2008_001514.png 399 | /JPEGImages/2008_001531.jpg /SegmentationClassAug/2008_001531.png 400 | /JPEGImages/2008_001546.jpg /SegmentationClassAug/2008_001546.png 401 | /JPEGImages/2008_001547.jpg /SegmentationClassAug/2008_001547.png 402 | /JPEGImages/2008_001580.jpg /SegmentationClassAug/2008_001580.png 403 | /JPEGImages/2008_001629.jpg /SegmentationClassAug/2008_001629.png 404 | /JPEGImages/2008_001640.jpg /SegmentationClassAug/2008_001640.png 405 | /JPEGImages/2008_001682.jpg /SegmentationClassAug/2008_001682.png 406 | /JPEGImages/2008_001688.jpg /SegmentationClassAug/2008_001688.png 407 | /JPEGImages/2008_001715.jpg /SegmentationClassAug/2008_001715.png 408 | /JPEGImages/2008_001821.jpg /SegmentationClassAug/2008_001821.png 409 | /JPEGImages/2008_001874.jpg /SegmentationClassAug/2008_001874.png 410 | /JPEGImages/2008_001885.jpg /SegmentationClassAug/2008_001885.png 411 | /JPEGImages/2008_001895.jpg /SegmentationClassAug/2008_001895.png 412 | /JPEGImages/2008_001966.jpg /SegmentationClassAug/2008_001966.png 413 | /JPEGImages/2008_001971.jpg /SegmentationClassAug/2008_001971.png 414 | /JPEGImages/2008_001992.jpg /SegmentationClassAug/2008_001992.png 415 | /JPEGImages/2008_002043.jpg /SegmentationClassAug/2008_002043.png 416 | /JPEGImages/2008_002152.jpg /SegmentationClassAug/2008_002152.png 417 | /JPEGImages/2008_002205.jpg /SegmentationClassAug/2008_002205.png 418 | /JPEGImages/2008_002212.jpg /SegmentationClassAug/2008_002212.png 419 | /JPEGImages/2008_002239.jpg /SegmentationClassAug/2008_002239.png 420 | /JPEGImages/2008_002240.jpg /SegmentationClassAug/2008_002240.png 421 | /JPEGImages/2008_002241.jpg /SegmentationClassAug/2008_002241.png 422 | /JPEGImages/2008_002269.jpg /SegmentationClassAug/2008_002269.png 423 | /JPEGImages/2008_002273.jpg /SegmentationClassAug/2008_002273.png 424 | /JPEGImages/2008_002358.jpg /SegmentationClassAug/2008_002358.png 425 | /JPEGImages/2008_002379.jpg /SegmentationClassAug/2008_002379.png 426 | /JPEGImages/2008_002383.jpg /SegmentationClassAug/2008_002383.png 427 | /JPEGImages/2008_002429.jpg /SegmentationClassAug/2008_002429.png 428 | /JPEGImages/2008_002464.jpg /SegmentationClassAug/2008_002464.png 429 | /JPEGImages/2008_002467.jpg /SegmentationClassAug/2008_002467.png 430 | /JPEGImages/2008_002492.jpg /SegmentationClassAug/2008_002492.png 431 | /JPEGImages/2008_002495.jpg /SegmentationClassAug/2008_002495.png 432 | /JPEGImages/2008_002504.jpg /SegmentationClassAug/2008_002504.png 433 | /JPEGImages/2008_002521.jpg /SegmentationClassAug/2008_002521.png 434 | /JPEGImages/2008_002536.jpg /SegmentationClassAug/2008_002536.png 435 | /JPEGImages/2008_002588.jpg /SegmentationClassAug/2008_002588.png 436 | /JPEGImages/2008_002623.jpg /SegmentationClassAug/2008_002623.png 437 | /JPEGImages/2008_002680.jpg /SegmentationClassAug/2008_002680.png 438 | /JPEGImages/2008_002681.jpg /SegmentationClassAug/2008_002681.png 439 | /JPEGImages/2008_002775.jpg /SegmentationClassAug/2008_002775.png 440 | /JPEGImages/2008_002778.jpg /SegmentationClassAug/2008_002778.png 441 | /JPEGImages/2008_002835.jpg /SegmentationClassAug/2008_002835.png 442 | /JPEGImages/2008_002859.jpg /SegmentationClassAug/2008_002859.png 443 | /JPEGImages/2008_002864.jpg /SegmentationClassAug/2008_002864.png 444 | /JPEGImages/2008_002900.jpg /SegmentationClassAug/2008_002900.png 445 | /JPEGImages/2008_002904.jpg /SegmentationClassAug/2008_002904.png 446 | /JPEGImages/2008_002929.jpg /SegmentationClassAug/2008_002929.png 447 | /JPEGImages/2008_002936.jpg /SegmentationClassAug/2008_002936.png 448 | /JPEGImages/2008_002942.jpg /SegmentationClassAug/2008_002942.png 449 | /JPEGImages/2008_002958.jpg /SegmentationClassAug/2008_002958.png 450 | /JPEGImages/2008_003003.jpg /SegmentationClassAug/2008_003003.png 451 | /JPEGImages/2008_003026.jpg /SegmentationClassAug/2008_003026.png 452 | /JPEGImages/2008_003034.jpg /SegmentationClassAug/2008_003034.png 453 | /JPEGImages/2008_003076.jpg /SegmentationClassAug/2008_003076.png 454 | /JPEGImages/2008_003105.jpg /SegmentationClassAug/2008_003105.png 455 | /JPEGImages/2008_003108.jpg /SegmentationClassAug/2008_003108.png 456 | /JPEGImages/2008_003110.jpg /SegmentationClassAug/2008_003110.png 457 | /JPEGImages/2008_003135.jpg /SegmentationClassAug/2008_003135.png 458 | /JPEGImages/2008_003141.jpg /SegmentationClassAug/2008_003141.png 459 | /JPEGImages/2008_003155.jpg /SegmentationClassAug/2008_003155.png 460 | /JPEGImages/2008_003210.jpg /SegmentationClassAug/2008_003210.png 461 | /JPEGImages/2008_003238.jpg /SegmentationClassAug/2008_003238.png 462 | /JPEGImages/2008_003270.jpg /SegmentationClassAug/2008_003270.png 463 | /JPEGImages/2008_003330.jpg /SegmentationClassAug/2008_003330.png 464 | /JPEGImages/2008_003333.jpg /SegmentationClassAug/2008_003333.png 465 | /JPEGImages/2008_003369.jpg /SegmentationClassAug/2008_003369.png 466 | /JPEGImages/2008_003379.jpg /SegmentationClassAug/2008_003379.png 467 | /JPEGImages/2008_003451.jpg /SegmentationClassAug/2008_003451.png 468 | /JPEGImages/2008_003461.jpg /SegmentationClassAug/2008_003461.png 469 | /JPEGImages/2008_003477.jpg /SegmentationClassAug/2008_003477.png 470 | /JPEGImages/2008_003492.jpg /SegmentationClassAug/2008_003492.png 471 | /JPEGImages/2008_003499.jpg /SegmentationClassAug/2008_003499.png 472 | /JPEGImages/2008_003511.jpg /SegmentationClassAug/2008_003511.png 473 | /JPEGImages/2008_003546.jpg /SegmentationClassAug/2008_003546.png 474 | /JPEGImages/2008_003576.jpg /SegmentationClassAug/2008_003576.png 475 | /JPEGImages/2008_003577.jpg /SegmentationClassAug/2008_003577.png 476 | /JPEGImages/2008_003676.jpg /SegmentationClassAug/2008_003676.png 477 | /JPEGImages/2008_003709.jpg /SegmentationClassAug/2008_003709.png 478 | /JPEGImages/2008_003733.jpg /SegmentationClassAug/2008_003733.png 479 | /JPEGImages/2008_003777.jpg /SegmentationClassAug/2008_003777.png 480 | /JPEGImages/2008_003782.jpg /SegmentationClassAug/2008_003782.png 481 | /JPEGImages/2008_003821.jpg /SegmentationClassAug/2008_003821.png 482 | /JPEGImages/2008_003846.jpg /SegmentationClassAug/2008_003846.png 483 | /JPEGImages/2008_003856.jpg /SegmentationClassAug/2008_003856.png 484 | /JPEGImages/2008_003858.jpg /SegmentationClassAug/2008_003858.png 485 | /JPEGImages/2008_003874.jpg /SegmentationClassAug/2008_003874.png 486 | /JPEGImages/2008_003876.jpg /SegmentationClassAug/2008_003876.png 487 | /JPEGImages/2008_003885.jpg /SegmentationClassAug/2008_003885.png 488 | /JPEGImages/2008_003886.jpg /SegmentationClassAug/2008_003886.png 489 | /JPEGImages/2008_003926.jpg /SegmentationClassAug/2008_003926.png 490 | /JPEGImages/2008_003976.jpg /SegmentationClassAug/2008_003976.png 491 | /JPEGImages/2008_004069.jpg /SegmentationClassAug/2008_004069.png 492 | /JPEGImages/2008_004101.jpg /SegmentationClassAug/2008_004101.png 493 | /JPEGImages/2008_004140.jpg /SegmentationClassAug/2008_004140.png 494 | /JPEGImages/2008_004172.jpg /SegmentationClassAug/2008_004172.png 495 | /JPEGImages/2008_004175.jpg /SegmentationClassAug/2008_004175.png 496 | /JPEGImages/2008_004212.jpg /SegmentationClassAug/2008_004212.png 497 | /JPEGImages/2008_004279.jpg /SegmentationClassAug/2008_004279.png 498 | /JPEGImages/2008_004339.jpg /SegmentationClassAug/2008_004339.png 499 | /JPEGImages/2008_004345.jpg /SegmentationClassAug/2008_004345.png 500 | /JPEGImages/2008_004363.jpg /SegmentationClassAug/2008_004363.png 501 | /JPEGImages/2008_004367.jpg /SegmentationClassAug/2008_004367.png 502 | /JPEGImages/2008_004396.jpg /SegmentationClassAug/2008_004396.png 503 | /JPEGImages/2008_004399.jpg /SegmentationClassAug/2008_004399.png 504 | /JPEGImages/2008_004453.jpg /SegmentationClassAug/2008_004453.png 505 | /JPEGImages/2008_004477.jpg /SegmentationClassAug/2008_004477.png 506 | /JPEGImages/2008_004552.jpg /SegmentationClassAug/2008_004552.png 507 | /JPEGImages/2008_004562.jpg /SegmentationClassAug/2008_004562.png 508 | /JPEGImages/2008_004575.jpg /SegmentationClassAug/2008_004575.png 509 | /JPEGImages/2008_004610.jpg /SegmentationClassAug/2008_004610.png 510 | /JPEGImages/2008_004612.jpg /SegmentationClassAug/2008_004612.png 511 | /JPEGImages/2008_004621.jpg /SegmentationClassAug/2008_004621.png 512 | /JPEGImages/2008_004624.jpg /SegmentationClassAug/2008_004624.png 513 | /JPEGImages/2008_004654.jpg /SegmentationClassAug/2008_004654.png 514 | /JPEGImages/2008_004659.jpg /SegmentationClassAug/2008_004659.png 515 | /JPEGImages/2008_004687.jpg /SegmentationClassAug/2008_004687.png 516 | /JPEGImages/2008_004701.jpg /SegmentationClassAug/2008_004701.png 517 | /JPEGImages/2008_004704.jpg /SegmentationClassAug/2008_004704.png 518 | /JPEGImages/2008_004705.jpg /SegmentationClassAug/2008_004705.png 519 | /JPEGImages/2008_004754.jpg /SegmentationClassAug/2008_004754.png 520 | /JPEGImages/2008_004758.jpg /SegmentationClassAug/2008_004758.png 521 | /JPEGImages/2008_004854.jpg /SegmentationClassAug/2008_004854.png 522 | /JPEGImages/2008_004910.jpg /SegmentationClassAug/2008_004910.png 523 | /JPEGImages/2008_004995.jpg /SegmentationClassAug/2008_004995.png 524 | /JPEGImages/2008_005049.jpg /SegmentationClassAug/2008_005049.png 525 | /JPEGImages/2008_005089.jpg /SegmentationClassAug/2008_005089.png 526 | /JPEGImages/2008_005097.jpg /SegmentationClassAug/2008_005097.png 527 | /JPEGImages/2008_005105.jpg /SegmentationClassAug/2008_005105.png 528 | /JPEGImages/2008_005145.jpg /SegmentationClassAug/2008_005145.png 529 | /JPEGImages/2008_005197.jpg /SegmentationClassAug/2008_005197.png 530 | /JPEGImages/2008_005217.jpg /SegmentationClassAug/2008_005217.png 531 | /JPEGImages/2008_005242.jpg /SegmentationClassAug/2008_005242.png 532 | /JPEGImages/2008_005245.jpg /SegmentationClassAug/2008_005245.png 533 | /JPEGImages/2008_005254.jpg /SegmentationClassAug/2008_005254.png 534 | /JPEGImages/2008_005262.jpg /SegmentationClassAug/2008_005262.png 535 | /JPEGImages/2008_005338.jpg /SegmentationClassAug/2008_005338.png 536 | /JPEGImages/2008_005398.jpg /SegmentationClassAug/2008_005398.png 537 | /JPEGImages/2008_005399.jpg /SegmentationClassAug/2008_005399.png 538 | /JPEGImages/2008_005422.jpg /SegmentationClassAug/2008_005422.png 539 | /JPEGImages/2008_005439.jpg /SegmentationClassAug/2008_005439.png 540 | /JPEGImages/2008_005445.jpg /SegmentationClassAug/2008_005445.png 541 | /JPEGImages/2008_005525.jpg /SegmentationClassAug/2008_005525.png 542 | /JPEGImages/2008_005544.jpg /SegmentationClassAug/2008_005544.png 543 | /JPEGImages/2008_005628.jpg /SegmentationClassAug/2008_005628.png 544 | /JPEGImages/2008_005633.jpg /SegmentationClassAug/2008_005633.png 545 | /JPEGImages/2008_005637.jpg /SegmentationClassAug/2008_005637.png 546 | /JPEGImages/2008_005642.jpg /SegmentationClassAug/2008_005642.png 547 | /JPEGImages/2008_005676.jpg /SegmentationClassAug/2008_005676.png 548 | /JPEGImages/2008_005680.jpg /SegmentationClassAug/2008_005680.png 549 | /JPEGImages/2008_005691.jpg /SegmentationClassAug/2008_005691.png 550 | /JPEGImages/2008_005727.jpg /SegmentationClassAug/2008_005727.png 551 | /JPEGImages/2008_005738.jpg /SegmentationClassAug/2008_005738.png 552 | /JPEGImages/2008_005812.jpg /SegmentationClassAug/2008_005812.png 553 | /JPEGImages/2008_005904.jpg /SegmentationClassAug/2008_005904.png 554 | /JPEGImages/2008_005915.jpg /SegmentationClassAug/2008_005915.png 555 | /JPEGImages/2008_006008.jpg /SegmentationClassAug/2008_006008.png 556 | /JPEGImages/2008_006036.jpg /SegmentationClassAug/2008_006036.png 557 | /JPEGImages/2008_006055.jpg /SegmentationClassAug/2008_006055.png 558 | /JPEGImages/2008_006063.jpg /SegmentationClassAug/2008_006063.png 559 | /JPEGImages/2008_006108.jpg /SegmentationClassAug/2008_006108.png 560 | /JPEGImages/2008_006130.jpg /SegmentationClassAug/2008_006130.png 561 | /JPEGImages/2008_006143.jpg /SegmentationClassAug/2008_006143.png 562 | /JPEGImages/2008_006159.jpg /SegmentationClassAug/2008_006159.png 563 | /JPEGImages/2008_006216.jpg /SegmentationClassAug/2008_006216.png 564 | /JPEGImages/2008_006219.jpg /SegmentationClassAug/2008_006219.png 565 | /JPEGImages/2008_006229.jpg /SegmentationClassAug/2008_006229.png 566 | /JPEGImages/2008_006254.jpg /SegmentationClassAug/2008_006254.png 567 | /JPEGImages/2008_006275.jpg /SegmentationClassAug/2008_006275.png 568 | /JPEGImages/2008_006325.jpg /SegmentationClassAug/2008_006325.png 569 | /JPEGImages/2008_006327.jpg /SegmentationClassAug/2008_006327.png 570 | /JPEGImages/2008_006341.jpg /SegmentationClassAug/2008_006341.png 571 | /JPEGImages/2008_006408.jpg /SegmentationClassAug/2008_006408.png 572 | /JPEGImages/2008_006480.jpg /SegmentationClassAug/2008_006480.png 573 | /JPEGImages/2008_006523.jpg /SegmentationClassAug/2008_006523.png 574 | /JPEGImages/2008_006526.jpg /SegmentationClassAug/2008_006526.png 575 | /JPEGImages/2008_006528.jpg /SegmentationClassAug/2008_006528.png 576 | /JPEGImages/2008_006553.jpg /SegmentationClassAug/2008_006553.png 577 | /JPEGImages/2008_006554.jpg /SegmentationClassAug/2008_006554.png 578 | /JPEGImages/2008_006703.jpg /SegmentationClassAug/2008_006703.png 579 | /JPEGImages/2008_006722.jpg /SegmentationClassAug/2008_006722.png 580 | /JPEGImages/2008_006752.jpg /SegmentationClassAug/2008_006752.png 581 | /JPEGImages/2008_006784.jpg /SegmentationClassAug/2008_006784.png 582 | /JPEGImages/2008_006835.jpg /SegmentationClassAug/2008_006835.png 583 | /JPEGImages/2008_006874.jpg /SegmentationClassAug/2008_006874.png 584 | /JPEGImages/2008_006981.jpg /SegmentationClassAug/2008_006981.png 585 | /JPEGImages/2008_006986.jpg /SegmentationClassAug/2008_006986.png 586 | /JPEGImages/2008_007025.jpg /SegmentationClassAug/2008_007025.png 587 | /JPEGImages/2008_007031.jpg /SegmentationClassAug/2008_007031.png 588 | /JPEGImages/2008_007048.jpg /SegmentationClassAug/2008_007048.png 589 | /JPEGImages/2008_007120.jpg /SegmentationClassAug/2008_007120.png 590 | /JPEGImages/2008_007123.jpg /SegmentationClassAug/2008_007123.png 591 | /JPEGImages/2008_007143.jpg /SegmentationClassAug/2008_007143.png 592 | /JPEGImages/2008_007194.jpg /SegmentationClassAug/2008_007194.png 593 | /JPEGImages/2008_007219.jpg /SegmentationClassAug/2008_007219.png 594 | /JPEGImages/2008_007273.jpg /SegmentationClassAug/2008_007273.png 595 | /JPEGImages/2008_007350.jpg /SegmentationClassAug/2008_007350.png 596 | /JPEGImages/2008_007378.jpg /SegmentationClassAug/2008_007378.png 597 | /JPEGImages/2008_007392.jpg /SegmentationClassAug/2008_007392.png 598 | /JPEGImages/2008_007402.jpg /SegmentationClassAug/2008_007402.png 599 | /JPEGImages/2008_007497.jpg /SegmentationClassAug/2008_007497.png 600 | /JPEGImages/2008_007498.jpg /SegmentationClassAug/2008_007498.png 601 | /JPEGImages/2008_007507.jpg /SegmentationClassAug/2008_007507.png 602 | /JPEGImages/2008_007513.jpg /SegmentationClassAug/2008_007513.png 603 | /JPEGImages/2008_007527.jpg /SegmentationClassAug/2008_007527.png 604 | /JPEGImages/2008_007548.jpg /SegmentationClassAug/2008_007548.png 605 | /JPEGImages/2008_007596.jpg /SegmentationClassAug/2008_007596.png 606 | /JPEGImages/2008_007677.jpg /SegmentationClassAug/2008_007677.png 607 | /JPEGImages/2008_007737.jpg /SegmentationClassAug/2008_007737.png 608 | /JPEGImages/2008_007797.jpg /SegmentationClassAug/2008_007797.png 609 | /JPEGImages/2008_007804.jpg /SegmentationClassAug/2008_007804.png 610 | /JPEGImages/2008_007811.jpg /SegmentationClassAug/2008_007811.png 611 | /JPEGImages/2008_007814.jpg /SegmentationClassAug/2008_007814.png 612 | /JPEGImages/2008_007828.jpg /SegmentationClassAug/2008_007828.png 613 | /JPEGImages/2008_007836.jpg /SegmentationClassAug/2008_007836.png 614 | /JPEGImages/2008_007945.jpg /SegmentationClassAug/2008_007945.png 615 | /JPEGImages/2008_007994.jpg /SegmentationClassAug/2008_007994.png 616 | /JPEGImages/2008_008051.jpg /SegmentationClassAug/2008_008051.png 617 | /JPEGImages/2008_008103.jpg /SegmentationClassAug/2008_008103.png 618 | /JPEGImages/2008_008127.jpg /SegmentationClassAug/2008_008127.png 619 | /JPEGImages/2008_008221.jpg /SegmentationClassAug/2008_008221.png 620 | /JPEGImages/2008_008252.jpg /SegmentationClassAug/2008_008252.png 621 | /JPEGImages/2008_008268.jpg /SegmentationClassAug/2008_008268.png 622 | /JPEGImages/2008_008296.jpg /SegmentationClassAug/2008_008296.png 623 | /JPEGImages/2008_008301.jpg /SegmentationClassAug/2008_008301.png 624 | /JPEGImages/2008_008335.jpg /SegmentationClassAug/2008_008335.png 625 | /JPEGImages/2008_008362.jpg /SegmentationClassAug/2008_008362.png 626 | /JPEGImages/2008_008392.jpg /SegmentationClassAug/2008_008392.png 627 | /JPEGImages/2008_008393.jpg /SegmentationClassAug/2008_008393.png 628 | /JPEGImages/2008_008421.jpg /SegmentationClassAug/2008_008421.png 629 | /JPEGImages/2008_008434.jpg /SegmentationClassAug/2008_008434.png 630 | /JPEGImages/2008_008469.jpg /SegmentationClassAug/2008_008469.png 631 | /JPEGImages/2008_008629.jpg /SegmentationClassAug/2008_008629.png 632 | /JPEGImages/2008_008682.jpg /SegmentationClassAug/2008_008682.png 633 | /JPEGImages/2008_008711.jpg /SegmentationClassAug/2008_008711.png 634 | /JPEGImages/2008_008746.jpg /SegmentationClassAug/2008_008746.png 635 | /JPEGImages/2009_000012.jpg /SegmentationClassAug/2009_000012.png 636 | /JPEGImages/2009_000013.jpg /SegmentationClassAug/2009_000013.png 637 | /JPEGImages/2009_000022.jpg /SegmentationClassAug/2009_000022.png 638 | /JPEGImages/2009_000032.jpg /SegmentationClassAug/2009_000032.png 639 | /JPEGImages/2009_000037.jpg /SegmentationClassAug/2009_000037.png 640 | /JPEGImages/2009_000039.jpg /SegmentationClassAug/2009_000039.png 641 | /JPEGImages/2009_000074.jpg /SegmentationClassAug/2009_000074.png 642 | /JPEGImages/2009_000080.jpg /SegmentationClassAug/2009_000080.png 643 | /JPEGImages/2009_000087.jpg /SegmentationClassAug/2009_000087.png 644 | /JPEGImages/2009_000096.jpg /SegmentationClassAug/2009_000096.png 645 | /JPEGImages/2009_000121.jpg /SegmentationClassAug/2009_000121.png 646 | /JPEGImages/2009_000136.jpg /SegmentationClassAug/2009_000136.png 647 | /JPEGImages/2009_000149.jpg /SegmentationClassAug/2009_000149.png 648 | /JPEGImages/2009_000156.jpg /SegmentationClassAug/2009_000156.png 649 | /JPEGImages/2009_000201.jpg /SegmentationClassAug/2009_000201.png 650 | /JPEGImages/2009_000205.jpg /SegmentationClassAug/2009_000205.png 651 | /JPEGImages/2009_000219.jpg /SegmentationClassAug/2009_000219.png 652 | /JPEGImages/2009_000242.jpg /SegmentationClassAug/2009_000242.png 653 | /JPEGImages/2009_000309.jpg /SegmentationClassAug/2009_000309.png 654 | /JPEGImages/2009_000318.jpg /SegmentationClassAug/2009_000318.png 655 | /JPEGImages/2009_000335.jpg /SegmentationClassAug/2009_000335.png 656 | /JPEGImages/2009_000351.jpg /SegmentationClassAug/2009_000351.png 657 | /JPEGImages/2009_000354.jpg /SegmentationClassAug/2009_000354.png 658 | /JPEGImages/2009_000387.jpg /SegmentationClassAug/2009_000387.png 659 | /JPEGImages/2009_000391.jpg /SegmentationClassAug/2009_000391.png 660 | /JPEGImages/2009_000412.jpg /SegmentationClassAug/2009_000412.png 661 | /JPEGImages/2009_000418.jpg /SegmentationClassAug/2009_000418.png 662 | /JPEGImages/2009_000421.jpg /SegmentationClassAug/2009_000421.png 663 | /JPEGImages/2009_000426.jpg /SegmentationClassAug/2009_000426.png 664 | /JPEGImages/2009_000440.jpg /SegmentationClassAug/2009_000440.png 665 | /JPEGImages/2009_000446.jpg /SegmentationClassAug/2009_000446.png 666 | /JPEGImages/2009_000455.jpg /SegmentationClassAug/2009_000455.png 667 | /JPEGImages/2009_000457.jpg /SegmentationClassAug/2009_000457.png 668 | /JPEGImages/2009_000469.jpg /SegmentationClassAug/2009_000469.png 669 | /JPEGImages/2009_000487.jpg /SegmentationClassAug/2009_000487.png 670 | /JPEGImages/2009_000488.jpg /SegmentationClassAug/2009_000488.png 671 | /JPEGImages/2009_000523.jpg /SegmentationClassAug/2009_000523.png 672 | /JPEGImages/2009_000573.jpg /SegmentationClassAug/2009_000573.png 673 | /JPEGImages/2009_000619.jpg /SegmentationClassAug/2009_000619.png 674 | /JPEGImages/2009_000628.jpg /SegmentationClassAug/2009_000628.png 675 | /JPEGImages/2009_000641.jpg /SegmentationClassAug/2009_000641.png 676 | /JPEGImages/2009_000664.jpg /SegmentationClassAug/2009_000664.png 677 | /JPEGImages/2009_000675.jpg /SegmentationClassAug/2009_000675.png 678 | /JPEGImages/2009_000704.jpg /SegmentationClassAug/2009_000704.png 679 | /JPEGImages/2009_000705.jpg /SegmentationClassAug/2009_000705.png 680 | /JPEGImages/2009_000712.jpg /SegmentationClassAug/2009_000712.png 681 | /JPEGImages/2009_000716.jpg /SegmentationClassAug/2009_000716.png 682 | /JPEGImages/2009_000723.jpg /SegmentationClassAug/2009_000723.png 683 | /JPEGImages/2009_000727.jpg /SegmentationClassAug/2009_000727.png 684 | /JPEGImages/2009_000730.jpg /SegmentationClassAug/2009_000730.png 685 | /JPEGImages/2009_000731.jpg /SegmentationClassAug/2009_000731.png 686 | /JPEGImages/2009_000732.jpg /SegmentationClassAug/2009_000732.png 687 | /JPEGImages/2009_000771.jpg /SegmentationClassAug/2009_000771.png 688 | /JPEGImages/2009_000825.jpg /SegmentationClassAug/2009_000825.png 689 | /JPEGImages/2009_000828.jpg /SegmentationClassAug/2009_000828.png 690 | /JPEGImages/2009_000839.jpg /SegmentationClassAug/2009_000839.png 691 | /JPEGImages/2009_000840.jpg /SegmentationClassAug/2009_000840.png 692 | /JPEGImages/2009_000845.jpg /SegmentationClassAug/2009_000845.png 693 | /JPEGImages/2009_000879.jpg /SegmentationClassAug/2009_000879.png 694 | /JPEGImages/2009_000892.jpg /SegmentationClassAug/2009_000892.png 695 | /JPEGImages/2009_000919.jpg /SegmentationClassAug/2009_000919.png 696 | /JPEGImages/2009_000924.jpg /SegmentationClassAug/2009_000924.png 697 | /JPEGImages/2009_000931.jpg /SegmentationClassAug/2009_000931.png 698 | /JPEGImages/2009_000935.jpg /SegmentationClassAug/2009_000935.png 699 | /JPEGImages/2009_000964.jpg /SegmentationClassAug/2009_000964.png 700 | /JPEGImages/2009_000989.jpg /SegmentationClassAug/2009_000989.png 701 | /JPEGImages/2009_000991.jpg /SegmentationClassAug/2009_000991.png 702 | /JPEGImages/2009_000998.jpg /SegmentationClassAug/2009_000998.png 703 | /JPEGImages/2009_001008.jpg /SegmentationClassAug/2009_001008.png 704 | /JPEGImages/2009_001082.jpg /SegmentationClassAug/2009_001082.png 705 | /JPEGImages/2009_001108.jpg /SegmentationClassAug/2009_001108.png 706 | /JPEGImages/2009_001160.jpg /SegmentationClassAug/2009_001160.png 707 | /JPEGImages/2009_001215.jpg /SegmentationClassAug/2009_001215.png 708 | /JPEGImages/2009_001240.jpg /SegmentationClassAug/2009_001240.png 709 | /JPEGImages/2009_001255.jpg /SegmentationClassAug/2009_001255.png 710 | /JPEGImages/2009_001278.jpg /SegmentationClassAug/2009_001278.png 711 | /JPEGImages/2009_001299.jpg /SegmentationClassAug/2009_001299.png 712 | /JPEGImages/2009_001300.jpg /SegmentationClassAug/2009_001300.png 713 | /JPEGImages/2009_001314.jpg /SegmentationClassAug/2009_001314.png 714 | /JPEGImages/2009_001332.jpg /SegmentationClassAug/2009_001332.png 715 | /JPEGImages/2009_001333.jpg /SegmentationClassAug/2009_001333.png 716 | /JPEGImages/2009_001363.jpg /SegmentationClassAug/2009_001363.png 717 | /JPEGImages/2009_001391.jpg /SegmentationClassAug/2009_001391.png 718 | /JPEGImages/2009_001411.jpg /SegmentationClassAug/2009_001411.png 719 | /JPEGImages/2009_001433.jpg /SegmentationClassAug/2009_001433.png 720 | /JPEGImages/2009_001505.jpg /SegmentationClassAug/2009_001505.png 721 | /JPEGImages/2009_001535.jpg /SegmentationClassAug/2009_001535.png 722 | /JPEGImages/2009_001536.jpg /SegmentationClassAug/2009_001536.png 723 | /JPEGImages/2009_001565.jpg /SegmentationClassAug/2009_001565.png 724 | /JPEGImages/2009_001607.jpg /SegmentationClassAug/2009_001607.png 725 | /JPEGImages/2009_001644.jpg /SegmentationClassAug/2009_001644.png 726 | /JPEGImages/2009_001663.jpg /SegmentationClassAug/2009_001663.png 727 | /JPEGImages/2009_001683.jpg /SegmentationClassAug/2009_001683.png 728 | /JPEGImages/2009_001684.jpg /SegmentationClassAug/2009_001684.png 729 | /JPEGImages/2009_001687.jpg /SegmentationClassAug/2009_001687.png 730 | /JPEGImages/2009_001718.jpg /SegmentationClassAug/2009_001718.png 731 | /JPEGImages/2009_001731.jpg /SegmentationClassAug/2009_001731.png 732 | /JPEGImages/2009_001765.jpg /SegmentationClassAug/2009_001765.png 733 | /JPEGImages/2009_001768.jpg /SegmentationClassAug/2009_001768.png 734 | /JPEGImages/2009_001775.jpg /SegmentationClassAug/2009_001775.png 735 | /JPEGImages/2009_001804.jpg /SegmentationClassAug/2009_001804.png 736 | /JPEGImages/2009_001816.jpg /SegmentationClassAug/2009_001816.png 737 | /JPEGImages/2009_001818.jpg /SegmentationClassAug/2009_001818.png 738 | /JPEGImages/2009_001850.jpg /SegmentationClassAug/2009_001850.png 739 | /JPEGImages/2009_001851.jpg /SegmentationClassAug/2009_001851.png 740 | /JPEGImages/2009_001854.jpg /SegmentationClassAug/2009_001854.png 741 | /JPEGImages/2009_001941.jpg /SegmentationClassAug/2009_001941.png 742 | /JPEGImages/2009_001991.jpg /SegmentationClassAug/2009_001991.png 743 | /JPEGImages/2009_002012.jpg /SegmentationClassAug/2009_002012.png 744 | /JPEGImages/2009_002035.jpg /SegmentationClassAug/2009_002035.png 745 | /JPEGImages/2009_002042.jpg /SegmentationClassAug/2009_002042.png 746 | /JPEGImages/2009_002082.jpg /SegmentationClassAug/2009_002082.png 747 | /JPEGImages/2009_002094.jpg /SegmentationClassAug/2009_002094.png 748 | /JPEGImages/2009_002097.jpg /SegmentationClassAug/2009_002097.png 749 | /JPEGImages/2009_002122.jpg /SegmentationClassAug/2009_002122.png 750 | /JPEGImages/2009_002150.jpg /SegmentationClassAug/2009_002150.png 751 | /JPEGImages/2009_002155.jpg /SegmentationClassAug/2009_002155.png 752 | /JPEGImages/2009_002164.jpg /SegmentationClassAug/2009_002164.png 753 | /JPEGImages/2009_002165.jpg /SegmentationClassAug/2009_002165.png 754 | /JPEGImages/2009_002171.jpg /SegmentationClassAug/2009_002171.png 755 | /JPEGImages/2009_002185.jpg /SegmentationClassAug/2009_002185.png 756 | /JPEGImages/2009_002202.jpg /SegmentationClassAug/2009_002202.png 757 | /JPEGImages/2009_002221.jpg /SegmentationClassAug/2009_002221.png 758 | /JPEGImages/2009_002238.jpg /SegmentationClassAug/2009_002238.png 759 | /JPEGImages/2009_002239.jpg /SegmentationClassAug/2009_002239.png 760 | /JPEGImages/2009_002265.jpg /SegmentationClassAug/2009_002265.png 761 | /JPEGImages/2009_002268.jpg /SegmentationClassAug/2009_002268.png 762 | /JPEGImages/2009_002291.jpg /SegmentationClassAug/2009_002291.png 763 | /JPEGImages/2009_002295.jpg /SegmentationClassAug/2009_002295.png 764 | /JPEGImages/2009_002317.jpg /SegmentationClassAug/2009_002317.png 765 | /JPEGImages/2009_002320.jpg /SegmentationClassAug/2009_002320.png 766 | /JPEGImages/2009_002346.jpg /SegmentationClassAug/2009_002346.png 767 | /JPEGImages/2009_002366.jpg /SegmentationClassAug/2009_002366.png 768 | /JPEGImages/2009_002372.jpg /SegmentationClassAug/2009_002372.png 769 | /JPEGImages/2009_002382.jpg /SegmentationClassAug/2009_002382.png 770 | /JPEGImages/2009_002390.jpg /SegmentationClassAug/2009_002390.png 771 | /JPEGImages/2009_002415.jpg /SegmentationClassAug/2009_002415.png 772 | /JPEGImages/2009_002445.jpg /SegmentationClassAug/2009_002445.png 773 | /JPEGImages/2009_002487.jpg /SegmentationClassAug/2009_002487.png 774 | /JPEGImages/2009_002521.jpg /SegmentationClassAug/2009_002521.png 775 | /JPEGImages/2009_002527.jpg /SegmentationClassAug/2009_002527.png 776 | /JPEGImages/2009_002535.jpg /SegmentationClassAug/2009_002535.png 777 | /JPEGImages/2009_002539.jpg /SegmentationClassAug/2009_002539.png 778 | /JPEGImages/2009_002549.jpg /SegmentationClassAug/2009_002549.png 779 | /JPEGImages/2009_002562.jpg /SegmentationClassAug/2009_002562.png 780 | /JPEGImages/2009_002568.jpg /SegmentationClassAug/2009_002568.png 781 | /JPEGImages/2009_002571.jpg /SegmentationClassAug/2009_002571.png 782 | /JPEGImages/2009_002573.jpg /SegmentationClassAug/2009_002573.png 783 | /JPEGImages/2009_002584.jpg /SegmentationClassAug/2009_002584.png 784 | /JPEGImages/2009_002591.jpg /SegmentationClassAug/2009_002591.png 785 | /JPEGImages/2009_002594.jpg /SegmentationClassAug/2009_002594.png 786 | /JPEGImages/2009_002604.jpg /SegmentationClassAug/2009_002604.png 787 | /JPEGImages/2009_002618.jpg /SegmentationClassAug/2009_002618.png 788 | /JPEGImages/2009_002635.jpg /SegmentationClassAug/2009_002635.png 789 | /JPEGImages/2009_002638.jpg /SegmentationClassAug/2009_002638.png 790 | /JPEGImages/2009_002649.jpg /SegmentationClassAug/2009_002649.png 791 | /JPEGImages/2009_002651.jpg /SegmentationClassAug/2009_002651.png 792 | /JPEGImages/2009_002727.jpg /SegmentationClassAug/2009_002727.png 793 | /JPEGImages/2009_002732.jpg /SegmentationClassAug/2009_002732.png 794 | /JPEGImages/2009_002749.jpg /SegmentationClassAug/2009_002749.png 795 | /JPEGImages/2009_002753.jpg /SegmentationClassAug/2009_002753.png 796 | /JPEGImages/2009_002771.jpg /SegmentationClassAug/2009_002771.png 797 | /JPEGImages/2009_002808.jpg /SegmentationClassAug/2009_002808.png 798 | /JPEGImages/2009_002856.jpg /SegmentationClassAug/2009_002856.png 799 | /JPEGImages/2009_002887.jpg /SegmentationClassAug/2009_002887.png 800 | /JPEGImages/2009_002888.jpg /SegmentationClassAug/2009_002888.png 801 | /JPEGImages/2009_002928.jpg /SegmentationClassAug/2009_002928.png 802 | /JPEGImages/2009_002936.jpg /SegmentationClassAug/2009_002936.png 803 | /JPEGImages/2009_002975.jpg /SegmentationClassAug/2009_002975.png 804 | /JPEGImages/2009_002982.jpg /SegmentationClassAug/2009_002982.png 805 | /JPEGImages/2009_002990.jpg /SegmentationClassAug/2009_002990.png 806 | /JPEGImages/2009_003003.jpg /SegmentationClassAug/2009_003003.png 807 | /JPEGImages/2009_003005.jpg /SegmentationClassAug/2009_003005.png 808 | /JPEGImages/2009_003043.jpg /SegmentationClassAug/2009_003043.png 809 | /JPEGImages/2009_003059.jpg /SegmentationClassAug/2009_003059.png 810 | /JPEGImages/2009_003063.jpg /SegmentationClassAug/2009_003063.png 811 | /JPEGImages/2009_003065.jpg /SegmentationClassAug/2009_003065.png 812 | /JPEGImages/2009_003071.jpg /SegmentationClassAug/2009_003071.png 813 | /JPEGImages/2009_003080.jpg /SegmentationClassAug/2009_003080.png 814 | /JPEGImages/2009_003105.jpg /SegmentationClassAug/2009_003105.png 815 | /JPEGImages/2009_003123.jpg /SegmentationClassAug/2009_003123.png 816 | /JPEGImages/2009_003193.jpg /SegmentationClassAug/2009_003193.png 817 | /JPEGImages/2009_003196.jpg /SegmentationClassAug/2009_003196.png 818 | /JPEGImages/2009_003217.jpg /SegmentationClassAug/2009_003217.png 819 | /JPEGImages/2009_003224.jpg /SegmentationClassAug/2009_003224.png 820 | /JPEGImages/2009_003241.jpg /SegmentationClassAug/2009_003241.png 821 | /JPEGImages/2009_003269.jpg /SegmentationClassAug/2009_003269.png 822 | /JPEGImages/2009_003273.jpg /SegmentationClassAug/2009_003273.png 823 | /JPEGImages/2009_003299.jpg /SegmentationClassAug/2009_003299.png 824 | /JPEGImages/2009_003304.jpg /SegmentationClassAug/2009_003304.png 825 | /JPEGImages/2009_003311.jpg /SegmentationClassAug/2009_003311.png 826 | /JPEGImages/2009_003323.jpg /SegmentationClassAug/2009_003323.png 827 | /JPEGImages/2009_003343.jpg /SegmentationClassAug/2009_003343.png 828 | /JPEGImages/2009_003378.jpg /SegmentationClassAug/2009_003378.png 829 | /JPEGImages/2009_003387.jpg /SegmentationClassAug/2009_003387.png 830 | /JPEGImages/2009_003406.jpg /SegmentationClassAug/2009_003406.png 831 | /JPEGImages/2009_003433.jpg /SegmentationClassAug/2009_003433.png 832 | /JPEGImages/2009_003450.jpg /SegmentationClassAug/2009_003450.png 833 | /JPEGImages/2009_003466.jpg /SegmentationClassAug/2009_003466.png 834 | /JPEGImages/2009_003481.jpg /SegmentationClassAug/2009_003481.png 835 | /JPEGImages/2009_003494.jpg /SegmentationClassAug/2009_003494.png 836 | /JPEGImages/2009_003498.jpg /SegmentationClassAug/2009_003498.png 837 | /JPEGImages/2009_003504.jpg /SegmentationClassAug/2009_003504.png 838 | /JPEGImages/2009_003507.jpg /SegmentationClassAug/2009_003507.png 839 | /JPEGImages/2009_003517.jpg /SegmentationClassAug/2009_003517.png 840 | /JPEGImages/2009_003523.jpg /SegmentationClassAug/2009_003523.png 841 | /JPEGImages/2009_003542.jpg /SegmentationClassAug/2009_003542.png 842 | /JPEGImages/2009_003549.jpg /SegmentationClassAug/2009_003549.png 843 | /JPEGImages/2009_003551.jpg /SegmentationClassAug/2009_003551.png 844 | /JPEGImages/2009_003564.jpg /SegmentationClassAug/2009_003564.png 845 | /JPEGImages/2009_003569.jpg /SegmentationClassAug/2009_003569.png 846 | /JPEGImages/2009_003576.jpg /SegmentationClassAug/2009_003576.png 847 | /JPEGImages/2009_003589.jpg /SegmentationClassAug/2009_003589.png 848 | /JPEGImages/2009_003607.jpg /SegmentationClassAug/2009_003607.png 849 | /JPEGImages/2009_003640.jpg /SegmentationClassAug/2009_003640.png 850 | /JPEGImages/2009_003666.jpg /SegmentationClassAug/2009_003666.png 851 | /JPEGImages/2009_003696.jpg /SegmentationClassAug/2009_003696.png 852 | /JPEGImages/2009_003703.jpg /SegmentationClassAug/2009_003703.png 853 | /JPEGImages/2009_003707.jpg /SegmentationClassAug/2009_003707.png 854 | /JPEGImages/2009_003756.jpg /SegmentationClassAug/2009_003756.png 855 | /JPEGImages/2009_003771.jpg /SegmentationClassAug/2009_003771.png 856 | /JPEGImages/2009_003773.jpg /SegmentationClassAug/2009_003773.png 857 | /JPEGImages/2009_003804.jpg /SegmentationClassAug/2009_003804.png 858 | /JPEGImages/2009_003806.jpg /SegmentationClassAug/2009_003806.png 859 | /JPEGImages/2009_003810.jpg /SegmentationClassAug/2009_003810.png 860 | /JPEGImages/2009_003849.jpg /SegmentationClassAug/2009_003849.png 861 | /JPEGImages/2009_003857.jpg /SegmentationClassAug/2009_003857.png 862 | /JPEGImages/2009_003858.jpg /SegmentationClassAug/2009_003858.png 863 | /JPEGImages/2009_003895.jpg /SegmentationClassAug/2009_003895.png 864 | /JPEGImages/2009_003903.jpg /SegmentationClassAug/2009_003903.png 865 | /JPEGImages/2009_003904.jpg /SegmentationClassAug/2009_003904.png 866 | /JPEGImages/2009_003928.jpg /SegmentationClassAug/2009_003928.png 867 | /JPEGImages/2009_003938.jpg /SegmentationClassAug/2009_003938.png 868 | /JPEGImages/2009_003971.jpg /SegmentationClassAug/2009_003971.png 869 | /JPEGImages/2009_003991.jpg /SegmentationClassAug/2009_003991.png 870 | /JPEGImages/2009_004021.jpg /SegmentationClassAug/2009_004021.png 871 | /JPEGImages/2009_004033.jpg /SegmentationClassAug/2009_004033.png 872 | /JPEGImages/2009_004043.jpg /SegmentationClassAug/2009_004043.png 873 | /JPEGImages/2009_004070.jpg /SegmentationClassAug/2009_004070.png 874 | /JPEGImages/2009_004072.jpg /SegmentationClassAug/2009_004072.png 875 | /JPEGImages/2009_004084.jpg /SegmentationClassAug/2009_004084.png 876 | /JPEGImages/2009_004099.jpg /SegmentationClassAug/2009_004099.png 877 | /JPEGImages/2009_004125.jpg /SegmentationClassAug/2009_004125.png 878 | /JPEGImages/2009_004140.jpg /SegmentationClassAug/2009_004140.png 879 | /JPEGImages/2009_004217.jpg /SegmentationClassAug/2009_004217.png 880 | /JPEGImages/2009_004221.jpg /SegmentationClassAug/2009_004221.png 881 | /JPEGImages/2009_004247.jpg /SegmentationClassAug/2009_004247.png 882 | /JPEGImages/2009_004248.jpg /SegmentationClassAug/2009_004248.png 883 | /JPEGImages/2009_004255.jpg /SegmentationClassAug/2009_004255.png 884 | /JPEGImages/2009_004298.jpg /SegmentationClassAug/2009_004298.png 885 | /JPEGImages/2009_004324.jpg /SegmentationClassAug/2009_004324.png 886 | /JPEGImages/2009_004455.jpg /SegmentationClassAug/2009_004455.png 887 | /JPEGImages/2009_004494.jpg /SegmentationClassAug/2009_004494.png 888 | /JPEGImages/2009_004497.jpg /SegmentationClassAug/2009_004497.png 889 | /JPEGImages/2009_004504.jpg /SegmentationClassAug/2009_004504.png 890 | /JPEGImages/2009_004507.jpg /SegmentationClassAug/2009_004507.png 891 | /JPEGImages/2009_004509.jpg /SegmentationClassAug/2009_004509.png 892 | /JPEGImages/2009_004540.jpg /SegmentationClassAug/2009_004540.png 893 | /JPEGImages/2009_004568.jpg /SegmentationClassAug/2009_004568.png 894 | /JPEGImages/2009_004579.jpg /SegmentationClassAug/2009_004579.png 895 | /JPEGImages/2009_004581.jpg /SegmentationClassAug/2009_004581.png 896 | /JPEGImages/2009_004590.jpg /SegmentationClassAug/2009_004590.png 897 | /JPEGImages/2009_004592.jpg /SegmentationClassAug/2009_004592.png 898 | /JPEGImages/2009_004594.jpg /SegmentationClassAug/2009_004594.png 899 | /JPEGImages/2009_004635.jpg /SegmentationClassAug/2009_004635.png 900 | /JPEGImages/2009_004653.jpg /SegmentationClassAug/2009_004653.png 901 | /JPEGImages/2009_004687.jpg /SegmentationClassAug/2009_004687.png 902 | /JPEGImages/2009_004721.jpg /SegmentationClassAug/2009_004721.png 903 | /JPEGImages/2009_004730.jpg /SegmentationClassAug/2009_004730.png 904 | /JPEGImages/2009_004732.jpg /SegmentationClassAug/2009_004732.png 905 | /JPEGImages/2009_004738.jpg /SegmentationClassAug/2009_004738.png 906 | /JPEGImages/2009_004748.jpg /SegmentationClassAug/2009_004748.png 907 | /JPEGImages/2009_004789.jpg /SegmentationClassAug/2009_004789.png 908 | /JPEGImages/2009_004799.jpg /SegmentationClassAug/2009_004799.png 909 | /JPEGImages/2009_004801.jpg /SegmentationClassAug/2009_004801.png 910 | /JPEGImages/2009_004848.jpg /SegmentationClassAug/2009_004848.png 911 | /JPEGImages/2009_004859.jpg /SegmentationClassAug/2009_004859.png 912 | /JPEGImages/2009_004867.jpg /SegmentationClassAug/2009_004867.png 913 | /JPEGImages/2009_004882.jpg /SegmentationClassAug/2009_004882.png 914 | /JPEGImages/2009_004886.jpg /SegmentationClassAug/2009_004886.png 915 | /JPEGImages/2009_004895.jpg /SegmentationClassAug/2009_004895.png 916 | /JPEGImages/2009_004942.jpg /SegmentationClassAug/2009_004942.png 917 | /JPEGImages/2009_004969.jpg /SegmentationClassAug/2009_004969.png 918 | /JPEGImages/2009_004987.jpg /SegmentationClassAug/2009_004987.png 919 | /JPEGImages/2009_004993.jpg /SegmentationClassAug/2009_004993.png 920 | /JPEGImages/2009_004994.jpg /SegmentationClassAug/2009_004994.png 921 | /JPEGImages/2009_005038.jpg /SegmentationClassAug/2009_005038.png 922 | /JPEGImages/2009_005078.jpg /SegmentationClassAug/2009_005078.png 923 | /JPEGImages/2009_005087.jpg /SegmentationClassAug/2009_005087.png 924 | /JPEGImages/2009_005089.jpg /SegmentationClassAug/2009_005089.png 925 | /JPEGImages/2009_005137.jpg /SegmentationClassAug/2009_005137.png 926 | /JPEGImages/2009_005148.jpg /SegmentationClassAug/2009_005148.png 927 | /JPEGImages/2009_005156.jpg /SegmentationClassAug/2009_005156.png 928 | /JPEGImages/2009_005158.jpg /SegmentationClassAug/2009_005158.png 929 | /JPEGImages/2009_005189.jpg /SegmentationClassAug/2009_005189.png 930 | /JPEGImages/2009_005190.jpg /SegmentationClassAug/2009_005190.png 931 | /JPEGImages/2009_005217.jpg /SegmentationClassAug/2009_005217.png 932 | /JPEGImages/2009_005219.jpg /SegmentationClassAug/2009_005219.png 933 | /JPEGImages/2009_005220.jpg /SegmentationClassAug/2009_005220.png 934 | /JPEGImages/2009_005231.jpg /SegmentationClassAug/2009_005231.png 935 | /JPEGImages/2009_005260.jpg /SegmentationClassAug/2009_005260.png 936 | /JPEGImages/2009_005262.jpg /SegmentationClassAug/2009_005262.png 937 | /JPEGImages/2009_005302.jpg /SegmentationClassAug/2009_005302.png 938 | /JPEGImages/2010_000003.jpg /SegmentationClassAug/2010_000003.png 939 | /JPEGImages/2010_000038.jpg /SegmentationClassAug/2010_000038.png 940 | /JPEGImages/2010_000065.jpg /SegmentationClassAug/2010_000065.png 941 | /JPEGImages/2010_000083.jpg /SegmentationClassAug/2010_000083.png 942 | /JPEGImages/2010_000084.jpg /SegmentationClassAug/2010_000084.png 943 | /JPEGImages/2010_000087.jpg /SegmentationClassAug/2010_000087.png 944 | /JPEGImages/2010_000110.jpg /SegmentationClassAug/2010_000110.png 945 | /JPEGImages/2010_000159.jpg /SegmentationClassAug/2010_000159.png 946 | /JPEGImages/2010_000160.jpg /SegmentationClassAug/2010_000160.png 947 | /JPEGImages/2010_000163.jpg /SegmentationClassAug/2010_000163.png 948 | /JPEGImages/2010_000174.jpg /SegmentationClassAug/2010_000174.png 949 | /JPEGImages/2010_000216.jpg /SegmentationClassAug/2010_000216.png 950 | /JPEGImages/2010_000238.jpg /SegmentationClassAug/2010_000238.png 951 | /JPEGImages/2010_000241.jpg /SegmentationClassAug/2010_000241.png 952 | /JPEGImages/2010_000256.jpg /SegmentationClassAug/2010_000256.png 953 | /JPEGImages/2010_000272.jpg /SegmentationClassAug/2010_000272.png 954 | /JPEGImages/2010_000284.jpg /SegmentationClassAug/2010_000284.png 955 | /JPEGImages/2010_000309.jpg /SegmentationClassAug/2010_000309.png 956 | /JPEGImages/2010_000318.jpg /SegmentationClassAug/2010_000318.png 957 | /JPEGImages/2010_000330.jpg /SegmentationClassAug/2010_000330.png 958 | /JPEGImages/2010_000335.jpg /SegmentationClassAug/2010_000335.png 959 | /JPEGImages/2010_000342.jpg /SegmentationClassAug/2010_000342.png 960 | /JPEGImages/2010_000372.jpg /SegmentationClassAug/2010_000372.png 961 | /JPEGImages/2010_000422.jpg /SegmentationClassAug/2010_000422.png 962 | /JPEGImages/2010_000426.jpg /SegmentationClassAug/2010_000426.png 963 | /JPEGImages/2010_000427.jpg /SegmentationClassAug/2010_000427.png 964 | /JPEGImages/2010_000502.jpg /SegmentationClassAug/2010_000502.png 965 | /JPEGImages/2010_000530.jpg /SegmentationClassAug/2010_000530.png 966 | /JPEGImages/2010_000552.jpg /SegmentationClassAug/2010_000552.png 967 | /JPEGImages/2010_000559.jpg /SegmentationClassAug/2010_000559.png 968 | /JPEGImages/2010_000572.jpg /SegmentationClassAug/2010_000572.png 969 | /JPEGImages/2010_000573.jpg /SegmentationClassAug/2010_000573.png 970 | /JPEGImages/2010_000622.jpg /SegmentationClassAug/2010_000622.png 971 | /JPEGImages/2010_000628.jpg /SegmentationClassAug/2010_000628.png 972 | /JPEGImages/2010_000639.jpg /SegmentationClassAug/2010_000639.png 973 | /JPEGImages/2010_000666.jpg /SegmentationClassAug/2010_000666.png 974 | /JPEGImages/2010_000679.jpg /SegmentationClassAug/2010_000679.png 975 | /JPEGImages/2010_000682.jpg /SegmentationClassAug/2010_000682.png 976 | /JPEGImages/2010_000683.jpg /SegmentationClassAug/2010_000683.png 977 | /JPEGImages/2010_000724.jpg /SegmentationClassAug/2010_000724.png 978 | /JPEGImages/2010_000738.jpg /SegmentationClassAug/2010_000738.png 979 | /JPEGImages/2010_000764.jpg /SegmentationClassAug/2010_000764.png 980 | /JPEGImages/2010_000788.jpg /SegmentationClassAug/2010_000788.png 981 | /JPEGImages/2010_000814.jpg /SegmentationClassAug/2010_000814.png 982 | /JPEGImages/2010_000836.jpg /SegmentationClassAug/2010_000836.png 983 | /JPEGImages/2010_000874.jpg /SegmentationClassAug/2010_000874.png 984 | /JPEGImages/2010_000904.jpg /SegmentationClassAug/2010_000904.png 985 | /JPEGImages/2010_000906.jpg /SegmentationClassAug/2010_000906.png 986 | /JPEGImages/2010_000907.jpg /SegmentationClassAug/2010_000907.png 987 | /JPEGImages/2010_000918.jpg /SegmentationClassAug/2010_000918.png 988 | /JPEGImages/2010_000929.jpg /SegmentationClassAug/2010_000929.png 989 | /JPEGImages/2010_000941.jpg /SegmentationClassAug/2010_000941.png 990 | /JPEGImages/2010_000952.jpg /SegmentationClassAug/2010_000952.png 991 | /JPEGImages/2010_000961.jpg /SegmentationClassAug/2010_000961.png 992 | /JPEGImages/2010_001000.jpg /SegmentationClassAug/2010_001000.png 993 | /JPEGImages/2010_001010.jpg /SegmentationClassAug/2010_001010.png 994 | /JPEGImages/2010_001011.jpg /SegmentationClassAug/2010_001011.png 995 | /JPEGImages/2010_001016.jpg /SegmentationClassAug/2010_001016.png 996 | /JPEGImages/2010_001017.jpg /SegmentationClassAug/2010_001017.png 997 | /JPEGImages/2010_001024.jpg /SegmentationClassAug/2010_001024.png 998 | /JPEGImages/2010_001036.jpg /SegmentationClassAug/2010_001036.png 999 | /JPEGImages/2010_001061.jpg /SegmentationClassAug/2010_001061.png 1000 | /JPEGImages/2010_001069.jpg /SegmentationClassAug/2010_001069.png 1001 | /JPEGImages/2010_001070.jpg /SegmentationClassAug/2010_001070.png 1002 | /JPEGImages/2010_001079.jpg /SegmentationClassAug/2010_001079.png 1003 | /JPEGImages/2010_001104.jpg /SegmentationClassAug/2010_001104.png 1004 | /JPEGImages/2010_001124.jpg /SegmentationClassAug/2010_001124.png 1005 | /JPEGImages/2010_001149.jpg /SegmentationClassAug/2010_001149.png 1006 | /JPEGImages/2010_001151.jpg /SegmentationClassAug/2010_001151.png 1007 | /JPEGImages/2010_001174.jpg /SegmentationClassAug/2010_001174.png 1008 | /JPEGImages/2010_001206.jpg /SegmentationClassAug/2010_001206.png 1009 | /JPEGImages/2010_001246.jpg /SegmentationClassAug/2010_001246.png 1010 | /JPEGImages/2010_001251.jpg /SegmentationClassAug/2010_001251.png 1011 | /JPEGImages/2010_001256.jpg /SegmentationClassAug/2010_001256.png 1012 | /JPEGImages/2010_001264.jpg /SegmentationClassAug/2010_001264.png 1013 | /JPEGImages/2010_001292.jpg /SegmentationClassAug/2010_001292.png 1014 | /JPEGImages/2010_001313.jpg /SegmentationClassAug/2010_001313.png 1015 | /JPEGImages/2010_001327.jpg /SegmentationClassAug/2010_001327.png 1016 | /JPEGImages/2010_001331.jpg /SegmentationClassAug/2010_001331.png 1017 | /JPEGImages/2010_001351.jpg /SegmentationClassAug/2010_001351.png 1018 | /JPEGImages/2010_001367.jpg /SegmentationClassAug/2010_001367.png 1019 | /JPEGImages/2010_001376.jpg /SegmentationClassAug/2010_001376.png 1020 | /JPEGImages/2010_001403.jpg /SegmentationClassAug/2010_001403.png 1021 | /JPEGImages/2010_001448.jpg /SegmentationClassAug/2010_001448.png 1022 | /JPEGImages/2010_001451.jpg /SegmentationClassAug/2010_001451.png 1023 | /JPEGImages/2010_001522.jpg /SegmentationClassAug/2010_001522.png 1024 | /JPEGImages/2010_001534.jpg /SegmentationClassAug/2010_001534.png 1025 | /JPEGImages/2010_001553.jpg /SegmentationClassAug/2010_001553.png 1026 | /JPEGImages/2010_001557.jpg /SegmentationClassAug/2010_001557.png 1027 | /JPEGImages/2010_001563.jpg /SegmentationClassAug/2010_001563.png 1028 | /JPEGImages/2010_001577.jpg /SegmentationClassAug/2010_001577.png 1029 | /JPEGImages/2010_001579.jpg /SegmentationClassAug/2010_001579.png 1030 | /JPEGImages/2010_001646.jpg /SegmentationClassAug/2010_001646.png 1031 | /JPEGImages/2010_001656.jpg /SegmentationClassAug/2010_001656.png 1032 | /JPEGImages/2010_001692.jpg /SegmentationClassAug/2010_001692.png 1033 | /JPEGImages/2010_001699.jpg /SegmentationClassAug/2010_001699.png 1034 | /JPEGImages/2010_001734.jpg /SegmentationClassAug/2010_001734.png 1035 | /JPEGImages/2010_001752.jpg /SegmentationClassAug/2010_001752.png 1036 | /JPEGImages/2010_001767.jpg /SegmentationClassAug/2010_001767.png 1037 | /JPEGImages/2010_001768.jpg /SegmentationClassAug/2010_001768.png 1038 | /JPEGImages/2010_001773.jpg /SegmentationClassAug/2010_001773.png 1039 | /JPEGImages/2010_001820.jpg /SegmentationClassAug/2010_001820.png 1040 | /JPEGImages/2010_001830.jpg /SegmentationClassAug/2010_001830.png 1041 | /JPEGImages/2010_001851.jpg /SegmentationClassAug/2010_001851.png 1042 | /JPEGImages/2010_001908.jpg /SegmentationClassAug/2010_001908.png 1043 | /JPEGImages/2010_001913.jpg /SegmentationClassAug/2010_001913.png 1044 | /JPEGImages/2010_001951.jpg /SegmentationClassAug/2010_001951.png 1045 | /JPEGImages/2010_001956.jpg /SegmentationClassAug/2010_001956.png 1046 | /JPEGImages/2010_001962.jpg /SegmentationClassAug/2010_001962.png 1047 | /JPEGImages/2010_001966.jpg /SegmentationClassAug/2010_001966.png 1048 | /JPEGImages/2010_001995.jpg /SegmentationClassAug/2010_001995.png 1049 | /JPEGImages/2010_002017.jpg /SegmentationClassAug/2010_002017.png 1050 | /JPEGImages/2010_002025.jpg /SegmentationClassAug/2010_002025.png 1051 | /JPEGImages/2010_002030.jpg /SegmentationClassAug/2010_002030.png 1052 | /JPEGImages/2010_002106.jpg /SegmentationClassAug/2010_002106.png 1053 | /JPEGImages/2010_002137.jpg /SegmentationClassAug/2010_002137.png 1054 | /JPEGImages/2010_002142.jpg /SegmentationClassAug/2010_002142.png 1055 | /JPEGImages/2010_002146.jpg /SegmentationClassAug/2010_002146.png 1056 | /JPEGImages/2010_002147.jpg /SegmentationClassAug/2010_002147.png 1057 | /JPEGImages/2010_002150.jpg /SegmentationClassAug/2010_002150.png 1058 | /JPEGImages/2010_002161.jpg /SegmentationClassAug/2010_002161.png 1059 | /JPEGImages/2010_002200.jpg /SegmentationClassAug/2010_002200.png 1060 | /JPEGImages/2010_002228.jpg /SegmentationClassAug/2010_002228.png 1061 | /JPEGImages/2010_002232.jpg /SegmentationClassAug/2010_002232.png 1062 | /JPEGImages/2010_002251.jpg /SegmentationClassAug/2010_002251.png 1063 | /JPEGImages/2010_002271.jpg /SegmentationClassAug/2010_002271.png 1064 | /JPEGImages/2010_002305.jpg /SegmentationClassAug/2010_002305.png 1065 | /JPEGImages/2010_002310.jpg /SegmentationClassAug/2010_002310.png 1066 | /JPEGImages/2010_002336.jpg /SegmentationClassAug/2010_002336.png 1067 | /JPEGImages/2010_002348.jpg /SegmentationClassAug/2010_002348.png 1068 | /JPEGImages/2010_002361.jpg /SegmentationClassAug/2010_002361.png 1069 | /JPEGImages/2010_002390.jpg /SegmentationClassAug/2010_002390.png 1070 | /JPEGImages/2010_002396.jpg /SegmentationClassAug/2010_002396.png 1071 | /JPEGImages/2010_002422.jpg /SegmentationClassAug/2010_002422.png 1072 | /JPEGImages/2010_002450.jpg /SegmentationClassAug/2010_002450.png 1073 | /JPEGImages/2010_002480.jpg /SegmentationClassAug/2010_002480.png 1074 | /JPEGImages/2010_002512.jpg /SegmentationClassAug/2010_002512.png 1075 | /JPEGImages/2010_002531.jpg /SegmentationClassAug/2010_002531.png 1076 | /JPEGImages/2010_002536.jpg /SegmentationClassAug/2010_002536.png 1077 | /JPEGImages/2010_002538.jpg /SegmentationClassAug/2010_002538.png 1078 | /JPEGImages/2010_002546.jpg /SegmentationClassAug/2010_002546.png 1079 | /JPEGImages/2010_002623.jpg /SegmentationClassAug/2010_002623.png 1080 | /JPEGImages/2010_002682.jpg /SegmentationClassAug/2010_002682.png 1081 | /JPEGImages/2010_002691.jpg /SegmentationClassAug/2010_002691.png 1082 | /JPEGImages/2010_002693.jpg /SegmentationClassAug/2010_002693.png 1083 | /JPEGImages/2010_002701.jpg /SegmentationClassAug/2010_002701.png 1084 | /JPEGImages/2010_002763.jpg /SegmentationClassAug/2010_002763.png 1085 | /JPEGImages/2010_002792.jpg /SegmentationClassAug/2010_002792.png 1086 | /JPEGImages/2010_002868.jpg /SegmentationClassAug/2010_002868.png 1087 | /JPEGImages/2010_002900.jpg /SegmentationClassAug/2010_002900.png 1088 | /JPEGImages/2010_002902.jpg /SegmentationClassAug/2010_002902.png 1089 | /JPEGImages/2010_002921.jpg /SegmentationClassAug/2010_002921.png 1090 | /JPEGImages/2010_002929.jpg /SegmentationClassAug/2010_002929.png 1091 | /JPEGImages/2010_002939.jpg /SegmentationClassAug/2010_002939.png 1092 | /JPEGImages/2010_002988.jpg /SegmentationClassAug/2010_002988.png 1093 | /JPEGImages/2010_003014.jpg /SegmentationClassAug/2010_003014.png 1094 | /JPEGImages/2010_003060.jpg /SegmentationClassAug/2010_003060.png 1095 | /JPEGImages/2010_003123.jpg /SegmentationClassAug/2010_003123.png 1096 | /JPEGImages/2010_003127.jpg /SegmentationClassAug/2010_003127.png 1097 | /JPEGImages/2010_003132.jpg /SegmentationClassAug/2010_003132.png 1098 | /JPEGImages/2010_003168.jpg /SegmentationClassAug/2010_003168.png 1099 | /JPEGImages/2010_003183.jpg /SegmentationClassAug/2010_003183.png 1100 | /JPEGImages/2010_003187.jpg /SegmentationClassAug/2010_003187.png 1101 | /JPEGImages/2010_003207.jpg /SegmentationClassAug/2010_003207.png 1102 | /JPEGImages/2010_003231.jpg /SegmentationClassAug/2010_003231.png 1103 | /JPEGImages/2010_003239.jpg /SegmentationClassAug/2010_003239.png 1104 | /JPEGImages/2010_003275.jpg /SegmentationClassAug/2010_003275.png 1105 | /JPEGImages/2010_003276.jpg /SegmentationClassAug/2010_003276.png 1106 | /JPEGImages/2010_003293.jpg /SegmentationClassAug/2010_003293.png 1107 | /JPEGImages/2010_003302.jpg /SegmentationClassAug/2010_003302.png 1108 | /JPEGImages/2010_003325.jpg /SegmentationClassAug/2010_003325.png 1109 | /JPEGImages/2010_003362.jpg /SegmentationClassAug/2010_003362.png 1110 | /JPEGImages/2010_003365.jpg /SegmentationClassAug/2010_003365.png 1111 | /JPEGImages/2010_003381.jpg /SegmentationClassAug/2010_003381.png 1112 | /JPEGImages/2010_003402.jpg /SegmentationClassAug/2010_003402.png 1113 | /JPEGImages/2010_003409.jpg /SegmentationClassAug/2010_003409.png 1114 | /JPEGImages/2010_003418.jpg /SegmentationClassAug/2010_003418.png 1115 | /JPEGImages/2010_003446.jpg /SegmentationClassAug/2010_003446.png 1116 | /JPEGImages/2010_003453.jpg /SegmentationClassAug/2010_003453.png 1117 | /JPEGImages/2010_003468.jpg /SegmentationClassAug/2010_003468.png 1118 | /JPEGImages/2010_003473.jpg /SegmentationClassAug/2010_003473.png 1119 | /JPEGImages/2010_003495.jpg /SegmentationClassAug/2010_003495.png 1120 | /JPEGImages/2010_003506.jpg /SegmentationClassAug/2010_003506.png 1121 | /JPEGImages/2010_003514.jpg /SegmentationClassAug/2010_003514.png 1122 | /JPEGImages/2010_003531.jpg /SegmentationClassAug/2010_003531.png 1123 | /JPEGImages/2010_003532.jpg /SegmentationClassAug/2010_003532.png 1124 | /JPEGImages/2010_003541.jpg /SegmentationClassAug/2010_003541.png 1125 | /JPEGImages/2010_003547.jpg /SegmentationClassAug/2010_003547.png 1126 | /JPEGImages/2010_003597.jpg /SegmentationClassAug/2010_003597.png 1127 | /JPEGImages/2010_003675.jpg /SegmentationClassAug/2010_003675.png 1128 | /JPEGImages/2010_003708.jpg /SegmentationClassAug/2010_003708.png 1129 | /JPEGImages/2010_003716.jpg /SegmentationClassAug/2010_003716.png 1130 | /JPEGImages/2010_003746.jpg /SegmentationClassAug/2010_003746.png 1131 | /JPEGImages/2010_003758.jpg /SegmentationClassAug/2010_003758.png 1132 | /JPEGImages/2010_003764.jpg /SegmentationClassAug/2010_003764.png 1133 | /JPEGImages/2010_003768.jpg /SegmentationClassAug/2010_003768.png 1134 | /JPEGImages/2010_003771.jpg /SegmentationClassAug/2010_003771.png 1135 | /JPEGImages/2010_003772.jpg /SegmentationClassAug/2010_003772.png 1136 | /JPEGImages/2010_003781.jpg /SegmentationClassAug/2010_003781.png 1137 | /JPEGImages/2010_003813.jpg /SegmentationClassAug/2010_003813.png 1138 | /JPEGImages/2010_003820.jpg /SegmentationClassAug/2010_003820.png 1139 | /JPEGImages/2010_003854.jpg /SegmentationClassAug/2010_003854.png 1140 | /JPEGImages/2010_003912.jpg /SegmentationClassAug/2010_003912.png 1141 | /JPEGImages/2010_003915.jpg /SegmentationClassAug/2010_003915.png 1142 | /JPEGImages/2010_003947.jpg /SegmentationClassAug/2010_003947.png 1143 | /JPEGImages/2010_003956.jpg /SegmentationClassAug/2010_003956.png 1144 | /JPEGImages/2010_003971.jpg /SegmentationClassAug/2010_003971.png 1145 | /JPEGImages/2010_004041.jpg /SegmentationClassAug/2010_004041.png 1146 | /JPEGImages/2010_004042.jpg /SegmentationClassAug/2010_004042.png 1147 | /JPEGImages/2010_004056.jpg /SegmentationClassAug/2010_004056.png 1148 | /JPEGImages/2010_004063.jpg /SegmentationClassAug/2010_004063.png 1149 | /JPEGImages/2010_004104.jpg /SegmentationClassAug/2010_004104.png 1150 | /JPEGImages/2010_004120.jpg /SegmentationClassAug/2010_004120.png 1151 | /JPEGImages/2010_004149.jpg /SegmentationClassAug/2010_004149.png 1152 | /JPEGImages/2010_004165.jpg /SegmentationClassAug/2010_004165.png 1153 | /JPEGImages/2010_004208.jpg /SegmentationClassAug/2010_004208.png 1154 | /JPEGImages/2010_004219.jpg /SegmentationClassAug/2010_004219.png 1155 | /JPEGImages/2010_004226.jpg /SegmentationClassAug/2010_004226.png 1156 | /JPEGImages/2010_004314.jpg /SegmentationClassAug/2010_004314.png 1157 | /JPEGImages/2010_004320.jpg /SegmentationClassAug/2010_004320.png 1158 | /JPEGImages/2010_004322.jpg /SegmentationClassAug/2010_004322.png 1159 | /JPEGImages/2010_004337.jpg /SegmentationClassAug/2010_004337.png 1160 | /JPEGImages/2010_004348.jpg /SegmentationClassAug/2010_004348.png 1161 | /JPEGImages/2010_004355.jpg /SegmentationClassAug/2010_004355.png 1162 | /JPEGImages/2010_004369.jpg /SegmentationClassAug/2010_004369.png 1163 | /JPEGImages/2010_004382.jpg /SegmentationClassAug/2010_004382.png 1164 | /JPEGImages/2010_004419.jpg /SegmentationClassAug/2010_004419.png 1165 | /JPEGImages/2010_004432.jpg /SegmentationClassAug/2010_004432.png 1166 | /JPEGImages/2010_004472.jpg /SegmentationClassAug/2010_004472.png 1167 | /JPEGImages/2010_004479.jpg /SegmentationClassAug/2010_004479.png 1168 | /JPEGImages/2010_004519.jpg /SegmentationClassAug/2010_004519.png 1169 | /JPEGImages/2010_004520.jpg /SegmentationClassAug/2010_004520.png 1170 | /JPEGImages/2010_004529.jpg /SegmentationClassAug/2010_004529.png 1171 | /JPEGImages/2010_004543.jpg /SegmentationClassAug/2010_004543.png 1172 | /JPEGImages/2010_004550.jpg /SegmentationClassAug/2010_004550.png 1173 | /JPEGImages/2010_004551.jpg /SegmentationClassAug/2010_004551.png 1174 | /JPEGImages/2010_004556.jpg /SegmentationClassAug/2010_004556.png 1175 | /JPEGImages/2010_004559.jpg /SegmentationClassAug/2010_004559.png 1176 | /JPEGImages/2010_004628.jpg /SegmentationClassAug/2010_004628.png 1177 | /JPEGImages/2010_004635.jpg /SegmentationClassAug/2010_004635.png 1178 | /JPEGImages/2010_004662.jpg /SegmentationClassAug/2010_004662.png 1179 | /JPEGImages/2010_004697.jpg /SegmentationClassAug/2010_004697.png 1180 | /JPEGImages/2010_004757.jpg /SegmentationClassAug/2010_004757.png 1181 | /JPEGImages/2010_004763.jpg /SegmentationClassAug/2010_004763.png 1182 | /JPEGImages/2010_004772.jpg /SegmentationClassAug/2010_004772.png 1183 | /JPEGImages/2010_004783.jpg /SegmentationClassAug/2010_004783.png 1184 | /JPEGImages/2010_004789.jpg /SegmentationClassAug/2010_004789.png 1185 | /JPEGImages/2010_004795.jpg /SegmentationClassAug/2010_004795.png 1186 | /JPEGImages/2010_004815.jpg /SegmentationClassAug/2010_004815.png 1187 | /JPEGImages/2010_004825.jpg /SegmentationClassAug/2010_004825.png 1188 | /JPEGImages/2010_004828.jpg /SegmentationClassAug/2010_004828.png 1189 | /JPEGImages/2010_004856.jpg /SegmentationClassAug/2010_004856.png 1190 | /JPEGImages/2010_004857.jpg /SegmentationClassAug/2010_004857.png 1191 | /JPEGImages/2010_004861.jpg /SegmentationClassAug/2010_004861.png 1192 | /JPEGImages/2010_004941.jpg /SegmentationClassAug/2010_004941.png 1193 | /JPEGImages/2010_004946.jpg /SegmentationClassAug/2010_004946.png 1194 | /JPEGImages/2010_004951.jpg /SegmentationClassAug/2010_004951.png 1195 | /JPEGImages/2010_004980.jpg /SegmentationClassAug/2010_004980.png 1196 | /JPEGImages/2010_004994.jpg /SegmentationClassAug/2010_004994.png 1197 | /JPEGImages/2010_005013.jpg /SegmentationClassAug/2010_005013.png 1198 | /JPEGImages/2010_005021.jpg /SegmentationClassAug/2010_005021.png 1199 | /JPEGImages/2010_005046.jpg /SegmentationClassAug/2010_005046.png 1200 | /JPEGImages/2010_005063.jpg /SegmentationClassAug/2010_005063.png 1201 | /JPEGImages/2010_005108.jpg /SegmentationClassAug/2010_005108.png 1202 | /JPEGImages/2010_005118.jpg /SegmentationClassAug/2010_005118.png 1203 | /JPEGImages/2010_005159.jpg /SegmentationClassAug/2010_005159.png 1204 | /JPEGImages/2010_005160.jpg /SegmentationClassAug/2010_005160.png 1205 | /JPEGImages/2010_005166.jpg /SegmentationClassAug/2010_005166.png 1206 | /JPEGImages/2010_005174.jpg /SegmentationClassAug/2010_005174.png 1207 | /JPEGImages/2010_005180.jpg /SegmentationClassAug/2010_005180.png 1208 | /JPEGImages/2010_005187.jpg /SegmentationClassAug/2010_005187.png 1209 | /JPEGImages/2010_005206.jpg /SegmentationClassAug/2010_005206.png 1210 | /JPEGImages/2010_005245.jpg /SegmentationClassAug/2010_005245.png 1211 | /JPEGImages/2010_005252.jpg /SegmentationClassAug/2010_005252.png 1212 | /JPEGImages/2010_005284.jpg /SegmentationClassAug/2010_005284.png 1213 | /JPEGImages/2010_005305.jpg /SegmentationClassAug/2010_005305.png 1214 | /JPEGImages/2010_005344.jpg /SegmentationClassAug/2010_005344.png 1215 | /JPEGImages/2010_005353.jpg /SegmentationClassAug/2010_005353.png 1216 | /JPEGImages/2010_005366.jpg /SegmentationClassAug/2010_005366.png 1217 | /JPEGImages/2010_005401.jpg /SegmentationClassAug/2010_005401.png 1218 | /JPEGImages/2010_005421.jpg /SegmentationClassAug/2010_005421.png 1219 | /JPEGImages/2010_005428.jpg /SegmentationClassAug/2010_005428.png 1220 | /JPEGImages/2010_005432.jpg /SegmentationClassAug/2010_005432.png 1221 | /JPEGImages/2010_005433.jpg /SegmentationClassAug/2010_005433.png 1222 | /JPEGImages/2010_005496.jpg /SegmentationClassAug/2010_005496.png 1223 | /JPEGImages/2010_005501.jpg /SegmentationClassAug/2010_005501.png 1224 | /JPEGImages/2010_005508.jpg /SegmentationClassAug/2010_005508.png 1225 | /JPEGImages/2010_005531.jpg /SegmentationClassAug/2010_005531.png 1226 | /JPEGImages/2010_005534.jpg /SegmentationClassAug/2010_005534.png 1227 | /JPEGImages/2010_005575.jpg /SegmentationClassAug/2010_005575.png 1228 | /JPEGImages/2010_005582.jpg /SegmentationClassAug/2010_005582.png 1229 | /JPEGImages/2010_005606.jpg /SegmentationClassAug/2010_005606.png 1230 | /JPEGImages/2010_005626.jpg /SegmentationClassAug/2010_005626.png 1231 | /JPEGImages/2010_005644.jpg /SegmentationClassAug/2010_005644.png 1232 | /JPEGImages/2010_005664.jpg /SegmentationClassAug/2010_005664.png 1233 | /JPEGImages/2010_005705.jpg /SegmentationClassAug/2010_005705.png 1234 | /JPEGImages/2010_005706.jpg /SegmentationClassAug/2010_005706.png 1235 | /JPEGImages/2010_005709.jpg /SegmentationClassAug/2010_005709.png 1236 | /JPEGImages/2010_005718.jpg /SegmentationClassAug/2010_005718.png 1237 | /JPEGImages/2010_005719.jpg /SegmentationClassAug/2010_005719.png 1238 | /JPEGImages/2010_005727.jpg /SegmentationClassAug/2010_005727.png 1239 | /JPEGImages/2010_005762.jpg /SegmentationClassAug/2010_005762.png 1240 | /JPEGImages/2010_005788.jpg /SegmentationClassAug/2010_005788.png 1241 | /JPEGImages/2010_005860.jpg /SegmentationClassAug/2010_005860.png 1242 | /JPEGImages/2010_005871.jpg /SegmentationClassAug/2010_005871.png 1243 | /JPEGImages/2010_005877.jpg /SegmentationClassAug/2010_005877.png 1244 | /JPEGImages/2010_005888.jpg /SegmentationClassAug/2010_005888.png 1245 | /JPEGImages/2010_005899.jpg /SegmentationClassAug/2010_005899.png 1246 | /JPEGImages/2010_005922.jpg /SegmentationClassAug/2010_005922.png 1247 | /JPEGImages/2010_005991.jpg /SegmentationClassAug/2010_005991.png 1248 | /JPEGImages/2010_005992.jpg /SegmentationClassAug/2010_005992.png 1249 | /JPEGImages/2010_006026.jpg /SegmentationClassAug/2010_006026.png 1250 | /JPEGImages/2010_006034.jpg /SegmentationClassAug/2010_006034.png 1251 | /JPEGImages/2010_006054.jpg /SegmentationClassAug/2010_006054.png 1252 | /JPEGImages/2010_006070.jpg /SegmentationClassAug/2010_006070.png 1253 | /JPEGImages/2011_000045.jpg /SegmentationClassAug/2011_000045.png 1254 | /JPEGImages/2011_000051.jpg /SegmentationClassAug/2011_000051.png 1255 | /JPEGImages/2011_000054.jpg /SegmentationClassAug/2011_000054.png 1256 | /JPEGImages/2011_000066.jpg /SegmentationClassAug/2011_000066.png 1257 | /JPEGImages/2011_000070.jpg /SegmentationClassAug/2011_000070.png 1258 | /JPEGImages/2011_000112.jpg /SegmentationClassAug/2011_000112.png 1259 | /JPEGImages/2011_000173.jpg /SegmentationClassAug/2011_000173.png 1260 | /JPEGImages/2011_000178.jpg /SegmentationClassAug/2011_000178.png 1261 | /JPEGImages/2011_000185.jpg /SegmentationClassAug/2011_000185.png 1262 | /JPEGImages/2011_000226.jpg /SegmentationClassAug/2011_000226.png 1263 | /JPEGImages/2011_000234.jpg /SegmentationClassAug/2011_000234.png 1264 | /JPEGImages/2011_000238.jpg /SegmentationClassAug/2011_000238.png 1265 | /JPEGImages/2011_000239.jpg /SegmentationClassAug/2011_000239.png 1266 | /JPEGImages/2011_000248.jpg /SegmentationClassAug/2011_000248.png 1267 | /JPEGImages/2011_000283.jpg /SegmentationClassAug/2011_000283.png 1268 | /JPEGImages/2011_000291.jpg /SegmentationClassAug/2011_000291.png 1269 | /JPEGImages/2011_000310.jpg /SegmentationClassAug/2011_000310.png 1270 | /JPEGImages/2011_000312.jpg /SegmentationClassAug/2011_000312.png 1271 | /JPEGImages/2011_000338.jpg /SegmentationClassAug/2011_000338.png 1272 | /JPEGImages/2011_000396.jpg /SegmentationClassAug/2011_000396.png 1273 | /JPEGImages/2011_000412.jpg /SegmentationClassAug/2011_000412.png 1274 | /JPEGImages/2011_000419.jpg /SegmentationClassAug/2011_000419.png 1275 | /JPEGImages/2011_000435.jpg /SegmentationClassAug/2011_000435.png 1276 | /JPEGImages/2011_000436.jpg /SegmentationClassAug/2011_000436.png 1277 | /JPEGImages/2011_000438.jpg /SegmentationClassAug/2011_000438.png 1278 | /JPEGImages/2011_000455.jpg /SegmentationClassAug/2011_000455.png 1279 | /JPEGImages/2011_000456.jpg /SegmentationClassAug/2011_000456.png 1280 | /JPEGImages/2011_000479.jpg /SegmentationClassAug/2011_000479.png 1281 | /JPEGImages/2011_000481.jpg /SegmentationClassAug/2011_000481.png 1282 | /JPEGImages/2011_000482.jpg /SegmentationClassAug/2011_000482.png 1283 | /JPEGImages/2011_000503.jpg /SegmentationClassAug/2011_000503.png 1284 | /JPEGImages/2011_000512.jpg /SegmentationClassAug/2011_000512.png 1285 | /JPEGImages/2011_000521.jpg /SegmentationClassAug/2011_000521.png 1286 | /JPEGImages/2011_000526.jpg /SegmentationClassAug/2011_000526.png 1287 | /JPEGImages/2011_000536.jpg /SegmentationClassAug/2011_000536.png 1288 | /JPEGImages/2011_000548.jpg /SegmentationClassAug/2011_000548.png 1289 | /JPEGImages/2011_000566.jpg /SegmentationClassAug/2011_000566.png 1290 | /JPEGImages/2011_000585.jpg /SegmentationClassAug/2011_000585.png 1291 | /JPEGImages/2011_000598.jpg /SegmentationClassAug/2011_000598.png 1292 | /JPEGImages/2011_000607.jpg /SegmentationClassAug/2011_000607.png 1293 | /JPEGImages/2011_000618.jpg /SegmentationClassAug/2011_000618.png 1294 | /JPEGImages/2011_000638.jpg /SegmentationClassAug/2011_000638.png 1295 | /JPEGImages/2011_000658.jpg /SegmentationClassAug/2011_000658.png 1296 | /JPEGImages/2011_000661.jpg /SegmentationClassAug/2011_000661.png 1297 | /JPEGImages/2011_000669.jpg /SegmentationClassAug/2011_000669.png 1298 | /JPEGImages/2011_000747.jpg /SegmentationClassAug/2011_000747.png 1299 | /JPEGImages/2011_000780.jpg /SegmentationClassAug/2011_000780.png 1300 | /JPEGImages/2011_000789.jpg /SegmentationClassAug/2011_000789.png 1301 | /JPEGImages/2011_000807.jpg /SegmentationClassAug/2011_000807.png 1302 | /JPEGImages/2011_000809.jpg /SegmentationClassAug/2011_000809.png 1303 | /JPEGImages/2011_000813.jpg /SegmentationClassAug/2011_000813.png 1304 | /JPEGImages/2011_000830.jpg /SegmentationClassAug/2011_000830.png 1305 | /JPEGImages/2011_000843.jpg /SegmentationClassAug/2011_000843.png 1306 | /JPEGImages/2011_000874.jpg /SegmentationClassAug/2011_000874.png 1307 | /JPEGImages/2011_000888.jpg /SegmentationClassAug/2011_000888.png 1308 | /JPEGImages/2011_000900.jpg /SegmentationClassAug/2011_000900.png 1309 | /JPEGImages/2011_000912.jpg /SegmentationClassAug/2011_000912.png 1310 | /JPEGImages/2011_000953.jpg /SegmentationClassAug/2011_000953.png 1311 | /JPEGImages/2011_000969.jpg /SegmentationClassAug/2011_000969.png 1312 | /JPEGImages/2011_001005.jpg /SegmentationClassAug/2011_001005.png 1313 | /JPEGImages/2011_001014.jpg /SegmentationClassAug/2011_001014.png 1314 | /JPEGImages/2011_001020.jpg /SegmentationClassAug/2011_001020.png 1315 | /JPEGImages/2011_001047.jpg /SegmentationClassAug/2011_001047.png 1316 | /JPEGImages/2011_001060.jpg /SegmentationClassAug/2011_001060.png 1317 | /JPEGImages/2011_001064.jpg /SegmentationClassAug/2011_001064.png 1318 | /JPEGImages/2011_001069.jpg /SegmentationClassAug/2011_001069.png 1319 | /JPEGImages/2011_001071.jpg /SegmentationClassAug/2011_001071.png 1320 | /JPEGImages/2011_001082.jpg /SegmentationClassAug/2011_001082.png 1321 | /JPEGImages/2011_001110.jpg /SegmentationClassAug/2011_001110.png 1322 | /JPEGImages/2011_001114.jpg /SegmentationClassAug/2011_001114.png 1323 | /JPEGImages/2011_001159.jpg /SegmentationClassAug/2011_001159.png 1324 | /JPEGImages/2011_001161.jpg /SegmentationClassAug/2011_001161.png 1325 | /JPEGImages/2011_001190.jpg /SegmentationClassAug/2011_001190.png 1326 | /JPEGImages/2011_001232.jpg /SegmentationClassAug/2011_001232.png 1327 | /JPEGImages/2011_001263.jpg /SegmentationClassAug/2011_001263.png 1328 | /JPEGImages/2011_001276.jpg /SegmentationClassAug/2011_001276.png 1329 | /JPEGImages/2011_001281.jpg /SegmentationClassAug/2011_001281.png 1330 | /JPEGImages/2011_001287.jpg /SegmentationClassAug/2011_001287.png 1331 | /JPEGImages/2011_001292.jpg /SegmentationClassAug/2011_001292.png 1332 | /JPEGImages/2011_001313.jpg /SegmentationClassAug/2011_001313.png 1333 | /JPEGImages/2011_001341.jpg /SegmentationClassAug/2011_001341.png 1334 | /JPEGImages/2011_001346.jpg /SegmentationClassAug/2011_001346.png 1335 | /JPEGImages/2011_001350.jpg /SegmentationClassAug/2011_001350.png 1336 | /JPEGImages/2011_001407.jpg /SegmentationClassAug/2011_001407.png 1337 | /JPEGImages/2011_001416.jpg /SegmentationClassAug/2011_001416.png 1338 | /JPEGImages/2011_001421.jpg /SegmentationClassAug/2011_001421.png 1339 | /JPEGImages/2011_001434.jpg /SegmentationClassAug/2011_001434.png 1340 | /JPEGImages/2011_001447.jpg /SegmentationClassAug/2011_001447.png 1341 | /JPEGImages/2011_001489.jpg /SegmentationClassAug/2011_001489.png 1342 | /JPEGImages/2011_001529.jpg /SegmentationClassAug/2011_001529.png 1343 | /JPEGImages/2011_001530.jpg /SegmentationClassAug/2011_001530.png 1344 | /JPEGImages/2011_001534.jpg /SegmentationClassAug/2011_001534.png 1345 | /JPEGImages/2011_001546.jpg /SegmentationClassAug/2011_001546.png 1346 | /JPEGImages/2011_001567.jpg /SegmentationClassAug/2011_001567.png 1347 | /JPEGImages/2011_001589.jpg /SegmentationClassAug/2011_001589.png 1348 | /JPEGImages/2011_001597.jpg /SegmentationClassAug/2011_001597.png 1349 | /JPEGImages/2011_001601.jpg /SegmentationClassAug/2011_001601.png 1350 | /JPEGImages/2011_001607.jpg /SegmentationClassAug/2011_001607.png 1351 | /JPEGImages/2011_001613.jpg /SegmentationClassAug/2011_001613.png 1352 | /JPEGImages/2011_001614.jpg /SegmentationClassAug/2011_001614.png 1353 | /JPEGImages/2011_001619.jpg /SegmentationClassAug/2011_001619.png 1354 | /JPEGImages/2011_001624.jpg /SegmentationClassAug/2011_001624.png 1355 | /JPEGImages/2011_001642.jpg /SegmentationClassAug/2011_001642.png 1356 | /JPEGImages/2011_001665.jpg /SegmentationClassAug/2011_001665.png 1357 | /JPEGImages/2011_001669.jpg /SegmentationClassAug/2011_001669.png 1358 | /JPEGImages/2011_001674.jpg /SegmentationClassAug/2011_001674.png 1359 | /JPEGImages/2011_001708.jpg /SegmentationClassAug/2011_001708.png 1360 | /JPEGImages/2011_001713.jpg /SegmentationClassAug/2011_001713.png 1361 | /JPEGImages/2011_001714.jpg /SegmentationClassAug/2011_001714.png 1362 | /JPEGImages/2011_001722.jpg /SegmentationClassAug/2011_001722.png 1363 | /JPEGImages/2011_001726.jpg /SegmentationClassAug/2011_001726.png 1364 | /JPEGImages/2011_001745.jpg /SegmentationClassAug/2011_001745.png 1365 | /JPEGImages/2011_001748.jpg /SegmentationClassAug/2011_001748.png 1366 | /JPEGImages/2011_001775.jpg /SegmentationClassAug/2011_001775.png 1367 | /JPEGImages/2011_001782.jpg /SegmentationClassAug/2011_001782.png 1368 | /JPEGImages/2011_001793.jpg /SegmentationClassAug/2011_001793.png 1369 | /JPEGImages/2011_001794.jpg /SegmentationClassAug/2011_001794.png 1370 | /JPEGImages/2011_001812.jpg /SegmentationClassAug/2011_001812.png 1371 | /JPEGImages/2011_001862.jpg /SegmentationClassAug/2011_001862.png 1372 | /JPEGImages/2011_001863.jpg /SegmentationClassAug/2011_001863.png 1373 | /JPEGImages/2011_001868.jpg /SegmentationClassAug/2011_001868.png 1374 | /JPEGImages/2011_001880.jpg /SegmentationClassAug/2011_001880.png 1375 | /JPEGImages/2011_001910.jpg /SegmentationClassAug/2011_001910.png 1376 | /JPEGImages/2011_001984.jpg /SegmentationClassAug/2011_001984.png 1377 | /JPEGImages/2011_001988.jpg /SegmentationClassAug/2011_001988.png 1378 | /JPEGImages/2011_002002.jpg /SegmentationClassAug/2011_002002.png 1379 | /JPEGImages/2011_002040.jpg /SegmentationClassAug/2011_002040.png 1380 | /JPEGImages/2011_002041.jpg /SegmentationClassAug/2011_002041.png 1381 | /JPEGImages/2011_002064.jpg /SegmentationClassAug/2011_002064.png 1382 | /JPEGImages/2011_002075.jpg /SegmentationClassAug/2011_002075.png 1383 | /JPEGImages/2011_002098.jpg /SegmentationClassAug/2011_002098.png 1384 | /JPEGImages/2011_002110.jpg /SegmentationClassAug/2011_002110.png 1385 | /JPEGImages/2011_002121.jpg /SegmentationClassAug/2011_002121.png 1386 | /JPEGImages/2011_002124.jpg /SegmentationClassAug/2011_002124.png 1387 | /JPEGImages/2011_002150.jpg /SegmentationClassAug/2011_002150.png 1388 | /JPEGImages/2011_002156.jpg /SegmentationClassAug/2011_002156.png 1389 | /JPEGImages/2011_002178.jpg /SegmentationClassAug/2011_002178.png 1390 | /JPEGImages/2011_002200.jpg /SegmentationClassAug/2011_002200.png 1391 | /JPEGImages/2011_002223.jpg /SegmentationClassAug/2011_002223.png 1392 | /JPEGImages/2011_002244.jpg /SegmentationClassAug/2011_002244.png 1393 | /JPEGImages/2011_002247.jpg /SegmentationClassAug/2011_002247.png 1394 | /JPEGImages/2011_002279.jpg /SegmentationClassAug/2011_002279.png 1395 | /JPEGImages/2011_002295.jpg /SegmentationClassAug/2011_002295.png 1396 | /JPEGImages/2011_002298.jpg /SegmentationClassAug/2011_002298.png 1397 | /JPEGImages/2011_002308.jpg /SegmentationClassAug/2011_002308.png 1398 | /JPEGImages/2011_002317.jpg /SegmentationClassAug/2011_002317.png 1399 | /JPEGImages/2011_002322.jpg /SegmentationClassAug/2011_002322.png 1400 | /JPEGImages/2011_002327.jpg /SegmentationClassAug/2011_002327.png 1401 | /JPEGImages/2011_002343.jpg /SegmentationClassAug/2011_002343.png 1402 | /JPEGImages/2011_002358.jpg /SegmentationClassAug/2011_002358.png 1403 | /JPEGImages/2011_002371.jpg /SegmentationClassAug/2011_002371.png 1404 | /JPEGImages/2011_002379.jpg /SegmentationClassAug/2011_002379.png 1405 | /JPEGImages/2011_002391.jpg /SegmentationClassAug/2011_002391.png 1406 | /JPEGImages/2011_002498.jpg /SegmentationClassAug/2011_002498.png 1407 | /JPEGImages/2011_002509.jpg /SegmentationClassAug/2011_002509.png 1408 | /JPEGImages/2011_002515.jpg /SegmentationClassAug/2011_002515.png 1409 | /JPEGImages/2011_002532.jpg /SegmentationClassAug/2011_002532.png 1410 | /JPEGImages/2011_002535.jpg /SegmentationClassAug/2011_002535.png 1411 | /JPEGImages/2011_002548.jpg /SegmentationClassAug/2011_002548.png 1412 | /JPEGImages/2011_002575.jpg /SegmentationClassAug/2011_002575.png 1413 | /JPEGImages/2011_002578.jpg /SegmentationClassAug/2011_002578.png 1414 | /JPEGImages/2011_002589.jpg /SegmentationClassAug/2011_002589.png 1415 | /JPEGImages/2011_002592.jpg /SegmentationClassAug/2011_002592.png 1416 | /JPEGImages/2011_002623.jpg /SegmentationClassAug/2011_002623.png 1417 | /JPEGImages/2011_002641.jpg /SegmentationClassAug/2011_002641.png 1418 | /JPEGImages/2011_002644.jpg /SegmentationClassAug/2011_002644.png 1419 | /JPEGImages/2011_002662.jpg /SegmentationClassAug/2011_002662.png 1420 | /JPEGImages/2011_002675.jpg /SegmentationClassAug/2011_002675.png 1421 | /JPEGImages/2011_002685.jpg /SegmentationClassAug/2011_002685.png 1422 | /JPEGImages/2011_002713.jpg /SegmentationClassAug/2011_002713.png 1423 | /JPEGImages/2011_002730.jpg /SegmentationClassAug/2011_002730.png 1424 | /JPEGImages/2011_002754.jpg /SegmentationClassAug/2011_002754.png 1425 | /JPEGImages/2011_002812.jpg /SegmentationClassAug/2011_002812.png 1426 | /JPEGImages/2011_002863.jpg /SegmentationClassAug/2011_002863.png 1427 | /JPEGImages/2011_002879.jpg /SegmentationClassAug/2011_002879.png 1428 | /JPEGImages/2011_002885.jpg /SegmentationClassAug/2011_002885.png 1429 | /JPEGImages/2011_002929.jpg /SegmentationClassAug/2011_002929.png 1430 | /JPEGImages/2011_002951.jpg /SegmentationClassAug/2011_002951.png 1431 | /JPEGImages/2011_002975.jpg /SegmentationClassAug/2011_002975.png 1432 | /JPEGImages/2011_002993.jpg /SegmentationClassAug/2011_002993.png 1433 | /JPEGImages/2011_002997.jpg /SegmentationClassAug/2011_002997.png 1434 | /JPEGImages/2011_003003.jpg /SegmentationClassAug/2011_003003.png 1435 | /JPEGImages/2011_003011.jpg /SegmentationClassAug/2011_003011.png 1436 | /JPEGImages/2011_003019.jpg /SegmentationClassAug/2011_003019.png 1437 | /JPEGImages/2011_003030.jpg /SegmentationClassAug/2011_003030.png 1438 | /JPEGImages/2011_003055.jpg /SegmentationClassAug/2011_003055.png 1439 | /JPEGImages/2011_003085.jpg /SegmentationClassAug/2011_003085.png 1440 | /JPEGImages/2011_003103.jpg /SegmentationClassAug/2011_003103.png 1441 | /JPEGImages/2011_003114.jpg /SegmentationClassAug/2011_003114.png 1442 | /JPEGImages/2011_003145.jpg /SegmentationClassAug/2011_003145.png 1443 | /JPEGImages/2011_003146.jpg /SegmentationClassAug/2011_003146.png 1444 | /JPEGImages/2011_003182.jpg /SegmentationClassAug/2011_003182.png 1445 | /JPEGImages/2011_003197.jpg /SegmentationClassAug/2011_003197.png 1446 | /JPEGImages/2011_003205.jpg /SegmentationClassAug/2011_003205.png 1447 | /JPEGImages/2011_003240.jpg /SegmentationClassAug/2011_003240.png 1448 | /JPEGImages/2011_003256.jpg /SegmentationClassAug/2011_003256.png 1449 | /JPEGImages/2011_003271.jpg /SegmentationClassAug/2011_003271.png -------------------------------------------------------------------------------- /libs/datasets/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eveningdong/DeepLabV3-Tensorflow/9c4a5b54bb870700022740c251cfdfe4626cfb0e/libs/datasets/__init__.py -------------------------------------------------------------------------------- /libs/datasets/dataset_factory.py: -------------------------------------------------------------------------------- 1 | import glob 2 | import libs.preprocess.voc as preprocess 3 | import numpy as np 4 | import tensorflow.contrib.slim as slim 5 | import tensorflow as tf 6 | 7 | from config import * 8 | from libs.datasets.VOC12 import VOC_CATS 9 | 10 | def get_dataset(tfrecord_path): 11 | keys_to_features = { 12 | 'image/encoded': tf.FixedLenFeature((), tf.string, default_value=''), 13 | 'image/format': tf.FixedLenFeature((), tf.string, default_value='JPEG'), 14 | 'image/segmentation/encoded': tf.FixedLenFeature((), tf.string, 15 | default_value=''), 16 | 'image/segmentation/format': tf.FixedLenFeature((), tf.string, 17 | default_value='RAW') 18 | } 19 | 20 | items_to_handlers = { 21 | 'image': slim.tfexample_decoder.Image('image/encoded', 22 | 'image/format', channels=3), 23 | 'segmentation': slim.tfexample_decoder.Image( 24 | 'image/segmentation/encoded', 'image/segmentation/format', channels=1), 25 | } 26 | 27 | items_to_descriptions = { 28 | 'image': 'A color image of varying height and width.', 29 | 'segmentation': 'A semantic segmentation.', 30 | } 31 | 32 | if 'VOC12' in tfrecord_path: 33 | categories = VOC_CATS 34 | num_samples = 14270 35 | 36 | return slim.dataset.Dataset( 37 | data_sources=[tfrecord_path], 38 | reader=tf.TFRecordReader, 39 | decoder=slim.tfexample_decoder.TFExampleDecoder(keys_to_features, 40 | items_to_handlers), 41 | num_samples=num_samples, 42 | items_to_descriptions=items_to_descriptions, 43 | num_classes=len(categories), 44 | labels_to_names={i: cat for i, cat in enumerate(categories)}) 45 | 46 | def extract_batch(dataset, batch_size, is_training): 47 | with tf.device("/cpu:0"): 48 | data_provider = slim.dataset_data_provider.DatasetDataProvider( 49 | dataset, num_readers=4, shuffle=False, common_queue_capacity=512, common_queue_min=32) 50 | 51 | image, gt_mask = data_provider.get(['image', 'segmentation']) 52 | image, gt_mask = preprocess.preprocess_image(image, gt_mask, is_training=is_training) 53 | 54 | return tf.train.shuffle_batch([image, gt_mask], batch_size, 4096, 64, num_threads=4) 55 | 56 | def read_data(is_training, split_name): 57 | file_pattern = '{}_{}.tfrecord'.format(args.data_name, split_name) 58 | tfrecord_path = os.path.join(args.data_dir,'records',file_pattern) 59 | 60 | if is_training: 61 | dataset = get_dataset(tfrecord_path) 62 | image, gt_mask = extract_batch(dataset, args.batch_size, is_training) 63 | else: 64 | image, gt_mask = read_tfrecord(tfrecord_path) 65 | image, gt_mask = preprocess.preprocess_image(image, gt_mask, is_training) 66 | return image, gt_mask 67 | 68 | def read_tfrecord(tfrecords_filename): 69 | if not isinstance(tfrecords_filename, list): 70 | tfrecords_filename = [tfrecords_filename] 71 | filename_queue = tf.train.string_input_producer( 72 | tfrecords_filename) 73 | 74 | reader = tf.TFRecordReader() 75 | _, serialized_example = reader.read(filename_queue) 76 | features = tf.parse_single_example( 77 | serialized_example, 78 | features={ 79 | 'image/encoded': tf.FixedLenFeature([], tf.string), 80 | 'image/segmentation/encoded': tf.FixedLenFeature([], tf.string), 81 | }) 82 | image = tf.image.decode_jpeg(features['image/encoded'], channels=3) 83 | gt_mask = tf.image.decode_png(features['image/segmentation/encoded'], channels=1) 84 | 85 | return image, gt_mask 86 | -------------------------------------------------------------------------------- /libs/nets/__init__.py: -------------------------------------------------------------------------------- 1 | from libs.nets.deeplabv3 import deeplabv3 -------------------------------------------------------------------------------- /libs/nets/deeplabv3.py: -------------------------------------------------------------------------------- 1 | import tensorflow as tf 2 | 3 | from config import * 4 | from libs.nets import resnet_utils 5 | from libs.nets.resnet_v1 import bottleneck, resnet_arg_scope 6 | 7 | slim = tf.contrib.slim 8 | 9 | '''Commented out due to suspicious implementation. 10 | @slim.add_arg_scope 11 | def bottleneck_hdc(inputs, 12 | depth, 13 | depth_bottleneck, 14 | stride, 15 | rate=1, 16 | multi_grid=(1,2,4), 17 | outputs_collections=None, 18 | scope=None, 19 | use_bounded_activations=False): 20 | """Hybrid Dilated Convolution Bottleneck. 21 | Multi_Grid = (1,2,4) 22 | See Understanding Convolution for Semantic Segmentation. 23 | When putting together two consecutive ResNet blocks that use this unit, one 24 | should use stride = 2 in the last unit of the first block. 25 | Args: 26 | inputs: A tensor of size [batch, height, width, channels]. 27 | depth: The depth of the ResNet unit output. 28 | depth_bottleneck: The depth of the bottleneck layers. 29 | stride: The ResNet unit's stride. Determines the amount of downsampling of 30 | the units output compared to its input. 31 | rate: An integer, rate for atrous convolution. 32 | multi_grid: multi_grid sturcture. 33 | outputs_collections: Collection to add the ResNet unit output. 34 | scope: Optional variable_scope. 35 | use_bounded_activations: Whether or not to use bounded activations. Bounded 36 | activations better lend themselves to quantized inference. 37 | Returns: 38 | The ResNet unit's output. 39 | """ 40 | with tf.variable_scope(scope, 'bottleneck_v1', [inputs]) as sc: 41 | depth_in = slim.utils.last_dimension(inputs.get_shape(), min_rank=4) 42 | if depth == depth_in: 43 | shortcut = resnet_utils.subsample(inputs, stride, 'shortcut') 44 | else: 45 | shortcut = slim.conv2d( 46 | inputs, 47 | depth, [1, 1], 48 | stride=stride, 49 | activation_fn=tf.nn.relu6 if use_bounded_activations else None, 50 | scope='shortcut') 51 | 52 | residual = slim.conv2d(inputs, depth_bottleneck, [1, 1], stride=1, 53 | rate=rate*multi_grid[0], scope='conv1') 54 | residual = resnet_utils.conv2d_same(residual, depth_bottleneck, 3, stride, 55 | rate=rate*multi_grid[1], scope='conv2') 56 | residual = slim.conv2d(residual, depth, [1, 1], stride=1, 57 | rate=rate*multi_grid[2], activation_fn=None, scope='conv3') 58 | 59 | if use_bounded_activations: 60 | # Use clip_by_value to simulate bandpass activation. 61 | residual = tf.clip_by_value(residual, -6.0, 6.0) 62 | output = tf.nn.relu6(shortcut + residual) 63 | else: 64 | output = tf.nn.relu(shortcut + residual) 65 | 66 | return slim.utils.collect_named_outputs(outputs_collections, 67 | sc.name, 68 | output) 69 | ''' 70 | 71 | def deeplabv3(inputs, 72 | num_classes, 73 | depth=50, 74 | aspp=True, 75 | reuse=None, 76 | is_training=True): 77 | """DeepLabV3 78 | Args: 79 | inputs: A tensor of size [batch, height, width, channels]. 80 | depth: The number of layers of the ResNet. 81 | aspp: Whether to use ASPP module, if True, will use 4 blocks with 82 | multi_grid=(1,2,4), if False, will use 7 blocks with multi_grid=(1,2,1). 83 | reuse: Whether or not the network and its variables should be reused. To be 84 | able to reuse 'scope' must be given. 85 | Returns: 86 | net: A rank-4 tensor of size [batch, height_out, width_out, channels_out]. 87 | end_points: A dictionary from components of the network to the 88 | corresponding activation. 89 | """ 90 | if aspp: 91 | multi_grid = (1,2,4) 92 | else: 93 | multi_grid = (1,2,1) 94 | scope ='resnet_v1_{}'.format(depth) 95 | with tf.variable_scope(scope, [inputs], reuse=reuse) as sc: 96 | end_points_collection = sc.name + '_end_points' 97 | with slim.arg_scope(resnet_arg_scope(weight_decay=args.weight_decay, 98 | batch_norm_decay=args.bn_weight_decay)): 99 | with slim.arg_scope([slim.conv2d, bottleneck], 100 | outputs_collections=end_points_collection): 101 | with slim.arg_scope([slim.batch_norm], is_training=is_training): 102 | net = inputs 103 | net = resnet_utils.conv2d_same(net, 64, 7, stride=2, scope='conv1') 104 | net = slim.max_pool2d(net, [3, 3], stride=2, scope='pool1') 105 | 106 | with tf.variable_scope('block1', [net]) as sc: 107 | base_depth = 64 108 | for i in range(2): 109 | with tf.variable_scope('unit_%d' % (i + 1), values=[net]): 110 | net = bottleneck(net, depth=base_depth * 4, 111 | depth_bottleneck=base_depth, stride=1) 112 | with tf.variable_scope('unit_3', values=[net]): 113 | net = bottleneck(net, depth=base_depth * 4, 114 | depth_bottleneck=base_depth, stride=2) 115 | net = slim.utils.collect_named_outputs(end_points_collection, 116 | sc.name, net) 117 | 118 | with tf.variable_scope('block2', [net]) as sc: 119 | base_depth = 128 120 | for i in range(3): 121 | with tf.variable_scope('unit_%d' % (i + 1), values=[net]): 122 | net = bottleneck(net, depth=base_depth * 4, 123 | depth_bottleneck=base_depth, stride=1) 124 | with tf.variable_scope('unit_4', values=[net]): 125 | net = bottleneck(net, depth=base_depth * 4, 126 | depth_bottleneck=base_depth, stride=2) 127 | net = slim.utils.collect_named_outputs(end_points_collection, 128 | sc.name, net) 129 | 130 | with tf.variable_scope('block3', [net]) as sc: 131 | base_depth = 256 132 | 133 | num_units = 6 134 | if depth == 101: 135 | num_units = 23 136 | elif depth == 152: 137 | num_units = 36 138 | 139 | for i in range(num_units): 140 | with tf.variable_scope('unit_%d' % (i + 1), values=[net]): 141 | net = bottleneck(net, depth=base_depth * 4, 142 | depth_bottleneck=base_depth, stride=1) 143 | net = slim.utils.collect_named_outputs(end_points_collection, 144 | sc.name, net) 145 | 146 | with tf.variable_scope('block4', [net]) as sc: 147 | base_depth = 512 148 | 149 | for i in range(3): 150 | with tf.variable_scope('unit_%d' % (i + 1), values=[net]): 151 | net = bottleneck(net, depth=base_depth * 4, 152 | depth_bottleneck=base_depth, stride=1, rate=2*multi_grid[i]) 153 | net = slim.utils.collect_named_outputs(end_points_collection, 154 | sc.name, net) 155 | 156 | if aspp: 157 | with tf.variable_scope('aspp', [net]) as sc: 158 | aspp_list = [] 159 | branch_1 = slim.conv2d(net, 256, [1,1], stride=1, 160 | scope='1x1conv') 161 | branch_1 = slim.utils.collect_named_outputs( 162 | end_points_collection, sc.name, branch_1) 163 | aspp_list.append(branch_1) 164 | 165 | for i in range(3): 166 | branch_2 = slim.conv2d(net, 256, [3,3], stride=1, rate=6*(i+1), scope='rate{}'.format(6*(i+1))) 167 | branch_2 = slim.utils.collect_named_outputs(end_points_collection, sc.name, branch_2) 168 | aspp_list.append(branch_2) 169 | 170 | # aspp = tf.add_n(aspp_list) 171 | # aspp = slim.utils.collect_named_outputs(end_points_collection, sc.name, aspp) 172 | 173 | with tf.variable_scope('img_pool', [net]) as sc: 174 | """Image Pooling 175 | See ParseNet: Looking Wider to See Better 176 | """ 177 | pooled = tf.reduce_mean(net, [1, 2], name='avg_pool', 178 | keep_dims=True) 179 | pooled = slim.utils.collect_named_outputs(end_points_collection, 180 | sc.name, pooled) 181 | 182 | pooled = slim.conv2d(pooled, 256, [1,1], stride=1, scope='1x1conv') 183 | pooled = slim.utils.collect_named_outputs(end_points_collection, 184 | sc.name, pooled) 185 | 186 | pooled = tf.image.resize_bilinear(pooled, tf.shape(net)[1:3]) 187 | pooled = slim.utils.collect_named_outputs(end_points_collection, 188 | sc.name, pooled) 189 | 190 | with tf.variable_scope('fusion', [aspp_list, pooled]) as sc: 191 | aspp_list.append(pooled) 192 | net = tf.concat(aspp_list, 3) 193 | net = slim.utils.collect_named_outputs(end_points_collection, 194 | sc.name, net) 195 | 196 | net = slim.conv2d(net, 256, [1,1], stride=1, scope='1x1conv') 197 | net = slim.utils.collect_named_outputs(end_points_collection, 198 | sc.name, net) 199 | else: 200 | with tf.variable_scope('block5', [net]) as sc: 201 | base_depth = 512 202 | 203 | for i in range(3): 204 | with tf.variable_scope('unit_%d' % (i + 1), values=[net]): 205 | net = bottleneck(net, depth=base_depth * 4, 206 | depth_bottleneck=base_depth, stride=1, rate=4*multi_grid[i]) 207 | net = slim.utils.collect_named_outputs(end_points_collection, 208 | sc.name, net) 209 | 210 | with tf.variable_scope('block6', [net]) as sc: 211 | base_depth = 512 212 | 213 | for i in range(3): 214 | with tf.variable_scope('unit_%d' % (i + 1), values=[net]): 215 | net = bottleneck(net, depth=base_depth * 4, 216 | depth_bottleneck=base_depth, stride=1, rate=8*multi_grid[i]) 217 | net = slim.utils.collect_named_outputs(end_points_collection, 218 | sc.name, net) 219 | 220 | with tf.variable_scope('block7', [net]) as sc: 221 | base_depth = 512 222 | 223 | for i in range(3): 224 | with tf.variable_scope('unit_%d' % (i + 1), values=[net]): 225 | net = bottleneck(net, depth=base_depth * 4, 226 | depth_bottleneck=base_depth, stride=1, rate=16*multi_grid[i]) 227 | net = slim.utils.collect_named_outputs(end_points_collection, 228 | sc.name, net) 229 | 230 | with tf.variable_scope('logits',[net]) as sc: 231 | net = slim.conv2d(net, num_classes, [1,1], stride=1, 232 | activation_fn=None, normalizer_fn=None) 233 | net = slim.utils.collect_named_outputs(end_points_collection, 234 | sc.name, net) 235 | 236 | end_points = slim.utils.convert_collection_to_dict( 237 | end_points_collection) 238 | 239 | return net, end_points 240 | 241 | if __name__ == "__main__": 242 | x = tf.placeholder(tf.float32, [None, 512, 512, 3]) 243 | 244 | net, end_points = deeplabv3(x, 21) 245 | for i in end_points: 246 | print(i, end_points[i]) 247 | -------------------------------------------------------------------------------- /libs/nets/resnet_utils.py: -------------------------------------------------------------------------------- 1 | # Copyright 2016 The TensorFlow Authors. All Rights Reserved. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | # ============================================================================== 15 | """Contains building blocks for various versions of Residual Networks. 16 | 17 | Residual networks (ResNets) were proposed in: 18 | Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun 19 | Deep Residual Learning for Image Recognition. arXiv:1512.03385, 2015 20 | 21 | More variants were introduced in: 22 | Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun 23 | Identity Mappings in Deep Residual Networks. arXiv: 1603.05027, 2016 24 | 25 | We can obtain different ResNet variants by changing the network depth, width, 26 | and form of residual unit. This module implements the infrastructure for 27 | building them. Concrete ResNet units and full ResNet networks are implemented in 28 | the accompanying resnet_v1.py and resnet_v2.py modules. 29 | 30 | Compared to https://github.com/KaimingHe/deep-residual-networks, in the current 31 | implementation we subsample the output activations in the last residual unit of 32 | each block, instead of subsampling the input activations in the first residual 33 | unit of each block. The two implementations give identical results but our 34 | implementation is more memory efficient. 35 | """ 36 | from __future__ import absolute_import 37 | from __future__ import division 38 | from __future__ import print_function 39 | 40 | import collections 41 | import tensorflow as tf 42 | 43 | slim = tf.contrib.slim 44 | 45 | 46 | class Block(collections.namedtuple('Block', ['scope', 'unit_fn', 'args'])): 47 | """A named tuple describing a ResNet block. 48 | 49 | Its parts are: 50 | scope: The scope of the `Block`. 51 | unit_fn: The ResNet unit function which takes as input a `Tensor` and 52 | returns another `Tensor` with the output of the ResNet unit. 53 | args: A list of length equal to the number of units in the `Block`. The list 54 | contains one (depth, depth_bottleneck, stride) tuple for each unit in the 55 | block to serve as argument to unit_fn. 56 | """ 57 | 58 | 59 | def subsample(inputs, factor, scope=None): 60 | """Subsamples the input along the spatial dimensions. 61 | 62 | Args: 63 | inputs: A `Tensor` of size [batch, height_in, width_in, channels]. 64 | factor: The subsampling factor. 65 | scope: Optional variable_scope. 66 | 67 | Returns: 68 | output: A `Tensor` of size [batch, height_out, width_out, channels] with the 69 | input, either intact (if factor == 1) or subsampled (if factor > 1). 70 | """ 71 | if factor == 1: 72 | return inputs 73 | else: 74 | return slim.max_pool2d(inputs, [1, 1], stride=factor, scope=scope) 75 | 76 | 77 | def conv2d_same(inputs, num_outputs, kernel_size, stride, rate=1, scope=None): 78 | """Strided 2-D convolution with 'SAME' padding. 79 | 80 | When stride > 1, then we do explicit zero-padding, followed by conv2d with 81 | 'VALID' padding. 82 | 83 | Note that 84 | 85 | net = conv2d_same(inputs, num_outputs, 3, stride=stride) 86 | 87 | is equivalent to 88 | 89 | net = slim.conv2d(inputs, num_outputs, 3, stride=1, padding='SAME') 90 | net = subsample(net, factor=stride) 91 | 92 | whereas 93 | 94 | net = slim.conv2d(inputs, num_outputs, 3, stride=stride, padding='SAME') 95 | 96 | is different when the input's height or width is even, which is why we add the 97 | current function. For more details, see ResnetUtilsTest.testConv2DSameEven(). 98 | 99 | Args: 100 | inputs: A 4-D tensor of size [batch, height_in, width_in, channels]. 101 | num_outputs: An integer, the number of output filters. 102 | kernel_size: An int with the kernel_size of the filters. 103 | stride: An integer, the output stride. 104 | rate: An integer, rate for atrous convolution. 105 | scope: Scope. 106 | 107 | Returns: 108 | output: A 4-D tensor of size [batch, height_out, width_out, channels] with 109 | the convolution output. 110 | """ 111 | if stride == 1: 112 | return slim.conv2d(inputs, num_outputs, kernel_size, stride=1, rate=rate, 113 | padding='SAME', scope=scope) 114 | else: 115 | kernel_size_effective = kernel_size + (kernel_size - 1) * (rate - 1) 116 | pad_total = kernel_size_effective - 1 117 | pad_beg = pad_total // 2 118 | pad_end = pad_total - pad_beg 119 | inputs = tf.pad(inputs, 120 | [[0, 0], [pad_beg, pad_end], [pad_beg, pad_end], [0, 0]]) 121 | return slim.conv2d(inputs, num_outputs, kernel_size, stride=stride, 122 | rate=rate, padding='VALID', scope=scope) 123 | 124 | 125 | @slim.add_arg_scope 126 | def stack_blocks_dense(net, blocks, output_stride=None, 127 | outputs_collections=None): 128 | """Stacks ResNet `Blocks` and controls output feature density. 129 | 130 | First, this function creates scopes for the ResNet in the form of 131 | 'block_name/unit_1', 'block_name/unit_2', etc. 132 | 133 | Second, this function allows the user to explicitly control the ResNet 134 | output_stride, which is the ratio of the input to output spatial resolution. 135 | This is useful for dense prediction tasks such as semantic segmentation or 136 | object detection. 137 | 138 | Most ResNets consist of 4 ResNet blocks and subsample the activations by a 139 | factor of 2 when transitioning between consecutive ResNet blocks. This results 140 | to a nominal ResNet output_stride equal to 8. If we set the output_stride to 141 | half the nominal network stride (e.g., output_stride=4), then we compute 142 | responses twice. 143 | 144 | Control of the output feature density is implemented by atrous convolution. 145 | 146 | Args: 147 | net: A `Tensor` of size [batch, height, width, channels]. 148 | blocks: A list of length equal to the number of ResNet `Blocks`. Each 149 | element is a ResNet `Block` object describing the units in the `Block`. 150 | output_stride: If `None`, then the output will be computed at the nominal 151 | network stride. If output_stride is not `None`, it specifies the requested 152 | ratio of input to output spatial resolution, which needs to be equal to 153 | the product of unit strides from the start up to some level of the ResNet. 154 | For example, if the ResNet employs units with strides 1, 2, 1, 3, 4, 1, 155 | then valid values for the output_stride are 1, 2, 6, 24 or None (which 156 | is equivalent to output_stride=24). 157 | outputs_collections: Collection to add the ResNet block outputs. 158 | 159 | Returns: 160 | net: Output tensor with stride equal to the specified output_stride. 161 | 162 | Raises: 163 | ValueError: If the target output_stride is not valid. 164 | """ 165 | # The current_stride variable keeps track of the effective stride of the 166 | # activations. This allows us to invoke atrous convolution whenever applying 167 | # the next residual unit would result in the activations having stride larger 168 | # than the target output_stride. 169 | current_stride = 1 170 | 171 | # The atrous convolution rate parameter. 172 | rate = 1 173 | 174 | for block in blocks: 175 | with tf.variable_scope(block.scope, 'block', [net]) as sc: 176 | for i, unit in enumerate(block.args): 177 | if output_stride is not None and current_stride > output_stride: 178 | raise ValueError('The target output_stride cannot be reached.') 179 | 180 | with tf.variable_scope('unit_%d' % (i + 1), values=[net]): 181 | # If we have reached the target output_stride, then we need to employ 182 | # atrous convolution with stride=1 and multiply the atrous rate by the 183 | # current unit's stride for use in subsequent layers. 184 | if output_stride is not None and current_stride == output_stride: 185 | net = block.unit_fn(net, rate=rate, **dict(unit, stride=1)) 186 | rate *= unit.get('stride', 1) 187 | 188 | else: 189 | net = block.unit_fn(net, rate=1, **unit) 190 | current_stride *= unit.get('stride', 1) 191 | net = slim.utils.collect_named_outputs(outputs_collections, sc.name, net) 192 | 193 | if output_stride is not None and current_stride != output_stride: 194 | raise ValueError('The target output_stride cannot be reached.') 195 | 196 | return net 197 | 198 | 199 | def resnet_arg_scope(weight_decay=0.0001, 200 | batch_norm_decay=0.9997, 201 | batch_norm_epsilon=1e-5, 202 | batch_norm_scale=True, 203 | activation_fn=tf.nn.relu, 204 | use_batch_norm=True): 205 | """Defines the default ResNet arg scope. 206 | 207 | TODO(gpapan): The batch-normalization related default values above are 208 | appropriate for use in conjunction with the reference ResNet models 209 | released at https://github.com/KaimingHe/deep-residual-networks. When 210 | training ResNets from scratch, they might need to be tuned. 211 | 212 | Args: 213 | weight_decay: The weight decay to use for regularizing the model. 214 | batch_norm_decay: The moving average decay when estimating layer activation 215 | statistics in batch normalization. 216 | batch_norm_epsilon: Small constant to prevent division by zero when 217 | normalizing activations by their variance in batch normalization. 218 | batch_norm_scale: If True, uses an explicit `gamma` multiplier to scale the 219 | activations in the batch normalization layer. 220 | activation_fn: The activation function which is used in ResNet. 221 | use_batch_norm: Whether or not to use batch normalization. 222 | 223 | Returns: 224 | An `arg_scope` to use for the resnet models. 225 | """ 226 | batch_norm_params = { 227 | 'decay': batch_norm_decay, 228 | 'epsilon': batch_norm_epsilon, 229 | 'scale': batch_norm_scale, 230 | 'updates_collections': tf.GraphKeys.UPDATE_OPS, 231 | 'fused': None, # Use fused batch norm if possible. 232 | } 233 | 234 | with slim.arg_scope( 235 | [slim.conv2d], 236 | weights_regularizer=slim.l2_regularizer(weight_decay), 237 | weights_initializer=slim.variance_scaling_initializer(), 238 | activation_fn=activation_fn, 239 | normalizer_fn=slim.batch_norm if use_batch_norm else None, 240 | normalizer_params=batch_norm_params): 241 | with slim.arg_scope([slim.batch_norm], **batch_norm_params): 242 | # The following implies padding='SAME' for pool1, which makes feature 243 | # alignment easier for dense prediction tasks. This is also used in 244 | # https://github.com/facebook/fb.resnet.torch. However the accompanying 245 | # code of 'Deep Residual Learning for Image Recognition' uses 246 | # padding='VALID' for pool1. You can switch to that choice by setting 247 | # slim.arg_scope([slim.max_pool2d], padding='VALID'). 248 | with slim.arg_scope([slim.max_pool2d], padding='SAME') as arg_sc: 249 | return arg_sc -------------------------------------------------------------------------------- /libs/nets/resnet_v1.py: -------------------------------------------------------------------------------- 1 | # Copyright 2016 The TensorFlow Authors. All Rights Reserved. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | # ============================================================================== 15 | """Contains definitions for the original form of Residual Networks. 16 | The 'v1' residual networks (ResNets) implemented in this module were proposed 17 | by: 18 | [1] Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun 19 | Deep Residual Learning for Image Recognition. arXiv:1512.03385 20 | Other variants were introduced in: 21 | [2] Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun 22 | Identity Mappings in Deep Residual Networks. arXiv: 1603.05027 23 | The networks defined in this module utilize the bottleneck building block of 24 | [1] with projection shortcuts only for increasing depths. They employ batch 25 | normalization *after* every weight layer. This is the architecture used by 26 | MSRA in the Imagenet and MSCOCO 2016 competition models ResNet-101 and 27 | ResNet-152. See [2; Fig. 1a] for a comparison between the current 'v1' 28 | architecture and the alternative 'v2' architecture of [2] which uses batch 29 | normalization *before* every weight layer in the so-called full pre-activation 30 | units. 31 | Typical use: 32 | from tensorflow.contrib.slim.nets import resnet_v1 33 | ResNet-101 for image classification into 1000 classes: 34 | # inputs has shape [batch, 224, 224, 3] 35 | with slim.arg_scope(resnet_v1.resnet_arg_scope()): 36 | net, end_points = resnet_v1.resnet_v1_101(inputs, 1000, is_training=False) 37 | ResNet-101 for semantic segmentation into 21 classes: 38 | # inputs has shape [batch, 513, 513, 3] 39 | with slim.arg_scope(resnet_v1.resnet_arg_scope()): 40 | net, end_points = resnet_v1.resnet_v1_101(inputs, 41 | 21, 42 | is_training=False, 43 | global_pool=False, 44 | output_stride=16) 45 | """ 46 | from __future__ import absolute_import 47 | from __future__ import division 48 | from __future__ import print_function 49 | 50 | import tensorflow as tf 51 | 52 | from libs.nets import resnet_utils 53 | 54 | 55 | resnet_arg_scope = resnet_utils.resnet_arg_scope 56 | slim = tf.contrib.slim 57 | 58 | 59 | @slim.add_arg_scope 60 | def bottleneck(inputs, 61 | depth, 62 | depth_bottleneck, 63 | stride, 64 | rate=1, 65 | outputs_collections=None, 66 | scope=None, 67 | use_bounded_activations=False): 68 | """Bottleneck residual unit variant with BN after convolutions. 69 | This is the original residual unit proposed in [1]. See Fig. 1(a) of [2] for 70 | its definition. Note that we use here the bottleneck variant which has an 71 | extra bottleneck layer. 72 | When putting together two consecutive ResNet blocks that use this unit, one 73 | should use stride = 2 in the last unit of the first block. 74 | Args: 75 | inputs: A tensor of size [batch, height, width, channels]. 76 | depth: The depth of the ResNet unit output. 77 | depth_bottleneck: The depth of the bottleneck layers. 78 | stride: The ResNet unit's stride. Determines the amount of downsampling of 79 | the units output compared to its input. 80 | rate: An integer, rate for atrous convolution. 81 | outputs_collections: Collection to add the ResNet unit output. 82 | scope: Optional variable_scope. 83 | use_bounded_activations: Whether or not to use bounded activations. Bounded 84 | activations better lend themselves to quantized inference. 85 | Returns: 86 | The ResNet unit's output. 87 | """ 88 | with tf.variable_scope(scope, 'bottleneck_v1', [inputs]) as sc: 89 | depth_in = slim.utils.last_dimension(inputs.get_shape(), min_rank=4) 90 | if depth == depth_in: 91 | shortcut = resnet_utils.subsample(inputs, stride, 'shortcut') 92 | else: 93 | shortcut = slim.conv2d( 94 | inputs, 95 | depth, [1, 1], 96 | stride=stride, 97 | activation_fn=tf.nn.relu6 if use_bounded_activations else None, 98 | scope='shortcut') 99 | 100 | residual = slim.conv2d(inputs, depth_bottleneck, [1, 1], stride=1, 101 | scope='conv1') 102 | residual = resnet_utils.conv2d_same(residual, depth_bottleneck, 3, stride, 103 | rate=rate, scope='conv2') 104 | residual = slim.conv2d(residual, depth, [1, 1], stride=1, 105 | activation_fn=None, scope='conv3') 106 | 107 | if use_bounded_activations: 108 | # Use clip_by_value to simulate bandpass activation. 109 | residual = tf.clip_by_value(residual, -6.0, 6.0) 110 | output = tf.nn.relu6(shortcut + residual) 111 | else: 112 | output = tf.nn.relu(shortcut + residual) 113 | 114 | return slim.utils.collect_named_outputs(outputs_collections, 115 | sc.name, 116 | output) 117 | 118 | 119 | def resnet_v1(inputs, 120 | blocks, 121 | num_classes=None, 122 | is_training=True, 123 | global_pool=True, 124 | output_stride=None, 125 | include_root_block=True, 126 | spatial_squeeze=True, 127 | reuse=None, 128 | scope=None): 129 | """Generator for v1 ResNet models. 130 | This function generates a family of ResNet v1 models. See the resnet_v1_*() 131 | methods for specific model instantiations, obtained by selecting different 132 | block instantiations that produce ResNets of various depths. 133 | Training for image classification on Imagenet is usually done with [224, 224] 134 | inputs, resulting in [7, 7] feature maps at the output of the last ResNet 135 | block for the ResNets defined in [1] that have nominal stride equal to 32. 136 | However, for dense prediction tasks we advise that one uses inputs with 137 | spatial dimensions that are multiples of 32 plus 1, e.g., [321, 321]. In 138 | this case the feature maps at the ResNet output will have spatial shape 139 | [(height - 1) / output_stride + 1, (width - 1) / output_stride + 1] 140 | and corners exactly aligned with the input image corners, which greatly 141 | facilitates alignment of the features to the image. Using as input [225, 225] 142 | images results in [8, 8] feature maps at the output of the last ResNet block. 143 | For dense prediction tasks, the ResNet needs to run in fully-convolutional 144 | (FCN) mode and global_pool needs to be set to False. The ResNets in [1, 2] all 145 | have nominal stride equal to 32 and a good choice in FCN mode is to use 146 | output_stride=16 in order to increase the density of the computed features at 147 | small computational and memory overhead, cf. http://arxiv.org/abs/1606.00915. 148 | Args: 149 | inputs: A tensor of size [batch, height_in, width_in, channels]. 150 | blocks: A list of length equal to the number of ResNet blocks. Each element 151 | is a resnet_utils.Block object describing the units in the block. 152 | num_classes: Number of predicted classes for classification tasks. 153 | If 0 or None, we return the features before the logit layer. 154 | is_training: whether batch_norm layers are in training mode. 155 | global_pool: If True, we perform global average pooling before computing the 156 | logits. Set to True for image classification, False for dense prediction. 157 | output_stride: If None, then the output will be computed at the nominal 158 | network stride. If output_stride is not None, it specifies the requested 159 | ratio of input to output spatial resolution. 160 | include_root_block: If True, include the initial convolution followed by 161 | max-pooling, if False excludes it. 162 | spatial_squeeze: if True, logits is of shape [B, C], if false logits is 163 | of shape [B, 1, 1, C], where B is batch_size and C is number of classes. 164 | To use this parameter, the input images must be smaller than 300x300 165 | pixels, in which case the output logit layer does not contain spatial 166 | information and can be removed. 167 | reuse: whether or not the network and its variables should be reused. To be 168 | able to reuse 'scope' must be given. 169 | scope: Optional variable_scope. 170 | Returns: 171 | net: A rank-4 tensor of size [batch, height_out, width_out, channels_out]. 172 | If global_pool is False, then height_out and width_out are reduced by a 173 | factor of output_stride compared to the respective height_in and width_in, 174 | else both height_out and width_out equal one. If num_classes is 0 or None, 175 | then net is the output of the last ResNet block, potentially after global 176 | average pooling. If num_classes a non-zero integer, net contains the 177 | pre-softmax activations. 178 | end_points: A dictionary from components of the network to the corresponding 179 | activation. 180 | Raises: 181 | ValueError: If the target output_stride is not valid. 182 | """ 183 | with tf.variable_scope(scope, 'resnet_v1', [inputs], reuse=reuse) as sc: 184 | end_points_collection = sc.original_name_scope + '_end_points' 185 | with slim.arg_scope([slim.conv2d, bottleneck, 186 | resnet_utils.stack_blocks_dense], 187 | outputs_collections=end_points_collection): 188 | with slim.arg_scope([slim.batch_norm], is_training=is_training): 189 | net = inputs 190 | if include_root_block: 191 | if output_stride is not None: 192 | if output_stride % 4 != 0: 193 | raise ValueError('The output_stride needs to be a multiple of 4.') 194 | output_stride /= 4 195 | net = resnet_utils.conv2d_same(net, 64, 7, stride=2, scope='conv1') 196 | net = slim.max_pool2d(net, [3, 3], stride=2, scope='pool1') 197 | net = resnet_utils.stack_blocks_dense(net, blocks, output_stride) 198 | # Convert end_points_collection into a dictionary of end_points. 199 | end_points = slim.utils.convert_collection_to_dict( 200 | end_points_collection) 201 | 202 | if global_pool: 203 | # Global average pooling. 204 | net = tf.reduce_mean(net, [1, 2], name='pool5', keep_dims=True) 205 | end_points['global_pool'] = net 206 | if num_classes: 207 | net = slim.conv2d(net, num_classes, [1, 1], activation_fn=None, 208 | normalizer_fn=None, scope='logits') 209 | end_points[sc.name + '/logits'] = net 210 | if spatial_squeeze: 211 | net = tf.squeeze(net, [1, 2], name='SpatialSqueeze') 212 | end_points[sc.name + '/spatial_squeeze'] = net 213 | end_points['predictions'] = slim.softmax(net, scope='predictions') 214 | return net, end_points 215 | resnet_v1.default_image_size = 224 216 | 217 | 218 | def resnet_v1_block(scope, base_depth, num_units, stride): 219 | """Helper function for creating a resnet_v1 bottleneck block. 220 | Args: 221 | scope: The scope of the block. 222 | base_depth: The depth of the bottleneck layer for each unit. 223 | num_units: The number of units in the block. 224 | stride: The stride of the block, implemented as a stride in the last unit. 225 | All other units have stride=1. 226 | Returns: 227 | A resnet_v1 bottleneck block. 228 | """ 229 | return resnet_utils.Block(scope, bottleneck, [{ 230 | 'depth': base_depth * 4, 231 | 'depth_bottleneck': base_depth, 232 | 'stride': 1 233 | }] * (num_units - 1) + [{ 234 | 'depth': base_depth * 4, 235 | 'depth_bottleneck': base_depth, 236 | 'stride': stride 237 | }]) 238 | 239 | 240 | def resnet_v1_50(inputs, 241 | num_classes=None, 242 | is_training=True, 243 | global_pool=True, 244 | output_stride=None, 245 | spatial_squeeze=True, 246 | reuse=None, 247 | scope='resnet_v1_50'): 248 | """ResNet-50 model of [1]. See resnet_v1() for arg and return description.""" 249 | blocks = [ 250 | resnet_v1_block('block1', base_depth=64, num_units=3, stride=2), 251 | resnet_v1_block('block2', base_depth=128, num_units=4, stride=2), 252 | resnet_v1_block('block3', base_depth=256, num_units=6, stride=2), 253 | resnet_v1_block('block4', base_depth=512, num_units=3, stride=1), 254 | ] 255 | return resnet_v1(inputs, blocks, num_classes, is_training, 256 | global_pool=global_pool, output_stride=output_stride, 257 | include_root_block=True, spatial_squeeze=spatial_squeeze, 258 | reuse=reuse, scope=scope) 259 | resnet_v1_50.default_image_size = resnet_v1.default_image_size 260 | 261 | 262 | def resnet_v1_101(inputs, 263 | num_classes=None, 264 | is_training=True, 265 | global_pool=True, 266 | output_stride=None, 267 | spatial_squeeze=True, 268 | reuse=None, 269 | scope='resnet_v1_101'): 270 | """ResNet-101 model of [1]. See resnet_v1() for arg and return description.""" 271 | blocks = [ 272 | resnet_v1_block('block1', base_depth=64, num_units=3, stride=2), 273 | resnet_v1_block('block2', base_depth=128, num_units=4, stride=2), 274 | resnet_v1_block('block3', base_depth=256, num_units=23, stride=2), 275 | resnet_v1_block('block4', base_depth=512, num_units=3, stride=1), 276 | ] 277 | return resnet_v1(inputs, blocks, num_classes, is_training, 278 | global_pool=global_pool, output_stride=output_stride, 279 | include_root_block=True, spatial_squeeze=spatial_squeeze, 280 | reuse=reuse, scope=scope) 281 | resnet_v1_101.default_image_size = resnet_v1.default_image_size 282 | 283 | 284 | def resnet_v1_152(inputs, 285 | num_classes=None, 286 | is_training=True, 287 | global_pool=True, 288 | output_stride=None, 289 | spatial_squeeze=True, 290 | reuse=None, 291 | scope='resnet_v1_152'): 292 | """ResNet-152 model of [1]. See resnet_v1() for arg and return description.""" 293 | blocks = [ 294 | resnet_v1_block('block1', base_depth=64, num_units=3, stride=2), 295 | resnet_v1_block('block2', base_depth=128, num_units=8, stride=2), 296 | resnet_v1_block('block3', base_depth=256, num_units=36, stride=2), 297 | resnet_v1_block('block4', base_depth=512, num_units=3, stride=1), 298 | ] 299 | return resnet_v1(inputs, blocks, num_classes, is_training, 300 | global_pool=global_pool, output_stride=output_stride, 301 | include_root_block=True, spatial_squeeze=spatial_squeeze, 302 | reuse=reuse, scope=scope) 303 | resnet_v1_152.default_image_size = resnet_v1.default_image_size 304 | 305 | 306 | def resnet_v1_200(inputs, 307 | num_classes=None, 308 | is_training=True, 309 | global_pool=True, 310 | output_stride=None, 311 | spatial_squeeze=True, 312 | reuse=None, 313 | scope='resnet_v1_200'): 314 | """ResNet-200 model of [2]. See resnet_v1() for arg and return description.""" 315 | blocks = [ 316 | resnet_v1_block('block1', base_depth=64, num_units=3, stride=2), 317 | resnet_v1_block('block2', base_depth=128, num_units=24, stride=2), 318 | resnet_v1_block('block3', base_depth=256, num_units=36, stride=2), 319 | resnet_v1_block('block4', base_depth=512, num_units=3, stride=1), 320 | ] 321 | return resnet_v1(inputs, blocks, num_classes, is_training, 322 | global_pool=global_pool, output_stride=output_stride, 323 | include_root_block=True, spatial_squeeze=spatial_squeeze, 324 | reuse=reuse, scope=scope) 325 | resnet_v1_200.default_image_size = resnet_v1.default_image_size -------------------------------------------------------------------------------- /libs/preprocess/utils.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | import numpy as np 4 | import tensorflow as tf 5 | 6 | def random_crop_and_pad_image_and_labels(image, label, crop_h, crop_w, ignore_label=255): 7 | """ 8 | Randomly crop and pads the input images. 9 | 10 | Input: 11 | image: [1, height, width, 3] uint8 12 | gt_mask: [1, height, width, 1] uint8 13 | 14 | Return: 15 | image: [height, width, 3] float32 16 | gt_mask: [height, width, 1] uint8 17 | """ 18 | 19 | label = tf.cast(label, dtype=tf.float32) 20 | label = label - ignore_label # Needs to be subtracted and later added due to 0 padding. 21 | combined = tf.concat(axis=3, values=[image, label]) 22 | image_shape = tf.shape(image) 23 | combined_pad = tf.image.pad_to_bounding_box(combined, 0, 0, tf.maximum(crop_h, image_shape[1]), tf.maximum(crop_w, image_shape[2])) 24 | 25 | last_image_dim = tf.shape(image)[-1] 26 | last_label_dim = tf.shape(label)[-1] 27 | combined_pad = tf.squeeze(combined_pad, [0]) 28 | combined_crop = tf.random_crop(combined_pad, [crop_h,crop_w,4]) 29 | img_crop = combined_crop[:, :, :last_image_dim] 30 | label_crop = combined_crop[:, :, last_image_dim:] 31 | label_crop = label_crop + ignore_label 32 | label_crop = tf.cast(label_crop, dtype=tf.uint8) 33 | 34 | # Set static shape so that tensorflow knows shape at compile time. 35 | img_crop.set_shape((crop_h, crop_w, 3)) 36 | label_crop.set_shape((crop_h,crop_w, 1)) 37 | return img_crop, label_crop 38 | 39 | def flip_image(image): 40 | """ 41 | image: [height, width, 3] 42 | """ 43 | return tf.reverse(image, axis=[1]) 44 | 45 | def rescale(image, gt_mask, h, w, scale): 46 | """ 47 | Input: 48 | image: [height, width, 3] uint8 49 | gt_mask: [height, width, 1] uint8 50 | 51 | Return: 52 | image: [1, height, width, 3] float32 53 | gt_mask: [1, height, width, 1] uint8 54 | """ 55 | image = tf.to_float(image) 56 | image = tf.expand_dims(image, 0) 57 | gt_mask = tf.expand_dims(gt_mask, 0) 58 | nh = tf.to_int32(tf.to_float(h) * scale) 59 | nw = tf.to_int32(tf.to_float(w) * scale) 60 | new_image = tf.image.resize_bilinear(image, [nh, nw]) 61 | new_mask = tf.image.resize_nearest_neighbor(gt_mask, [nh, nw]) 62 | return new_image, new_mask -------------------------------------------------------------------------------- /libs/preprocess/voc.py: -------------------------------------------------------------------------------- 1 | import tensorflow as tf 2 | 3 | from config import * 4 | from libs.preprocess import utils as preprocess_utils 5 | 6 | def preprocess_image(image, gt_mask, is_training=False): 7 | if is_training: 8 | return _preprocess_for_training(image, gt_mask) 9 | else: 10 | return _preprocess_for_test(image, gt_mask) 11 | 12 | 13 | def _preprocess_for_training(image, gt_mask): 14 | 15 | ih, iw = tf.shape(image)[0], tf.shape(image)[1] 16 | 17 | ## random flipping 18 | coin = tf.to_float(tf.random_uniform([1]))[0] 19 | image, gt_mask =\ 20 | tf.cond(tf.greater_equal(coin, 0.5), 21 | lambda: (preprocess_utils.flip_image(image), 22 | preprocess_utils.flip_image(gt_mask)), 23 | lambda: (image, gt_mask)) 24 | 25 | scale = tf.random_uniform(shape=[1], minval=0.5, maxval=2)[0] 26 | image, gt_mask = preprocess_utils.rescale(image, gt_mask, ih, iw, scale) 27 | 28 | image, gt_mask = preprocess_utils.random_crop_and_pad_image_and_labels(image, gt_mask, args.input_size, args.input_size) 29 | 30 | # rgb to bgr 31 | image = tf.reverse(image, axis=[-1]) 32 | image -= IMG_MEAN 33 | 34 | return image, gt_mask 35 | 36 | def _preprocess_for_test(image, gt_mask): 37 | image = tf.to_float(image) 38 | image = tf.reverse(image, axis=[-1]) 39 | image -= IMG_MEAN 40 | image = tf.expand_dims(image, 0) 41 | gt_mask = tf.expand_dims(gt_mask, 0) 42 | return image, gt_mask -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | matplotlib==2.1.0 2 | numpy==1.13.3 3 | opencv-python==3.3.0.10 4 | scipy==1.0.0 5 | six==1.11.0 6 | tensorflow-gpu==1.4.0 7 | Cython==0.27.3 8 | Pillow==4.3.0 9 | -------------------------------------------------------------------------------- /setup.sh: -------------------------------------------------------------------------------- 1 | # Install requirements 2 | pip3 install -r requirements.txt 3 | 4 | # Download Pre-Trained Model 5 | mkdir -p ./data/pretrained_models 6 | 7 | wget http://download.tensorflow.org/models/resnet_v1_50_2016_08_28.tar.gz 8 | tar -xzf resnet_v1_50_2016_08_28.tar.gz 9 | mv resnet_v1_50.ckpt ./data/pretrained_models 10 | 11 | wget http://download.tensorflow.org/models/resnet_v1_101_2016_08_28.tar.gz 12 | tar -xzf resnet_v1_101_2016_08_28.tar.gz 13 | mv resnet_v1_101.ckpt ./data/pretrained_models 14 | 15 | wget http://download.tensorflow.org/models/resnet_v1_152_2016_08_28.tar.gz 16 | tar -xzf resnet_v1_152_2016_08_28.tar.gz 17 | mv resnet_v1_152.ckpt ./data/pretrained_models 18 | 19 | rm *.tar.gz 20 | -------------------------------------------------------------------------------- /train_voc12.py: -------------------------------------------------------------------------------- 1 | """Training script for the DeepLab-ResNet network on the PASCAL VOC dataset 2 | for semantic image segmentation. 3 | 4 | This script trains the model using augmented PASCAL VOC, 5 | which contains approximately 10000 images for training and 1500 images for 6 | validation. 7 | """ 8 | import os 9 | import sys 10 | import argparse 11 | import numpy as np 12 | import tensorflow as tf 13 | import time 14 | 15 | from config import * 16 | from datetime import datetime 17 | from libs.datasets.dataset_factory import read_data 18 | from libs.datasets.VOC12 import decode_labels, inv_preprocess, prepare_label 19 | from libs.nets import deeplabv3 20 | 21 | slim = tf.contrib.slim 22 | streaming_mean_iou = tf.contrib.metrics.streaming_mean_iou 23 | 24 | def save(saver, sess, logdir, step): 25 | '''Save weights. 26 | 27 | Args: 28 | saver: TensorFlow Saver object. 29 | sess: TensorFlow session. 30 | logdir: path to the snapshots directory. 31 | step: current training step. 32 | ''' 33 | model_name = 'model.ckpt' 34 | checkpoint_path = os.path.join(logdir, model_name) 35 | 36 | if not os.path.exists(logdir): 37 | os.makedirs(logdir) 38 | saver.save(sess, checkpoint_path, global_step=step) 39 | print('The checkpoint has been created.') 40 | 41 | def load(saver, sess, ckpt_dir): 42 | '''Load trained weights. 43 | 44 | Args: 45 | saver: TensorFlow Saver object. 46 | sess: TensorFlow session. 47 | ckpt_path: path to checkpoint file with parameters. 48 | ''' 49 | if args.ckpt == 0: 50 | if args.imagenet is not None: 51 | ckpt_path = os.path.join(args.imagenet, 'resnet_v1_{}.ckpt'.format(args.num_layers).format(args.num_layers)) 52 | else: 53 | ckpt = tf.train.get_checkpoint_state(ckpt_dir) 54 | ckpt_path = ckpt.model_checkpoint_path 55 | else: 56 | ckpt_path = ckpt_dir+'/model.ckpt-%i' % args.ckpt 57 | saver.restore(sess, ckpt_path) 58 | print("Restored model parameters from {}".format(ckpt_path)) 59 | 60 | def main(): 61 | """Create the model and start the training.""" 62 | h = args.input_size 63 | w = args.input_size 64 | input_size = (h, w) 65 | 66 | tf.set_random_seed(args.random_seed) 67 | 68 | # Create queue coordinator. 69 | coord = tf.train.Coordinator() 70 | 71 | image_batch, label_batch = read_data(is_training=True, split_name='train') 72 | 73 | # Create network. 74 | net, end_points = deeplabv3(image_batch, 75 | num_classes=args.num_classes, 76 | depth=args.num_layers, 77 | is_training=True, 78 | ) 79 | # For a small batch size, it is better to keep 80 | # the statistics of the BN layers (running means and variances) 81 | # frozen, and to not update the values provided by the pre-trained model. 82 | # If is_training=True, the statistics will be updated during the training. 83 | # Note that is_training=False still updates BN parameters gamma (scale) 84 | # and beta (offset) 85 | # if they are presented in var_list of the optimizer definition. 86 | 87 | # Predictions. 88 | raw_output = end_points['resnet_v1_{}/logits'.format(args.num_layers)] 89 | # Which variables to load. Running means and variances are not trainable, 90 | # thus all_variables() should be restored. 91 | if args.imagenet is not None and args.ckpt == 0: 92 | restore_var = [v for v in tf.global_variables() if 93 | ('aspp' not in v.name) and 94 | ('img_pool' not in v.name) and 95 | ('fusion' not in v.name) and 96 | ('block5' not in v.name) and 97 | ('block6' not in v.name) and 98 | ('block7' not in v.name) and 99 | ('logits' not in v.name)] 100 | else: 101 | restore_var = [v for v in tf.global_variables()] 102 | 103 | if args.freeze_bn: 104 | all_trainable = [v for v in tf.trainable_variables() if 'beta' not in 105 | v.name and 'gamma' not in v.name] 106 | else: 107 | all_trainable = [v for v in tf.trainable_variables()] 108 | conv_trainable = [v for v in all_trainable] 109 | 110 | # Upsample the logits instead of donwsample the ground truth 111 | raw_output_up = tf.image.resize_bilinear(raw_output, [h, w]) 112 | 113 | # Predictions: ignoring all predictions with labels greater or equal than 114 | # n_classes 115 | label_proc = tf.squeeze(label_batch) 116 | mask = label_proc <= args.num_classes 117 | seg_logits = tf.boolean_mask(raw_output_up, mask) 118 | seg_gt = tf.boolean_mask(label_proc, mask) 119 | seg_gt = tf.cast(seg_gt, tf.int32) 120 | 121 | # Pixel-wise softmax loss. 122 | loss = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=seg_logits, 123 | labels=seg_gt) 124 | seg_loss = tf.reduce_mean(loss) 125 | seg_loss_sum = tf.summary.scalar('loss/seg', seg_loss) 126 | reg_losses = tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES) 127 | reg_loss = tf.add_n(reg_losses) 128 | reg_loss_sum = tf.summary.scalar('loss/reg', reg_loss) 129 | tot_loss = seg_loss + reg_loss 130 | tot_loss_sum = tf.summary.scalar('loss/tot', tot_loss) 131 | 132 | seg_pred = tf.argmax(seg_logits, axis=1) 133 | train_mean_iou, train_update_mean_iou = streaming_mean_iou(seg_pred, 134 | seg_gt, args.num_classes, name="train_iou") 135 | train_iou_sum = tf.summary.scalar('accuracy/train_mean_iou', 136 | train_mean_iou) 137 | train_initializer = tf.variables_initializer(var_list=tf.get_collection( 138 | tf.GraphKeys.LOCAL_VARIABLES, scope="train_iou")) 139 | 140 | # Define loss and optimisation parameters. 141 | base_lr = tf.constant(args.learning_rate) 142 | step_ph = tf.placeholder(dtype=tf.float32, shape=()) 143 | learning_rate = tf.scalar_mul(base_lr, tf.pow((1 - step_ph / args.num_steps), args.power)) 144 | # learning_rate = base_lr 145 | lr_sum = tf.summary.scalar('params/learning_rate', learning_rate) 146 | 147 | train_sum_op = tf.summary.merge([seg_loss_sum, reg_loss_sum, 148 | tot_loss_sum, train_iou_sum, lr_sum]) 149 | 150 | image_batch_val, label_batch_val = read_data(is_training=False, split_name='val') 151 | _, end_points_val = deeplabv3(image_batch_val, 152 | num_classes=args.num_classes, 153 | depth=args.num_layers, 154 | reuse=True, 155 | is_training=False, 156 | ) 157 | raw_output_val = end_points_val['resnet_v1_{}/logits'.format(args.num_layers)] 158 | nh, nw = tf.shape(image_batch_val)[1], tf.shape(image_batch_val)[2] 159 | 160 | seg_logits_val = tf.image.resize_bilinear(raw_output_val, [nh, nw]) 161 | seg_pred_val = tf.argmax(seg_logits_val, axis=3) 162 | seg_pred_val = tf.expand_dims(seg_pred_val, 3) 163 | seg_pred_val = tf.reshape(seg_pred_val, [-1,]) 164 | 165 | seg_gt_val = tf.cast(label_batch_val, tf.int32) 166 | seg_gt_val = tf.reshape(seg_gt_val, [-1,]) 167 | mask_val = seg_gt_val <= args.num_classes - 1 168 | 169 | seg_pred_val = tf.boolean_mask(seg_pred_val, mask_val) 170 | seg_gt_val = tf.boolean_mask(seg_gt_val, mask_val) 171 | 172 | val_mean_iou, val_update_mean_iou = streaming_mean_iou(seg_pred_val, 173 | seg_gt_val, num_classes=args.num_classes, name="val_iou") 174 | val_iou_sum = tf.summary.scalar('accuracy/val_mean_iou', val_mean_iou) 175 | val_initializer = tf.variables_initializer(var_list=tf.get_collection( 176 | tf.GraphKeys.LOCAL_VARIABLES, scope="val_iou")) 177 | test_sum_op = tf.summary.merge([val_iou_sum]) 178 | 179 | global_step = tf.train.get_or_create_global_step() 180 | 181 | opt = tf.train.MomentumOptimizer(learning_rate, args.momentum) 182 | 183 | grads_conv = tf.gradients(tot_loss, conv_trainable) 184 | # train_op = opt.apply_gradients(zip(grads_conv, conv_trainable)) 185 | train_op = slim.learning.create_train_op( 186 | tot_loss, opt, 187 | global_step=global_step, 188 | variables_to_train=conv_trainable, 189 | summarize_gradients=True) 190 | 191 | # Set up tf session and initialize variables. 192 | config = tf.ConfigProto() 193 | config.gpu_options.allow_growth = True 194 | sess = tf.Session(config=config) 195 | 196 | sess.run(tf.global_variables_initializer()) 197 | sess.run(tf.local_variables_initializer()) 198 | 199 | # Saver for storing checkpoints of the model. 200 | saver = tf.train.Saver(var_list=tf.global_variables(), max_to_keep=20) 201 | 202 | # Load variables if the checkpoint is provided. 203 | if args.ckpt > 0 or args.restore_from is not None or args.imagenet is not None: 204 | loader = tf.train.Saver(var_list=restore_var) 205 | load(loader, sess, args.snapshot_dir) 206 | 207 | # Start queue threads. 208 | threads = tf.train.start_queue_runners(coord=coord, sess=sess) 209 | 210 | # tf.get_default_graph().finalize() 211 | summary_writer = tf.summary.FileWriter(args.snapshot_dir, 212 | sess.graph) 213 | 214 | # Iterate over training steps. 215 | for step in range(args.ckpt, args.num_steps): 216 | start_time = time.time() 217 | feed_dict = { step_ph : step } 218 | tot_loss_float, seg_loss_float, reg_loss_float, _, lr_float, _,train_summary = sess.run([tot_loss, seg_loss, reg_loss, train_op, 219 | learning_rate, train_update_mean_iou, train_sum_op], 220 | feed_dict=feed_dict) 221 | train_mean_iou_float = sess.run(train_mean_iou) 222 | duration = time.time() - start_time 223 | sys.stdout.write('step {:d}, tot_loss = {:.6f}, seg_loss = {:.6f}, ' \ 224 | 'reg_loss = {:.6f}, mean_iou = {:.6f}, lr: {:.6f}({:.3f}' \ 225 | 'sec/step)\n'.format(step, tot_loss_float, seg_loss_float, 226 | reg_loss_float, train_mean_iou_float, lr_float, duration) 227 | ) 228 | sys.stdout.flush() 229 | 230 | if step % args.save_pred_every == 0 and step > args.ckpt: 231 | sess.run(val_initializer) 232 | for val_step in range(NUM_VAL): 233 | _, test_summary = sess.run([val_update_mean_iou, test_sum_op], 234 | feed_dict=feed_dict) 235 | 236 | summary_writer.add_summary(train_summary, step) 237 | summary_writer.add_summary(test_summary, step) 238 | val_mean_iou_float= sess.run(val_mean_iou) 239 | 240 | save(saver, sess, args.snapshot_dir, step) 241 | sys.stdout.write('step {:d}, train_mean_iou: {:.6f}, ' \ 242 | 'val_mean_iou: {:.6f}\n'.format(step, train_mean_iou_float, 243 | val_mean_iou_float)) 244 | sys.stdout.flush() 245 | sess.run(train_initializer) 246 | 247 | if coord.should_stop(): 248 | coord.request_stop() 249 | coord.join(threads) 250 | 251 | if __name__ == '__main__': 252 | main() 253 | --------------------------------------------------------------------------------