├── .gitignore ├── README.md ├── data ├── download_datasets.py ├── pf_dataset.py └── synth_dataset.py ├── demo.py ├── demo_notebook.ipynb ├── eval_pf.py ├── geotnf ├── point_tnf.py └── transformation.py ├── image └── normalization.py ├── model ├── cnn_geometric_model.py └── loss.py ├── script.sh ├── train.py ├── training_data ├── pascal-synth-aff │ ├── test.csv │ └── train.csv ├── pascal-synth-tps │ ├── test.csv │ └── train.csv ├── streetview-synth-aff │ ├── test.csv │ └── train.csv └── streetview-synth-tps │ ├── test.csv │ └── train.csv └── util ├── torch_util.py └── train_test_fn.py /.gitignore: -------------------------------------------------------------------------------- 1 | .ipynb_checkpoints 2 | __pycache__ 3 | training_data/seasons/ 4 | training_data/day-night/ 5 | training_data/theta.csv 6 | scripts/ 7 | datasets/ 8 | notebooks/ 9 | results/ 10 | trained_models/ 11 | **/*.bak 12 | *.png 13 | eval_pf_pascal.py 14 | .ftpconfig 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # A2Net implementation forked by CNNGeometric 2 | 3 | ![](http://cvlab.postech.ac.kr/research/A2Net/images/a2net.png) 4 | 5 | This is the implementation of the paper: 6 | 7 | P. H. Seo, J. Lee, D. Jung, B. Han and M. Cho. Attentive Semantic Alignment with Offset-Aware Correlation Kernels. ECCV 2018 [[website](http://cvlab.postech.ac.kr/research/A2Net/)][[arXiv](https://arxiv.org/abs/1808.02128)] 8 | 9 | using PyTorch. 10 | 11 | ## Dependencies ### 12 | - Python 3 13 | - pytorch > 0.2.0, torchvision 14 | - numpy, skimage (included in conda) 15 | 16 | ## Getting started ### 17 | - demo.py demonstrates the results on the ProposalFlow dataset 18 | - train.py is the main training script 19 | - eval_pf.py evaluates on the PF-WILLOW dataset 20 | 21 | ## Trained models ### 22 | #### A2Net evaluated by ProposalFlow Dataset 23 | - VGG Models : [[Affine]](http://cvlab.postech.ac.kr/research/A2Net/data/vgg_affine_oack027.pth.tar), [[TPS]](http://cvlab.postech.ac.kr/research/A2Net/data/vgg_tps_oack027.pth.tar) , ResNet101 Models : [[Affine]](http://cvlab.postech.ac.kr/research/A2Net/data/resnet_affine_oack027.pth.tar), [[TPS]](http://cvlab.postech.ac.kr/research/A2Net/data/resnet_tps_oack027.pth.tar) 24 | - Results on PF-WILLOW: `PCK affine (vgg) : 0.521`, `PCK affine+tps (vgg) : 0.625`, `PCK affine+tps (ResNet101): 0.688` 25 | - Results on PF-PASCAL(by bounding box): `PCK affine (vgg) : 0.456`, `PCK affine+tps (vgg) : 0.540`, `PCK affine+tps (ResNet101): 0.589` 26 | - Results on PF-PASCAL(by image size): `PCK affine (vgg) : 0.587`, `PCK affine+tps (vgg) : 0.650`, `PCK affine+tps (ResNet101): 0.708` 27 | 28 | ## NOTICE!! ### 29 | Note that there has been some inconsistency across related papers in determining the error tolerance threshold for PCK: some paper ( DeepFlow, GMK, SIFTFlow, DSP, ProposalFlow ) determine the threshold based on the object bounding box size whereas some others use the entire image size (UCN, FCSS, SCNet). 30 | 31 | Unfortunately, this issue confuses the comparisons across the methods. In producing the PF-PASCAL benchmark comparison in our paper, we’ve used the codes from the previous methods and in doing so we made some mistake in some of evaluation due to the issue. 32 | 33 | Although the overall tendencies of performances between models remain unchanged, scores of some models are overestimated. We have posted a new version of our paper in arXiv with all the correct scores measured with bounding box sizes. Please refer to this version for the correct scores: https://arxiv.org/abs/1808.02128 . We apologize for all this inconvenience. 34 | 35 | 36 | 37 | ## BibTeX ## 38 | ```` 39 | @inproceedings{paul2018attentive, 40 | title={Attentive Semantic Alignment with Offset-Aware Correlation Kernels}, 41 | author={Paul Hongsuck Seo and Jongmin Lee and Deunsol Jung and Bohyung Han and Minsu Cho}, 42 | booktitle={ECCV} 43 | year={2018} 44 | } 45 | ```` 46 | -------------------------------------------------------------------------------- /data/download_datasets.py: -------------------------------------------------------------------------------- 1 | from os.path import exists, join, basename 2 | from os import makedirs, remove 3 | from six.moves import urllib 4 | import tarfile 5 | import zipfile 6 | import requests 7 | import sys 8 | 9 | def download_PF_willow(dest="datasets"): 10 | if not exists(dest): 11 | makedirs(dest) 12 | url = "http://www.di.ens.fr/willow/research/proposalflow/dataset/PF-dataset.zip" 13 | print("downloading url ", url) 14 | 15 | data = urllib.request.urlopen(url) 16 | 17 | file_path = join(dest, basename(url)) 18 | with open(file_path, 'wb') as f: 19 | f.write(data.read()) 20 | 21 | print("Extracting data") 22 | zip_ref = zipfile.ZipFile(file_path, 'r') 23 | zip_ref.extractall(dest) 24 | zip_ref.close() 25 | 26 | remove(file_path) 27 | 28 | url = "http://www.di.ens.fr/willow/research/cnngeometric/other_resources/test_pairs_pf.csv" 29 | print("downloading url ", url) 30 | 31 | data = urllib.request.urlopen(url) 32 | file_path = join(dest, 'PF-dataset',basename(url)) 33 | with open(file_path, 'wb') as f: 34 | f.write(data.read()) 35 | 36 | def download_pascal(dest="datasets/pascal-voc11"): 37 | if not exists(dest): 38 | makedirs(dest) 39 | url = "http://host.robots.ox.ac.uk/pascal/VOC/voc2011/VOCtrainval_25-May-2011.tar" 40 | print("downloading url ", url) 41 | 42 | data = urllib.request.urlopen(url) 43 | 44 | file_path = join(dest, basename(url)) 45 | with open(file_path, "wb") as f: 46 | response = requests.get(url, stream=True) 47 | total_length = response.headers.get('content-length') 48 | 49 | if total_length is None: # no content length header 50 | f.write(response.content) 51 | else: 52 | dl = 0 53 | total_length = int(total_length) 54 | for data in response.iter_content(chunk_size=4096): 55 | dl += len(data) 56 | f.write(data) 57 | done = int(50 * dl / total_length) 58 | sys.stdout.write("\r[%s%s]" % ('=' * done, ' ' * (50-done)) ) 59 | sys.stdout.flush() 60 | 61 | 62 | print("Extracting data") 63 | zip_ref = tarfile.open(file_path, 'r') 64 | zip_ref.extractall(dest) 65 | zip_ref.close() 66 | 67 | remove(file_path) 68 | 69 | -------------------------------------------------------------------------------- /data/pf_dataset.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function, division 2 | import os 3 | import torch 4 | from torch.autograd import Variable 5 | from skimage import io 6 | import pandas as pd 7 | import numpy as np 8 | from torch.utils.data import Dataset 9 | from geotnf.transformation import GeometricTnf 10 | 11 | class PFDataset(Dataset): 12 | 13 | """ 14 | 15 | Proposal Flow image pair dataset 16 | 17 | 18 | Args: 19 | csv_file (string): Path to the csv file with image names and transformations. 20 | training_image_path (string): Directory with the images. 21 | output_size (2-tuple): Desired output size 22 | transform (callable): Transformation for post-processing the training pair (eg. image normalization) 23 | 24 | """ 25 | 26 | def __init__(self, csv_file, training_image_path,output_size=(240,240),transform=None): 27 | 28 | self.out_h, self.out_w = output_size 29 | self.train_data = pd.read_csv(csv_file) 30 | self.img_A_names = self.train_data.iloc[:,0] 31 | self.img_B_names = self.train_data.iloc[:,1] 32 | self.point_A_coords = self.train_data.iloc[:, 2:22].as_matrix().astype('float') 33 | self.point_B_coords = self.train_data.iloc[:, 22:].as_matrix().astype('float') 34 | self.training_image_path = training_image_path 35 | self.transform = transform 36 | # no cuda as dataset is called from CPU threads in dataloader and produces confilct 37 | self.affineTnf = GeometricTnf(out_h=self.out_h, out_w=self.out_w, use_cuda = False) 38 | 39 | def __len__(self): 40 | return len(self.train_data) 41 | 42 | def __getitem__(self, idx): 43 | # get pre-processed images 44 | image_A,im_size_A = self.get_image(self.img_A_names,idx) 45 | image_B,im_size_B = self.get_image(self.img_B_names,idx) 46 | 47 | # get pre-processed point coords 48 | point_A_coords = self.get_points(self.point_A_coords,idx) 49 | point_B_coords = self.get_points(self.point_B_coords,idx) 50 | 51 | # compute PCK reference length L_pck (equal to max bounding box side in image_A) 52 | L_pck = torch.FloatTensor([torch.max(point_A_coords.max(1)[0]-point_A_coords.min(1)[0])]) 53 | 54 | sample = {'source_image': image_A, 'target_image': image_B, 'source_im_size': im_size_A, 'target_im_size': im_size_B, 'source_points': point_A_coords, 'target_points': point_B_coords, 'L_pck': L_pck} 55 | 56 | if self.transform: 57 | sample = self.transform(sample) 58 | 59 | return sample 60 | 61 | def get_image(self,img_name_list,idx): 62 | img_name = os.path.join(self.training_image_path, img_name_list[idx]) 63 | image = io.imread(img_name) 64 | 65 | # get image size 66 | im_size = np.asarray(image.shape) 67 | 68 | # convert to torch Variable 69 | image = np.expand_dims(image.transpose((2,0,1)),0) 70 | image = torch.Tensor(image.astype(np.float32)) 71 | image_var = Variable(image,requires_grad=False) 72 | 73 | # Resize image using bilinear sampling with identity affine tnf 74 | image = self.affineTnf(image_var).data.squeeze(0) 75 | 76 | im_size = torch.Tensor(im_size.astype(np.float32)) 77 | 78 | return (image, im_size) 79 | 80 | def get_points(self,point_coords_list,idx): 81 | point_coords = point_coords_list[idx, :].reshape(2,10) 82 | 83 | # # swap X,Y coords, as the the row,col order (Y,X) is used for computations 84 | # point_coords = point_coords[[1,0],:] 85 | 86 | # make arrays float tensor for subsequent processing 87 | point_coords = torch.Tensor(point_coords.astype(np.float32)) 88 | return point_coords 89 | -------------------------------------------------------------------------------- /data/synth_dataset.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function, division 2 | import torch 3 | import os 4 | from os.path import exists, join, basename 5 | from skimage import io 6 | import pandas as pd 7 | import numpy as np 8 | from torch.utils.data import Dataset 9 | from geotnf.transformation import GeometricTnf 10 | from torch.autograd import Variable 11 | 12 | class SynthDataset(Dataset): 13 | """ 14 | 15 | Synthetically transformed pairs dataset for training with strong supervision 16 | 17 | Args: 18 | csv_file (string): Path to the csv file with image names and transformations. 19 | training_image_path (string): Directory with all the images. 20 | transform (callable): Transformation for post-processing the training pair (eg. image normalization) 21 | 22 | Returns: 23 | Dict: {'image': full dataset image, 'theta': desired transformation} 24 | 25 | """ 26 | 27 | def __init__(self, csv_file, training_image_path, output_size=(480,640), geometric_model='affine', transform=None, 28 | random_sample=False, random_t=0.5, random_s=0.5, random_alpha=1/6, random_t_tps=0.4): 29 | self.random_sample = random_sample 30 | self.random_t = random_t 31 | self.random_t_tps = random_t_tps 32 | self.random_alpha = random_alpha 33 | self.random_s = random_s 34 | self.out_h, self.out_w = output_size 35 | # read csv file 36 | self.train_data = pd.read_csv(csv_file) 37 | self.img_names = self.train_data.iloc[:,0] 38 | self.theta_array = self.train_data.iloc[:, 1:].as_matrix().astype('float') 39 | # copy arguments 40 | self.training_image_path = training_image_path 41 | self.transform = transform 42 | self.geometric_model = geometric_model 43 | self.affineTnf = GeometricTnf(out_h=self.out_h, out_w=self.out_w, use_cuda = False) 44 | 45 | def __len__(self): 46 | return len(self.train_data) 47 | 48 | def __getitem__(self, idx): 49 | # read image 50 | img_name = os.path.join(self.training_image_path, self.img_names[idx]) 51 | image = io.imread(img_name) 52 | 53 | # read theta 54 | if self.random_sample==False: 55 | theta = self.theta_array[idx, :] 56 | 57 | if self.geometric_model=='affine': 58 | # reshape theta to 2x3 matrix [A|t] where 59 | # first row corresponds to X and second to Y 60 | theta = theta[[3,2,5,1,0,4]].reshape(2,3) 61 | elif self.geometric_model=='tps': 62 | theta = np.expand_dims(np.expand_dims(theta,1),2) 63 | else: 64 | if self.geometric_model=='affine': 65 | alpha = (np.random.rand(1)-0.5)*2*np.pi*self.random_alpha 66 | theta = np.random.rand(6) 67 | theta[[2,5]]=(theta[[2,5]]-0.5)*2*self.random_t 68 | theta[0]=(1+(theta[0]-0.5)*2*self.random_s)*np.cos(alpha) 69 | theta[1]=(1+(theta[1]-0.5)*2*self.random_s)*(-np.sin(alpha)) 70 | theta[3]=(1+(theta[3]-0.5)*2*self.random_s)*np.sin(alpha) 71 | theta[4]=(1+(theta[4]-0.5)*2*self.random_s)*np.cos(alpha) 72 | theta = theta.reshape(2,3) 73 | if self.geometric_model=='tps': 74 | theta = np.array([-1 , -1 , -1 , 0 , 0 , 0 , 1 , 1 , 1 , -1 , 0 , 1 , -1 , 0 , 1 , -1 , 0 , 1]) 75 | theta = theta+(np.random.rand(18)-0.5)*2*self.random_t_tps 76 | 77 | # make arrays float tensor for subsequent processing 78 | image = torch.Tensor(image.astype(np.float32)) 79 | theta = torch.Tensor(theta.astype(np.float32)) 80 | 81 | # permute order of image to CHW 82 | image = image.transpose(1,2).transpose(0,1) 83 | 84 | # Resize image using bilinear sampling with identity affine tnf 85 | if image.size()[0]!=self.out_h or image.size()[1]!=self.out_w: 86 | image = self.affineTnf(Variable(image.unsqueeze(0),requires_grad=False)).data.squeeze(0) 87 | 88 | sample = {'image': image, 'theta': theta} 89 | 90 | if self.transform: 91 | sample = self.transform(sample) 92 | 93 | return sample -------------------------------------------------------------------------------- /demo.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function, division 2 | import os 3 | import argparse 4 | import torch 5 | import torch.nn as nn 6 | from torch.utils.data import Dataset, DataLoader 7 | from model.cnn_geometric_model import CNNGeometric 8 | from data.pf_dataset import PFDataset 9 | from data.download_datasets import download_PF_willow 10 | from image.normalization import NormalizeImageDict, normalize_image 11 | from util.torch_util import BatchTensorToVars, str_to_bool 12 | from geotnf.transformation import GeometricTnf 13 | from geotnf.point_tnf import * 14 | import matplotlib.pyplot as plt 15 | from skimage import io 16 | from collections import OrderedDict 17 | 18 | 19 | # for compatibility with Python 2 20 | try: 21 | input = raw_input 22 | except NameError: 23 | pass 24 | 25 | """ 26 | 27 | Script to demonstrate evaluation on a trained model as presented in the CNNGeometric CVPR'17 paper 28 | on the ProposalFlow dataset 29 | 30 | """ 31 | 32 | print('CNNGeometric PF demo script') 33 | 34 | # Argument parsing 35 | parser = argparse.ArgumentParser(description='CNNGeometric PyTorch implementation') 36 | # Paths 37 | parser.add_argument('--model-aff', type=str, default='trained_models/best_pascal_checkpoint_adam_affine_grid_loss_resnet_random.pth.tar', help='Trained affine model filename') 38 | parser.add_argument('--model-tps', type=str, default='trained_models/best_pascal_checkpoint_adam_tps_grid_loss_resnet_random.pth.tar', help='Trained TPS model filename') 39 | parser.add_argument('--feature-extraction-cnn', type=str, default='resnet101', help='Feature extraction architecture: vgg/resnet101') 40 | parser.add_argument('--pf-path', type=str, default='datasets/PF-dataset', help='Path to PF dataset') 41 | 42 | args = parser.parse_args() 43 | 44 | use_cuda = torch.cuda.is_available() 45 | 46 | do_aff = not args.model_aff=='' 47 | do_tps = not args.model_tps=='' 48 | 49 | 50 | # Download dataset if needed 51 | download_PF_willow('datasets/') 52 | 53 | # Create model 54 | print('Creating CNN model...') 55 | if do_aff: 56 | model_aff = CNNGeometric(use_cuda=use_cuda,geometric_model='affine',feature_extraction_cnn=args.feature_extraction_cnn) 57 | if do_tps: 58 | model_tps = CNNGeometric(use_cuda=use_cuda,geometric_model='tps',feature_extraction_cnn=args.feature_extraction_cnn) 59 | 60 | # Load trained weights 61 | print('Loading trained model weights...') 62 | if do_aff: 63 | checkpoint = torch.load(args.model_aff, map_location=lambda storage, loc: storage) 64 | checkpoint['state_dict'] = OrderedDict([(k.replace('vgg', 'model'), v) for k, v in checkpoint['state_dict'].items()]) 65 | model_aff.load_state_dict(checkpoint['state_dict']) 66 | if do_tps: 67 | checkpoint = torch.load(args.model_tps, map_location=lambda storage, loc: storage) 68 | checkpoint['state_dict'] = OrderedDict([(k.replace('vgg', 'model'), v) for k, v in checkpoint['state_dict'].items()]) 69 | model_tps.load_state_dict(checkpoint['state_dict']) 70 | 71 | # Dataset and dataloader 72 | dataset = PFDataset(csv_file=os.path.join(args.pf_path, 'test_pairs_pf.csv'), 73 | training_image_path=args.pf_path, 74 | transform=NormalizeImageDict(['source_image','target_image'])) 75 | dataloader = DataLoader(dataset, batch_size=1, 76 | shuffle=True, num_workers=4) 77 | batchTensorToVars = BatchTensorToVars(use_cuda=use_cuda) 78 | 79 | # Instantiate point transformer 80 | pt = PointTnf(use_cuda=use_cuda) 81 | 82 | # Instatiate image transformers 83 | tpsTnf = GeometricTnf(geometric_model='tps', use_cuda=use_cuda) 84 | affTnf = GeometricTnf(geometric_model='affine', use_cuda=use_cuda) 85 | 86 | 87 | for i, batch in enumerate(dataloader): 88 | # get random batch of size 1 89 | batch = batchTensorToVars(batch) 90 | 91 | source_im_size = batch['source_im_size'] 92 | target_im_size = batch['target_im_size'] 93 | 94 | source_points = batch['source_points'] 95 | target_points = batch['target_points'] 96 | 97 | # warp points with estimated transformations 98 | target_points_norm = PointsToUnitCoords(target_points,target_im_size) 99 | 100 | if do_aff: 101 | model_aff.eval() 102 | if do_tps: 103 | model_tps.eval() 104 | 105 | # Evaluate models 106 | if do_aff: 107 | theta_aff=model_aff(batch) 108 | warped_image_aff = affTnf(batch['source_image'],theta_aff.view(-1,2,3)) 109 | 110 | if do_tps: 111 | theta_tps=model_tps(batch) 112 | warped_image_tps = tpsTnf(batch['source_image'],theta_tps) 113 | 114 | if do_aff and do_tps: 115 | theta_aff_tps=model_tps({'source_image': warped_image_aff, 'target_image': batch['target_image']}) 116 | warped_image_aff_tps = tpsTnf(warped_image_aff,theta_aff_tps) 117 | 118 | # Un-normalize images and convert to numpy 119 | source_image = normalize_image(batch['source_image'],forward=False) 120 | source_image = source_image.data.squeeze(0).transpose(0,1).transpose(1,2).cpu().numpy() 121 | target_image = normalize_image(batch['target_image'],forward=False) 122 | target_image = target_image.data.squeeze(0).transpose(0,1).transpose(1,2).cpu().numpy() 123 | 124 | if do_aff: 125 | warped_image_aff = normalize_image(warped_image_aff,forward=False) 126 | warped_image_aff = warped_image_aff.data.squeeze(0).transpose(0,1).transpose(1,2).cpu().numpy() 127 | 128 | if do_tps: 129 | warped_image_tps = normalize_image(warped_image_tps,forward=False) 130 | warped_image_tps = warped_image_tps.data.squeeze(0).transpose(0,1).transpose(1,2).cpu().numpy() 131 | 132 | if do_aff and do_tps: 133 | warped_image_aff_tps = normalize_image(warped_image_aff_tps,forward=False) 134 | warped_image_aff_tps = warped_image_aff_tps.data.squeeze(0).transpose(0,1).transpose(1,2).cpu().numpy() 135 | 136 | # check if display is available 137 | exit_val = os.system('python -c "import matplotlib.pyplot as plt;plt.figure()" > /dev/null 2>&1') 138 | display_avail = exit_val==0 139 | 140 | if display_avail: 141 | N_subplots = 2+int(do_aff)+int(do_tps)+int(do_aff and do_tps) 142 | fig, axs = plt.subplots(1,N_subplots) 143 | axs[0].imshow(source_image) 144 | axs[0].set_title('src') 145 | axs[1].imshow(target_image) 146 | axs[1].set_title('tgt') 147 | subplot_idx = 2 148 | if do_aff: 149 | axs[subplot_idx].imshow(warped_image_aff) 150 | axs[subplot_idx].set_title('aff') 151 | subplot_idx +=1 152 | if do_tps: 153 | axs[subplot_idx].imshow(warped_image_tps) 154 | axs[subplot_idx].set_title('tps') 155 | subplot_idx +=1 156 | if do_aff and do_tps: 157 | axs[subplot_idx].imshow(warped_image_aff_tps) 158 | axs[subplot_idx].set_title('aff+tps') 159 | 160 | for i in range(N_subplots): 161 | axs[i].axis('off') 162 | print('Showing results. Close figure window to continue') 163 | plt.show() 164 | else: 165 | print('No display found. Writing results to:') 166 | fn_src = 'source.png' 167 | print(fn_src) 168 | io.imsave(fn_src, source_image) 169 | fn_tgt = 'target.png' 170 | print(fn_tgt) 171 | io.imsave(fn_tgt, target_image) 172 | if do_aff: 173 | fn_aff = 'result_aff.png' 174 | print(fn_aff) 175 | io.imsave(fn_aff, warped_image_aff) 176 | if do_tps: 177 | fn_tps = 'result_tps.png' 178 | print(fn_tps) 179 | io.imsave(fn_tps,warped_image_tps) 180 | if do_aff and do_tps: 181 | fn_aff_tps = 'result_aff_tps.png' 182 | print(fn_aff_tps) 183 | io.imsave(fn_aff_tps,warped_image_aff_tps) 184 | 185 | res = input('Run for another example ([y]/n): ') 186 | if res=='n': 187 | break -------------------------------------------------------------------------------- /eval_pf.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function, division 2 | import os 3 | import argparse 4 | import torch 5 | import torch.nn as nn 6 | from torch.utils.data import Dataset, DataLoader 7 | from model.cnn_geometric_model import CNNGeometric 8 | from data.pf_dataset import PFDataset 9 | from data.download_datasets import download_PF_willow 10 | from image.normalization import NormalizeImageDict 11 | from util.torch_util import BatchTensorToVars, str_to_bool 12 | from geotnf.point_tnf import * 13 | from geotnf.transformation import GeometricTnf 14 | from collections import OrderedDict 15 | 16 | import pickle 17 | from functools import partial 18 | 19 | """ 20 | 21 | Script to evaluate a trained model as presented in the CNNGeometric CVPR'17 paper 22 | on the ProposalFlow dataset 23 | 24 | """ 25 | 26 | print('CNNGeometric PF evaluation script') 27 | 28 | # Argument parsing 29 | parser = argparse.ArgumentParser(description='CNNGeometric PyTorch implementation') 30 | # Paths 31 | parser.add_argument('--model-aff', type=str, default='trained_models/best_pascal_checkpoint_adam_affine_grid_loss_resnet_random.pth.tar', help='Trained affine model filename') 32 | parser.add_argument('--model-tps', type=str, default='trained_models/best_pascal_checkpoint_adam_tps_grid_loss_resnet_random.pth.tar', help='Trained TPS model filename') 33 | parser.add_argument('--feature-extraction-cnn', type=str, default='resnet101', help='Feature extraction architecture: vgg/resnet101') 34 | parser.add_argument('--pf-path', type=str, default='datasets/PF-dataset', help='Path to PF dataset') 35 | 36 | args = parser.parse_args() 37 | 38 | use_cuda = torch.cuda.is_available() 39 | 40 | do_aff = not args.model_aff=='' 41 | do_tps = not args.model_tps=='' 42 | 43 | # Download dataset if needed 44 | download_PF_willow('datasets/') 45 | 46 | # Create model 47 | print('Creating CNN model...') 48 | if do_aff: 49 | model_aff = CNNGeometric(use_cuda=use_cuda,geometric_model='affine',feature_extraction_cnn=args.feature_extraction_cnn) 50 | if do_tps: 51 | model_tps = CNNGeometric(use_cuda=use_cuda,geometric_model='tps',feature_extraction_cnn=args.feature_extraction_cnn) 52 | 53 | pickle.load = partial(pickle.load, encoding="latin1") 54 | pickle.Unpickler = partial(pickle.Unpickler, encoding="latin1") 55 | 56 | # Load trained weights 57 | print('Loading trained model weights...') 58 | if do_aff: 59 | checkpoint = torch.load(args.model_aff, map_location=lambda storage, loc: storage) 60 | checkpoint['state_dict'] = OrderedDict([(k.replace('vgg', 'model'), v) for k, v in checkpoint['state_dict'].items()]) 61 | model_aff.load_state_dict(checkpoint['state_dict']) 62 | if do_tps: 63 | checkpoint = torch.load(args.model_tps, map_location=lambda storage, loc: storage) 64 | checkpoint['state_dict'] = OrderedDict([(k.replace('vgg', 'model'), v) for k, v in checkpoint['state_dict'].items()]) 65 | model_tps.load_state_dict(checkpoint['state_dict']) 66 | 67 | # Dataset and dataloader 68 | dataset = PFDataset(csv_file=os.path.join(args.pf_path, 'test_pairs_pf.csv'), 69 | training_image_path=args.pf_path, 70 | transform=NormalizeImageDict(['source_image','target_image'])) 71 | if use_cuda: 72 | batch_size=16 73 | else: 74 | batch_size=1 75 | 76 | dataloader = DataLoader(dataset, batch_size=batch_size, 77 | shuffle=False, num_workers=4) 78 | 79 | batchTensorToVars = BatchTensorToVars(use_cuda=use_cuda) 80 | 81 | # Instantiate point transformer 82 | pt = PointTnf(use_cuda=use_cuda) 83 | 84 | # Instatiate image transformers 85 | tpsTnf = GeometricTnf(geometric_model='tps',use_cuda=use_cuda) 86 | affTnf = GeometricTnf(geometric_model='affine',use_cuda=use_cuda) 87 | 88 | # Compute PCK 89 | def correct_keypoints(source_points,warped_points,L_pck,alpha=0.1): 90 | # compute correct keypoints 91 | point_distance = torch.pow(torch.sum(torch.pow(source_points-warped_points,2),1),0.5).squeeze(1) 92 | L_pck_mat = L_pck.expand_as(point_distance) 93 | correct_points = torch.le(point_distance,L_pck_mat*alpha) 94 | num_of_correct_points = torch.sum(correct_points) 95 | num_of_points = correct_points.numel() 96 | return (num_of_correct_points,num_of_points) 97 | 98 | print('Computing PCK...') 99 | total_correct_points_aff = 0 100 | total_correct_points_tps = 0 101 | total_correct_points_aff_tps = 0 102 | total_points = 0 103 | for i, batch in enumerate(dataloader): 104 | 105 | batch = batchTensorToVars(batch) 106 | 107 | source_im_size = batch['source_im_size'] 108 | target_im_size = batch['target_im_size'] 109 | 110 | source_points = batch['source_points'] 111 | target_points = batch['target_points'] 112 | 113 | # warp points with estimated transformations 114 | target_points_norm = PointsToUnitCoords(target_points,target_im_size) 115 | 116 | if do_aff: 117 | model_aff.eval() 118 | if do_tps: 119 | model_tps.eval() 120 | 121 | if do_aff: 122 | theta_aff=model_aff(batch) 123 | 124 | # do affine only 125 | warped_points_aff_norm = pt.affPointTnf(theta_aff,target_points_norm) 126 | warped_points_aff = PointsToPixelCoords(warped_points_aff_norm,source_im_size) 127 | 128 | if do_tps: 129 | theta_tps=model_tps(batch) 130 | 131 | # do tps only 132 | warped_points_tps_norm = pt.tpsPointTnf(theta_tps,target_points_norm) 133 | warped_points_tps = PointsToPixelCoords(warped_points_tps_norm,source_im_size) 134 | 135 | if do_aff and do_tps: 136 | warped_image_aff = affTnf(batch['source_image'],theta_aff.view(-1,2,3)) 137 | theta_aff_tps=model_tps({'source_image': warped_image_aff, 'target_image': batch['target_image']}) 138 | 139 | # do tps+affine 140 | warped_points_aff_tps_norm = pt.tpsPointTnf(theta_aff_tps,target_points_norm) 141 | warped_points_aff_tps_norm = pt.affPointTnf(theta_aff,warped_points_aff_tps_norm) 142 | warped_points_aff_tps = PointsToPixelCoords(warped_points_aff_tps_norm,source_im_size) 143 | 144 | L_pck = batch['L_pck'].data 145 | 146 | if do_aff: 147 | correct_points_aff, num_points = correct_keypoints(source_points.data, 148 | warped_points_aff.data,L_pck) 149 | total_correct_points_aff += correct_points_aff 150 | 151 | if do_tps: 152 | correct_points_tps, num_points = correct_keypoints(source_points.data, 153 | warped_points_tps.data,L_pck) 154 | total_correct_points_tps += correct_points_tps 155 | 156 | if do_aff and do_tps: 157 | correct_points_aff_tps, num_points = correct_keypoints(source_points.data, 158 | warped_points_aff_tps.data,L_pck) 159 | total_correct_points_aff_tps += correct_points_aff_tps 160 | 161 | total_points += num_points 162 | 163 | print('Batch: [{}/{} ({:.0f}%)]'.format(i, len(dataloader), 100. * i / len(dataloader))) 164 | 165 | if do_aff: 166 | PCK_aff=total_correct_points_aff/total_points 167 | print('PCK affine:',PCK_aff) 168 | if do_tps: 169 | PCK_tps=total_correct_points_tps/total_points 170 | print('PCK tps:',PCK_tps) 171 | if do_aff and do_tps: 172 | PCK_aff_tps=total_correct_points_aff_tps/total_points 173 | print('PCK affine+tps:',PCK_aff_tps) 174 | print('Done!') 175 | -------------------------------------------------------------------------------- /geotnf/point_tnf.py: -------------------------------------------------------------------------------- 1 | import torch 2 | from torch.autograd import Variable 3 | import numpy as np 4 | from geotnf.transformation import TpsGridGen 5 | 6 | class PointTnf(object): 7 | """ 8 | 9 | Class with functions for transforming a set of points with affine/tps transformations 10 | 11 | """ 12 | def __init__(self, use_cuda=True): 13 | self.use_cuda=use_cuda 14 | self.tpsTnf = TpsGridGen(use_cuda=self.use_cuda) 15 | 16 | def tpsPointTnf(self,theta,points): 17 | # points are expected in [B,2,N], where first row is X and second row is Y 18 | # reshape points for applying Tps transformation 19 | points=points.unsqueeze(3).transpose(1,3) 20 | # apply transformation 21 | warped_points = self.tpsTnf.apply_transformation(theta,points) 22 | # undo reshaping 23 | warped_points=warped_points.transpose(3,1).squeeze(3) 24 | return warped_points 25 | 26 | def affPointTnf(self,theta,points): 27 | theta_mat = theta.view(-1,2,3) 28 | warped_points = torch.bmm(theta_mat[:,:,:2],points) 29 | warped_points += theta_mat[:,:,2].unsqueeze(2).expand_as(warped_points) 30 | return warped_points 31 | 32 | def PointsToUnitCoords(P,im_size): 33 | h,w = im_size[:,0],im_size[:,1] 34 | NormAxis = lambda x,L: (x-1-(L-1)/2)*2/(L-1) 35 | P_norm = P.clone() 36 | # normalize Y 37 | P_norm[:,0,:] = NormAxis(P[:,0,:],w.unsqueeze(1).expand_as(P[:,0,:])) 38 | # normalize X 39 | P_norm[:,1,:] = NormAxis(P[:,1,:],h.unsqueeze(1).expand_as(P[:,1,:])) 40 | return P_norm 41 | 42 | def PointsToPixelCoords(P,im_size): 43 | h,w = im_size[:,0],im_size[:,1] 44 | NormAxis = lambda x,L: x*(L-1)/2+1+(L-1)/2 45 | P_norm = P.clone() 46 | # normalize Y 47 | P_norm[:,0,:] = NormAxis(P[:,0,:],w.unsqueeze(1).expand_as(P[:,0,:])) 48 | # normalize X 49 | P_norm[:,1,:] = NormAxis(P[:,1,:],h.unsqueeze(1).expand_as(P[:,1,:])) 50 | return P_norm -------------------------------------------------------------------------------- /geotnf/transformation.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function, division 2 | import os 3 | import sys 4 | from skimage import io 5 | import pandas as pd 6 | import numpy as np 7 | import torch 8 | from torch.nn.modules.module import Module 9 | from torch.utils.data import Dataset 10 | from torch.autograd import Variable 11 | import torch.nn.functional as F 12 | 13 | class GeometricTnf(object): 14 | """ 15 | 16 | Geometric transfromation to an image batch (wrapped in a PyTorch Variable) 17 | ( can be used with no transformation to perform bilinear resizing ) 18 | 19 | """ 20 | def __init__(self, geometric_model='affine', out_h=240, out_w=240, use_cuda=True): 21 | self.out_h = out_h 22 | self.out_w = out_w 23 | self.use_cuda = use_cuda 24 | if geometric_model=='affine': 25 | self.gridGen = AffineGridGen(out_h, out_w) 26 | elif geometric_model=='tps': 27 | self.gridGen = TpsGridGen(out_h, out_w, use_cuda=use_cuda) 28 | self.theta_identity = torch.Tensor(np.expand_dims(np.array([[1,0,0],[0,1,0]]),0).astype(np.float32)) 29 | if use_cuda: 30 | self.theta_identity = self.theta_identity.cuda() 31 | 32 | def __call__(self, image_batch, theta_batch=None, padding_factor=1.0, crop_factor=1.0): 33 | b, c, h, w = image_batch.size() 34 | if theta_batch is None: 35 | theta_batch = self.theta_identity 36 | theta_batch = theta_batch.expand(b,2,3) 37 | theta_batch = Variable(theta_batch,requires_grad=False) 38 | 39 | sampling_grid = self.gridGen(theta_batch) 40 | 41 | # rescale grid according to crop_factor and padding_factor 42 | sampling_grid.data = sampling_grid.data*padding_factor*crop_factor 43 | # sample transformed image 44 | warped_image_batch = F.grid_sample(image_batch, sampling_grid) 45 | 46 | return warped_image_batch 47 | 48 | 49 | class SynthPairTnf(object): 50 | """ 51 | 52 | Generate a synthetically warped training pair using an affine transformation. 53 | 54 | """ 55 | def __init__(self, use_cuda=True, geometric_model='affine', crop_factor=9/16, output_size=(240,240), padding_factor = 0.5): 56 | assert isinstance(use_cuda, (bool)) 57 | assert isinstance(crop_factor, (float)) 58 | assert isinstance(output_size, (tuple)) 59 | assert isinstance(padding_factor, (float)) 60 | self.use_cuda=use_cuda 61 | self.crop_factor = crop_factor 62 | self.padding_factor = padding_factor 63 | self.out_h, self.out_w = output_size 64 | self.rescalingTnf = GeometricTnf('affine', self.out_h, self.out_w, 65 | use_cuda = self.use_cuda) 66 | self.geometricTnf = GeometricTnf(geometric_model, self.out_h, self.out_w, 67 | use_cuda = self.use_cuda) 68 | 69 | 70 | def __call__(self, batch): 71 | image_batch, theta_batch = batch['image'], batch['theta'] 72 | if self.use_cuda: 73 | image_batch = image_batch.cuda() 74 | theta_batch = theta_batch.cuda() 75 | 76 | b, c, h, w = image_batch.size() 77 | 78 | # generate symmetrically padded image for bigger sampling region 79 | image_batch = self.symmetricImagePad(image_batch,self.padding_factor) 80 | 81 | # convert to variables 82 | image_batch = Variable(image_batch,requires_grad=False) 83 | theta_batch = Variable(theta_batch,requires_grad=False) 84 | 85 | # get cropped image 86 | cropped_image_batch = self.rescalingTnf(image_batch,None,self.padding_factor,self.crop_factor) # Identity is used as no theta given 87 | # get transformed image 88 | warped_image_batch = self.geometricTnf(image_batch,theta_batch, 89 | self.padding_factor,self.crop_factor) # Identity is used as no theta given 90 | 91 | return {'source_image': cropped_image_batch, 'target_image': warped_image_batch, 'theta_GT': theta_batch} 92 | 93 | def symmetricImagePad(self,image_batch, padding_factor): 94 | b, c, h, w = image_batch.size() 95 | pad_h, pad_w = int(h*padding_factor), int(w*padding_factor) 96 | idx_pad_left = torch.LongTensor(range(pad_w-1,-1,-1)) 97 | idx_pad_right = torch.LongTensor(range(w-1,w-pad_w-1,-1)) 98 | idx_pad_top = torch.LongTensor(range(pad_h-1,-1,-1)) 99 | idx_pad_bottom = torch.LongTensor(range(h-1,h-pad_h-1,-1)) 100 | if self.use_cuda: 101 | idx_pad_left = idx_pad_left.cuda() 102 | idx_pad_right = idx_pad_right.cuda() 103 | idx_pad_top = idx_pad_top.cuda() 104 | idx_pad_bottom = idx_pad_bottom.cuda() 105 | image_batch = torch.cat((image_batch.index_select(3,idx_pad_left),image_batch, 106 | image_batch.index_select(3,idx_pad_right)),3) 107 | image_batch = torch.cat((image_batch.index_select(2,idx_pad_top),image_batch, 108 | image_batch.index_select(2,idx_pad_bottom)),2) 109 | return image_batch 110 | 111 | 112 | class AffineGridGen(Module): 113 | def __init__(self, out_h=240, out_w=240, out_ch = 3): 114 | super(AffineGridGen, self).__init__() 115 | self.out_h = out_h 116 | self.out_w = out_w 117 | self.out_ch = out_ch 118 | 119 | def forward(self, theta): 120 | theta = theta.contiguous() 121 | batch_size = theta.size()[0] 122 | out_size = torch.Size((batch_size,self.out_ch,self.out_h,self.out_w)) 123 | return F.affine_grid(theta, out_size) 124 | 125 | class TpsGridGen(Module): 126 | def __init__(self, out_h=240, out_w=240, use_regular_grid=True, grid_size=3, reg_factor=0, use_cuda=True): 127 | super(TpsGridGen, self).__init__() 128 | self.out_h, self.out_w = out_h, out_w 129 | self.reg_factor = reg_factor 130 | self.use_cuda = use_cuda 131 | 132 | # create grid in numpy 133 | self.grid = np.zeros( [self.out_h, self.out_w, 3], dtype=np.float32) 134 | # sampling grid with dim-0 coords (Y) 135 | self.grid_X,self.grid_Y = np.meshgrid(np.linspace(-1,1,out_w),np.linspace(-1,1,out_h)) 136 | # grid_X,grid_Y: size [1,H,W,1,1] 137 | self.grid_X = torch.FloatTensor(self.grid_X).unsqueeze(0).unsqueeze(3) 138 | self.grid_Y = torch.FloatTensor(self.grid_Y).unsqueeze(0).unsqueeze(3) 139 | self.grid_X = Variable(self.grid_X,requires_grad=False) 140 | self.grid_Y = Variable(self.grid_Y,requires_grad=False) 141 | if use_cuda: 142 | self.grid_X = self.grid_X.cuda() 143 | self.grid_Y = self.grid_Y.cuda() 144 | 145 | # initialize regular grid for control points P_i 146 | if use_regular_grid: 147 | axis_coords = np.linspace(-1,1,grid_size) 148 | self.N = grid_size*grid_size 149 | P_Y,P_X = np.meshgrid(axis_coords,axis_coords) 150 | P_X = np.reshape(P_X,(-1,1)) # size (N,1) 151 | P_Y = np.reshape(P_Y,(-1,1)) # size (N,1) 152 | P_X = torch.FloatTensor(P_X) 153 | P_Y = torch.FloatTensor(P_Y) 154 | self.Li = Variable(self.compute_L_inverse(P_X,P_Y).unsqueeze(0),requires_grad=False) 155 | self.P_X = P_X.unsqueeze(2).unsqueeze(3).unsqueeze(4).transpose(0,4) 156 | self.P_Y = P_Y.unsqueeze(2).unsqueeze(3).unsqueeze(4).transpose(0,4) 157 | self.P_X = Variable(self.P_X,requires_grad=False) 158 | self.P_Y = Variable(self.P_Y,requires_grad=False) 159 | if use_cuda: 160 | self.P_X = self.P_X.cuda() 161 | self.P_Y = self.P_Y.cuda() 162 | 163 | 164 | def forward(self, theta): 165 | 166 | warped_grid = self.apply_transformation(theta,torch.cat((self.grid_X,self.grid_Y),3)) 167 | 168 | return warped_grid 169 | 170 | def compute_L_inverse(self,X,Y): 171 | N = X.size()[0] # num of points (along dim 0) 172 | # construct matrix K 173 | Xmat = X.expand(N,N) 174 | Ymat = Y.expand(N,N) 175 | P_dist_squared = torch.pow(Xmat-Xmat.transpose(0,1),2)+torch.pow(Ymat-Ymat.transpose(0,1),2) 176 | P_dist_squared[P_dist_squared==0]=1 # make diagonal 1 to avoid NaN in log computation 177 | K = torch.mul(P_dist_squared,torch.log(P_dist_squared)) 178 | # construct matrix L 179 | O = torch.FloatTensor(N,1).fill_(1) 180 | Z = torch.FloatTensor(3,3).fill_(0) 181 | P = torch.cat((O,X,Y),1) 182 | L = torch.cat((torch.cat((K,P),1),torch.cat((P.transpose(0,1),Z),1)),0) 183 | Li = torch.inverse(L) 184 | if self.use_cuda: 185 | Li = Li.cuda() 186 | return Li 187 | 188 | def apply_transformation(self,theta,points): 189 | if theta.dim()==2: 190 | theta = theta.unsqueeze(2).unsqueeze(3) 191 | # points should be in the [B,H,W,2] format, 192 | # where points[:,:,:,0] are the X coords 193 | # and points[:,:,:,1] are the Y coords 194 | 195 | # input are the corresponding control points P_i 196 | batch_size = theta.size()[0] 197 | # split theta into point coordinates 198 | Q_X=theta[:,:self.N,:,:].squeeze(3) 199 | Q_Y=theta[:,self.N:,:,:].squeeze(3) 200 | 201 | # get spatial dimensions of points 202 | points_b = points.size()[0] 203 | points_h = points.size()[1] 204 | points_w = points.size()[2] 205 | 206 | # repeat pre-defined control points along spatial dimensions of points to be transformed 207 | P_X = self.P_X.expand((1,points_h,points_w,1,self.N)) 208 | P_Y = self.P_Y.expand((1,points_h,points_w,1,self.N)) 209 | 210 | # compute weigths for non-linear part 211 | W_X = torch.bmm(self.Li[:,:self.N,:self.N].expand((batch_size,self.N,self.N)),Q_X) 212 | W_Y = torch.bmm(self.Li[:,:self.N,:self.N].expand((batch_size,self.N,self.N)),Q_Y) 213 | # reshape 214 | # W_X,W,Y: size [B,H,W,1,N] 215 | W_X = W_X.unsqueeze(3).unsqueeze(4).transpose(1,4).repeat(1,points_h,points_w,1,1) 216 | W_Y = W_Y.unsqueeze(3).unsqueeze(4).transpose(1,4).repeat(1,points_h,points_w,1,1) 217 | # compute weights for affine part 218 | A_X = torch.bmm(self.Li[:,self.N:,:self.N].expand((batch_size,3,self.N)),Q_X) 219 | A_Y = torch.bmm(self.Li[:,self.N:,:self.N].expand((batch_size,3,self.N)),Q_Y) 220 | # reshape 221 | # A_X,A,Y: size [B,H,W,1,3] 222 | A_X = A_X.unsqueeze(3).unsqueeze(4).transpose(1,4).repeat(1,points_h,points_w,1,1) 223 | A_Y = A_Y.unsqueeze(3).unsqueeze(4).transpose(1,4).repeat(1,points_h,points_w,1,1) 224 | 225 | # compute distance P_i - (grid_X,grid_Y) 226 | # grid is expanded in point dim 4, but not in batch dim 0, as points P_X,P_Y are fixed for all batch 227 | points_X_for_summation = points[:,:,:,0].unsqueeze(3).unsqueeze(4).expand(points[:,:,:,0].size()+(1,self.N)) 228 | points_Y_for_summation = points[:,:,:,1].unsqueeze(3).unsqueeze(4).expand(points[:,:,:,1].size()+(1,self.N)) 229 | 230 | if points_b==1: 231 | delta_X = points_X_for_summation-P_X 232 | delta_Y = points_Y_for_summation-P_Y 233 | else: 234 | # use expanded P_X,P_Y in batch dimension 235 | delta_X = points_X_for_summation-P_X.expand_as(points_X_for_summation) 236 | delta_Y = points_Y_for_summation-P_Y.expand_as(points_Y_for_summation) 237 | 238 | dist_squared = torch.pow(delta_X,2)+torch.pow(delta_Y,2) 239 | # U: size [1,H,W,1,N] 240 | dist_squared[dist_squared==0]=1 # avoid NaN in log computation 241 | U = torch.mul(dist_squared,torch.log(dist_squared)) 242 | 243 | # expand grid in batch dimension if necessary 244 | points_X_batch = points[:,:,:,0].unsqueeze(3) 245 | points_Y_batch = points[:,:,:,1].unsqueeze(3) 246 | if points_b==1: 247 | points_X_batch = points_X_batch.expand((batch_size,)+points_X_batch.size()[1:]) 248 | points_Y_batch = points_Y_batch.expand((batch_size,)+points_Y_batch.size()[1:]) 249 | 250 | points_X_prime = A_X[:,:,:,:,0]+ \ 251 | torch.mul(A_X[:,:,:,:,1],points_X_batch) + \ 252 | torch.mul(A_X[:,:,:,:,2],points_Y_batch) + \ 253 | torch.sum(torch.mul(W_X,U.expand_as(W_X)),4) 254 | 255 | points_Y_prime = A_Y[:,:,:,:,0]+ \ 256 | torch.mul(A_Y[:,:,:,:,1],points_X_batch) + \ 257 | torch.mul(A_Y[:,:,:,:,2],points_Y_batch) + \ 258 | torch.sum(torch.mul(W_Y,U.expand_as(W_Y)),4) 259 | 260 | return torch.cat((points_X_prime,points_Y_prime),3) 261 | -------------------------------------------------------------------------------- /image/normalization.py: -------------------------------------------------------------------------------- 1 | import torch 2 | from torchvision import transforms 3 | from torch.autograd import Variable 4 | 5 | class NormalizeImageDict(object): 6 | """ 7 | 8 | Normalizes Tensor images in dictionary 9 | 10 | Args: 11 | image_keys (list): dict. keys of the images to be normalized 12 | normalizeRange (bool): if True the image is divided by 255.0s 13 | 14 | """ 15 | 16 | def __init__(self,image_keys,normalizeRange=True): 17 | self.image_keys = image_keys 18 | self.normalizeRange=normalizeRange 19 | self.normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], 20 | std=[0.229, 0.224, 0.225]) 21 | 22 | def __call__(self, sample): 23 | for key in self.image_keys: 24 | if self.normalizeRange: 25 | sample[key] /= 255.0 26 | sample[key] = self.normalize(sample[key]) 27 | return sample 28 | 29 | 30 | def normalize_image(image, forward=True, mean=[0.485, 0.456, 0.406],std=[0.229, 0.224, 0.225]): 31 | im_size = image.size() 32 | mean=torch.FloatTensor(mean).unsqueeze(1).unsqueeze(2) 33 | std=torch.FloatTensor(std).unsqueeze(1).unsqueeze(2) 34 | if image.is_cuda: 35 | mean = mean.cuda() 36 | std = std.cuda() 37 | if isinstance(image,torch.autograd.variable.Variable): 38 | mean = Variable(mean,requires_grad=False) 39 | std = Variable(std,requires_grad=False) 40 | if forward: 41 | if len(im_size)==3: 42 | result = image.sub(mean.expand(im_size)).div(std.expand(im_size)) 43 | elif len(im_size)==4: 44 | result = image.sub(mean.unsqueeze(0).expand(im_size)).div(std.unsqueeze(0).expand(im_size)) 45 | else: 46 | if len(im_size)==3: 47 | result = image.mul(std.expand(im_size)).add(mean.expand(im_size)) 48 | elif len(im_size)==4: 49 | result = image.mul(std.unsqueeze(0).expand(im_size)).add(mean.unsqueeze(0).expand(im_size)) 50 | 51 | return result -------------------------------------------------------------------------------- /model/cnn_geometric_model.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function, division 2 | import torch 3 | import torch.nn as nn 4 | from torch.autograd import Variable 5 | from torch.nn.parameter import Parameter 6 | import torchvision.models as models 7 | from torch.nn import functional as F 8 | from torchvision.models.vgg import model_urls 9 | from torchvision.models.resnet import model_urls as resnet_urls 10 | 11 | class FeatureExtraction(torch.nn.Module): 12 | def __init__(self, use_cuda=True, feature_extraction_cnn='vgg', last_layer=''): 13 | super(FeatureExtraction, self).__init__() 14 | if feature_extraction_cnn == 'vgg': 15 | model_urls['vgg16'] = model_urls['vgg16'].replace('https://', 'http://') 16 | self.model = models.vgg16(pretrained=True) 17 | # keep feature extraction network up to indicated layer 18 | vgg_feature_layers=['conv1_1','relu1_1','conv1_2','relu1_2','pool1','conv2_1', 19 | 'relu2_1','conv2_2','relu2_2','pool2','conv3_1','relu3_1', 20 | 'conv3_2','relu3_2','conv3_3','relu3_3','pool3','conv4_1', 21 | 'relu4_1','conv4_2','relu4_2','conv4_3','relu4_3','pool4', 22 | 'conv5_1','relu5_1','conv5_2','relu5_2','conv5_3','relu5_3','pool5'] 23 | if last_layer=='': 24 | last_layer = 'pool4' 25 | last_layer_idx = vgg_feature_layers.index(last_layer) 26 | self.model = nn.Sequential(*list(self.model.features.children())[:last_layer_idx+1]) 27 | if feature_extraction_cnn == 'resnet101': 28 | resnet_urls['resnet101'] = resnet_urls['resnet101'].replace('https://', 'http://') 29 | self.model = models.resnet101(pretrained=True) 30 | resnet_feature_layers = ['conv1', 31 | 'bn1', 32 | 'relu', 33 | 'maxpool', 34 | 'layer1', 35 | 'layer2', 36 | 'layer3', 37 | 'layer4'] 38 | if last_layer=='': 39 | last_layer = 'layer3' 40 | last_layer_idx = resnet_feature_layers.index(last_layer) 41 | resnet_module_list = [self.model.conv1, 42 | self.model.bn1, 43 | self.model.relu, 44 | self.model.maxpool, 45 | self.model.layer1, 46 | self.model.layer2, 47 | self.model.layer3, 48 | self.model.layer4] 49 | 50 | self.model = nn.Sequential(*resnet_module_list[:last_layer_idx+1]) 51 | # freeze parameters 52 | for param in self.model.parameters(): 53 | param.requires_grad = False 54 | # move to GPU 55 | if use_cuda: 56 | self.model.cuda() 57 | 58 | def forward(self, image_batch): 59 | return self.model(image_batch) 60 | 61 | class FeatureL2Norm(torch.nn.Module): 62 | def __init__(self): 63 | super(FeatureL2Norm, self).__init__() 64 | 65 | def forward(self, feature): 66 | epsilon = 1e-6 67 | # print(feature.size()) 68 | # print(torch.pow(torch.sum(torch.pow(feature,2),1)+epsilon,0.5).size()) 69 | norm = torch.pow(torch.sum(torch.pow(feature,2),1)+epsilon,0.5).unsqueeze(1).expand_as(feature) 70 | return torch.div(feature,norm) 71 | 72 | class FeatureCorrelation(torch.nn.Module): 73 | def __init__(self): 74 | super(FeatureCorrelation, self).__init__() 75 | 76 | def forward(self, feature_A, feature_B): 77 | b,c,h,w = feature_A.size() 78 | # reshape features for matrix multiplication 79 | feature_A = feature_A.transpose(2,3).contiguous().view(b,c,h*w) 80 | feature_B = feature_B.view(b,c,h*w).transpose(1,2) 81 | # perform matrix mult. 82 | feature_mul = torch.bmm(feature_B,feature_A) 83 | correlation_tensor = feature_mul.view(b,h,w,h*w).transpose(2,3).transpose(1,2) 84 | return correlation_tensor 85 | 86 | class CorrelationAlign(nn.Module): 87 | def __init__(self): 88 | super(CorrelationAlign, self).__init__() 89 | 90 | def forward(self, correlation_tensor): 91 | # correlation_tensor: b, h*w, h, w 92 | b, _, h, w = correlation_tensor.size() 93 | 94 | resized_tensor = correlation_tensor.contiguous().view(b, h, w, h, w) 95 | enlarged_h = (2*h-1) 96 | enlarged_w = (2*w-1) 97 | correlation_tensor_ = Variable(torch.zeros(b, enlarged_h, enlarged_w, h, w)).cuda() 98 | for i in range(h): 99 | for j in range(w): 100 | correlation_tensor_[:, enlarged_h-h-i:enlarged_h-i, enlarged_w-w-j:enlarged_w-j, i, j] = resized_tensor[:, :, :, i, j] 101 | 102 | return correlation_tensor_.view(b, -1, h, w) 103 | 104 | class Attention(nn.Module): 105 | def __init__(self, input_dim=128, hidden_dim=32): 106 | super(Attention, self).__init__() 107 | self.att = nn.Sequential( 108 | nn.Conv2d(input_dim, hidden_dim, kernel_size=1, padding=0), 109 | nn.BatchNorm2d(hidden_dim), 110 | nn.ReLU(inplace=True), 111 | nn.Conv2d(hidden_dim, 1, kernel_size=1, padding=0) 112 | ) 113 | self.att.cuda() 114 | 115 | def forward(self, score_feat, merge_feat): 116 | b, c, h, w = score_feat.size() 117 | att = self.att(score_feat) 118 | att = F.softmax(att.view(-1, h*w), 1).view(-1, 1, h, w).expand_as(merge_feat) 119 | output = att * merge_feat 120 | output = output.sum(3).sum(2) 121 | return output 122 | 123 | 124 | class FeatureRegression(nn.Module): 125 | def __init__(self, output_dim=6, use_cuda=True): 126 | super(FeatureRegression, self).__init__() 127 | self.align = CorrelationAlign() 128 | self.preconv = nn.Sequential( 129 | nn.Conv2d(841, 128, kernel_size=1, padding=0), 130 | nn.BatchNorm2d(128), 131 | nn.ReLU(inplace=True), 132 | nn.Conv2d(128, 128, kernel_size=7, padding=0), 133 | nn.BatchNorm2d(128), 134 | nn.ReLU(inplace=True), 135 | ) 136 | self.conv = nn.Sequential( 137 | nn.Conv2d(128+5, 128, kernel_size=1, padding=0), 138 | nn.BatchNorm2d(128), 139 | nn.ReLU(inplace=True), 140 | ) 141 | self.proj = nn.Sequential( 142 | nn.Conv2d(128, 128, kernel_size=1, padding=0), 143 | nn.BatchNorm2d(128), 144 | nn.ReLU(inplace=True), 145 | ) 146 | self.linear = nn.Linear(128, output_dim) 147 | self.att = Attention(128, 64) 148 | self.weight = Parameter(torch.ones(1, 5, 9, 9)) 149 | self.weight.data.uniform_(-1, 1) 150 | if use_cuda: 151 | self.preconv.cuda() 152 | self.conv.cuda() 153 | self.cuda() 154 | self.linear.cuda() 155 | 156 | def forward(self, x): 157 | x = self.align(x) 158 | x = self.preconv(x) 159 | x_ = x 160 | x = torch.cat((self.weight.expand(x.size(0), 5, 9, 9), x), 1) 161 | x = self.conv(x) 162 | x = self.att(x_, self.proj(x)) 163 | x = self.linear(x) 164 | return x 165 | 166 | 167 | class CNNGeometric(nn.Module): 168 | def __init__(self, geometric_model='affine', normalize_features=True, normalize_matches=True, batch_normalization=True, use_cuda=True, feature_extraction_cnn='vgg'): 169 | super(CNNGeometric, self).__init__() 170 | self.use_cuda = use_cuda 171 | self.normalize_features = normalize_features 172 | self.normalize_matches = normalize_matches 173 | self.FeatureExtraction = FeatureExtraction(use_cuda=self.use_cuda, feature_extraction_cnn=feature_extraction_cnn) 174 | self.FeatureL2Norm = FeatureL2Norm() 175 | self.FeatureCorrelation = FeatureCorrelation() 176 | if geometric_model=='affine': 177 | output_dim = 6 178 | elif geometric_model=='tps': 179 | output_dim = 18 180 | self.FeatureRegression = FeatureRegression(output_dim,use_cuda=self.use_cuda) 181 | self.ReLU = nn.ReLU(inplace=True) 182 | 183 | def forward(self, tnf_batch): 184 | # do feature extraction 185 | feature_A = self.FeatureExtraction(tnf_batch['source_image']) 186 | feature_B = self.FeatureExtraction(tnf_batch['target_image']) 187 | # normalize 188 | if self.normalize_features: 189 | feature_A = self.FeatureL2Norm(feature_A) 190 | feature_B = self.FeatureL2Norm(feature_B) 191 | # do feature correlation 192 | correlation = self.FeatureCorrelation(feature_A,feature_B) 193 | # normalize 194 | if self.normalize_matches: 195 | correlation = self.FeatureL2Norm(self.ReLU(correlation)) 196 | # correlation = self.FeatureL2Norm(correlation) 197 | # do regression to tnf parameters theta 198 | theta = self.FeatureRegression(correlation) 199 | 200 | return theta 201 | -------------------------------------------------------------------------------- /model/loss.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function, division 2 | import numpy as np 3 | import torch 4 | import torch.nn as nn 5 | from torch.autograd import Variable 6 | from geotnf.point_tnf import PointTnf 7 | 8 | class TransformedGridLoss(nn.Module): 9 | def __init__(self, geometric_model='affine', use_cuda=True, grid_size=20): 10 | super(TransformedGridLoss, self).__init__() 11 | self.geometric_model = geometric_model 12 | # define virtual grid of points to be transformed 13 | axis_coords = np.linspace(-1,1,grid_size) 14 | self.N = grid_size*grid_size 15 | X,Y = np.meshgrid(axis_coords,axis_coords) 16 | X = np.reshape(X,(1,1,self.N)) 17 | Y = np.reshape(Y,(1,1,self.N)) 18 | P = np.concatenate((X,Y),1) 19 | self.P = Variable(torch.FloatTensor(P),requires_grad=False) 20 | self.pointTnf = PointTnf(use_cuda) 21 | if use_cuda: 22 | self.P = self.P.cuda(); 23 | 24 | def forward(self, theta, theta_GT): 25 | # expand grid according to batch size 26 | batch_size = theta.size()[0] 27 | P = self.P.expand(batch_size,2,self.N) 28 | # compute transformed grid points using estimated and GT tnfs 29 | if self.geometric_model=='affine': 30 | P_prime = self.pointTnf.affPointTnf(theta,P) 31 | P_prime_GT = self.pointTnf.affPointTnf(theta_GT,P) 32 | elif self.geometric_model=='tps': 33 | P_prime = self.pointTnf.tpsPointTnf(theta.unsqueeze(2).unsqueeze(3),P) 34 | P_prime_GT = self.pointTnf.tpsPointTnf(theta_GT,P) 35 | # compute MSE loss on transformed grid points 36 | loss = torch.sum(torch.pow(P_prime - P_prime_GT,2),1) 37 | loss = torch.mean(loss) 38 | return loss -------------------------------------------------------------------------------- /script.sh: -------------------------------------------------------------------------------- 1 | # VGG16 + affine transformation 2 | # python train.py --lr 0.0002 --num-epochs 50 --batch-size 32 --geometric-model affine --feature-extraction-cnn vgg --random-sample True 3 | 4 | # VGG16 + tps transformation 5 | # python train.py --lr 0.0002 --num-epochs 50 --batch-size 32 --geometric-model affine --feature-extraction-cnn vgg --random-sample True 6 | 7 | # Resnet101 + affine transformation 8 | python train.py --lr 0.0002 --num-epochs 50 --batch-size 32 --geometric-model affine --feature-extraction-cnn resnet101 --random-sample True 9 | 10 | # Resnet101 + tps transformation 11 | python train.py --lr 0.0002 --num-epochs 50 --batch-size 32 --geometric-model tps --feature-extraction-cnn resnet101 --random-sample True 12 | -------------------------------------------------------------------------------- /train.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function, division 2 | import argparse 3 | import os 4 | from os.path import exists, join, basename 5 | import torch 6 | import torch.nn as nn 7 | import torch.optim as optim 8 | from torch.utils.data import Dataset, DataLoader 9 | from model.cnn_geometric_model import CNNGeometric 10 | from model.loss import TransformedGridLoss 11 | from data.synth_dataset import SynthDataset 12 | from data.download_datasets import download_pascal 13 | from geotnf.transformation import SynthPairTnf 14 | from image.normalization import NormalizeImageDict 15 | from util.train_test_fn import train, test 16 | from util.torch_util import save_checkpoint, str_to_bool 17 | 18 | """ 19 | 20 | Script to train the model as presented in the CNNGeometric CVPR'17 paper 21 | using synthetically warped image pairs and strong supervision 22 | 23 | """ 24 | 25 | print('CNNGeometric training script') 26 | 27 | # Argument parsing 28 | parser = argparse.ArgumentParser(description='CNNGeometric PyTorch implementation') 29 | # Paths 30 | parser.add_argument('--training-dataset', type=str, default='pascal', help='dataset to use for training') 31 | parser.add_argument('--training-tnf-csv', type=str, default='', help='path to training transformation csv folder') 32 | parser.add_argument('--training-image-path', type=str, default='', help='path to folder containing training images') 33 | parser.add_argument('--trained-models-dir', type=str, default='trained_models', help='path to trained models folder') 34 | parser.add_argument('--trained-models-fn', type=str, default='checkpoint_adam', help='trained model filename') 35 | # Optimization parameters 36 | parser.add_argument('--lr', type=float, default=0.001, help='learning rate') 37 | parser.add_argument('--momentum', type=float, default=0.9, help='momentum constant') 38 | parser.add_argument('--num-epochs', type=int, default=10, help='number of training epochs') 39 | parser.add_argument('--batch-size', type=int, default=16, help='training batch size') 40 | parser.add_argument('--weight-decay', type=float, default=0, help='weight decay constant') 41 | parser.add_argument('--seed', type=int, default=1, help='Pseudo-RNG seed') 42 | # Model parameters 43 | parser.add_argument('--geometric-model', type=str, default='affine', help='geometric model to be regressed at output: affine or tps') 44 | parser.add_argument('--use-mse-loss', type=str_to_bool, nargs='?', const=True, default=False, help='Use MSE loss on tnf. parameters') 45 | parser.add_argument('--feature-extraction-cnn', type=str, default='vgg', help='Feature extraction architecture: vgg/resnet101') 46 | # Synthetic dataset parameters 47 | parser.add_argument('--random-sample', type=str_to_bool, nargs='?', const=True, default=False, help='sample random transformations') 48 | 49 | args = parser.parse_args() 50 | 51 | use_cuda = torch.cuda.is_available() 52 | 53 | # Seed 54 | torch.manual_seed(args.seed) 55 | if use_cuda: 56 | torch.cuda.manual_seed(args.seed) 57 | 58 | # Download dataset if needed and set paths 59 | if args.training_dataset == 'pascal': 60 | if args.training_image_path == '': 61 | download_pascal('datasets/pascal-voc11/') 62 | args.training_image_path = 'datasets/pascal-voc11/' 63 | if args.training_tnf_csv == '' and args.geometric_model=='affine': 64 | args.training_tnf_csv = 'training_data/pascal-synth-aff' 65 | elif args.training_tnf_csv == '' and args.geometric_model=='tps': 66 | args.training_tnf_csv = 'training_data/pascal-synth-tps' 67 | 68 | # CNN model and loss 69 | print('Creating CNN model...') 70 | 71 | model = CNNGeometric(use_cuda=use_cuda,geometric_model=args.geometric_model,feature_extraction_cnn=args.feature_extraction_cnn) 72 | 73 | if args.use_mse_loss: 74 | print('Using MSE loss...') 75 | loss = nn.MSELoss() 76 | else: 77 | print('Using grid loss...') 78 | loss = TransformedGridLoss(use_cuda=use_cuda,geometric_model=args.geometric_model) 79 | 80 | 81 | # Dataset and dataloader 82 | dataset = SynthDataset(geometric_model=args.geometric_model, 83 | csv_file=os.path.join(args.training_tnf_csv,'train.csv'), 84 | training_image_path=args.training_image_path, 85 | transform=NormalizeImageDict(['image']), 86 | random_sample=args.random_sample) 87 | 88 | dataloader = DataLoader(dataset, batch_size=args.batch_size, 89 | shuffle=True, num_workers=4) 90 | 91 | dataset_test = SynthDataset(geometric_model=args.geometric_model, 92 | csv_file=os.path.join(args.training_tnf_csv,'test.csv'), 93 | training_image_path=args.training_image_path, 94 | transform=NormalizeImageDict(['image']), 95 | random_sample=args.random_sample) 96 | 97 | dataloader_test = DataLoader(dataset_test, batch_size=args.batch_size, 98 | shuffle=True, num_workers=4) 99 | 100 | 101 | pair_generation_tnf = SynthPairTnf(geometric_model=args.geometric_model,use_cuda=use_cuda) 102 | 103 | # Optimizer 104 | optimizer = optim.Adam(model.FeatureRegression.parameters(), lr=args.lr) 105 | 106 | # Train 107 | if args.use_mse_loss: 108 | checkpoint_name = os.path.join(args.trained_models_dir, 109 | args.trained_models_fn + '_' + args.geometric_model + '_mse_loss' + args.feature_extraction_cnn + '.pth.tar') 110 | else: 111 | checkpoint_name = os.path.join(args.trained_models_dir, 112 | args.trained_models_fn + '_' + args.geometric_model + '_grid_loss' + args.feature_extraction_cnn + '.pth.tar') 113 | 114 | best_test_loss = float("inf") 115 | 116 | print('Starting training...') 117 | 118 | for epoch in range(1, args.num_epochs+1): 119 | train_loss = train(epoch,model,loss,optimizer,dataloader,pair_generation_tnf,log_interval=100) 120 | test_loss = test(model,loss,dataloader_test,pair_generation_tnf) 121 | 122 | # remember best loss 123 | is_best = test_loss < best_test_loss 124 | best_test_loss = min(test_loss, best_test_loss) 125 | save_checkpoint({ 126 | 'epoch': epoch + 1, 127 | 'args': args, 128 | 'state_dict': model.state_dict(), 129 | 'best_test_loss': best_test_loss, 130 | 'optimizer' : optimizer.state_dict(), 131 | }, is_best,checkpoint_name) 132 | 133 | print('Done!') 134 | -------------------------------------------------------------------------------- /training_data/pascal-synth-aff/test.csv: -------------------------------------------------------------------------------- 1 | image_name,A22,A21,A12,A11,ty,tx 2 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_000875.jpg,0.983088850975037,-0.0569774247705936,0.0563918761909008,0.901071429252625,0.135289877653122,0.17673371732235 3 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_005629.jpg,1.1003874540329,0.0434424616396427,-0.115175567567348,0.974716603755951,0.011056580580771,0.0601202510297298 4 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_002880.jpg,1.13707554340363,-0.177438750863075,0.354765623807907,1.06848633289337,-0.245668411254883,-0.0445077829062939 5 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_005061.jpg,0.848914861679077,0.0733482614159584,-0.0733778700232506,0.849372208118439,0.227803871035576,-0.223757863044739 6 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_003076.jpg,0.933379292488098,-0.184461742639542,0.16427156329155,0.908963203430176,-0.0126362564042211,-0.024585647508502 7 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_005790.jpg,0.849158227443695,0.114513397216797,-0.102126121520996,0.855536818504333,-0.18224610388279,-0.189814060926437 8 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_001569.jpg,0.892404496669769,0.147637009620667,-0.00916415173560381,1.1195285320282,-0.187728583812714,0.0539878308773041 9 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_003669.jpg,1.00538372993469,-0.222582310438156,0.271207958459854,1.11313199996948,-0.0182160697877407,0.18032568693161 10 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_002251.jpg,0.994852423667908,-0.0252444911748171,-0.00688969483599067,0.975424826145172,0.0544533878564835,-0.0948511138558388 11 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_004020.jpg,1.03811705112457,0.158427864313126,-0.2120021879673,1.12808227539062,-0.23548898100853,-0.205171391367912 12 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_004255.jpg,0.820667505264282,-0.0918512567877769,0.240908026695251,1.19238376617432,-0.0975300744175911,-0.19695770740509 13 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_000364.jpg,1.1616827249527,0.20891572535038,-0.20883621275425,0.867659449577332,0.0138717275112867,0.115045718848705 14 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_004045.jpg,0.788525879383087,0.0590180121362209,-0.0564388819038868,0.912944257259369,0.239477768540382,-0.223309740424156 15 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_000771.jpg,0.86479252576828,0.11113266646862,-0.0951395630836487,0.936181485652924,0.00328772468492389,-0.00741483410820365 16 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_004956.jpg,0.757506847381592,-0.0565936714410782,0.0265012942254543,0.775503814220428,0.186052829027176,-0.24472975730896 17 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_001756.jpg,1.14434993267059,0.24099175632,-0.0332125797867775,0.961497843265533,-0.134456962347031,-0.0725088864564896 18 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2007_009592.jpg,1.08650779724121,0.306761711835861,-0.247108638286591,1.13472843170166,-0.156334206461906,-0.23922735452652 19 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_003491.jpg,1.04246389865875,0.043031357228756,0.297528564929962,0.891693294048309,-0.00789802148938179,-0.0376552976667881 20 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_001081.jpg,0.795776069164276,-0.290463358163834,0.120738469064236,0.989846348762512,0.164249017834663,-0.22162401676178 21 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_001254.jpg,0.817003905773163,-0.090695321559906,0.0960581824183464,0.825686752796173,0.0319807082414627,0.148914009332657 22 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_003971.jpg,0.837655365467072,-0.183749437332153,0.190506085753441,0.856325328350067,0.0911492928862572,0.145537495613098 23 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_000430.jpg,0.919875144958496,0.133208706974983,-0.216806083917618,0.822538793087006,-0.122439801692963,-0.051618792116642 24 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_002086.jpg,1.04755997657776,0.0520889982581139,0.049521192908287,1.18332183361053,-0.124458745121956,0.107137225568295 25 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_002653.jpg,1.05503880977631,-0.297847360372543,0.22461998462677,0.967819392681122,0.246599867939949,0.114156171679497 26 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_007226.jpg,0.886359870433807,-0.0860157012939453,-0.216420099139214,1.16885828971863,-0.129480764269829,-0.117489747703075 27 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_000827.jpg,0.867977499961853,-0.319210052490234,0.0272191446274519,1.02901458740234,0.0538782104849815,-0.165796488523483 28 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_003637.jpg,0.860538244247437,0.0575075745582581,0.149846866726875,1.17712938785553,0.210942938923836,0.00107300491072237 29 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_002831.jpg,1.16790211200714,0.240000173449516,-0.179268762469292,0.802460908889771,-0.193995386362076,0.0106924967840314 30 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_002947.jpg,1.18898856639862,-0.0254945252090693,-0.0486115962266922,1.06166052818298,-0.187401160597801,0.0767315626144409 31 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_007117.jpg,0.97418338060379,0.251434087753296,-0.236841529607773,0.958445191383362,-0.149874627590179,-0.167755112051964 32 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_007189.jpg,0.876446783542633,0.184874817728996,-0.0760434195399284,1.07542741298676,0.086101621389389,-0.00716470368206501 33 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_004758.jpg,0.923077166080475,-0.213580772280693,0.161388128995895,0.850914716720581,-0.109486743807793,0.209835425019264 34 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_003030.jpg,1.07776689529419,0.281318515539169,-0.286749601364136,1.06903636455536,0.0257767885923386,-0.0297873839735985 35 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_005909.jpg,1.08287346363068,-0.246400371193886,0.307039141654968,1.14632630348206,-0.176671832799911,-0.0261292401701212 36 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_000797.jpg,1.04535067081451,0.132190138101578,-0.101212583482265,0.967430651187897,0.188829198479652,0.238461852073669 37 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_002099.jpg,0.791325092315674,0.0981267243623734,-0.0468783304095268,0.823778867721558,-0.156124413013458,-0.240295082330704 38 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_001167.jpg,1.18113398551941,-0.0553448162972927,-0.218797206878662,0.792251229286194,-0.148587226867676,-0.0950867831707001 39 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_005592.jpg,0.790835857391357,0.0778876394033432,-0.0956871956586838,0.766524255275726,0.117124259471893,0.198007583618164 40 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_003631.jpg,1.0178347826004,-0.0269982703030109,0.0420347824692726,0.9983229637146,0.117102861404419,-0.131873250007629 41 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_004720.jpg,0.939388811588287,0.0945051833987236,-0.104049779474735,0.91751104593277,-0.0689553171396255,-0.197640120983124 42 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_002816.jpg,0.761857032775879,-0.234698444604874,0.112458020448685,0.875837981700897,0.165610611438751,0.192852318286896 43 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_001089.jpg,0.843214273452759,-0.122536085546017,0.119969889521599,0.864560544490814,0.00289573310874403,-0.144620776176453 44 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_004922.jpg,1.19431459903717,-0.2430579662323,0.216908738017082,1.05882799625397,-0.0809039771556854,-0.132188513875008 45 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_007214.jpg,1.20930600166321,-0.0159915462136269,0.0151477931067348,1.14721024036407,0.159277901053429,0.0598072372376919 46 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_001074.jpg,0.991208612918854,-0.122438929975033,0.14253357052803,0.962837755680084,-0.224091172218323,-0.027751050889492 47 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_002163.jpg,1.0290048122406,0.144303813576698,-0.235369712114334,0.946434497833252,-0.119963839650154,-0.0563384592533112 48 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_004497.jpg,1.14805948734283,0.235774040222168,-0.211633130908012,0.862624228000641,0.178465932607651,0.15315668284893 49 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_004559.jpg,0.909681737422943,0.00537770055234432,-0.00664194812998176,0.900595307350159,-0.157484337687492,0.108569465577602 50 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_000519.jpg,0.794721186161041,-0.189947813749313,0.215384900569916,1.11370575428009,0.162560328841209,-0.0784446075558662 51 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_001642.jpg,0.918670892715454,0.211690455675125,-0.151129886507988,0.735535800457001,0.0344827473163605,0.135376140475273 52 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_002750.jpg,1.09508574008942,0.34281262755394,-0.14985166490078,0.802903771400452,0.207591682672501,-0.211439281702042 53 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_000789.jpg,1.12055170536041,-0.168892100453377,0.209759086370468,0.943553864955902,0.0422778688371181,-0.0184005573391914 54 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_001592.jpg,1.12164092063904,0.308444917201996,-0.0454992912709713,0.87676727771759,-0.165306985378265,-0.198320776224136 55 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_001479.jpg,1.05000829696655,0.0778478011488914,-0.0873286053538322,0.885353922843933,0.0278609935194254,-0.103845357894897 56 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_002605.jpg,1.1437463760376,-0.155851572751999,0.336440980434418,1.06975364685059,-0.0269869863986969,0.216906189918518 57 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_008466.jpg,1.20491099357605,-0.114124663174152,0.233164668083191,1.03988897800446,0.0841598957777023,0.0727696120738983 58 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_000521.jpg,1.12172591686249,-0.199264571070671,0.0514658316969872,0.949612200260162,0.132062867283821,0.0372911170125008 59 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_004011.jpg,0.914217889308929,-0.151778444647789,0.207276806235313,1.18311238288879,-0.0698935687541962,-0.215704381465912 60 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_003203.jpg,1.15718817710876,0.189670383930206,-0.143658846616745,1.1196756362915,-0.0665624812245369,-0.128856003284454 61 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_000956.jpg,1.13555312156677,0.167071327567101,0.0202643014490604,0.792267143726349,0.111686855554581,-0.200899556279182 62 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_000304.jpg,1.00396859645844,0.18723475933075,-0.146262481808662,0.889869451522827,0.0919518694281578,-0.164045557379723 63 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_001514.jpg,0.96860682964325,-0.000866514281369746,0.0377244539558887,0.94227409362793,-0.0596405193209648,0.131079599261284 64 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_001128.jpg,1.04175078868866,-0.00599321955814958,-0.0293457098305225,0.977681338787079,-0.196039333939552,-0.188818395137787 65 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_006129.jpg,1.102046251297,-0.14568005502224,0.0746457204222679,0.972164869308472,0.0827155262231827,-0.0237974040210247 66 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_003937.jpg,0.837135493755341,0.0612585842609406,-0.000668296124786139,0.955906629562378,0.0870019271969795,0.0872392505407333 67 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_000955.jpg,0.954566717147827,0.0747705325484276,-0.125801563262939,0.766541600227356,0.191239297389984,0.119179263710976 68 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_003402.jpg,0.799290299415588,0.00201145466417074,0.118145175278187,1.09281587600708,0.0361788980662823,0.0730496644973755 69 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_001305.jpg,1.10213959217072,0.0276539698243141,-0.413075000047684,0.841071426868439,0.158790022134781,0.0364041551947594 70 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_000806.jpg,0.985740423202515,0.27455461025238,0.0350456796586514,1.12546169757843,-0.157337352633476,0.0740080550312996 71 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_007923.jpg,0.868979692459106,-0.0508534088730812,-0.00528966309502721,0.932267725467682,0.0756952241063118,-0.100711792707443 72 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_002970.jpg,1.12895023822784,-0.0101828370243311,0.161005929112434,0.805015206336975,-0.164454951882362,0.0432175844907761 73 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_005952.jpg,1.11011755466461,-0.040271170437336,0.0414640568196774,1.10782384872437,-0.200531795620918,0.129463836550713 74 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_005696.jpg,0.913215696811676,0.0326854027807713,-0.0718834027647972,1.07017278671265,0.0601579137146473,0.0566767007112503 75 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_006856.jpg,1.16602885723114,-0.0345883667469025,0.2164246737957,0.830146968364716,0.0606011562049389,0.12453443557024 76 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_003679.jpg,0.843339741230011,0.014938035979867,-0.152854055166245,1.08274626731873,-0.235415071249008,-0.228079676628113 77 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_007855.jpg,1.13625752925873,-0.12877032160759,0.197942495346069,1.00131630897522,-0.202218174934387,-0.117994286119938 78 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_007424.jpg,1.13056206703186,0.252388685941696,-0.258009880781174,1.04858767986298,-0.0698508471250534,0.195703029632568 79 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_003146.jpg,1.11936461925507,-0.0370494946837425,0.0450442358851433,1.16910934448242,0.099248468875885,-0.229355618357658 80 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_006989.jpg,0.915022611618042,-0.0841136947274208,0.0865685418248177,0.809961020946503,0.104563601315022,-0.138207510113716 81 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_000461.jpg,1.15378272533417,-0.275178790092468,0.0877659246325493,0.963639736175537,-0.00480687571689487,0.034608393907547 82 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_004446.jpg,0.940147519111633,-0.0975330173969269,0.198146566748619,1.039635181427,-0.0301467906683683,0.0155337583273649 83 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_000328.jpg,0.909592688083649,-0.124643296003342,0.133529499173164,0.878867745399475,0.126136183738708,-0.113782159984112 84 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_007766.jpg,0.83649605512619,-0.0450786240398884,0.0664753839373589,0.768770515918732,-0.0534942112863064,0.133002698421478 85 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_000344.jpg,0.986788332462311,0.236606314778328,-0.205104991793633,0.932222127914429,0.161749944090843,-0.0415508933365345 86 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_000293.jpg,0.806333482265472,0.0242497678846121,0.149553090333939,0.944712936878204,0.140155330300331,0.196688681840897 87 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_001712.jpg,0.968128144741058,-0.178802073001862,0.159908547997475,0.754725873470306,-0.0719762071967125,-0.00804320257157087 88 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_000117.jpg,0.873148083686829,-0.256943583488464,0.220346257090569,0.922501444816589,0.141191214323044,-0.103163003921509 89 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_002604.jpg,1.01000118255615,-0.0696282535791397,0.0812338963150978,1.0628559589386,0.152293056249619,-0.10511664301157 90 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_003249.jpg,0.923200309276581,0.212632164359093,-0.189407154917717,0.775604009628296,0.128809079527855,-0.0181192923337221 91 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_004723.jpg,1.12063658237457,0.0493544787168503,0.0121041741222143,1.15741741657257,0.21676667034626,-0.247894912958145 92 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_002193.jpg,1.1264660358429,-0.0800458714365959,-0.0848851352930069,0.973525285720825,0.135815098881721,-0.137379705905914 93 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_004448.jpg,0.97762393951416,0.0584061071276665,-0.248892143368721,1.13547015190125,0.0533739402890205,-0.215338572859764 94 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_001926.jpg,0.845718741416931,-0.260857790708542,0.0278665963560343,1.15564405918121,0.151224672794342,0.213834747672081 95 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_002436.jpg,1.05798959732056,0.0707674399018288,0.00740164844319224,1.20567917823792,0.104081824421883,0.0712731331586838 96 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_003134.jpg,1.20631313323975,-0.099524512887001,-0.045186884701252,0.989310383796692,0.0276420619338751,-0.0733823850750923 97 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_000498.jpg,0.951866209506989,-0.0562002882361412,0.0370801985263824,1.03872859477997,0.237142473459244,-0.0240435972809792 98 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_004243.jpg,1.1443305015564,0.0725867375731468,0.0236030425876379,0.857454180717468,-0.2347212433815,-0.140569940209389 99 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_000698.jpg,0.793920993804932,-0.278036028146744,0.213486686348915,1.05295538902283,-0.028484120965004,-0.194590881466866 100 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_006424.jpg,0.799506723880768,0.182304292917252,-0.132676616311073,0.904996573925018,0.00463337684050202,-0.0146595407277346 101 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_002751.jpg,0.99460381269455,-0.124098628759384,0.0424409732222557,0.866998016834259,0.132243916392326,-0.125883907079697 102 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_002938.jpg,1.05401456356049,-0.0141484942287207,0.00986652541905642,1.08672034740448,0.0938663184642792,-0.106044709682465 103 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_006972.jpg,1.14243102073669,-0.0403419956564903,0.035845935344696,1.14836978912354,0.184137001633644,0.0728299468755722 104 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_000310.jpg,0.897712588310242,0.135009959340096,-0.0163365714251995,1.10146844387054,0.127915933728218,0.246544718742371 105 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_004716.jpg,1.06685209274292,-0.0315077379345894,-0.0389699749648571,0.963565170764923,-0.150940030813217,0.175237312912941 106 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2007_003682.jpg,1.10202181339264,0.243888199329376,-0.00490949768573046,0.895307421684265,0.0492641143500805,0.0535903349518776 107 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_005079.jpg,0.919940114021301,0.0910414159297943,-0.0911770164966583,0.910250663757324,0.0971512272953987,0.246985867619514 108 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_002565.jpg,1.0134379863739,-0.153955712914467,0.0999994426965714,0.909492254257202,-0.219364851713181,-0.0203963480889797 109 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_006585.jpg,0.87177699804306,-0.246695771813393,0.158995106816292,0.920922458171844,-0.198037073016167,0.19796347618103 110 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_001096.jpg,0.850185096263885,0.295301795005798,-0.0210530236363411,0.974806785583496,-0.241562590003014,0.0242923907935619 111 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_007097.jpg,0.890282273292542,0.145393922924995,0.0281321052461863,1.19708955287933,-0.0964666232466698,-0.0286006908863783 112 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_006808.jpg,1.0646026134491,-0.219538494944572,0.0906943306326866,0.834161996841431,0.159147560596466,0.0612798631191254 113 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_002573.jpg,1.04672455787659,0.0725751146674156,-0.39022222161293,0.929704189300537,-0.0675647556781769,-0.0917156264185905 114 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_002261.jpg,1.05038821697235,-0.0576572120189667,-0.0118750464171171,1.17850184440613,0.0618396252393723,-0.0343876928091049 115 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_002662.jpg,0.852184891700745,-0.294210463762283,0.0334191657602787,1.15960645675659,0.0533614419400692,-0.0841335505247116 116 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_001839.jpg,0.9227694272995,0.0911687240004539,0.00454416172578931,1.195969581604,-0.0845316722989082,-0.0570095740258694 117 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2007_004476.jpg,0.815248191356659,-0.105068795382977,0.139686703681946,0.766539514064789,0.028502780944109,-0.0222337394952774 118 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_000378.jpg,1.06370687484741,0.0334894247353077,-0.0166082512587309,1.09301328659058,0.0262548457831144,-0.212163835763931 119 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_001498.jpg,1.07400071620941,-0.0394439771771431,0.2183618247509,0.77672153711319,0.23119942843914,0.127397075295448 120 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_001678.jpg,0.818456888198853,-0.193060949444771,0.19484631717205,0.816993296146393,0.188069015741348,0.121907763183117 121 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_002269.jpg,0.912917733192444,-0.127154484391212,0.13635678589344,1.23683393001556,-0.0552161000669003,-0.0919943451881409 122 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_000341.jpg,1.19281578063965,-0.253202646970749,0.253354609012604,1.19258737564087,0.0323411673307419,0.0416139140725136 123 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_002645.jpg,0.851899385452271,-0.154285117983818,0.259052366018295,0.796953976154327,0.0248771067708731,0.0905709341168404 124 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_003613.jpg,1.15622222423553,-0.140720292925835,0.167467564344406,0.906427800655365,0.101702012121677,0.204745873808861 125 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_006305.jpg,1.06809937953949,-0.167221561074257,0.172314569354057,1.10460090637207,-0.195708230137825,-0.0896128565073013 126 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_001919.jpg,0.976411759853363,-0.0252124816179276,-0.175061583518982,0.816249966621399,0.199928984045982,-0.173540100455284 127 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_003667.jpg,0.832081317901611,-0.330601364374161,0.100826509296894,0.99844628572464,-0.214710980653763,-0.0545877479016781 128 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_004596.jpg,0.800751566886902,0.318886756896973,0.0069676348939538,1.16319096088409,-0.126627847552299,-0.221602484583855 129 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_004730.jpg,0.968106508255005,-0.0625962466001511,0.118496619164944,0.887266218662262,0.147096559405327,0.177805244922638 130 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_001770.jpg,0.912829875946045,0.197498351335526,-0.200737208127975,0.890885770320892,0.0955037027597427,-0.0407350994646549 131 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_004058.jpg,0.843271434307098,-0.157975643873215,-0.101118840277195,0.992982804775238,0.038002036511898,-0.0622227601706982 132 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_001671.jpg,0.851229310035706,-0.106458641588688,0.0967338979244232,0.865662217140198,0.0905422568321228,0.23103703558445 133 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_001757.jpg,1.12464249134064,-0.119769245386124,0.292244166135788,0.817800104618073,0.0464135184884071,0.213098704814911 134 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_005118.jpg,1.12848508358002,-0.0714081227779388,0.0301875323057175,0.997370779514313,0.246428489685059,0.106276765465736 135 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_007949.jpg,1.05587911605835,-0.206422820687294,0.163543969392776,1.12384927272797,-0.107518121600151,-0.191206157207489 136 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_006017.jpg,0.959761679172516,-0.173188671469688,0.169498324394226,1.16601848602295,0.142873048782349,-0.119116611778736 137 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_001169.jpg,1.20396888256073,-0.134863808751106,0.0949162021279335,1.11979901790619,0.00216967612504959,-0.137980908155441 138 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_004046.jpg,0.897700905799866,0.178132861852646,-0.0694389045238495,1.09232449531555,-0.106966890394688,-0.0811400637030602 139 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_004781.jpg,0.968445539474487,0.204725250601768,-0.218323618173599,0.928145170211792,0.236718520522118,-0.129975438117981 140 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_000621.jpg,1.12569940090179,-0.238031014800072,0.142503470182419,1.00487947463989,0.10813482105732,-0.23667049407959 141 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_001188.jpg,0.876218736171722,-0.0959381610155106,0.0552044026553631,1.21181654930115,0.214596539735794,0.207187280058861 142 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_005325.jpg,1.23876678943634,0.00461306842043996,0.062631793320179,1.05326533317566,0.131228491663933,0.0689479261636734 143 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_004759.jpg,1.1281623840332,0.174412861466408,-0.157025277614594,1.15312385559082,0.0751049444079399,0.194875136017799 144 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_001384.jpg,0.896224915981293,-0.191838994622231,0.203200966119766,0.928156018257141,-0.0205416735261679,0.0426204204559326 145 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_002025.jpg,0.858566462993622,-0.20175775885582,0.196508139371872,1.15587449073792,-0.0494292192161083,0.0981018096208572 146 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_005732.jpg,0.954035043716431,0.12945368885994,-0.188716292381287,1.00249207019806,0.132613062858582,0.0500997565686703 147 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_005066.jpg,1.08868885040283,-0.182933881878853,-0.000227777753025293,0.959441959857941,0.136527314782143,0.0243143420666456 148 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_000755.jpg,0.823996186256409,0.118391089141369,-0.112967655062675,0.807224750518799,-0.0194697380065918,-0.0554857887327671 149 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_002444.jpg,1.12257421016693,-0.0781910941004753,0.0712008252739906,1.2343761920929,-0.0974446907639503,0.0307101104408503 150 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_001334.jpg,1.07772302627563,0.0556822158396244,0.0301055107265711,1.12766242027283,0.154163092374802,0.134889468550682 151 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_005158.jpg,0.837335765361786,0.066278912127018,0.0438881367444992,1.03726530075073,-0.176493674516678,0.0296311657875776 152 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_001242.jpg,0.998129308223724,0.0918969735503197,-0.0899725332856178,0.990530967712402,0.239049717783928,0.0898500457406044 153 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_003164.jpg,0.834157466888428,-0.109919406473637,0.0230391044169664,0.943893551826477,0.160041227936745,-0.10538425296545 154 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_003380.jpg,1.16249144077301,-0.0137076936662197,0.0122141847386956,1.15810513496399,0.213773459196091,0.187875300645828 155 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_003540.jpg,0.96209990978241,0.181570559740067,-0.172974810004234,1.11601042747498,-0.12236262857914,0.130197748541832 156 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_004636.jpg,0.922754406929016,0.178351804614067,-0.133195519447327,1.09051263332367,-0.213985905051231,-0.202100768685341 157 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_002236.jpg,1.04758906364441,-0.20249117910862,0.283482313156128,0.964033842086792,0.143665581941605,0.0909387320280075 158 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_002128.jpg,0.800368010997772,0.0299607571214437,-0.00525367306545377,1.13858103752136,-0.0416056737303734,0.0135725373402238 159 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_004198.jpg,1.16728973388672,-0.202961519360542,0.209537953138351,1.12255346775055,0.20746149122715,0.0668731033802032 160 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_005736.jpg,0.875804245471954,0.27084943652153,-0.201974034309387,0.958649456501007,-0.00872758403420448,-0.194304913282394 161 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_002281.jpg,1.20204126834869,0.0544000938534737,-0.0138245048001409,1.16056036949158,-0.174824744462967,-0.0429186820983887 162 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_004067.jpg,1.03828620910645,0.121970780193806,-0.198087111115456,1.12479662895203,-0.0536639057099819,-0.097644180059433 163 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_000628.jpg,1.06010794639587,0.119152188301086,-0.110027641057968,1.1375766992569,0.226966679096222,0.0644282549619675 164 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_003694.jpg,1.04216814041138,-0.299598157405853,0.268626511096954,1.12998712062836,0.219206854701042,-0.0195708572864532 165 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2007_003178.jpg,1.17269027233124,-0.0460148826241493,0.0127786686643958,0.933304190635681,0.157653883099556,0.0413193628191948 166 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_000481.jpg,0.798227727413177,-0.10253182053566,0.0481732524931431,1.04009675979614,-0.0343625359237194,-0.236273244023323 167 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_001870.jpg,0.969539165496826,-0.156903773546219,0.175267994403839,1.049560546875,-0.0512030236423016,0.160581633448601 168 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_000934.jpg,1.03678524494171,-0.14314503967762,0.162714660167694,1.01628017425537,-0.00291965832002461,-0.182297989726067 169 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_004810.jpg,1.10732865333557,-0.245262578129768,0.259813576936722,1.08975636959076,0.201443061232567,0.111030429601669 170 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_004313.jpg,0.979173958301544,0.0381288230419159,-0.0484185703098774,1.04308092594147,-0.153529927134514,0.0827957019209862 171 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_003409.jpg,0.965732395648956,0.0460006520152092,0.191136106848717,0.823530912399292,0.0764621496200562,0.0925625786185265 172 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_004441.jpg,1.09702384471893,-0.0665094181895256,0.0598149038851261,1.08834946155548,0.0522180944681168,0.00529233971610665 173 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_001455.jpg,0.919534921646118,-0.323828637599945,0.109309412539005,1.05705761909485,0.0518918558955193,0.0907755494117737 174 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_004670.jpg,1.12657940387726,-0.0896682143211365,0.404326617717743,0.905157506465912,0.198025658726692,0.0139770340174437 175 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_000050.jpg,0.814083695411682,0.0329318754374981,0.0845645293593407,0.9560187458992,-0.0773105770349503,0.0504289902746677 176 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_001769.jpg,1.17242729663849,-0.00407294323667884,-0.0406290255486965,0.797288656234741,-0.0583310052752495,0.0249804630875587 177 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_008578.jpg,0.773754954338074,0.116843737661839,-0.124076448380947,0.747847974300385,0.070604607462883,-0.235567316412926 178 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_006192.jpg,0.809305369853973,0.201357796788216,-0.198665753006935,1.06957018375397,0.127897545695305,0.111615985631943 179 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_008001.jpg,1.13268804550171,-0.076235294342041,0.120079182088375,1.08672559261322,0.0355415232479572,0.0747937187552452 180 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_003276.jpg,1.0755420923233,0.167441055178642,-0.171038538217545,1.06328880786896,0.199889108538628,0.150209724903107 181 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_002523.jpg,0.938319206237793,-0.0386276394128799,0.0106707606464624,0.981144547462463,-0.0907323583960533,0.000614798103924841 182 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_004272.jpg,0.86452704668045,0.206084176898003,-0.126077130436897,0.934191942214966,0.149114742875099,-0.0171592961996794 183 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_003773.jpg,1.16495442390442,0.157811567187309,-0.0300383139401674,0.967961728572845,0.11279084533453,0.0961971282958984 184 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_004933.jpg,1.11166083812714,-0.0399851575493813,-0.00185595487710088,1.16051471233368,-0.0707755535840988,0.230375453829765 185 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2007_004081.jpg,0.760749220848083,-0.130079716444016,0.143451675772667,0.743508756160736,0.104408860206604,-0.103918507695198 186 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_004552.jpg,1.11665499210358,0.0358235463500023,-0.0720701962709427,1.23085641860962,-0.0603923313319683,0.146536573767662 187 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_003805.jpg,0.866216361522675,0.0489894710481167,-0.106624707579613,0.966229975223541,0.057096254080534,-0.00083853502292186 188 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_005971.jpg,0.837330341339111,-0.127646565437317,0.151058122515678,0.750362157821655,-0.164621725678444,-0.1564951390028 189 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_001609.jpg,1.00679671764374,-0.106330707669258,0.198984876275063,0.822002589702606,-0.065542958676815,0.218260571360588 190 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_003184.jpg,1.11265349388123,-0.0480786077678204,0.141927108168602,0.794758319854736,0.164556786417961,-0.157837942242622 191 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_005976.jpg,0.849288046360016,0.0887267142534256,-0.275029450654984,1.01184749603271,0.243192464113235,0.0855184867978096 192 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_000576.jpg,0.787170648574829,0.185550183057785,-0.18543741106987,0.791335344314575,-0.0763966590166092,-0.0125367697328329 193 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_008354.jpg,1.15342175960541,0.00472622271627188,7.53522617742419e-05,1.09922361373901,-0.0222637336701155,0.0933799743652344 194 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_002967.jpg,1.23138225078583,0.074133537709713,-0.124016627669334,1.13060367107391,-0.0932213962078094,-0.240034714341164 195 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_002416.jpg,1.06691122055054,0.0913843363523483,-0.173077389597893,0.982016146183014,0.168184071779251,0.0779481381177902 196 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_005877.jpg,1.14550280570984,0.298676759004593,-0.28889986872673,1.10873603820801,0.222749724984169,-0.11278872191906 197 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_005364.jpg,0.857287764549255,-0.140563741326332,0.0135372551158071,1.0698150396347,-0.0946267619729042,0.18398705124855 198 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_000980.jpg,0.782869577407837,-0.0986698493361473,0.236841440200806,1.04249656200409,-0.0728053748607635,0.149928167462349 199 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_000930.jpg,0.827620148658752,-0.180529057979584,0.153531804680824,1.10795092582703,0.217695236206055,-0.176183328032494 200 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_005712.jpg,0.999370515346527,0.00325707904994488,0.14006419479847,1.20965397357941,0.0821488797664642,0.237471088767052 201 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_001083.jpg,1.13069295883179,0.01014185231179,-0.0666351020336151,1.23973476886749,-0.0732882246375084,-0.124477565288544 202 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_004025.jpg,0.860592186450958,0.0748628303408623,-0.10522024333477,0.916150033473969,0.00923346728086472,0.116305001080036 203 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_004075.jpg,0.821046948432922,0.124486684799194,-0.368440121412277,1.17116701602936,-0.161303579807281,0.24701415002346 204 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_001071.jpg,0.870886921882629,0.169666096568108,-0.191318616271019,0.839288711547852,0.0691055133938789,-0.233287498354912 205 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_003762.jpg,0.821204006671906,0.201292276382446,0.0547087751328945,1.04051160812378,0.1420858502388,-0.231054916977882 206 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_003148.jpg,1.02361738681793,-0.0563458614051342,0.291024655103683,0.836868047714233,-0.12184676527977,0.00277127954177558 207 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_001367.jpg,0.800279378890991,0.0649064555764198,-0.0846730619668961,0.85090845823288,-0.0776072070002556,0.0248933210968971 208 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_003265.jpg,0.800357401371002,0.0152938170358539,-0.255183815956116,1.19057309627533,0.0853224918246269,0.0470362678170204 209 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_004450.jpg,1.11617231369019,-0.0657721608877182,0.12004928290844,0.880679190158844,0.0543041564524174,-0.0426594465970993 210 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_002004.jpg,1.08076441287994,0.0509880073368549,-0.355649769306183,0.961235642433167,-0.239061698317528,-0.0972471088171005 211 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_002350.jpg,0.768496990203857,0.265483349561691,-0.164937615394592,1.13751697540283,0.0900610387325287,-0.0850543305277824 212 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_002158.jpg,1.14129710197449,-0.11626385897398,0.134928897023201,1.16205954551697,-0.177276521921158,-0.0142255211248994 213 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_008455.jpg,1.23322665691376,0.114657282829285,-0.0554265864193439,1.0756973028183,-0.0425445921719074,-0.209328964352608 214 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_002772.jpg,1.07396590709686,0.0848751068115234,-0.0652830898761749,1.10497522354126,0.218539699912071,-0.060969814658165 215 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_003373.jpg,1.13088142871857,0.0238632149994373,0.0755206048488617,1.00362396240234,-0.0423415564000607,-0.0548623912036419 216 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_008297.jpg,0.953229427337646,0.00278977025300264,-0.181983515620232,1.19984459877014,-0.0430051200091839,0.15607587993145 217 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_002498.jpg,1.16427516937256,-0.296566605567932,0.297618746757507,1.15442073345184,-0.05397579818964,0.149911850690842 218 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_004157.jpg,0.862566113471985,-0.243599310517311,-0.122308388352394,1.15294325351715,0.163604840636253,0.218352288007736 219 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_001810.jpg,1.0399421453476,-0.143864303827286,0.147686138749123,1.03323376178741,-0.231400400400162,-0.132377550005913 220 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_000940.jpg,0.988433480262756,-0.10584756731987,0.00158618611749262,1.10606420040131,-0.194321602582932,-0.140192195773125 221 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_003411.jpg,0.844610214233398,-0.127940773963928,0.306818425655365,1.14663791656494,-0.142986997961998,0.0351969040930271 222 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_003562.jpg,0.97756814956665,-0.234099298715591,0.138195753097534,0.782222211360931,-0.127527102828026,-0.17411969602108 223 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_001817.jpg,0.968896448612213,0.155040338635445,-0.192130774259567,1.01577770709991,-0.140614703297615,0.0784942582249641 224 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_001562.jpg,0.913985967636108,-0.149884387850761,0.23459255695343,0.826970875263214,-0.0697067379951477,0.0252879597246647 225 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_007914.jpg,0.867177546024323,0.258357286453247,-0.156497523188591,0.899295568466187,-0.079352430999279,-0.00113170745316893 226 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_003569.jpg,1.13022482395172,0.0013807782670483,0.00840452779084444,1.11486077308655,0.236941277980804,-0.0945004820823669 227 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_002333.jpg,1.14722573757172,-0.231172785162926,-0.0290085542947054,0.923010945320129,0.177980408072472,0.239438354969025 228 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_003201.jpg,0.89976567029953,-0.022418549284339,0.00664314441382885,0.857325315475464,0.13099367916584,-0.183948740363121 229 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_002927.jpg,0.960046470165253,0.0154423378407955,-0.0543420575559139,0.791506588459015,0.00279165687970817,0.224116638302803 230 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_004498.jpg,0.983488857746124,-0.0338370874524117,-0.0145223839208484,1.02482771873474,-0.0600463636219501,0.166614234447479 231 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_000181.jpg,0.893350005149841,0.226754650473595,-0.225044682621956,0.97535252571106,-0.15886253118515,0.10072834789753 232 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2007_008043.jpg,0.846023678779602,0.100300066173077,-0.140542358160019,1.22695684432983,-0.00776064209640026,-0.03825968131423 233 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_002507.jpg,1.06770133972168,-0.0908088833093643,0.0628408417105675,0.813395500183105,-0.22514596581459,-0.106330297887325 234 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_002580.jpg,0.830518901348114,0.117138497531414,-0.102437309920788,0.883812844753265,-0.211694270372391,-0.0801196843385696 235 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_005976.jpg,1.09480655193329,-0.0524686314165592,0.0156495589762926,1.05220651626587,0.0740843489766121,-0.18811522424221 236 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_002686.jpg,0.993832409381866,0.121460124850273,-0.119681112468243,1.00870442390442,-0.0948069989681244,-0.171753063797951 237 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_003193.jpg,0.81768137216568,-0.183829516172409,0.186426416039467,0.807877480983734,0.0634273216128349,0.0947364568710327 238 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_000124.jpg,0.749165117740631,0.0973152965307236,-0.120959557592869,1.13699817657471,-0.0760600939393044,-0.119079947471619 239 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_000881.jpg,1.0472332239151,-0.0547344349324703,-0.0625933483242989,0.831487715244293,-0.218533307313919,0.136293485760689 240 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_005148.jpg,0.947089970111847,0.0326543413102627,-0.0511693730950356,0.796186447143555,0.132014632225037,0.054075438529253 241 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2007_001225.jpg,1.13484227657318,-0.0683379173278809,0.173457369208336,1.08654987812042,0.0245779231190681,-0.157153457403183 242 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_006804.jpg,0.837536633014679,0.0658058524131775,-0.0818337500095367,0.989618837833405,0.0671231225132942,-0.207961291074753 243 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_000681.jpg,0.966155171394348,0.0661691054701805,-0.0431676246225834,0.887134671211243,0.211704134941101,-0.168372184038162 244 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_004964.jpg,0.923867642879486,0.154250741004944,-0.143333330750465,0.74959397315979,0.136669620871544,-0.224476829171181 245 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_004986.jpg,1.16246724128723,-0.021574579179287,0.0192760955542326,1.17477369308472,-0.240809828042984,0.205752208828926 246 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_005186.jpg,0.840683043003082,0.00744311744347215,0.0308331567794085,0.793824970722198,-0.0580029189586639,0.0643477439880371 247 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_008252.jpg,1.09581124782562,0.186896219849586,-0.239453628659248,0.893515229225159,-0.1313436627388,0.132162868976593 248 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_000807.jpg,0.992127180099487,-0.00219849636778235,-0.0044212257489562,0.977486133575439,0.207833483815193,0.157346040010452 249 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_002055.jpg,0.964497327804565,-0.26515007019043,0.202548131346703,0.816028773784637,0.116050258278847,-0.153912842273712 250 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_000284.jpg,0.829641103744507,0.0493392869830132,0.0256049055606127,0.781086921691895,-0.216397702693939,-0.150400564074516 251 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_003791.jpg,1.06491756439209,-0.214338973164558,0.113520957529545,1.14711403846741,0.0815010666847229,-0.138506188988686 252 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_005818.jpg,0.976953983306885,0.128031298518181,-0.14172700047493,0.964795589447021,0.137934237718582,-0.160249352455139 253 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_005215.jpg,0.762886583805084,0.109938025474548,-0.106111221015453,0.809961438179016,0.246001005172729,0.124175377190113 254 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_006907.jpg,1.08210361003876,0.0622110962867737,-0.372609078884125,0.90211147069931,0.0513298101723194,0.226821914315224 255 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_003277.jpg,0.86739581823349,0.0619915649294853,0.0943073183298111,1.12397122383118,0.0619393326342106,-0.151359841227531 256 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_004270.jpg,1.03351545333862,-0.156721889972687,0.348544001579285,0.978652536869049,0.137083441019058,0.0163991060107946 257 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2007_000364.jpg,0.862710475921631,-0.234129056334496,-0.105274833738804,1.15333104133606,0.190539181232452,-0.212500974535942 258 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_000898.jpg,1.00127601623535,-0.159057959914207,0.0963904708623886,0.83010458946228,-0.139407515525818,-0.114919275045395 259 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_005305.jpg,1.18585312366486,-0.288646221160889,0.253715217113495,1.09081614017487,-0.085159920156002,0.161920160055161 260 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_004640.jpg,0.820380926132202,0.15423758327961,-0.0162795186042786,1.18154656887054,-0.0922799631953239,0.165630221366882 261 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_006257.jpg,1.17938470840454,0.0858429595828056,-0.0937726944684982,1.19022631645203,-0.184918239712715,0.19208599627018 262 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_001892.jpg,1.21016347408295,0.0896699205040932,-0.0908966660499573,0.896502673625946,-0.129584714770317,-0.117311395704746 263 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_002129.jpg,1.08961749076843,-0.112616784870625,0.0963438972830772,1.09970712661743,0.140905529260635,0.175187334418297 264 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_003429.jpg,0.806069791316986,-0.0585525147616863,0.0119031155481935,1.02866661548615,0.165831491351128,0.148799896240234 265 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_000397.jpg,1.02195012569427,0.108370721340179,-0.188153147697449,0.990029633045197,-0.24283766746521,0.145690739154816 266 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_001227.jpg,0.824322521686554,0.0175078827887774,0.117216438055038,0.917590260505676,-0.188511207699776,-0.115155175328255 267 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_000549.jpg,0.923258185386658,-0.119266979396343,0.111211381852627,0.935368597507477,0.192587912082672,0.139084190130234 268 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_002269.jpg,1.18362927436829,0.0271154772490263,-0.135011345148087,0.981170952320099,-0.0234098248183727,-0.0436257235705853 269 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_000418.jpg,1.15413856506348,-0.210240989923477,-0.13161712884903,0.83529007434845,-0.084530733525753,0.143660679459572 270 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_003965.jpg,0.815139651298523,0.1612329185009,-0.240455865859985,1.20615184307098,0.0689327046275139,-0.0618915148079395 271 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_005068.jpg,0.991986036300659,-0.125143304467201,0.272064059972763,0.940867483615875,0.129190623760223,0.0908889248967171 272 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_002631.jpg,1.21687865257263,-0.176372021436691,0.11066023260355,1.15948081016541,0.246898144483566,0.108689405024052 273 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_004261.jpg,1.12623083591461,-0.294884473085403,0.234771847724915,1.0642147064209,-0.111713580787182,0.121628642082214 274 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_003740.jpg,0.890428364276886,0.245122998952866,-0.217608779668808,0.959101796150208,-0.0573072172701359,0.121150553226471 275 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_007205.jpg,0.971806168556213,0.211592018604279,-0.263187676668167,1.12923169136047,0.0338944494724274,-0.169949442148209 276 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_002127.jpg,1.10466289520264,-0.224775835871696,0.27220344543457,0.784569978713989,0.224651753902435,-0.0176856629550457 277 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_001814.jpg,0.928098440170288,0.0756897553801537,-0.160440564155579,1.17968034744263,0.0331586189568043,-0.177079305052757 278 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_001618.jpg,1.14800834655762,0.22030109167099,-0.24538865685463,1.03859627246857,0.161798566579819,-0.071878470480442 279 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_003361.jpg,1.00981020927429,0.069416455924511,-0.0259525254368782,0.871270656585693,0.164844959974289,-0.0362148508429527 280 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_000284.jpg,1.14482510089874,0.07780422270298,0.195352047681808,0.910089194774628,-0.0291676428169012,-0.169511780142784 281 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_000893.jpg,1.15794467926025,0.253065377473831,-0.193348869681358,0.995077788829803,0.208568066358566,-0.224927872419357 282 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_005635.jpg,0.815811336040497,-0.0297369714826345,-0.0802220478653908,1.02532708644867,-0.189938500523567,-0.213255882263184 283 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_003815.jpg,1.15040802955627,0.00540929939597845,0.131037175655365,1.03258836269379,-0.229679882526398,-0.212650239467621 284 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_002256.jpg,1.20867776870728,0.28072264790535,-0.108750976622105,0.778957307338715,-0.169550195336342,0.231123998761177 285 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_000184.jpg,1.13513374328613,-0.245087772607803,0.214018568396568,0.874146819114685,0.0742713883519173,0.245212838053703 286 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_006295.jpg,1.00344347953796,-0.00239563803188503,0.0540534779429436,0.925574660301208,-0.018429895862937,0.107878364622593 287 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_001129.jpg,0.966066539287567,-0.347179859876633,0.225396901369095,1.17614030838013,-0.22887134552002,0.248941570520401 288 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_004383.jpg,1.08760166168213,0.123727209866047,-0.155604511499405,0.913116335868835,0.0654315203428268,-0.0532431825995445 289 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_003874.jpg,0.955646932125092,-0.0775970965623856,0.0461881943047047,0.807603180408478,-0.0925718247890472,-0.120945259928703 290 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_004570.jpg,0.883147895336151,-0.0843817815184593,-0.17116704583168,1.08951938152313,-0.206280633807182,-0.188329711556435 291 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_002738.jpg,1.19838726520538,-0.0334082916378975,0.0427622459828854,0.882817685604095,0.226026222109795,0.117581404745579 292 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_007189.jpg,1.0544193983078,-0.142787829041481,0.103258192539215,0.841298460960388,-0.1545470058918,0.156313389539719 293 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_003614.jpg,0.867369651794434,0.272666662931442,-0.0134743945673108,1.00327336788177,0.167131304740906,-0.147190764546394 294 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_000398.jpg,0.773379325866699,-0.165918752551079,0.209500581026077,0.750231087207794,-0.154523998498917,0.181812062859535 295 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_003974.jpg,0.767669916152954,0.122886776924133,-0.141193717718124,0.795585870742798,-0.147510871291161,-0.140290468931198 296 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_000082.jpg,1.03422152996063,0.234963461756706,-0.217195078730583,0.871773064136505,-0.136366710066795,0.231935515999794 297 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_000291.jpg,1.20101654529572,-0.0988648682832718,0.10858541727066,1.11860382556915,-0.000759674585424364,-0.158366918563843 298 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_004158.jpg,1.07021450996399,-0.290451020002365,0.169566556811333,1.11696445941925,-0.212884590029716,-0.179882690310478 299 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_000138.jpg,1.03710460662842,0.195837363600731,-0.133119255304337,0.859004199504852,0.0533945932984352,-0.0493872426450253 300 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_006320.jpg,1.05293107032776,-0.11759776622057,0.342118829488754,0.88393771648407,0.243263483047485,-0.225219637155533 301 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_004029.jpg,0.826123476028442,-0.174140974879265,0.305376261472702,1.00622367858887,0.0183988083153963,-0.00164455478079617 302 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_001660.jpg,1.11898589134216,0.211265534162521,-0.294240742921829,0.986508011817932,0.00237619294784963,-0.0873623117804527 303 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_003214.jpg,1.20131123065948,0.189157575368881,-0.128635495901108,0.859599173069,0.0618243850767612,0.0579132959246635 304 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_003781.jpg,1.01789033412933,0.0223767682909966,-0.028702175244689,1.17222106456757,-0.0747146904468536,0.0978775322437286 305 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_003730.jpg,0.91741019487381,0.149865210056305,-0.257676273584366,1.14347195625305,0.181213825941086,-0.168091595172882 306 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_004418.jpg,1.05429232120514,0.127858176827431,-0.0298549775034189,0.926329016685486,0.0748139098286629,-0.0856592208147049 307 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_002638.jpg,1.15907168388367,0.196075469255447,-0.157623514533043,1.17980742454529,0.0024720267392695,0.146941959857941 308 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_007897.jpg,0.848140120506287,0.0501815117895603,-0.0913694426417351,0.92803168296814,0.07310651242733,0.248541444540024 309 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_004956.jpg,0.852728605270386,-0.113069452345371,0.12247571349144,0.936813592910767,0.010850116610527,0.0606766454875469 310 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_005968.jpg,0.911943256855011,0.117271259427071,-0.327561140060425,1.18837857246399,0.00808736961334944,-0.148937061429024 311 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_001338.jpg,0.872024476528168,0.178355425596237,-0.103220790624619,1.20958971977234,0.0441845245659351,-0.162444740533829 312 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_008233.jpg,1.05437576770782,0.0263334270566702,0.132927238941193,0.936303734779358,0.204910933971405,0.15168009698391 313 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_000307.jpg,0.780694305896759,-0.0115128997713327,0.0221978053450584,0.898150563240051,-0.171210676431656,-0.0775997117161751 314 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_004831.jpg,0.770313262939453,0.0421769432723522,-0.0181665495038033,0.913228988647461,-0.10929686576128,-0.107182800769806 315 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_001103.jpg,0.867653131484985,0.166956901550293,-0.160338521003723,0.851271510124207,-0.19205304980278,-0.166331335902214 316 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_006500.jpg,0.822622835636139,-0.0429548807442188,-0.0596755035221577,0.925102114677429,-0.0662291720509529,0.00904150120913982 317 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_002666.jpg,0.812606573104858,0.202487006783485,-0.120522521436214,0.97638875246048,0.242711707949638,-0.167126759886742 318 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_000843.jpg,1.06064140796661,0.0988338738679886,-0.0552523210644722,1.11297428607941,-0.113017365336418,0.247218117117882 319 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_003230.jpg,0.830227971076965,0.0584137737751007,-0.277640968561172,1.04683923721313,0.0516601763665676,0.0485683903098106 320 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_001507.jpg,0.988327980041504,0.270763874053955,-0.217230692505836,0.926581203937531,-0.0214559938758612,0.0575971193611622 321 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_004640.jpg,0.82728123664856,-0.0839524567127228,0.0478246584534645,0.876351952552795,-0.0891650170087814,-0.128493040800095 322 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_001830.jpg,1.20168268680573,-0.114426515996456,0.155119121074677,1.15281593799591,-0.149941608309746,-0.219345822930336 323 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_005243.jpg,0.881680190563202,0.278485924005508,-0.125003010034561,1.09395265579224,0.13364651799202,0.157242640852928 324 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_003849.jpg,1.12178313732147,-0.134930774569511,0.143607556819916,1.11038851737976,-0.166067257523537,-0.226044446229935 325 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_006430.jpg,1.17380177974701,0.00315511762164533,-0.163000017404556,1.04186391830444,0.00120479520410299,0.235458925366402 326 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_004904.jpg,0.909839928150177,-0.163896113634109,0.141088664531708,0.935909509658813,0.0432398244738579,0.0753296315670013 327 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_000392.jpg,0.971036314964294,0.0353095307946205,0.0285618957132101,1.18824660778046,0.0668173581361771,-0.117639541625977 328 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_006445.jpg,0.766935527324677,-0.0823674574494362,0.0578619726002216,0.94246906042099,0.0629561245441437,-0.0146682364866138 329 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_001771.jpg,0.972838163375854,-0.146212726831436,-0.0141121847555041,0.844065010547638,0.127665355801582,-0.219445258378983 330 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_001608.jpg,0.981440186500549,-0.223264843225479,0.138746589422226,0.855599522590637,0.124399594962597,-0.054440401494503 331 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_004464.jpg,0.778081297874451,0.00337825226597488,0.163956001400948,1.17031598091125,0.101902112364769,0.162806689739227 332 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_008429.jpg,1.18823766708374,0.210284247994423,-0.330828607082367,1.05125594139099,-0.130526423454285,-0.00228300248272717 333 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_008125.jpg,0.997018456459045,0.0615007430315018,-0.00711663207039237,1.09768092632294,0.192323789000511,-0.170069888234138 334 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_006404.jpg,1.1971732378006,0.180809393525124,0.0708698034286499,0.795456349849701,0.056999646127224,-6.62998354528099e-05 335 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_005716.jpg,0.900838732719421,-0.23387847840786,0.264089733362198,1.16334462165833,-0.177710399031639,0.0362910106778145 336 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_001666.jpg,1.17356956005096,-0.174390316009521,0.173222735524178,1.14440095424652,-0.0923216715455055,-0.0981105640530586 337 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_002590.jpg,0.92925500869751,0.344638764858246,-0.105678848922253,1.11098670959473,-0.166040167212486,0.179328456521034 338 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2007_006660.jpg,1.06729340553284,0.145010337233543,-0.352066189050674,0.972790241241455,0.0377011299133301,-0.248901158571243 339 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_002411.jpg,0.90204906463623,0.305858194828033,-0.122872442007065,1.10731315612793,-0.237966820597649,-0.0797929018735886 340 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_001301.jpg,0.754246234893799,0.0502018146216869,-0.0581273399293423,0.778940379619598,-0.0767825320363045,0.0176387690007687 341 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_004911.jpg,1.04072463512421,-0.212290912866592,0.166785567998886,1.12440884113312,0.0270699225366116,-0.030451713129878 342 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_005484.jpg,1.13472247123718,0.113550707697868,-0.262029707431793,0.89981997013092,-0.161196514964104,-0.0860781520605087 343 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_004594.jpg,0.995927810668945,-0.0223251152783632,0.189594715833664,1.11967933177948,0.119177050888538,-0.149746432900429 344 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_008497.jpg,1.13702034950256,-0.0061045833863318,-0.265317887067795,1.01311111450195,-0.17921906709671,0.219018936157227 345 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_005751.jpg,0.871223509311676,0.0946472510695457,0.0416287109255791,0.969401299953461,-0.0310268420726061,0.175980046391487 346 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_004856.jpg,0.771878957748413,0.0758274123072624,-0.166841596364975,1.22221875190735,0.219282314181328,-0.0525883063673973 347 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_001149.jpg,1.12200510501862,-0.136931017041206,0.144060239195824,1.13137352466583,0.0893507823348045,-0.114301353693008 348 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_006028.jpg,0.765945017337799,-0.0912358686327934,0.347753643989563,1.16050612926483,0.194679602980614,0.152089789509773 349 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_000444.jpg,1.02180993556976,0.135251849889755,-0.133321598172188,1.02308189868927,0.239726215600967,0.0947262272238731 350 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_000814.jpg,0.859814286231995,-0.000410784094128758,-0.102424472570419,0.780974447727203,-0.0756370574235916,0.0076893474906683 351 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_001327.jpg,0.782224833965302,-0.193607419729233,0.209994867444038,0.773473680019379,0.0499726496636868,-0.187963560223579 352 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_003453.jpg,1.07738387584686,-0.169491425156593,0.177226155996323,0.785266041755676,-0.211612179875374,0.0185422208160162 353 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_000709.jpg,0.91273295879364,-0.0866873264312744,-0.0731794759631157,1.00687181949615,-0.101119346916676,0.112050354480743 354 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_000055.jpg,0.805461823940277,-0.215569496154785,0.247487887740135,0.93792712688446,-0.111075781285763,-0.20290607213974 355 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_006295.jpg,0.922825872898102,-0.0736044198274612,0.108619078993797,1.00304913520813,-0.214127957820892,-0.0904924944043159 356 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_006882.jpg,0.783683061599731,-0.0342355892062187,0.0142372632399201,0.795680403709412,0.240773588418961,0.230082601308823 357 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_001540.jpg,0.782618999481201,-0.215127021074295,0.144219771027565,1.01398324966431,-0.235564440488815,-0.131002694368362 358 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_003752.jpg,0.778823733329773,0.221827313303947,-0.0883837193250656,1.13120710849762,0.12034510076046,0.220050796866417 359 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_000503.jpg,0.933608531951904,-0.16914302110672,0.178309559822083,0.948047876358032,0.0658615157008171,-0.0626422166824341 360 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_000620.jpg,1.01432037353516,-0.253784775733948,0.224917486310005,1.17359733581543,-0.0213793143630028,0.234657362103462 361 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_007059.jpg,1.00198602676392,0.0929844304919243,-0.196293890476227,0.81546026468277,-0.130360841751099,0.0799392014741898 362 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_005895.jpg,1.01684367656708,-0.283542722463608,0.176102116703987,0.765284478664398,-0.0060625784099102,0.00598851591348648 363 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_007691.jpg,1.20654487609863,-0.0858493745326996,0.113462701439857,0.792629897594452,0.115946561098099,-0.233385667204857 364 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_006076.jpg,0.855276584625244,-0.11567434668541,0.190247669816017,1.17010116577148,0.195941552519798,0.166587352752686 365 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_001073.jpg,1.14057624340057,-0.00507185235619545,0.241059005260468,0.936957120895386,-0.0579978413879871,-0.235730946063995 366 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_002911.jpg,1.21467745304108,-0.187512934207916,0.253623366355896,0.756371557712555,0.119191646575928,-0.0550613515079021 367 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_004419.jpg,1.01745748519897,0.00843315757811069,-0.0206553302705288,1.10598063468933,0.1291893273592,0.0193166751414537 368 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_005843.jpg,0.811728656291962,0.16698981821537,-0.0803987309336662,0.86221843957901,-0.226330146193504,-0.111453711986542 369 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_000162.jpg,0.940395891666412,-0.0481714718043804,0.126834139227867,0.894216895103455,-0.218590527772903,-0.051481120288372 370 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_001514.jpg,0.836446106433868,-0.00147373962681741,0.00498105119913816,0.839304864406586,0.223654702305794,-0.0673588067293167 371 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_004097.jpg,1.14259898662567,-0.130122914910316,0.334195673465729,0.978568732738495,-0.0877456516027451,-0.207236677408218 372 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_005639.jpg,0.86471563577652,-0.107836037874222,0.232714354991913,1.08326053619385,0.0024712469894439,0.0238963831216097 373 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_006606.jpg,0.759381055831909,0.0623549297451973,-0.165704399347305,1.2190934419632,0.0542911775410175,0.131851986050606 374 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_001263.jpg,0.864913880825043,-0.166100159287453,0.1301479190588,0.782275557518005,0.194639727473259,0.134815543889999 375 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_001429.jpg,1.02669596672058,0.0907426550984383,-0.118741162121296,0.967920243740082,-0.0455411821603775,-0.158563256263733 376 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_003552.jpg,1.05085933208466,-0.136397957801819,0.262955158948898,0.91428416967392,0.145882189273834,0.0241765100508928 377 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_003682.jpg,1.19827485084534,-0.252750337123871,0.256964236497879,1.20748949050903,0.0871187746524811,0.232698678970337 378 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_004496.jpg,1.12692892551422,-0.0602525472640991,0.0836886540055275,0.957156419754028,-0.111456677317619,-0.12529119849205 379 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_003187.jpg,0.917932331562042,-0.00432094233110547,0.141557455062866,1.23226404190063,-0.154158383607864,0.125112116336823 380 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_000159.jpg,1.10541307926178,-0.167871534824371,0.148518159985542,1.22966623306274,0.0403785593807697,-0.0436343289911747 381 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2007_005969.jpg,0.90025383234024,0.165232986211777,-0.0834514573216438,0.960917532444,0.162856221199036,-0.146507725119591 382 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_002039.jpg,1.02735733985901,-0.0540203601121902,0.050103135406971,1.01658725738525,-0.192944064736366,-0.089682437479496 383 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_001958.jpg,1.03936886787415,-0.0799070075154305,0.0774975642561913,1.0116411447525,0.0161596015095711,0.203052282333374 384 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_003011.jpg,0.901297450065613,-0.148389965295792,0.193885490298271,0.878356635570526,0.111014224588871,0.0515479408204556 385 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_007669.jpg,0.975892543792725,-0.104230888187885,-0.0538147315382957,1.18687903881073,-0.0765947327017784,-0.107331432402134 386 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_000793.jpg,0.876084208488464,-0.104731366038322,0.225534006953239,0.818429172039032,0.24004802107811,-0.032521016895771 387 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_000260.jpg,1.1258293390274,0.0501109808683395,0.0696129575371742,1.21811962127686,-0.0865616276860237,-0.0764191895723343 388 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_000374.jpg,0.785057306289673,-0.204175844788551,0.0209820438176394,0.967068314552307,0.120560362935066,0.129707530140877 389 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_005764.jpg,1.21442544460297,0.151635527610779,0.0386500731110573,0.954717695713043,0.199120447039604,-0.172215908765793 390 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_004188.jpg,1.09635615348816,0.0442439056932926,0.126876264810562,0.858913600444794,-0.139053449034691,0.104636512696743 391 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_001754.jpg,1.0646641254425,-0.18095289170742,0.147018983960152,1.09551978111267,0.133667856454849,-0.11789820343256 392 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_004686.jpg,0.821349322795868,0.155900791287422,-0.129713281989098,0.790238559246063,0.124465323984623,0.14681975543499 393 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_004240.jpg,1.07606387138367,-0.264896869659424,0.251277327537537,1.0973778963089,0.161828145384789,0.183378130197525 394 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_001838.jpg,1.19672644138336,0.141693487763405,-0.142028093338013,1.23579072952271,-0.048617746680975,0.219645604491234 395 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_001663.jpg,1.14246892929077,-0.211974114179611,0.316209316253662,0.922439515590668,-0.0776612237095833,0.141224250197411 396 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_007050.jpg,1.15259909629822,-0.177910357713699,0.150950863957405,0.868790864944458,-0.0362592227756977,0.0672763809561729 397 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_001572.jpg,1.11006450653076,-0.0136410174891353,0.018192645162344,1.14355981349945,0.098460465669632,0.035311222076416 398 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_002762.jpg,0.794869005680084,0.159357085824013,-0.224483579397202,0.772146642208099,-0.125901341438293,0.218096822500229 399 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_003925.jpg,1.12186694145203,-0.0617852993309498,0.0889390930533409,0.896364867687225,-0.111295498907566,0.201255410909653 400 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_002183.jpg,0.942468464374542,0.10105063021183,-0.0903965309262276,0.985364437103271,0.186314329504967,0.0543228387832642 401 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_004836.jpg,0.900263726711273,0.163812220096588,-0.173928245902061,0.913835823535919,0.173696979880333,0.0259649306535721 402 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2007_003190.jpg,1.01647770404816,-0.200929135084152,0.308599591255188,0.954007923603058,0.105130396783352,0.0474004186689854 403 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_006590.jpg,0.832600176334381,0.149032890796661,-0.150708049535751,0.834339499473572,0.140518963336945,0.140171110630035 404 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_002309.jpg,1.12892997264862,0.0504080206155777,-0.207104861736298,0.765053331851959,0.189092576503754,0.175986528396606 405 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_001724.jpg,0.974327147006989,-0.041509959846735,0.0491577573120594,1.05562043190002,-0.0497520416975021,-0.127792179584503 406 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_004055.jpg,1.13579189777374,0.0692408084869385,-0.386005699634552,0.876896679401398,0.111480437219143,-0.0800174400210381 407 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_004307.jpg,1.00364232063293,0.220857962965965,-0.226113587617874,0.980648756027222,0.158002108335495,-0.0605986081063747 408 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_002746.jpg,0.770461618900299,-0.0447037257254124,0.0233239904046059,0.813525915145874,0.0931996554136276,0.159699529409409 409 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_004648.jpg,1.03728294372559,0.0178437437862158,-0.0233030822128057,0.885763883590698,0.105720594525337,-0.244435593485832 410 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_001190.jpg,0.881644308567047,0.122533917427063,-0.150486797094345,0.958511412143707,-0.164798706769943,0.111649945378304 411 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_000491.jpg,0.830252826213837,0.0392213426530361,-0.00909608602523804,0.80994176864624,-0.219685584306717,-0.237820595502853 412 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_003183.jpg,0.95016473531723,0.0246801618486643,-0.116553463041782,0.850169658660889,-0.143793061375618,-0.218592450022697 413 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_004858.jpg,0.900280714035034,0.194014742970467,-0.205066442489624,1.11214327812195,0.0636226758360863,-0.0318766161799431 414 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_004984.jpg,0.89733874797821,-0.181626155972481,-0.0521145574748516,1.17713034152985,0.191105082631111,0.032293364405632 415 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_002873.jpg,1.07631576061249,0.0815466642379761,-0.266251564025879,0.950750827789307,-0.113226816058159,-0.0226694773882627 416 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_001289.jpg,1.08795726299286,-0.0562206916511059,0.101468935608864,0.892279148101807,-0.239657700061798,0.235873073339462 417 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_002036.jpg,0.836910367012024,0.175175756216049,-0.188944101333618,0.77434229850769,0.143092900514603,0.188267201185226 418 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_002431.jpg,0.735569000244141,-0.179403111338615,0.183160305023193,0.771324157714844,-0.0554938279092312,-0.241620868444443 419 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_004509.jpg,1.15262258052826,0.0835386589169502,-0.142849892377853,1.22320365905762,-0.119395710527897,0.128051340579987 420 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_003385.jpg,1.20872032642365,0.0155699886381626,0.0281748436391354,1.12518286705017,-0.0663140043616295,-0.141238123178482 421 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_002132.jpg,1.05488216876984,-0.196452632546425,0.183488562703133,1.0906286239624,-0.211100235581398,-0.112046428024769 422 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_000458.jpg,0.956976115703583,0.127434521913528,-0.0303001292049885,1.13911807537079,-0.129128262400627,-0.197621434926987 423 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_005311.jpg,0.965905666351318,0.226058900356293,-0.122558683156967,1.03771829605103,-0.240073591470718,0.178970113396645 424 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_004548.jpg,1.17490649223328,-0.220383822917938,0.170469045639038,0.932108521461487,-0.153814136981964,-0.199479609727859 425 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_004073.jpg,0.892902791500092,-0.0440947413444519,0.100957281887531,1.00837075710297,0.132917150855064,-0.0322546325623989 426 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_000813.jpg,1.01910817623138,-0.121277742087841,0.0626441836357117,1.12399566173553,0.0898685976862907,0.229162111878395 427 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_004461.jpg,0.930318892002106,-0.210206538438797,0.181561321020126,0.870713233947754,0.202637165784836,-0.180539056658745 428 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_005049.jpg,0.826114654541016,0.170379430055618,-0.145972549915314,1.05664265155792,-0.217657148838043,-0.0944909006357193 429 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_004829.jpg,1.24589848518372,0.0536066852509975,-0.0588718093931675,1.2364467382431,0.136660248041153,-0.138872027397156 430 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_000137.jpg,0.830105125904083,0.118141405284405,-0.195460826158524,1.15586841106415,-0.190269812941551,0.104828350245953 431 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_002160.jpg,0.834713876247406,0.0132844243198633,-0.0171393528580666,0.847969770431519,0.179801926016808,0.190209358930588 432 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_005850.jpg,0.81445175409317,0.140635967254639,-0.143200501799583,0.916304647922516,-0.239022776484489,-0.0976850613951683 433 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_003420.jpg,0.886770784854889,0.112123474478722,-0.251034170389175,1.08312129974365,0.130770087242126,0.215553253889084 434 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_002767.jpg,0.786895096302032,0.211221292614937,-0.0345811359584332,0.913451313972473,-0.00227369647473097,-0.208246827125549 435 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_003213.jpg,0.845923364162445,0.00318336067721248,-0.0745770484209061,0.799723088741302,-0.240634366869926,0.19275538623333 436 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_002245.jpg,1.13393461704254,0.041320476680994,0.238904669880867,0.910713255405426,-0.242998719215393,-0.204245254397392 437 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_005013.jpg,0.87834644317627,-0.0878882110118866,-0.145068064332008,1.19408023357391,0.00294987997040153,-0.0729844197630882 438 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_004907.jpg,0.957824945449829,0.194466039538383,-0.176714390516281,1.12021577358246,-0.226412296295166,0.0527955144643784 439 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_002838.jpg,0.907304048538208,0.169065400958061,-0.197205454111099,0.966884553432465,-0.0513909682631493,-0.204538479447365 440 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_000542.jpg,0.9140984416008,0.0407638140022755,0.0698123127222061,0.780129730701447,0.0351817831397057,0.189172178506851 441 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_004903.jpg,1.08677649497986,-0.146156996488571,0.218984484672546,1.184077501297,0.2119130641222,-0.13897317647934 442 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_002648.jpg,0.918664455413818,0.0937127843499184,-0.111276440322399,0.873841226100922,0.0774468779563904,0.101269386708736 443 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_004108.jpg,0.782785713672638,0.152732744812965,-0.172640442848206,0.73997950553894,-0.248453959822655,0.0524527914822102 444 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_002845.jpg,0.92530745267868,0.128685802221298,-0.0122218513861299,1.02088499069214,-0.22021047770977,-0.151275932788849 445 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_001092.jpg,1.08277416229248,0.0171180032193661,0.396754741668701,0.918727040290833,0.124120570719242,0.122754245996475 446 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_001768.jpg,0.983425736427307,-0.37678188085556,0.0353729166090488,1.10719037055969,0.108665771782398,-0.109437502920628 447 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_005390.jpg,0.925748407840729,0.253742665052414,-0.235212594270706,0.937614619731903,-0.233913481235504,-0.111106365919113 448 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_001376.jpg,1.03048872947693,-0.217033073306084,0.201213032007217,0.978688657283783,-0.128595545887947,-0.149745360016823 449 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_000589.jpg,0.872772991657257,0.0768933370709419,-0.0241974964737892,0.816527307033539,-0.0286725740879774,0.0820075944066048 450 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_000589.jpg,1.03089046478271,0.0359469205141068,-0.00715407310053706,0.966980338096619,-0.164814189076424,0.145328551530838 451 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_000178.jpg,0.920383214950562,-0.032735288143158,-0.0250378753989935,0.958697974681854,0.130671471357346,0.113897234201431 452 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_007683.jpg,0.779558479785919,-0.0405355952680111,-0.116259709000587,1.00076520442963,0.246951088309288,-0.0233768168836832 453 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_005405.jpg,1.0879420042038,0.121120363473892,-0.12412004172802,1.00209224224091,0.179960042238235,0.0795994475483894 454 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_001066.jpg,0.977399408817291,0.104096136987209,0.00187886680942029,0.83497154712677,-0.180439889431,0.148409977555275 455 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_001675.jpg,1.13653254508972,0.0184295978397131,0.239301458001137,0.878043949604034,0.0342929139733315,-0.247141972184181 456 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_005046.jpg,1.04313111305237,0.168886706233025,-0.0687583535909653,1.14411890506744,-0.22791875898838,-0.0813359022140503 457 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_003796.jpg,0.895720303058624,-0.0372213684022427,0.0347843989729881,0.886383712291718,-0.16344353556633,-0.238599166274071 458 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_008523.jpg,0.972041308879852,-0.0550726503133774,-0.0965320989489555,0.820770800113678,0.0138402972370386,0.129132583737373 459 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_001054.jpg,1.01532924175262,0.0692645311355591,0.109296590089798,1.20624434947968,0.158245205879211,0.0625109896063805 460 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_002613.jpg,0.988599061965942,0.110557198524475,-0.111559197306633,1.0278559923172,-0.140371143817902,0.0750236362218857 461 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_000788.jpg,1.22265529632568,0.154650643467903,-0.144927069544792,0.94907420873642,0.214148864150047,-0.0586903616786003 462 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_002960.jpg,0.88602352142334,-0.373688787221909,0.0802344456315041,1.04174566268921,-0.129694119095802,0.173307463526726 463 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_003290.jpg,0.855397045612335,-0.151737913489342,0.151280209422112,0.855929493904114,-0.246056258678436,0.170161187648773 464 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_006479.jpg,0.909245908260345,0.277749717235565,-0.225000292062759,0.970995962619781,0.10842876881361,0.0147449150681496 465 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_002294.jpg,0.989315390586853,-0.0289870034903288,0.0281453244388103,1.00288081169128,0.0994808971881866,0.145817697048187 466 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_004253.jpg,1.01452720165253,0.0721705555915833,0.139468014240265,0.821773886680603,-0.0514067821204662,-0.133217588067055 467 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_001606.jpg,0.837148785591125,-0.363743662834167,0.129997745156288,1.08539307117462,0.203734859824181,0.118887349963188 468 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_005282.jpg,1.14307165145874,-0.220997095108032,0.201186686754227,1.12415099143982,-0.10655602067709,-0.190313801169395 469 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_005283.jpg,1.0208797454834,0.145972058176994,-0.197647765278816,0.828551590442657,0.0226144213229418,-0.227057576179504 470 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_000501.jpg,0.915243566036224,0.0894128531217575,-0.0888093411922455,0.914110064506531,-0.204909399151802,0.0403659716248512 471 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_004554.jpg,1.05479001998901,-0.0804032683372498,0.146276414394379,0.791462361812592,0.141183510422707,-0.0261865761131048 472 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_001134.jpg,1.18167519569397,0.299869656562805,-0.135136887431145,0.835927605628967,0.0853150337934494,-0.207228422164917 473 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_002199.jpg,0.847711086273193,0.0457100979983807,-0.312265813350677,1.0822342634201,0.073214940726757,0.20224218070507 474 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2007_004483.jpg,1.14002203941345,-0.252020627260208,0.243630453944206,1.12217175960541,0.236288651823997,0.150798425078392 475 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_004681.jpg,1.06654191017151,-0.0466741621494293,0.0717328935861588,0.805994808673859,0.0281949769705534,-0.204311221837997 476 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_004966.jpg,0.957803606987,-0.0739108696579933,0.0231624078005552,1.17063140869141,-0.121596112847328,0.0624940358102322 477 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_006513.jpg,1.20228707790375,0.278398066759109,-0.202031880617142,1.12194585800171,0.244806557893753,0.157373324036598 478 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_004892.jpg,0.86482173204422,-0.0491710938513279,0.0361348502337933,1.20264887809753,-0.160878762602806,0.224251851439476 479 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_003071.jpg,0.854163229465485,-0.180265039205551,-0.216487437486649,1.14420461654663,0.165396794676781,-0.172714084386826 480 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_003786.jpg,0.789259433746338,0.0108038894832134,0.0450656674802303,1.15537619590759,0.191726088523865,-0.21377395093441 481 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_006019.jpg,1.10737943649292,0.0574613250792027,-0.155781388282776,1.00803995132446,-0.173461079597473,0.0156718231737614 482 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_004052.jpg,0.841218590736389,0.230860576033592,-0.087392695248127,0.970502316951752,0.137683570384979,0.108531303703785 483 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_000111.jpg,0.7743079662323,-0.00202218489721417,0.158985123038292,1.03591239452362,0.136013582348824,-0.202984943985939 484 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_001435.jpg,1.05487704277039,-0.095533162355423,0.0357322692871094,1.10310244560242,0.117576591670513,-0.0330473855137825 485 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_000295.jpg,1.1016446352005,-0.199572414159775,0.170687541365623,0.822928309440613,0.24582539498806,-0.164639756083488 486 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_006410.jpg,0.925703823566437,-0.176059126853943,0.144920855760574,1.01876938343048,-0.072543740272522,-0.177740499377251 487 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_002842.jpg,0.889148235321045,0.0534631535410881,-0.0822092518210411,0.751097857952118,-0.0347707569599152,-0.122920975089073 488 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_006231.jpg,1.01205003261566,-0.254335641860962,0.224437594413757,1.02734470367432,-0.170849710702896,-0.0651835650205612 489 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_004879.jpg,0.905501008033752,0.0144479759037495,-0.0281114000827074,0.886580049991608,-0.234907597303391,0.141814380884171 490 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_001764.jpg,1.14346051216125,-0.0969009920954704,-0.0384340770542622,1.03630423545837,-0.213938370347023,0.215390369296074 491 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_007133.jpg,0.920186698436737,0.202442958950996,-0.10454860329628,0.827874064445496,0.224792867898941,-0.0782316625118256 492 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_003908.jpg,1.13682687282562,-0.147531643509865,0.094850055873394,1.05635726451874,0.0809516832232475,0.16557902097702 493 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_006709.jpg,0.97595477104187,-0.20886293053627,0.175522208213806,0.863064587116241,0.135726794600487,-0.197918742895126 494 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_001449.jpg,0.889258027076721,0.0911183133721352,-0.00976471230387688,0.961218476295471,0.0454803705215454,-0.214068919420242 495 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_008322.jpg,1.01798236370087,-0.112955257296562,0.0735800862312317,0.944644510746002,0.102515876293182,-0.157061025500298 496 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_006659.jpg,1.0199863910675,0.240285396575928,-0.253471970558167,1.06785345077515,0.0242723021656275,-0.201503217220306 497 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_001261.jpg,0.795743584632874,-0.151407912373543,0.0964901968836784,0.975319623947144,-0.170538544654846,-0.234564200043678 498 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_006733.jpg,1.15285396575928,-0.0194051545113325,0.20232754945755,0.845265805721283,-0.0866541042923927,-0.125740841031075 499 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2008_000737.jpg,1.18493866920471,0.178213760256767,-0.0294156260788441,1.05685830116272,-0.161450281739235,-0.104458689689636 500 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2010_004973.jpg,0.81360387802124,0.0871040970087051,-0.128609299659729,0.857355237007141,-0.15440645813942,-0.196741685271263 501 | TrainVal/VOCdevkit/VOC2011/JPEGImages/2011_000532.jpg,0.907564878463745,0.0824063867330551,0.072279304265976,1.126868724823,-0.135959535837173,0.114794448018074 502 | -------------------------------------------------------------------------------- /util/torch_util.py: -------------------------------------------------------------------------------- 1 | import shutil 2 | import torch 3 | from torch.autograd import Variable 4 | from os import makedirs, remove 5 | from os.path import exists, join, basename, dirname 6 | 7 | class BatchTensorToVars(object): 8 | """Convert tensors in dict batch to vars 9 | """ 10 | def __init__(self, use_cuda=True): 11 | self.use_cuda=use_cuda 12 | 13 | def __call__(self, batch): 14 | batch_var = {} 15 | for key,value in batch.items(): 16 | batch_var[key] = Variable(value,requires_grad=False) 17 | if self.use_cuda: 18 | batch_var[key] = batch_var[key].cuda() 19 | 20 | return batch_var 21 | 22 | def save_checkpoint(state, is_best, file): 23 | model_dir = dirname(file) 24 | model_fn = basename(file) 25 | # make dir if needed (should be non-empty) 26 | if model_dir!='' and not exists(model_dir): 27 | makedirs(model_dir) 28 | torch.save(state, file) 29 | if is_best: 30 | shutil.copyfile(file, join(model_dir,'best_' + model_fn)) 31 | 32 | def str_to_bool(v): 33 | if v.lower() in ('yes', 'true', 't', 'y', '1'): 34 | return True 35 | elif v.lower() in ('no', 'false', 'f', 'n', '0'): 36 | return False 37 | else: 38 | raise argparse.ArgumentTypeError('Boolean value expected.') 39 | -------------------------------------------------------------------------------- /util/train_test_fn.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function, division 2 | 3 | def train(epoch,model,loss_fn,optimizer,dataloader,pair_generation_tnf,use_cuda=True,log_interval=50): 4 | model.train() 5 | train_loss = 0 6 | for batch_idx, batch in enumerate(dataloader): 7 | optimizer.zero_grad() 8 | tnf_batch = pair_generation_tnf(batch) 9 | theta = model(tnf_batch) 10 | loss = loss_fn(theta,tnf_batch['theta_GT']) 11 | loss.backward() 12 | optimizer.step() 13 | train_loss += loss.data.cpu().numpy()[0] 14 | if batch_idx % log_interval == 0: 15 | print('Train Epoch: {} [{}/{} ({:.0f}%)]\t\tLoss: {:.6f}'.format( 16 | epoch, batch_idx , len(dataloader), 17 | 100. * batch_idx / len(dataloader), loss.data[0])) 18 | train_loss /= len(dataloader) 19 | print('Train set: Average loss: {:.4f}'.format(train_loss)) 20 | return train_loss 21 | 22 | def test(model,loss_fn,dataloader,pair_generation_tnf,use_cuda=True): 23 | model.eval() 24 | test_loss = 0 25 | for batch_idx, batch in enumerate(dataloader): 26 | tnf_batch = pair_generation_tnf(batch) 27 | theta = model(tnf_batch) 28 | loss = loss_fn(theta,tnf_batch['theta_GT']) 29 | test_loss += loss.data.cpu().numpy()[0] 30 | 31 | test_loss /= len(dataloader) 32 | print('Test set: Average loss: {:.4f}'.format(test_loss)) 33 | return test_loss --------------------------------------------------------------------------------