├── 7Scenes_config.json ├── CambridgeLandmarks_config.json ├── CambridgeLandmarks_finetune_config.json ├── README.md ├── datasets ├── 7Scenes │ ├── 7scenes_all_scenes.csv │ ├── abs_7scenes_pose.csv_chess_test.csv │ ├── abs_7scenes_pose.csv_chess_train.csv │ ├── abs_7scenes_pose.csv_fire_test.csv │ ├── abs_7scenes_pose.csv_fire_train.csv │ ├── abs_7scenes_pose.csv_heads_test.csv │ ├── abs_7scenes_pose.csv_heads_train.csv │ ├── abs_7scenes_pose.csv_office_test.csv │ ├── abs_7scenes_pose.csv_office_train.csv │ ├── abs_7scenes_pose.csv_pumpkin_test.csv │ ├── abs_7scenes_pose.csv_pumpkin_train.csv │ ├── abs_7scenes_pose.csv_redkitchen_test.csv │ ├── abs_7scenes_pose.csv_redkitchen_train.csv │ ├── abs_7scenes_pose.csv_stairs_test.csv │ └── abs_7scenes_pose.csv_stairs_train.csv ├── CambridgeLandmarks │ ├── abs_cambridge_pose_sorted.csv_GreatCourt_test.csv │ ├── abs_cambridge_pose_sorted.csv_GreatCourt_train.csv │ ├── abs_cambridge_pose_sorted.csv_KingsCollege_test.csv │ ├── abs_cambridge_pose_sorted.csv_KingsCollege_train.csv │ ├── abs_cambridge_pose_sorted.csv_OldHospital_test.csv │ ├── abs_cambridge_pose_sorted.csv_OldHospital_train.csv │ ├── abs_cambridge_pose_sorted.csv_ShopFacade_test.csv │ ├── abs_cambridge_pose_sorted.csv_ShopFacade_train.csv │ ├── abs_cambridge_pose_sorted.csv_StMarysChurch_test.csv │ ├── abs_cambridge_pose_sorted.csv_StMarysChurch_train.csv │ ├── abs_cambridge_pose_sorted.csv_Street_test.csv │ ├── abs_cambridge_pose_sorted.csv_Street_train.csv │ ├── cambridge_five_scenes.csv │ └── cambridge_four_scenes.csv └── CameraPoseDataset.py ├── example_configs.json ├── img ├── cropped_teaser_small.pdf └── teaser.PNG ├── main.py ├── models ├── backbones │ └── efficient-net-b0.pth ├── pose_losses.py ├── pose_regressors.py ├── posenet │ └── PoseNet.py └── transposenet │ ├── EMSTransPoseNet.py │ ├── MSTransPoseNet.py │ ├── backbone.py │ ├── pencoder.py │ ├── transformer.py │ └── transformer_encoder.py ├── plots ├── ms-transformer-activation-maps-example.pickle └── plot_activation_maps.py ├── requirements.txt ├── scripts └── combine_scenes.py └── util ├── log_config.json └── utils.py /7Scenes_config.json: -------------------------------------------------------------------------------- 1 | { 2 | "general": { 3 | "n_freq_print": 5, 4 | "n_freq_checkpoint": 10, 5 | "n_workers": 4, 6 | "device_id": "cuda:0" 7 | }, 8 | "ems-transposenet": 9 | { 10 | "batch_size": 8, 11 | "equalize_scenes": false, 12 | "num_scenes": 7, 13 | "learnable": true, 14 | "s_x": 0.0, 15 | "s_q": -3.0, 16 | "lr": 1e-4, 17 | "norm": 2, 18 | "weight_decay": 1e-4, 19 | "eps": 1e-10, 20 | "lr_scheduler_gamma": 0.1, 21 | "lr_scheduler_step_size": 10, 22 | "n_epochs": 30, 23 | "num_t_encoder_layers": 6, 24 | "num_t_decoder_layers": 6, 25 | "num_rot_encoder_layers": 4, 26 | "num_rot_decoder_layers": 4, 27 | "dim_feedforward": 256, 28 | "hidden_dim":256, 29 | "dropout": 0.1, 30 | "nheads": 4, 31 | "reduction": ["reduction_4", "reduction_3"], 32 | "freeze": false, 33 | "freeze_exclude_phrase": "regressor_head_rot" 34 | } 35 | 36 | 37 | } 38 | 39 | -------------------------------------------------------------------------------- /CambridgeLandmarks_config.json: -------------------------------------------------------------------------------- 1 | { 2 | "general": { 3 | "n_freq_print": 5, 4 | "n_freq_checkpoint": 10, 5 | "n_workers": 4, 6 | "device_id": "cuda:0" 7 | }, 8 | "ems-transposenet": 9 | { 10 | "batch_size": 8, 11 | "equalize_scenes": true, 12 | "num_scenes": 4, 13 | "learnable": true, 14 | "s_x": -3.0, 15 | "s_q": -6.5, 16 | "lr": 1e-4, 17 | "norm": 2, 18 | "weight_decay": 1e-4, 19 | "eps": 1e-10, 20 | "lr_scheduler_gamma": 0.1, 21 | "lr_scheduler_step_size": 200, 22 | "n_epochs": 600, 23 | "num_t_encoder_layers": 6, 24 | "num_t_decoder_layers": 6, 25 | "num_rot_encoder_layers": 6, 26 | "num_rot_decoder_layers": 6, 27 | "dim_feedforward": 256, 28 | "hidden_dim":256, 29 | "dropout": 0.1, 30 | "nheads": 4, 31 | "reduction": ["reduction_4", "reduction_3"], 32 | "freeze": false, 33 | "freeze_exclude_phrase": ["regressor_head_t", "transformer_t"], 34 | "no_augment": true 35 | } 36 | 37 | 38 | } 39 | 40 | -------------------------------------------------------------------------------- /CambridgeLandmarks_finetune_config.json: -------------------------------------------------------------------------------- 1 | { 2 | "general": { 3 | "n_freq_print": 5, 4 | "n_freq_checkpoint": 10, 5 | "n_workers": 4, 6 | "device_id": "cuda:0" 7 | }, 8 | "ems-transposenet": 9 | { 10 | "batch_size": 8, 11 | "equalize_scenes": true, 12 | "num_scenes": 4, 13 | "learnable": false, 14 | "s_x": 1.0, 15 | "s_q": 0.0, 16 | "lr": 1e-4, 17 | "norm": 2, 18 | "weight_decay": 1e-4, 19 | "eps": 1e-10, 20 | "lr_scheduler_gamma": 0.1, 21 | "lr_scheduler_step_size": 20, 22 | "n_epochs": 60, 23 | "num_t_encoder_layers": 6, 24 | "num_t_decoder_layers": 6, 25 | "num_rot_encoder_layers": 6, 26 | "num_rot_decoder_layers": 6, 27 | "dim_feedforward": 256, 28 | "hidden_dim":256, 29 | "dropout": 0.1, 30 | "nheads": 4, 31 | "reduction": ["reduction_4", "reduction_3"], 32 | "freeze": true, 33 | "freeze_exclude_phrase": ["regressor_head_t", "transformer_t"], 34 | "no_augment": false 35 | } 36 | 37 | 38 | } 39 | 40 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Learning Multi-Scene Camera Pose Regression with Transformers (Oral ICCV2021) 2 | Official PyTorch implementation of a multi-scene camera pose regression paradigm with Transformers, for details see our paper [Learning Multi-Scene Absolute Pose Regression with Transformers](https://arxiv.org/abs/2103.11468). 3 | 4 | 5 | The figure below illustrates our approach: two transformers separately attend to position- and orientation- informative features from a convolutional backbone. Scene-specific queries (0-3) are further encoded with aggregated activation maps into latent representations, from which a 6 | single output is selected. The strongest response, shown as an overlaid color-coded heatmap of attention weights, is obtained with the output associated with the input image's scene. The selected outputs are used to regress the position x and the orientation q. 7 | ![Multi-Scene Camera Pose Regression Illustration](./img/teaser.PNG) 8 | 9 | --- 10 | 11 | ### Repository Overview 12 | 13 | This code implements: 14 | 15 | 1. Training of a Transformer-based architecture for multi-scene absolute pose regression 16 | 2. Training of a PoseNet-like (CNN based) architecture for single scene pose regression 17 | 3. Testing of the models implemented in 1-2 18 | 19 | --- 20 | 21 | ### Prerequisites 22 | 23 | In order to run this repository you will need: 24 | 25 | 1. Python3 (tested with Python 3.7.7, 3.8.5), PyTorch 26 | 2. Set up dependencies with ```pip install -r requirements.txt``` 27 | 3. Download the [Cambridge Landmarks](http://mi.eng.cam.ac.uk/projects/relocalisation/#dataset) dataset and the [7Scenes](https://www.microsoft.com/en-us/research/project/rgb-d-dataset-7-scenes/) dataset 28 | 29 | 30 | ### Pretrained Models 31 | You can download our pretrained models for the 7Scenes dataset and the Cambridge dataset (before and after finetuning), from here: [pretrained models](https://drive.google.com/drive/folders/1wBoQ95A-YmQhxysEkri-ojl6PSnfMkdm?usp=sharing) 32 | 33 | ### Usage 34 | 35 | The entry point for training and testing is the main.py script in the root directory 36 | 37 | For detailed explanation of the options run:) 38 | ``` 39 | python main.py -h 40 | ``` 41 | For example, in order to train our model on the 7Scenes dataset run: 42 | ``` 43 | python main.py ems-transposenet train ./models/backbones/efficient-net-b0.pth /path/to/7scenes-datasets ./datasets/7Scenes/7scenes_all_scenes.csv 7Scenes_config.json 44 | ``` 45 | Your checkpoints (.pth file saved based on the number you specify in the configuration file) and log file 46 | will be saved under an 'out' folder. 47 | 48 | To run on cambridge, you will need to change the configuration file to ```CambridgeLandmarks_config.json``` for initial training and ```CambridgeLandmarks_finetune_config.json``` for fine-tuning (see details in our paper). 49 | 50 | In order to test your model, for example on the fire scene from the 7Scenes dataset: 51 | ``` 52 | python main.py ems-transposenet test ./models/backbones/efficient-net-b0.pth /path/to/7scenes-datasets ./datasets/7Scenes/abs_7scenes_pose.csv_fire_test.csv 7Scenes_config.json --checkpoint_path 53 | ``` 54 | ### Citation 55 | If you find this repository useful, please consider giving a star and citation: 56 | ``` 57 | @article{Shavit21, 58 | title={Learning Multi-Scene Absolute Pose Regression with Transformers}, 59 | author={Shavit, Yoli and Ferens, Ron and Keller, Yosi}, 60 | journal={arXiv preprint arXiv:2103.11468}, 61 | year={2021} 62 | } 63 | 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /datasets/CambridgeLandmarks/abs_cambridge_pose_sorted.csv_KingsCollege_test.csv: -------------------------------------------------------------------------------- 1 | scene,split,seq,img_path,t1,t2,t3,q1,q2,q3,q4 2 | KingsCollege,test,seq7,KingsCollege/seq7/frame00001.png,-39.114574,-16.434146,1.580481,0.60409,0.5470149999999999,-0.39416,0.424839 3 | KingsCollege,test,seq7,KingsCollege/seq7/frame00002.png,-38.987651,-16.333623,1.4080489999999999,0.6075689999999999,0.546396,-0.392806,0.421918 4 | KingsCollege,test,seq7,KingsCollege/seq7/frame00003.png,-39.003547999999995,-16.294218,1.547187,0.6069140000000001,0.550287,-0.38844,0.42184499999999997 5 | KingsCollege,test,seq7,KingsCollege/seq7/frame00004.png,-38.754687,-16.184989,1.62409,0.6171399999999999,0.54698,-0.38003200000000004,0.418959 6 | KingsCollege,test,seq7,KingsCollege/seq7/frame00005.png,-38.328727,-16.037059,1.6846349999999999,0.6337649999999999,0.5320600000000001,-0.370847,0.421575 7 | KingsCollege,test,seq7,KingsCollege/seq7/frame00006.png,-37.579731,-15.826912,1.6583150000000002,0.6302800000000001,0.538737,-0.365744,0.422778 8 | KingsCollege,test,seq7,KingsCollege/seq7/frame00007.png,-36.910072,-15.679901999999998,1.612457,0.630602,0.53341,-0.371394,0.424125 9 | KingsCollege,test,seq7,KingsCollege/seq7/frame00008.png,-36.187556,-15.283161999999999,1.8189849999999999,0.644113,0.560526,-0.34599,0.38887 10 | KingsCollege,test,seq7,KingsCollege/seq7/frame00009.png,-35.650949,-15.306225,1.702727,0.647379,0.5442819999999999,-0.349532,0.403094 11 | KingsCollege,test,seq7,KingsCollege/seq7/frame00010.png,-35.026903000000004,-15.278819,1.5398479999999999,0.654489,0.543334,-0.342117,0.39923400000000003 12 | KingsCollege,test,seq7,KingsCollege/seq7/frame00011.png,-34.187139,-14.773166,1.807015,0.6524949999999999,0.550711,-0.342289,0.392181 13 | KingsCollege,test,seq7,KingsCollege/seq7/frame00012.png,-33.518578999999995,-14.645795999999999,1.6481729999999999,0.6569659999999999,0.531542,-0.34089899999999995,0.41188199999999997 14 | KingsCollege,test,seq7,KingsCollege/seq7/frame00013.png,-32.903157,-14.548988,1.464914,0.654342,0.541226,-0.338489,0.405383 15 | KingsCollege,test,seq7,KingsCollege/seq7/frame00014.png,-32.151277,-14.286741000000001,1.375209,0.655395,0.538127,-0.33979899999999996,0.40671199999999996 16 | KingsCollege,test,seq7,KingsCollege/seq7/frame00015.png,-31.415422999999997,-14.009665,1.5465010000000001,0.674922,0.548503,-0.315396,0.379671 17 | KingsCollege,test,seq7,KingsCollege/seq7/frame00016.png,-30.613969,-14.003082999999998,1.5963049999999999,0.6672170000000001,0.535779,-0.325913,0.401924 18 | KingsCollege,test,seq7,KingsCollege/seq7/frame00017.png,-29.845609000000003,-13.873187,1.498556,0.658673,0.561319,-0.31094,0.392922 19 | KingsCollege,test,seq7,KingsCollege/seq7/frame00018.png,-29.269544,-13.728495,1.594069,0.6657649999999999,0.545036,-0.315019,0.400569 20 | KingsCollege,test,seq7,KingsCollege/seq7/frame00019.png,-28.463041999999998,-13.666061,1.594805,0.664652,0.5450689999999999,-0.315639,0.401883 21 | KingsCollege,test,seq7,KingsCollege/seq7/frame00020.png,-27.572460999999997,-13.690306,1.494322,0.653788,0.532517,-0.33645,0.41927 22 | KingsCollege,test,seq7,KingsCollege/seq7/frame00021.png,-26.819516999999998,-13.74724,1.4622709999999999,0.666445,0.558229,-0.303743,0.389836 23 | KingsCollege,test,seq7,KingsCollege/seq7/frame00022.png,-26.069779999999998,-13.883237,1.650105,0.6762090000000001,0.538876,-0.29587199999999997,0.40597300000000003 24 | KingsCollege,test,seq7,KingsCollege/seq7/frame00023.png,-25.306145,-14.080827,1.784188,0.672492,0.5478970000000001,-0.299737,0.39714099999999997 25 | KingsCollege,test,seq7,KingsCollege/seq7/frame00024.png,-24.710929999999998,-14.667284,1.646102,0.643159,0.521205,-0.342827,0.444029 26 | KingsCollege,test,seq7,KingsCollege/seq7/frame00025.png,-23.660957999999997,-14.852443,1.744996,0.627253,0.558269,-0.348565,0.41640299999999997 27 | KingsCollege,test,seq7,KingsCollege/seq7/frame00026.png,-22.98005,-15.229048,1.661614,0.610755,0.549177,-0.37769400000000003,0.42746899999999993 28 | KingsCollege,test,seq7,KingsCollege/seq7/frame00027.png,-22.258832,-15.582319,1.699754,0.6300680000000001,0.565083,-0.346911,0.404163 29 | KingsCollege,test,seq7,KingsCollege/seq7/frame00028.png,-21.519864000000002,-15.97047,1.73384,0.638432,0.556592,-0.337607,0.410649 30 | KingsCollege,test,seq7,KingsCollege/seq7/frame00029.png,-20.932895000000002,-16.398778,1.58764,0.649817,0.579078,-0.31463,0.378702 31 | KingsCollege,test,seq7,KingsCollege/seq7/frame00030.png,-20.134839000000003,-16.64177,1.735459,0.672315,0.574745,-0.296687,0.360053 32 | KingsCollege,test,seq7,KingsCollege/seq7/frame00031.png,-19.509803,-17.016859,1.8283939999999999,0.680741,0.591615,-0.263813,0.34203 33 | KingsCollege,test,seq7,KingsCollege/seq7/frame00032.png,-18.6256,-17.393665,1.836093,0.65877,0.575333,-0.3144,0.36900900000000003 34 | KingsCollege,test,seq7,KingsCollege/seq7/frame00033.png,-17.857495,-17.56878,1.790984,0.656993,0.584342,-0.32018,0.352689 35 | KingsCollege,test,seq7,KingsCollege/seq7/frame00034.png,-17.040426,-17.714710999999998,1.846034,0.657814,0.57735,-0.331544,0.352173 36 | KingsCollege,test,seq7,KingsCollege/seq7/frame00035.png,-16.41497,-18.00238,1.7330400000000001,0.6652710000000001,0.590037,-0.314774,0.331945 37 | KingsCollege,test,seq7,KingsCollege/seq7/frame00036.png,-15.492117000000002,-18.038837,2.012505,0.676508,0.58096,-0.310246,0.3295 38 | KingsCollege,test,seq7,KingsCollege/seq7/frame00037.png,-14.823916,-18.303939,1.7433779999999999,0.6854680000000001,0.575526,-0.292651,0.33654 39 | KingsCollege,test,seq7,KingsCollege/seq7/frame00038.png,-13.902669,-18.223222,1.869704,0.676583,0.571875,-0.308713,0.346252 40 | KingsCollege,test,seq7,KingsCollege/seq7/frame00039.png,-13.182436,-18.442966000000002,1.724784,0.678307,0.569025,-0.30814600000000003,0.348075 41 | KingsCollege,test,seq7,KingsCollege/seq7/frame00040.png,-12.339217999999999,-18.478848,1.774631,0.677755,0.5624100000000001,-0.318602,0.350479 42 | KingsCollege,test,seq7,KingsCollege/seq7/frame00041.png,-11.531299,-18.548329000000003,1.807577,0.685505,0.565523,-0.301249,0.34571 43 | KingsCollege,test,seq7,KingsCollege/seq7/frame00042.png,-10.703305,-18.439226,1.876607,0.677126,0.569889,-0.305359,0.351403 44 | KingsCollege,test,seq7,KingsCollege/seq7/frame00043.png,-9.931183,-18.680198999999998,1.6875240000000002,0.690301,0.581122,-0.291632,0.31738299999999997 45 | KingsCollege,test,seq7,KingsCollege/seq7/frame00044.png,-9.085261000000001,-18.609865,1.8234130000000002,0.692639,0.575331,-0.284477,0.329117 46 | KingsCollege,test,seq7,KingsCollege/seq7/frame00045.png,-8.413352,-18.817093,1.798918,0.708845,0.5849949999999999,-0.25904699999999997,0.297008 47 | KingsCollege,test,seq7,KingsCollege/seq7/frame00046.png,-7.6037740000000005,-18.817994,1.9545860000000002,0.717915,0.575522,-0.253223,0.29875 48 | KingsCollege,test,seq7,KingsCollege/seq7/frame00047.png,-6.843852,-19.194916,1.7521799999999998,0.718287,0.5806899999999999,-0.24204699999999998,0.297111 49 | KingsCollege,test,seq7,KingsCollege/seq7/frame00048.png,-6.092491000000001,-19.389024,1.980602,0.7271449999999999,0.579574,-0.234742,0.283285 50 | KingsCollege,test,seq7,KingsCollege/seq7/frame00049.png,-5.386179,-19.751707,1.851691,0.723023,0.592302,-0.22491399999999998,0.275372 51 | KingsCollege,test,seq7,KingsCollege/seq7/frame00050.png,-4.598479,-20.011251,1.8900119999999998,0.725292,0.5788770000000001,-0.241972,0.283376 52 | KingsCollege,test,seq7,KingsCollege/seq7/frame00051.png,-3.963772,-20.312341,1.893778,0.723698,0.5939260000000001,-0.232298,0.26372399999999996 53 | KingsCollege,test,seq7,KingsCollege/seq7/frame00052.png,-3.253335,-20.480189000000003,1.8897979999999999,0.7249899999999999,0.5938359999999999,-0.23477399999999998,0.258128 54 | KingsCollege,test,seq7,KingsCollege/seq7/frame00053.png,-2.4702830000000002,-20.774158,1.759759,0.736172,0.593938,-0.21472,0.24327600000000002 55 | KingsCollege,test,seq7,KingsCollege/seq7/frame00054.png,-1.9101290000000002,-20.86295,1.822718,0.749814,0.593862,-0.189459,0.22183899999999998 56 | KingsCollege,test,seq7,KingsCollege/seq7/frame00055.png,-1.131067,-21.084283,1.874709,0.74478,0.596975,-0.18905999999999998,0.230607 57 | KingsCollege,test,seq7,KingsCollege/seq7/frame00056.png,-0.318291,-21.044916,1.979469,0.742911,0.603992,-0.177733,0.22734899999999997 58 | KingsCollege,test,seq7,KingsCollege/seq7/frame00057.png,0.442729,-21.277573999999998,1.786215,0.740726,0.599125,-0.202078,0.22701999999999997 59 | KingsCollege,test,seq7,KingsCollege/seq7/frame00058.png,1.3291110000000002,-21.285416,1.8492259999999998,0.744088,0.599272,-0.20541199999999998,0.21215900000000001 60 | KingsCollege,test,seq7,KingsCollege/seq7/frame00059.png,2.011176,-21.496994,1.7491860000000001,0.74224,0.6126520000000001,-0.185565,0.198248 61 | KingsCollege,test,seq7,KingsCollege/seq7/frame00060.png,2.763441,-21.570304,1.8231279999999999,0.736954,0.6203890000000001,-0.18853399999999998,0.190975 62 | KingsCollege,test,seq7,KingsCollege/seq7/frame00061.png,3.512889,-21.796685999999998,1.6687,0.7435390000000001,0.606749,-0.184085,0.21240900000000001 63 | KingsCollege,test,seq7,KingsCollege/seq7/frame00062.png,4.324028,-21.996924,1.791973,0.735588,0.620108,-0.187697,0.197852 64 | KingsCollege,test,seq7,KingsCollege/seq7/frame00063.png,5.062083,-22.13585,1.807266,0.7327779999999999,0.618931,-0.195359,0.204442 65 | KingsCollege,test,seq7,KingsCollege/seq7/frame00064.png,5.871245,-22.145514000000002,1.906262,0.740236,0.6180859999999999,-0.170983,0.201954 66 | KingsCollege,test,seq7,KingsCollege/seq7/frame00065.png,6.6235289999999996,-22.285303,1.907085,0.748097,0.608516,-0.179827,0.194219 67 | KingsCollege,test,seq7,KingsCollege/seq7/frame00066.png,7.480523,-22.373368,1.73082,0.765808,0.5989680000000001,-0.170964,0.159832 68 | KingsCollege,test,seq7,KingsCollege/seq7/frame00067.png,8.198709,-22.460964999999998,1.7482540000000002,0.764411,0.608538,-0.15282300000000001,0.148331 69 | KingsCollege,test,seq7,KingsCollege/seq7/frame00068.png,8.920337,-22.738723,1.83457,0.769459,0.613496,-0.12926600000000002,0.12184500000000001 70 | KingsCollege,test,seq7,KingsCollege/seq7/frame00069.png,9.711602000000001,-22.799802,1.608074,0.781506,0.608808,-0.097772,0.095087 71 | KingsCollege,test,seq7,KingsCollege/seq7/frame00070.png,10.23335,-23.024696,1.862208,0.777161,0.624425,-0.06468099999999999,0.043936 72 | KingsCollege,test,seq7,KingsCollege/seq7/frame00071.png,11.137815,-23.26375,1.980607,0.777863,0.624057,-0.05555499999999999,0.048954000000000004 73 | KingsCollege,test,seq7,KingsCollege/seq7/frame00072.png,11.91564,-23.576071,1.714673,0.776329,0.62856,-0.03782,0.028179000000000003 74 | KingsCollege,test,seq7,KingsCollege/seq7/frame00073.png,12.608373,-23.747977,1.845003,0.777898,0.627975,-0.021355000000000002,0.008143000000000001 75 | KingsCollege,test,seq7,KingsCollege/seq7/frame00074.png,13.236864,-24.132282,1.828876,0.769271,0.637893,-0.030718000000000002,0.01923 76 | KingsCollege,test,seq7,KingsCollege/seq7/frame00075.png,13.727763000000001,-24.404897000000002,2.025082,0.77717,0.6282409999999999,-0.034767,-0.010528000000000001 77 | KingsCollege,test,seq7,KingsCollege/seq7/frame00076.png,14.628859,-24.777264000000002,1.8819599999999999,0.762735,0.645918,-0.03175,0.004187 78 | KingsCollege,test,seq7,KingsCollege/seq7/frame00077.png,15.161935,-25.064914,2.094405,0.7697149999999999,0.637865,-0.023526,0.010625 79 | KingsCollege,test,seq7,KingsCollege/seq7/frame00078.png,15.885105,-25.527936999999998,1.8776680000000001,0.776165,0.630256,0.00915,-0.016152 80 | KingsCollege,test,seq7,KingsCollege/seq7/frame00079.png,16.542913000000002,-25.732379,2.042813,0.788732,0.614613,-0.0016589999999999999,0.012234 81 | KingsCollege,test,seq7,KingsCollege/seq7/frame00080.png,17.202593,-25.964246,1.917686,0.775751,0.62948,0.041408999999999994,-0.015837999999999998 82 | KingsCollege,test,seq7,KingsCollege/seq7/frame00081.png,17.877779999999998,-26.056916,1.943285,0.772265,0.634455,0.032077999999999995,-0.006606999999999999 83 | KingsCollege,test,seq7,KingsCollege/seq7/frame00082.png,18.804973,-26.229792,1.945266,0.767357,0.638709,0.0545,-0.015585 84 | KingsCollege,test,seq7,KingsCollege/seq7/frame00083.png,19.584452,-26.324690000000004,1.993557,0.76608,0.633166,0.085784,-0.069741 85 | KingsCollege,test,seq7,KingsCollege/seq7/frame00084.png,20.284757,-26.554089,1.704921,0.7613,0.635009,0.103977,-0.079835 86 | KingsCollege,test,seq7,KingsCollege/seq7/frame00085.png,21.019635,-26.439089000000003,1.9053650000000002,0.772953,0.624955,0.07852,-0.076218 87 | KingsCollege,test,seq7,KingsCollege/seq7/frame00086.png,21.843061,-26.318040000000003,1.9712619999999998,0.771946,0.632664,0.041652999999999996,-0.045845 88 | KingsCollege,test,seq7,KingsCollege/seq7/frame00087.png,22.71998,-26.110785,2.017998,0.776274,0.6277659999999999,0.050053,-0.028332 89 | KingsCollege,test,seq7,KingsCollege/seq7/frame00088.png,23.251434,-26.479859,1.510365,0.7841739999999999,0.620224,0.019787,-0.0013160000000000001 90 | KingsCollege,test,seq7,KingsCollege/seq7/frame00089.png,24.010295000000003,-26.440990000000003,2.054388,0.776831,0.626232,0.038133,-0.053971000000000005 91 | KingsCollege,test,seq7,KingsCollege/seq7/frame00090.png,24.933611,-26.514861,1.558637,0.791625,0.610671,0.011067,-0.016967 92 | KingsCollege,test,seq7,KingsCollege/seq7/frame00091.png,25.531671,-26.357883,1.7567720000000002,0.794085,0.6056010000000001,0.048069,-0.019102 93 | KingsCollege,test,seq7,KingsCollege/seq7/frame00092.png,26.542868,-26.612129,1.990189,0.790215,0.607124,0.072953,-0.040487999999999996 94 | KingsCollege,test,seq7,KingsCollege/seq7/frame00093.png,27.114362,-26.250571,1.9143459999999999,0.775687,0.618989,0.083341,-0.090642 95 | KingsCollege,test,seq7,KingsCollege/seq7/frame00094.png,27.816060999999998,-25.713179,1.874889,0.769877,0.630881,0.048542,-0.08319299999999999 96 | KingsCollege,test,seq7,KingsCollege/seq7/frame00095.png,28.171809000000003,-25.506527,1.822525,0.762428,0.638284,0.061967999999999995,-0.086355 97 | KingsCollege,test,seq7,KingsCollege/seq7/frame00096.png,28.873539,-25.035019000000002,1.813797,0.770605,0.631039,0.046422000000000005,-0.076175 98 | KingsCollege,test,seq7,KingsCollege/seq7/frame00097.png,29.519009000000004,-24.795583999999998,1.754097,0.748698,0.63915,0.109502,-0.137651 99 | KingsCollege,test,seq7,KingsCollege/seq7/frame00098.png,30.031667,-24.135448,1.7394060000000002,0.751185,0.628205,0.11034100000000001,-0.170014 100 | KingsCollege,test,seq7,KingsCollege/seq7/frame00099.png,30.573838000000002,-23.504232000000002,1.746393,0.724033,0.637074,0.14920999999999998,-0.21829 101 | KingsCollege,test,seq7,KingsCollege/seq7/frame00100.png,30.673723,-23.144318,1.590409,0.719554,0.647185,0.142015,-0.207905 102 | KingsCollege,test,seq7,KingsCollege/seq7/frame00101.png,31.396926,-22.666954,1.693398,0.716354,0.646226,0.150562,-0.21578000000000003 103 | KingsCollege,test,seq7,KingsCollege/seq7/frame00102.png,31.890465999999996,-22.265945000000002,1.830871,0.721809,0.636428,0.172512,-0.21021700000000001 104 | KingsCollege,test,seq7,KingsCollege/seq7/frame00103.png,32.248841999999996,-21.921128,1.8890330000000002,0.711631,0.644949,0.174206,-0.21742899999999998 105 | KingsCollege,test,seq2,KingsCollege/seq2/frame00001.png,65.420899,-35.664849,1.474799,0.651572,0.620833,0.30024,-0.31603200000000004 106 | KingsCollege,test,seq2,KingsCollege/seq2/frame00002.png,65.474678,-35.436834999999995,1.59999,0.650746,0.620279,0.302991,-0.316196 107 | KingsCollege,test,seq2,KingsCollege/seq2/frame00003.png,65.515111,-35.397531,1.71885,0.648756,0.618917,0.307399,-0.318691 108 | KingsCollege,test,seq2,KingsCollege/seq2/frame00004.png,65.15683299999999,-35.632574,1.626711,0.6476649999999999,0.608819,0.321294,-0.32655700000000004 109 | KingsCollege,test,seq2,KingsCollege/seq2/frame00005.png,64.053425,-35.684471,1.511922,0.648736,0.608755,0.311236,-0.334201 110 | KingsCollege,test,seq2,KingsCollege/seq2/frame00006.png,62.642648,-35.359387,1.506509,0.65793,0.6194310000000001,0.283033,-0.321442 111 | KingsCollege,test,seq2,KingsCollege/seq2/frame00007.png,60.937416000000006,-34.769914,1.520846,0.675375,0.600007,0.27387100000000003,-0.329931 112 | KingsCollege,test,seq2,KingsCollege/seq2/frame00008.png,59.48064,-34.301409,1.5467110000000002,0.677551,0.603757,0.259558,-0.3302 113 | KingsCollege,test,seq2,KingsCollege/seq2/frame00009.png,58.060887,-33.568937,1.9357990000000003,0.659991,0.6211899999999999,0.260646,-0.33256399999999997 114 | KingsCollege,test,seq2,KingsCollege/seq2/frame00010.png,56.376691,-33.555046999999995,1.620395,0.673108,0.600839,0.287531,-0.321317 115 | KingsCollege,test,seq2,KingsCollege/seq2/frame00011.png,54.707905000000004,-32.785491,1.6673380000000002,0.665511,0.615534,0.276844,-0.3187 116 | KingsCollege,test,seq2,KingsCollege/seq2/frame00012.png,52.951725,-32.51153,1.649876,0.666808,0.627747,0.280986,-0.286964 117 | KingsCollege,test,seq2,KingsCollege/seq2/frame00013.png,51.236881,-31.814558,1.816354,0.664994,0.610963,0.293628,-0.31351100000000004 118 | KingsCollege,test,seq2,KingsCollege/seq2/frame00014.png,49.686009999999996,-31.542042,1.641933,0.669488,0.620352,0.27300100000000005,-0.304007 119 | KingsCollege,test,seq2,KingsCollege/seq2/frame00015.png,47.81872,-31.095740000000003,1.865446,0.667864,0.61317,0.285328,-0.310753 120 | KingsCollege,test,seq2,KingsCollege/seq2/frame00016.png,46.077913,-30.988134999999996,1.636236,0.668421,0.617304,0.264881,-0.319353 121 | KingsCollege,test,seq2,KingsCollege/seq2/frame00017.png,44.261717,-30.12402,1.8292709999999999,0.681964,0.624273,0.23908800000000002,-0.296724 122 | KingsCollege,test,seq2,KingsCollege/seq2/frame00018.png,42.59356,-30.32525,1.65305,0.690112,0.6119680000000001,0.24616100000000002,-0.29773299999999997 123 | KingsCollege,test,seq2,KingsCollege/seq2/frame00019.png,40.835689,-29.964266,1.676046,0.69394,0.6311399999999999,0.21614,-0.27091 124 | KingsCollege,test,seq2,KingsCollege/seq2/frame00020.png,39.052884999999996,-29.070675,1.786923,0.7074699999999999,0.62946,0.201023,-0.250711 125 | KingsCollege,test,seq2,KingsCollege/seq2/frame00021.png,37.391115,-28.857567,1.904555,0.721933,0.613308,0.20781,-0.24388800000000002 126 | KingsCollege,test,seq2,KingsCollege/seq2/frame00022.png,35.823399,-28.637137,1.8657439999999998,0.696229,0.641301,0.21816100000000002,-0.23749499999999998 127 | KingsCollege,test,seq2,KingsCollege/seq2/frame00023.png,34.250713,-28.284919,1.820037,0.691678,0.657593,0.214038,-0.20818699999999998 128 | KingsCollege,test,seq2,KingsCollege/seq2/frame00024.png,32.798448,-27.809428999999998,1.8337189999999999,0.7014560000000001,0.6587310000000001,0.194652,-0.190116 129 | KingsCollege,test,seq2,KingsCollege/seq2/frame00025.png,31.435086,-27.894022999999997,2.0126060000000003,0.7071930000000001,0.630567,0.21843400000000002,-0.23355900000000002 130 | KingsCollege,test,seq2,KingsCollege/seq2/frame00026.png,30.476979999999998,-27.823019,2.097214,0.689695,0.6287470000000001,0.22269899999999998,-0.28178600000000004 131 | KingsCollege,test,seq2,KingsCollege/seq2/frame00027.png,29.749933000000002,-28.081827,1.8664830000000001,0.668271,0.645213,0.228198,-0.291616 132 | KingsCollege,test,seq2,KingsCollege/seq2/frame00028.png,29.106021000000002,-28.133399,1.70311,0.731597,0.617472,0.188338,-0.219139 133 | KingsCollege,test,seq2,KingsCollege/seq2/frame00029.png,28.283813000000002,-28.406858000000003,1.9917150000000001,0.695298,0.647519,0.199379,-0.239848 134 | KingsCollege,test,seq2,KingsCollege/seq2/frame00030.png,27.428372999999997,-28.176526000000003,1.8001619999999998,0.6836760000000001,0.67403,0.16745,-0.22412100000000001 135 | KingsCollege,test,seq2,KingsCollege/seq2/frame00031.png,26.716803000000002,-28.044949,1.993961,0.686766,0.683765,0.136926,-0.20510799999999998 136 | KingsCollege,test,seq2,KingsCollege/seq2/frame00032.png,26.536171999999997,-27.894728000000004,1.986256,0.695666,0.684385,0.127193,-0.177446 137 | KingsCollege,test,seq2,KingsCollege/seq2/frame00033.png,25.822611,-27.923540999999997,1.942434,0.7081529999999999,0.65733,0.14649,-0.212081 138 | KingsCollege,test,seq2,KingsCollege/seq2/frame00034.png,25.270767000000003,-27.590831,1.964343,0.69324,0.6809069999999999,0.134926,-0.193853 139 | KingsCollege,test,seq2,KingsCollege/seq2/frame00035.png,24.885554,-27.146634000000002,1.9196689999999998,0.682457,0.701719,0.12550999999999998,-0.161525 140 | KingsCollege,test,seq2,KingsCollege/seq2/frame00036.png,24.295339000000002,-26.922771,1.820972,0.6815260000000001,0.706946,0.109338,-0.15425899999999998 141 | KingsCollege,test,seq2,KingsCollege/seq2/frame00037.png,23.985989,-26.478699,2.105896,0.697299,0.693116,0.12221800000000001,-0.135746 142 | KingsCollege,test,seq2,KingsCollege/seq2/frame00038.png,23.178462,-26.182215,2.0592610000000002,0.729576,0.655586,0.13151500000000002,-0.14363099999999998 143 | KingsCollege,test,seq2,KingsCollege/seq2/frame00039.png,22.182492,-25.816673,1.921312,0.731982,0.65504,0.125468,-0.139222 144 | KingsCollege,test,seq2,KingsCollege/seq2/frame00040.png,20.990331,-25.396332,1.917402,0.738011,0.655101,0.094262,-0.13151400000000002 145 | KingsCollege,test,seq2,KingsCollege/seq2/frame00041.png,19.716314999999998,-25.093488,1.926848,0.745147,0.651885,0.09413300000000001,-0.104601 146 | KingsCollege,test,seq2,KingsCollege/seq2/frame00042.png,18.487009,-24.596167,1.877998,0.7510060000000001,0.6502859999999999,0.085662,-0.076031 147 | KingsCollege,test,seq2,KingsCollege/seq2/frame00043.png,16.942498,-24.478378,1.913141,0.733042,0.668439,0.09717100000000001,-0.079983 148 | KingsCollege,test,seq2,KingsCollege/seq2/frame00044.png,15.713788000000001,-23.89076,2.04509,0.742887,0.664975,0.058885,-0.049602999999999994 149 | KingsCollege,test,seq2,KingsCollege/seq2/frame00045.png,14.066624,-24.0122,1.9562580000000003,0.727741,0.6741159999999999,0.083287,-0.094996 150 | KingsCollege,test,seq2,KingsCollege/seq2/frame00046.png,12.615848,-23.444136,1.845602,0.727731,0.68555,-0.002402,-0.020569 151 | KingsCollege,test,seq2,KingsCollege/seq2/frame00047.png,10.743074,-23.194569,2.038243,0.730533,0.682398,-0.024878,0.00599 152 | KingsCollege,test,seq2,KingsCollege/seq2/frame00048.png,9.190721,-22.903337,2.018002,0.750139,0.658323,-0.031548,0.053915 153 | KingsCollege,test,seq2,KingsCollege/seq2/frame00049.png,7.578897,-22.303338,2.036418,0.7332569999999999,0.6724829999999999,-0.066005,0.075784 154 | KingsCollege,test,seq2,KingsCollege/seq2/frame00050.png,5.738534,-21.989335,1.923081,0.745687,0.661018,-0.064036,0.05391 155 | KingsCollege,test,seq2,KingsCollege/seq2/frame00051.png,4.07492,-21.531485999999997,2.1196770000000003,0.734309,0.659289,-0.118656,0.109769 156 | KingsCollege,test,seq2,KingsCollege/seq2/frame00052.png,2.331193,-21.026126,1.8842740000000002,0.720336,0.646438,-0.16708299999999998,0.18792999999999999 157 | KingsCollege,test,seq2,KingsCollege/seq2/frame00053.png,0.502577,-20.476069,1.9890700000000001,0.71532,0.6429779999999999,-0.178216,0.20769 158 | KingsCollege,test,seq2,KingsCollege/seq2/frame00054.png,-1.345,-20.110207,1.8797150000000002,0.690742,0.655883,-0.194221,0.23446 159 | KingsCollege,test,seq2,KingsCollege/seq2/frame00055.png,-3.333103,-19.690758,1.9652720000000001,0.7041970000000001,0.6401789999999999,-0.196215,0.236171 160 | KingsCollege,test,seq2,KingsCollege/seq2/frame00056.png,-5.1017339999999995,-19.098551,1.9219389999999998,0.677377,0.652143,-0.22385100000000002,0.256438 161 | KingsCollege,test,seq2,KingsCollege/seq2/frame00057.png,-7.08759,-18.692583,2.015063,0.6815100000000001,0.63472,-0.246317,0.268332 162 | KingsCollege,test,seq2,KingsCollege/seq2/frame00058.png,-9.017906,-18.339121,1.8618569999999999,0.6874439999999999,0.641992,-0.225948,0.253405 163 | KingsCollege,test,seq2,KingsCollege/seq2/frame00059.png,-10.964422,-18.003095000000002,1.948263,0.6671199999999999,0.654447,-0.24093699999999998,0.261915 164 | KingsCollege,test,seq2,KingsCollege/seq2/frame00060.png,-12.96027,-17.745061,1.905141,0.665089,0.638548,-0.267225,0.280186 165 | KingsCollege,test,seq2,KingsCollege/seq2/frame00061.png,-14.954063,-17.336136,1.8348200000000001,0.660323,0.620394,-0.285394,0.312465 166 | KingsCollege,test,seq3,KingsCollege/seq3/frame00001.png,-35.197725,-15.532348,1.576306,0.628037,0.538772,-0.344815,0.44316700000000003 167 | KingsCollege,test,seq3,KingsCollege/seq3/frame00002.png,-34.989102,-15.526461999999999,1.403498,0.629925,0.540327,-0.350186,0.43429399999999996 168 | KingsCollege,test,seq3,KingsCollege/seq3/frame00003.png,-34.900801,-15.358878,1.5633860000000002,0.625286,0.5459109999999999,-0.35329299999999997,0.431489 169 | KingsCollege,test,seq3,KingsCollege/seq3/frame00004.png,-34.5983,-15.145560000000001,1.659762,0.624355,0.549608,-0.362906,0.420013 170 | KingsCollege,test,seq3,KingsCollege/seq3/frame00005.png,-33.660942,-15.079173,1.792348,0.613662,0.555255,-0.377123,0.415799 171 | KingsCollege,test,seq3,KingsCollege/seq3/frame00006.png,-32.922984,-15.252195,1.780605,0.6142989999999999,0.534984,-0.403627,0.41655 172 | KingsCollege,test,seq3,KingsCollege/seq3/frame00007.png,-32.386951,-15.475078,1.550142,0.618131,0.546673,-0.378733,0.419075 173 | KingsCollege,test,seq3,KingsCollege/seq3/frame00008.png,-31.381890000000002,-15.441220000000001,1.758762,0.624146,0.554662,-0.372114,0.405368 174 | KingsCollege,test,seq3,KingsCollege/seq3/frame00009.png,-30.799877000000002,-15.707292,1.592149,0.63562,0.577703,-0.34949,0.374305 175 | KingsCollege,test,seq3,KingsCollege/seq3/frame00010.png,-29.97505,-15.670871,1.755439,0.63689,0.5772010000000001,-0.348815,0.373548 176 | KingsCollege,test,seq3,KingsCollege/seq3/frame00011.png,-29.326462,-15.998757000000001,1.6538849999999998,0.648566,0.581708,-0.333527,0.360191 177 | KingsCollege,test,seq3,KingsCollege/seq3/frame00012.png,-28.451109999999996,-16.099443,1.9064130000000001,0.637721,0.5843,-0.346335,0.363259 178 | KingsCollege,test,seq3,KingsCollege/seq3/frame00013.png,-27.75917,-16.342396,1.650983,0.641803,0.57898,-0.34517600000000004,0.365685 179 | KingsCollege,test,seq3,KingsCollege/seq3/frame00014.png,-26.943203000000004,-16.386902,1.818913,0.640231,0.5813520000000001,-0.34924499999999997,0.36078000000000005 180 | KingsCollege,test,seq3,KingsCollege/seq3/frame00015.png,-26.281513,-16.776485,1.504828,0.653812,0.5776560000000001,-0.344138,0.347005 181 | KingsCollege,test,seq3,KingsCollege/seq3/frame00016.png,-25.592520999999998,-16.986552,1.7103389999999998,0.655356,0.5767939999999999,-0.33962800000000004,0.349955 182 | KingsCollege,test,seq3,KingsCollege/seq3/frame00017.png,-24.743103,-17.156520999999998,1.6327559999999999,0.65825,0.592121,-0.31829,0.338809 183 | KingsCollege,test,seq3,KingsCollege/seq3/frame00018.png,-23.908076,-17.13786,1.732057,0.657148,0.601142,-0.318628,0.324441 184 | KingsCollege,test,seq3,KingsCollege/seq3/frame00019.png,-23.205457,-17.488494,1.697514,0.670892,0.588442,-0.323281,0.314847 185 | KingsCollege,test,seq3,KingsCollege/seq3/frame00020.png,-22.332044,-17.311181,1.8355650000000001,0.668366,0.593467,-0.326872,0.30698400000000003 186 | KingsCollege,test,seq3,KingsCollege/seq3/frame00021.png,-21.643557,-17.674844,1.581228,0.6643100000000001,0.594005,-0.32660300000000003,0.314929 187 | KingsCollege,test,seq3,KingsCollege/seq3/frame00022.png,-20.764098,-17.588699,1.7475310000000002,0.662049,0.597011,-0.330988,0.309381 188 | KingsCollege,test,seq3,KingsCollege/seq3/frame00023.png,-20.131545000000003,-17.893094,1.4826469999999998,0.667977,0.591507,-0.314736,0.323831 189 | KingsCollege,test,seq3,KingsCollege/seq3/frame00024.png,-19.22575,-17.828047,1.781465,0.655381,0.604295,-0.321686,0.319094 190 | KingsCollege,test,seq3,KingsCollege/seq3/frame00025.png,-18.482603,-18.064308999999998,1.507602,0.665905,0.594171,-0.320936,0.31706599999999996 191 | KingsCollege,test,seq3,KingsCollege/seq3/frame00026.png,-17.773808,-18.247232999999998,1.645731,0.662295,0.6102569999999999,-0.31490799999999997,0.299642 192 | KingsCollege,test,seq3,KingsCollege/seq3/frame00027.png,-17.040541,-18.506951,1.3865120000000002,0.672125,0.6033689999999999,-0.322315,0.283384 193 | KingsCollege,test,seq3,KingsCollege/seq3/frame00028.png,-16.171541,-18.488807,1.7988540000000002,0.664583,0.616472,-0.31813,0.277643 194 | KingsCollege,test,seq3,KingsCollege/seq3/frame00029.png,-15.44694,-18.719217999999998,1.7351349999999999,0.678796,0.59968,-0.29654899999999995,0.30278499999999997 195 | KingsCollege,test,seq3,KingsCollege/seq3/frame00030.png,-14.674403,-18.851122,1.7826830000000002,0.682258,0.610179,-0.277146,0.29222600000000004 196 | KingsCollege,test,seq3,KingsCollege/seq3/frame00031.png,-13.953789000000002,-19.207257000000002,1.497858,0.692379,0.6038979999999999,-0.280314,0.278104 197 | KingsCollege,test,seq3,KingsCollege/seq3/frame00032.png,-13.057288,-19.030974,1.810387,0.6814560000000001,0.624408,-0.27355799999999997,0.266266 198 | KingsCollege,test,seq3,KingsCollege/seq3/frame00033.png,-12.431569999999999,-19.402619,1.431984,0.704001,0.610005,-0.241154,0.27225 199 | KingsCollege,test,seq3,KingsCollege/seq3/frame00034.png,-11.624243,-19.338281,1.8146799999999998,0.693521,0.622262,-0.24080300000000002,0.27172199999999996 200 | KingsCollege,test,seq3,KingsCollege/seq3/frame00035.png,-10.880652,-19.515416000000002,1.592769,0.699763,0.614805,-0.249096,0.265139 201 | KingsCollege,test,seq3,KingsCollege/seq3/frame00036.png,-10.013308,-19.465902,1.787279,0.685823,0.6205069999999999,-0.260538,0.277014 202 | KingsCollege,test,seq3,KingsCollege/seq3/frame00037.png,-9.307181,-19.779749,1.694278,0.6759729999999999,0.620264,-0.275882,0.286744 203 | KingsCollege,test,seq3,KingsCollege/seq3/frame00038.png,-8.519983,-19.774672,1.73377,0.676746,0.617637,-0.286078,0.280533 204 | KingsCollege,test,seq3,KingsCollege/seq3/frame00039.png,-7.7071320000000005,-20.059667,1.770922,0.6750970000000001,0.617984,-0.29333400000000004,0.276213 205 | KingsCollege,test,seq3,KingsCollege/seq3/frame00040.png,-6.954472,-20.083192999999998,1.722779,0.683017,0.619273,-0.27400599999999997,0.27369499999999997 206 | KingsCollege,test,seq3,KingsCollege/seq3/frame00041.png,-6.066286,-20.419237,1.716882,0.680475,0.622691,-0.280335,0.26574899999999996 207 | KingsCollege,test,seq3,KingsCollege/seq3/frame00042.png,-5.262388,-20.34574,1.692534,0.691343,0.622567,-0.265085,0.253348 208 | KingsCollege,test,seq3,KingsCollege/seq3/frame00043.png,-4.4163809999999994,-20.568274,1.6315110000000002,0.694964,0.62102,-0.26464499999999996,0.24763200000000002 209 | KingsCollege,test,seq3,KingsCollege/seq3/frame00044.png,-3.5556980000000005,-20.520995000000003,1.779623,0.684884,0.642896,-0.243675,0.241333 210 | KingsCollege,test,seq3,KingsCollege/seq3/frame00045.png,-2.8058919999999996,-21.072321,1.714146,0.705244,0.618915,-0.258309,0.229897 211 | KingsCollege,test,seq3,KingsCollege/seq3/frame00046.png,-1.9874900000000002,-20.890493,1.861636,0.694691,0.638185,-0.237463,0.23181 212 | KingsCollege,test,seq3,KingsCollege/seq3/frame00047.png,-1.1792559999999999,-21.335031,1.667385,0.705685,0.6322479999999999,-0.232591,0.219484 213 | KingsCollege,test,seq3,KingsCollege/seq3/frame00048.png,-0.370476,-21.255275,1.828279,0.703252,0.63731,-0.224496,0.221077 214 | KingsCollege,test,seq3,KingsCollege/seq3/frame00049.png,0.379013,-21.66974,1.625053,0.711608,0.623632,-0.23088499999999998,0.22669299999999998 215 | KingsCollege,test,seq3,KingsCollege/seq3/frame00050.png,1.0835059999999999,-21.726651,1.7466599999999999,0.713601,0.6262310000000001,-0.21460100000000001,0.22924899999999998 216 | KingsCollege,test,seq3,KingsCollege/seq3/frame00051.png,1.9474200000000002,-21.995034,1.539901,0.709856,0.640837,-0.20773000000000003,0.20562199999999997 217 | KingsCollege,test,seq3,KingsCollege/seq3/frame00052.png,2.661493,-21.929875,1.8227240000000002,0.69484,0.670043,-0.18401900000000002,0.18541 218 | KingsCollege,test,seq3,KingsCollege/seq3/frame00053.png,3.411407,-22.252066,1.66925,0.7154520000000001,0.662323,-0.166462,0.147471 219 | KingsCollege,test,seq3,KingsCollege/seq3/frame00054.png,4.161118,-22.40413,2.041327,0.725252,0.6569010000000001,-0.15496400000000002,0.135932 220 | KingsCollege,test,seq3,KingsCollege/seq3/frame00055.png,4.971774,-22.487978,1.7356099999999999,0.745584,0.631868,-0.15295,0.146471 221 | KingsCollege,test,seq3,KingsCollege/seq3/frame00056.png,5.5956209999999995,-22.65783,1.909707,0.754562,0.635282,-0.117628,0.114962 222 | KingsCollege,test,seq3,KingsCollege/seq3/frame00057.png,6.523833,-22.996992000000002,1.849588,0.7629130000000001,0.626378,-0.11631500000000002,0.10993299999999999 223 | KingsCollege,test,seq3,KingsCollege/seq3/frame00058.png,7.166671000000001,-23.053888,2.065909,0.753807,0.6330720000000001,-0.127897,0.12098199999999999 224 | KingsCollege,test,seq3,KingsCollege/seq3/frame00059.png,7.944350999999999,-23.319791,1.512887,0.767716,0.617736,-0.119398,0.121484 225 | KingsCollege,test,seq3,KingsCollege/seq3/frame00060.png,8.768098,-23.637179,1.859119,0.76203,0.629329,-0.110383,0.105218 226 | KingsCollege,test,seq3,KingsCollege/seq3/frame00061.png,9.475024000000001,-23.799671,1.902305,0.760152,0.628127,-0.114325,0.120644 227 | KingsCollege,test,seq3,KingsCollege/seq3/frame00062.png,10.24206,-23.992528,1.948129,0.764317,0.624009,-0.12490699999999999,0.10406800000000001 228 | KingsCollege,test,seq3,KingsCollege/seq3/frame00063.png,11.049388,-24.292776,1.633273,0.77354,0.616034,-0.10923599999999999,0.101024 229 | KingsCollege,test,seq3,KingsCollege/seq3/frame00064.png,11.757283000000001,-24.567695999999998,1.9736049999999998,0.767476,0.6292840000000001,-0.08403200000000001,0.089005 230 | KingsCollege,test,seq3,KingsCollege/seq3/frame00065.png,12.529689,-24.816962,1.796,0.770357,0.631764,-0.05122,0.069288 231 | KingsCollege,test,seq3,KingsCollege/seq3/frame00066.png,13.162847,-24.937541,1.803064,0.7613770000000001,0.645142,-0.040283,0.049737 232 | KingsCollege,test,seq3,KingsCollege/seq3/frame00067.png,14.282715,-25.299585999999998,1.769999,0.765807,0.639588,-0.032936,0.058154 233 | KingsCollege,test,seq3,KingsCollege/seq3/frame00068.png,15.018277,-25.450999,1.829682,0.766824,0.641828,0.003867,-0.00472 234 | KingsCollege,test,seq3,KingsCollege/seq3/frame00069.png,15.888016,-25.675248,1.825791,0.774158,0.627282,0.061298000000000005,-0.058651999999999996 235 | KingsCollege,test,seq3,KingsCollege/seq3/frame00070.png,16.42683,-25.769647,1.6372959999999999,0.778673,0.624387,0.014879,-0.059895000000000004 236 | KingsCollege,test,seq3,KingsCollege/seq3/frame00071.png,17.305088,-25.981876,1.514049,0.7932739999999999,0.608049,-0.003072,-0.03136 237 | KingsCollege,test,seq3,KingsCollege/seq3/frame00072.png,18.29765,-26.072098,1.8454279999999998,0.774844,0.630791,0.0077480000000000005,-0.040749 238 | KingsCollege,test,seq3,KingsCollege/seq3/frame00073.png,19.114576,-26.259264,1.7556599999999998,0.774135,0.632433,0.016429,-0.021778 239 | KingsCollege,test,seq3,KingsCollege/seq3/frame00074.png,19.626718,-26.414757,1.7815990000000002,0.77875,0.626236,0.022438999999999997,-0.029557 240 | KingsCollege,test,seq3,KingsCollege/seq3/frame00075.png,20.474994,-26.581537,1.715441,0.770176,0.636402,0.025889,-0.033941000000000006 241 | KingsCollege,test,seq3,KingsCollege/seq3/frame00076.png,21.092053,-26.727456,1.713237,0.771927,0.6338010000000001,0.017929,-0.045863 242 | KingsCollege,test,seq3,KingsCollege/seq3/frame00077.png,21.916757999999998,-26.857009,1.819166,0.781069,0.621953,0.050066,-0.024458 243 | KingsCollege,test,seq3,KingsCollege/seq3/frame00078.png,22.657182000000002,-26.913615000000004,1.823798,0.78055,0.62187,0.047454,-0.042033 244 | KingsCollege,test,seq3,KingsCollege/seq3/frame00079.png,23.688416,-27.216404999999998,1.6955310000000001,0.7738,0.624942,0.072365,-0.07378 245 | KingsCollege,test,seq3,KingsCollege/seq3/frame00080.png,24.217606,-27.321169,1.67385,0.767494,0.621492,0.102499,-0.11914300000000001 246 | KingsCollege,test,seq3,KingsCollege/seq3/frame00081.png,25.146194,-27.572525,1.399887,0.786723,0.602585,0.062049,-0.118778 247 | KingsCollege,test,seq3,KingsCollege/seq3/frame00082.png,26.000104,-27.543227,1.692289,0.774889,0.615584,0.075424,-0.122128 248 | KingsCollege,test,seq3,KingsCollege/seq3/frame00083.png,26.968622999999997,-27.89753,1.960345,0.780266,0.6058640000000001,0.08236,-0.131645 249 | KingsCollege,test,seq3,KingsCollege/seq3/frame00084.png,27.726685999999997,-27.917309000000003,1.852859,0.775465,0.606874,0.095605,-0.14566400000000002 250 | KingsCollege,test,seq3,KingsCollege/seq3/frame00085.png,28.560854,-28.243059000000002,1.656036,0.783922,0.605803,0.072652,-0.114851 251 | KingsCollege,test,seq3,KingsCollege/seq3/frame00086.png,29.470839,-28.381273999999998,1.7478470000000002,0.771991,0.601384,0.10295,-0.178235 252 | KingsCollege,test,seq3,KingsCollege/seq3/frame00087.png,30.449776,-28.756481,1.853763,0.760884,0.610587,0.11030899999999999,-0.189924 253 | KingsCollege,test,seq3,KingsCollege/seq3/frame00088.png,31.032342,-28.702253000000002,1.814845,0.739466,0.621923,0.146619,-0.21190799999999999 254 | KingsCollege,test,seq3,KingsCollege/seq3/frame00089.png,32.021251,-28.557701,1.767918,0.7297560000000001,0.6228899999999999,0.159885,-0.232165 255 | KingsCollege,test,seq3,KingsCollege/seq3/frame00090.png,32.374559000000005,-28.803774,1.688052,0.715501,0.638917,0.169104,-0.226379 256 | KingsCollege,test,seq3,KingsCollege/seq3/frame00091.png,33.619752000000005,-29.127399,1.74417,0.7343850000000001,0.613951,0.176648,-0.229212 257 | KingsCollege,test,seq3,KingsCollege/seq3/frame00092.png,34.433395000000004,-29.220640999999997,1.8945299999999998,0.720023,0.626016,0.175725,-0.24246900000000002 258 | KingsCollege,test,seq3,KingsCollege/seq3/frame00093.png,35.317838,-29.518294,1.652304,0.71438,0.627302,0.185701,-0.248331 259 | KingsCollege,test,seq3,KingsCollege/seq3/frame00094.png,35.764334000000005,-29.382775,1.579626,0.700654,0.654293,0.161529,-0.234294 260 | KingsCollege,test,seq3,KingsCollege/seq3/frame00095.png,36.629540999999996,-29.605544000000002,1.9547970000000001,0.6865060000000001,0.670103,0.169653,-0.22558499999999998 261 | KingsCollege,test,seq3,KingsCollege/seq3/frame00096.png,37.226719,-29.931789000000002,1.602856,0.7039,0.6517430000000001,0.16713599999999998,-0.227644 262 | KingsCollege,test,seq3,KingsCollege/seq3/frame00097.png,38.072191,-29.983433,2.023823,0.695218,0.65571,0.193652,-0.221844 263 | KingsCollege,test,seq3,KingsCollege/seq3/frame00098.png,38.699098,-30.202205,1.606922,0.694258,0.662791,0.170909,-0.22249499999999997 264 | KingsCollege,test,seq3,KingsCollege/seq3/frame00099.png,39.311314,-30.590434000000002,1.6311930000000001,0.715271,0.664481,0.131422,-0.171989 265 | KingsCollege,test,seq3,KingsCollege/seq3/frame00100.png,40.294779,-30.262045,1.925529,0.70728,0.67003,0.146065,-0.17169600000000002 266 | KingsCollege,test,seq3,KingsCollege/seq3/frame00101.png,41.045486,-30.682359,1.8371529999999998,0.713186,0.657622,0.164026,-0.178871 267 | KingsCollege,test,seq3,KingsCollege/seq3/frame00102.png,41.507186,-30.772561,1.5432190000000001,0.711113,0.673233,0.130697,-0.154899 268 | KingsCollege,test,seq3,KingsCollege/seq3/frame00103.png,42.583733,-31.148673,2.000705,0.709004,0.6782020000000001,0.122767,-0.149276 269 | KingsCollege,test,seq3,KingsCollege/seq3/frame00104.png,43.612879,-31.13164,2.058776,0.69658,0.677056,0.157951,-0.177265 270 | KingsCollege,test,seq3,KingsCollege/seq3/frame00105.png,44.124544,-31.759509,2.025405,0.704503,0.641374,0.174683,-0.24859699999999998 271 | KingsCollege,test,seq3,KingsCollege/seq3/frame00106.png,44.846326,-32.140513,2.048338,0.674181,0.659217,0.20568499999999998,-0.261927 272 | KingsCollege,test,seq3,KingsCollege/seq3/frame00107.png,45.685916,-31.674661999999998,2.452373,0.6819109999999999,0.655975,0.190647,-0.26143299999999997 273 | KingsCollege,test,seq3,KingsCollege/seq3/frame00108.png,46.15834,-32.040366,1.576983,0.682121,0.67164,0.160728,-0.240369 274 | KingsCollege,test,seq3,KingsCollege/seq3/frame00109.png,47.012622,-32.123869,2.034306,0.689956,0.65499,0.184732,-0.24662199999999998 275 | KingsCollege,test,seq3,KingsCollege/seq3/frame00110.png,47.458483,-32.517983,1.865825,0.68938,0.665199,0.195653,-0.20972600000000002 276 | KingsCollege,test,seq3,KingsCollege/seq3/frame00111.png,48.614774,-32.497446000000004,1.6326379999999998,0.704627,0.664601,0.160221,-0.190093 277 | KingsCollege,test,seq3,KingsCollege/seq3/frame00112.png,49.077779,-32.592975,1.9249349999999998,0.702605,0.663098,0.171594,-0.192881 278 | KingsCollege,test,seq3,KingsCollege/seq3/frame00113.png,50.148641,-33.060285,1.7764669999999998,0.691631,0.658619,0.18051199999999998,-0.235125 279 | KingsCollege,test,seq3,KingsCollege/seq3/frame00114.png,50.509510999999996,-33.2992,1.7385279999999999,0.679654,0.665079,0.196882,-0.23870100000000002 280 | KingsCollege,test,seq3,KingsCollege/seq3/frame00115.png,51.410409,-34.035272,1.6051229999999999,0.686212,0.631095,0.221818,-0.285708 281 | KingsCollege,test,seq3,KingsCollege/seq3/frame00116.png,52.284159,-33.75905,1.6281290000000002,0.678108,0.640302,0.23099899999999998,-0.27716999999999997 282 | KingsCollege,test,seq3,KingsCollege/seq3/frame00117.png,52.651438,-33.927015000000004,1.7396150000000001,0.694545,0.651188,0.20773200000000003,-0.224518 283 | KingsCollege,test,seq3,KingsCollege/seq3/frame00118.png,53.33767099999999,-34.528124,1.47015,0.68833,0.660307,0.18854400000000002,-0.233767 284 | KingsCollege,test,seq3,KingsCollege/seq3/frame00119.png,54.345687,-34.23635,1.618328,0.6920810000000001,0.666151,0.185048,-0.207419 285 | KingsCollege,test,seq3,KingsCollege/seq3/frame00120.png,54.95024599999999,-34.587114,1.6487020000000001,0.6841119999999999,0.662738,0.207742,-0.22274000000000002 286 | KingsCollege,test,seq3,KingsCollege/seq3/frame00121.png,55.697766,-34.839988,1.563339,0.688117,0.657981,0.21351399999999998,-0.219016 287 | KingsCollege,test,seq3,KingsCollege/seq3/frame00122.png,56.480214000000004,-35.043024,1.723075,0.664446,0.6604180000000001,0.23701399999999997,-0.257264 288 | KingsCollege,test,seq3,KingsCollege/seq3/frame00123.png,57.232420999999995,-35.025240000000004,1.502953,0.6800430000000001,0.654926,0.219559,-0.24578000000000003 289 | KingsCollege,test,seq3,KingsCollege/seq3/frame00124.png,57.95933,-35.412237,1.4412969999999998,0.675309,0.672245,0.20169700000000002,-0.22663200000000003 290 | KingsCollege,test,seq3,KingsCollege/seq3/frame00125.png,58.873408,-35.081007,1.83264,0.668702,0.679099,0.19096400000000002,-0.234936 291 | KingsCollege,test,seq3,KingsCollege/seq3/frame00126.png,59.209627000000005,-35.71304,1.419191,0.669415,0.685185,0.1836,-0.220671 292 | KingsCollege,test,seq3,KingsCollege/seq3/frame00127.png,59.790335999999996,-36.289884,1.6091959999999998,0.699969,0.671412,0.160549,-0.18295799999999998 293 | KingsCollege,test,seq3,KingsCollege/seq3/frame00128.png,60.767351,-36.188643,1.539174,0.685343,0.66261,0.206066,-0.22088400000000002 294 | KingsCollege,test,seq3,KingsCollege/seq3/frame00129.png,61.67000899999999,-35.964148,1.547626,0.6904170000000001,0.6465609999999999,0.228059,-0.230807 295 | KingsCollege,test,seq3,KingsCollege/seq3/frame00130.png,62.425359,-36.550846,1.541783,0.674776,0.6388229999999999,0.252554,-0.269812 296 | KingsCollege,test,seq3,KingsCollege/seq3/frame00131.png,62.974726000000004,-36.408518,1.3934870000000001,0.656638,0.65298,0.25047600000000003,-0.282321 297 | KingsCollege,test,seq3,KingsCollege/seq3/frame00132.png,64.055363,-36.696005,1.74708,0.641752,0.647807,0.263862,-0.314446 298 | KingsCollege,test,seq3,KingsCollege/seq3/frame00133.png,64.519984,-36.781989,1.693645,0.658275,0.655277,0.235458,-0.286085 299 | KingsCollege,test,seq3,KingsCollege/seq3/frame00134.png,65.383349,-37.558214,1.5222200000000001,0.6112850000000001,0.675501,0.263291,-0.317342 300 | KingsCollege,test,seq3,KingsCollege/seq3/frame00135.png,66.02241,-37.009684,1.5013450000000002,0.6415609999999999,0.6786949999999999,0.22912,-0.274367 301 | KingsCollege,test,seq3,KingsCollege/seq3/frame00136.png,66.903182,-37.597024,1.76187,0.6246510000000001,0.674013,0.2637,-0.293225 302 | KingsCollege,test,seq3,KingsCollege/seq3/frame00137.png,67.543072,-37.853361,1.3755,0.654435,0.6616449999999999,0.234021,-0.28138 303 | KingsCollege,test,seq3,KingsCollege/seq3/frame00138.png,68.349158,-37.823584000000004,1.4123709999999998,0.648281,0.669854,0.22198,-0.285925 304 | KingsCollege,test,seq3,KingsCollege/seq3/frame00139.png,69.090633,-38.295722,1.44695,0.656101,0.670104,0.212684,-0.274333 305 | KingsCollege,test,seq3,KingsCollege/seq3/frame00140.png,69.87779300000001,-38.258068,1.688589,0.6315609999999999,0.664449,0.25516300000000003,-0.30745700000000004 306 | KingsCollege,test,seq3,KingsCollege/seq3/frame00141.png,70.653635,-38.472840999999995,1.6734639999999998,0.636145,0.638867,0.292725,-0.31856100000000004 307 | KingsCollege,test,seq3,KingsCollege/seq3/frame00142.png,71.34200600000001,-38.586870000000005,1.596849,0.650201,0.622815,0.301334,-0.313908 308 | KingsCollege,test,seq3,KingsCollege/seq3/frame00143.png,72.045994,-38.677634999999995,1.293038,0.6608109999999999,0.637939,0.264897,-0.293586 309 | KingsCollege,test,seq3,KingsCollege/seq3/frame00144.png,72.886854,-38.971542,1.659427,0.653224,0.642983,0.272808,-0.29231399999999996 310 | KingsCollege,test,seq3,KingsCollege/seq3/frame00145.png,73.409006,-38.787894,1.269161,0.678825,0.645491,0.24905300000000002,-0.24599000000000001 311 | KingsCollege,test,seq3,KingsCollege/seq3/frame00146.png,74.180663,-39.272692,1.671056,0.654822,0.664981,0.241992,-0.26542 312 | KingsCollege,test,seq3,KingsCollege/seq3/frame00147.png,74.961959,-39.105738,1.113821,0.675798,0.677447,0.18457300000000001,-0.224266 313 | KingsCollege,test,seq3,KingsCollege/seq3/frame00148.png,75.33936700000001,-39.897548,0.8999229999999999,0.686556,0.660359,0.18704300000000001,-0.239961 314 | KingsCollege,test,seq3,KingsCollege/seq3/frame00149.png,76.134862,-40.366852,1.4258,0.681157,0.658662,0.20554899999999998,-0.24482399999999999 315 | KingsCollege,test,seq3,KingsCollege/seq3/frame00150.png,77.184021,-40.998864000000005,1.9836169999999997,0.677711,0.655229,0.21704299999999999,-0.253525 316 | KingsCollege,test,seq3,KingsCollege/seq3/frame00151.png,77.22730899999999,-40.466798,0.638578,0.70822,0.6585449999999999,0.161296,-0.196792 317 | KingsCollege,test,seq3,KingsCollege/seq3/frame00152.png,78.05511,-41.757196,1.772416,0.723136,0.664041,0.127417,-0.141026 318 | KingsCollege,test,seq3,KingsCollege/seq3/frame00153.png,78.497264,-41.642593,1.749448,0.699013,0.6830390000000001,0.12262,-0.17263599999999998 319 | KingsCollege,test,seq3,KingsCollege/seq3/frame00154.png,79.29323199999999,-42.179272,1.537174,0.693231,0.6874520000000001,0.152108,-0.15395899999999998 320 | KingsCollege,test,seq3,KingsCollege/seq3/frame00155.png,80.107396,-41.269057000000004,1.30161,0.6872159999999999,0.6887300000000001,0.134844,-0.18762 321 | KingsCollege,test,seq3,KingsCollege/seq3/frame00156.png,80.679576,-42.981171,1.6909330000000002,0.676255,0.6915140000000001,0.183557,-0.175483 322 | KingsCollege,test,seq3,KingsCollege/seq3/frame00157.png,81.29604599999999,-43.514990999999995,2.048095,0.666162,0.693679,0.193293,-0.1941 323 | KingsCollege,test,seq3,KingsCollege/seq3/frame00158.png,81.68888000000001,-43.725473,1.541449,0.701129,0.6715369999999999,0.167976,-0.170999 324 | KingsCollege,test,seq3,KingsCollege/seq3/frame00159.png,82.43718100000001,-43.567202,1.683157,0.68934,0.656925,0.21397,-0.21789099999999997 325 | KingsCollege,test,seq3,KingsCollege/seq3/frame00160.png,83.86981999999999,-44.26924,1.467334,0.677481,0.631864,0.24776199999999998,-0.283515 326 | KingsCollege,test,seq3,KingsCollege/seq3/frame00161.png,84.65372099999999,-43.924327000000005,0.791126,0.662139,0.6091439999999999,0.300114,-0.316934 327 | KingsCollege,test,seq3,KingsCollege/seq3/frame00162.png,84.697138,-44.484970000000004,1.193427,0.671273,0.6044619999999999,0.292785,-0.31351999999999997 328 | KingsCollege,test,seq3,KingsCollege/seq3/frame00163.png,85.514718,-44.623726,0.306098,0.675549,0.6161399999999999,0.27619099999999996,-0.296182 329 | KingsCollege,test,seq3,KingsCollege/seq3/frame00164.png,86.30596899999999,-43.937875,1.077479,0.694409,0.643863,0.190304,-0.258884 330 | KingsCollege,test,seq3,KingsCollege/seq3/frame00165.png,87.46217,-44.93249,1.905784,0.668909,0.62473,0.243889,-0.320612 331 | KingsCollege,test,seq3,KingsCollege/seq3/frame00166.png,87.97094200000001,-44.118364,1.8508509999999998,0.670784,0.617777,0.253218,-0.322924 332 | KingsCollege,test,seq3,KingsCollege/seq3/frame00167.png,88.802838,-44.740111,0.961261,0.652982,0.598089,0.294915,-0.359068 333 | KingsCollege,test,seq3,KingsCollege/seq3/frame00168.png,89.253569,-44.210592999999996,2.259424,0.643529,0.596224,0.27282399999999996,-0.394909 334 | KingsCollege,test,seq3,KingsCollege/seq3/frame00169.png,89.980703,-44.458769000000004,1.404199,0.609342,0.582649,0.321567,-0.43106400000000006 335 | KingsCollege,test,seq3,KingsCollege/seq3/frame00170.png,90.44138000000001,-44.519197999999996,0.690766,0.6257659999999999,0.60756,0.289923,-0.393995 336 | KingsCollege,test,seq3,KingsCollege/seq3/frame00171.png,91.53885799999999,-44.493984999999995,1.588877,0.6355430000000001,0.646733,0.206157,-0.36785999999999996 337 | KingsCollege,test,seq3,KingsCollege/seq3/frame00172.png,91.623901,-44.407272,1.458999,0.621521,0.64772,0.241379,-0.368655 338 | KingsCollege,test,seq3,KingsCollege/seq3/frame00173.png,92.770472,-44.095908,1.2437559999999999,0.596852,0.592237,0.30944699999999997,-0.44414499999999996 339 | KingsCollege,test,seq3,KingsCollege/seq3/frame00174.png,92.948139,-44.026004,1.200078,0.607405,0.574774,0.335821,-0.433496 340 | KingsCollege,test,seq3,KingsCollege/seq3/frame00175.png,93.915472,-43.794138000000004,1.360823,0.605417,0.575723,0.326223,-0.44225699999999996 341 | KingsCollege,test,seq3,KingsCollege/seq3/frame00176.png,94.110339,-43.603871999999996,1.170585,0.609486,0.582856,0.348919,-0.408731 342 | KingsCollege,test,seq3,KingsCollege/seq3/frame00177.png,94.71614,-43.570409000000005,1.219343,0.613926,0.5787909999999999,0.329899,-0.423393 343 | KingsCollege,test,seq3,KingsCollege/seq3/frame00178.png,95.31596,-43.556121000000005,0.42918199999999995,0.62343,0.587391,0.31339,-0.409992 344 | KingsCollege,test,seq3,KingsCollege/seq3/frame00179.png,94.045424,-42.706223,-2.738007,0.7011539999999999,0.613271,0.189196,-0.310623 345 | -------------------------------------------------------------------------------- /datasets/CambridgeLandmarks/abs_cambridge_pose_sorted.csv_OldHospital_test.csv: -------------------------------------------------------------------------------- 1 | scene,split,seq,img_path,t1,t2,t3,q1,q2,q3,q4 2 | OldHospital,test,seq8,OldHospital/seq8/frame00001.png,15.079913000000001,-1.294258,34.616848,0.197906,0.980066,0.004963,-0.016713 3 | OldHospital,test,seq8,OldHospital/seq8/frame00002.png,14.921882,-1.035777,34.435489000000004,0.19624,0.9804229999999999,0.007025,-0.014535 4 | OldHospital,test,seq8,OldHospital/seq8/frame00003.png,14.96248,-1.373924,34.754432,0.200495,0.979549,0.007609,-0.015068000000000002 5 | OldHospital,test,seq8,OldHospital/seq8/frame00004.png,16.375821,-0.308767,35.086571,0.199399,0.9790059999999999,0.042246,-0.001786 6 | OldHospital,test,seq8,OldHospital/seq8/frame00005.png,14.584117,-1.8793790000000001,34.747283,0.216464,0.9697319999999999,-0.007915,0.112694 7 | OldHospital,test,seq8,OldHospital/seq8/frame00006.png,12.978022,-1.615883,34.682209,0.19652999999999998,0.975211,-0.032057,0.096497 8 | OldHospital,test,seq8,OldHospital/seq8/frame00007.png,13.103497,-1.8353549999999998,35.038024,0.216121,0.9683860000000001,-0.051703,0.113348 9 | OldHospital,test,seq8,OldHospital/seq8/frame00008.png,11.841817,-1.4803709999999999,34.472095,0.236666,0.9588549999999999,-0.073486,0.138516 10 | OldHospital,test,seq8,OldHospital/seq8/frame00009.png,11.047837,-1.8887639999999999,35.1125,0.248482,0.955535,-0.063197,0.14565699999999998 11 | OldHospital,test,seq8,OldHospital/seq8/frame00010.png,10.675619000000001,-1.960209,35.478528999999995,0.228452,0.959633,-0.053605999999999994,0.155049 12 | OldHospital,test,seq8,OldHospital/seq8/frame00011.png,9.170699,-2.0588330000000004,35.445674,0.2379,0.958192,-0.019949,0.15771500000000002 13 | OldHospital,test,seq8,OldHospital/seq8/frame00012.png,7.827777,-1.8980240000000002,35.255066,0.233569,0.9592209999999999,-0.020234000000000002,0.157898 14 | OldHospital,test,seq8,OldHospital/seq8/frame00013.png,6.842369000000001,-2.880604,34.232603999999995,0.263394,0.955259,-0.023188999999999998,0.132537 15 | OldHospital,test,seq8,OldHospital/seq8/frame00014.png,6.736495,-1.247295,35.128902000000004,0.229625,0.962477,-0.027587999999999998,0.141947 16 | OldHospital,test,seq8,OldHospital/seq8/frame00015.png,6.17833,-1.010306,35.466626,0.243046,0.9612430000000001,-0.03397,0.125643 17 | OldHospital,test,seq8,OldHospital/seq8/frame00016.png,5.794637000000001,-1.485019,35.5012,0.224584,0.96429,-0.01718,0.139327 18 | OldHospital,test,seq8,OldHospital/seq8/frame00017.png,5.230265,-1.586581,35.658621000000004,0.24154099999999998,0.961684,-0.06888,0.109901 19 | OldHospital,test,seq8,OldHospital/seq8/frame00018.png,3.9477029999999997,-1.5256040000000002,36.226252,0.23439200000000002,0.959835,-0.069768,0.137516 20 | OldHospital,test,seq8,OldHospital/seq8/frame00019.png,3.128172,-1.854375,36.106384000000006,0.23456799999999997,0.965843,-0.055907000000000005,0.09486699999999999 21 | OldHospital,test,seq8,OldHospital/seq8/frame00020.png,3.112603,-2.16225,36.100198,0.23091,0.964339,-0.05354400000000001,0.117748 22 | OldHospital,test,seq8,OldHospital/seq8/frame00021.png,2.116333,-1.497729,36.298944,0.21711399999999997,0.9679,-0.058168,0.11246600000000001 23 | OldHospital,test,seq8,OldHospital/seq8/frame00022.png,1.3322479999999999,-1.808717,36.310643,0.21386,0.9692620000000001,-0.042165,0.11408900000000001 24 | OldHospital,test,seq8,OldHospital/seq8/frame00023.png,0.993402,-1.27691,37.16788,0.21088600000000002,0.9723069999999999,-0.062552,0.078954 25 | OldHospital,test,seq8,OldHospital/seq8/frame00024.png,1.3710950000000002,-1.805843,37.594446999999995,0.186851,0.9656290000000001,-0.030846,0.178035 26 | OldHospital,test,seq8,OldHospital/seq8/frame00025.png,-1.313668,-1.595118,37.669306,0.18687,0.968026,-0.017521000000000002,0.166426 27 | OldHospital,test,seq8,OldHospital/seq8/frame00026.png,-0.548276,-3.340661,38.124644,0.201823,0.97211,-0.019579,0.11783699999999998 28 | OldHospital,test,seq8,OldHospital/seq8/frame00027.png,-1.8311259999999998,-1.400113,38.852940000000004,0.143359,0.974864,-0.029689,0.167947 29 | OldHospital,test,seq8,OldHospital/seq8/frame00028.png,-2.1642930000000002,-2.475709,39.749844,0.20989499999999997,0.970985,-0.07308200000000001,0.088267 30 | OldHospital,test,seq8,OldHospital/seq8/frame00029.png,-2.058178,-3.3063089999999997,39.757709000000006,0.204708,0.9760969999999999,-0.07118300000000001,-0.016216 31 | OldHospital,test,seq8,OldHospital/seq8/frame00030.png,-2.362318,-3.4804470000000003,40.279043,0.202995,0.97675,-0.067051,-0.016005000000000002 32 | OldHospital,test,seq8,OldHospital/seq8/frame00031.png,-3.056289,-3.632154,40.562156,0.197188,0.976765,-0.053378999999999996,0.064787 33 | OldHospital,test,seq8,OldHospital/seq8/frame00032.png,-2.9440009999999996,-2.921968,41.534503,0.202471,0.97339,-0.032838,0.102175 34 | OldHospital,test,seq8,OldHospital/seq8/frame00033.png,-3.7253849999999997,-2.6270919999999998,42.372887,0.19256900000000002,0.9734940000000001,-0.036772000000000006,0.11778699999999999 35 | OldHospital,test,seq8,OldHospital/seq8/frame00034.png,-4.519557,-1.836612,42.740333,0.194353,0.960939,-0.046573,0.191452 36 | OldHospital,test,seq8,OldHospital/seq8/frame00035.png,-5.176654,-2.283851,42.815324,0.199218,0.9519549999999999,-0.070289,0.221706 37 | OldHospital,test,seq8,OldHospital/seq8/frame00036.png,-5.274505,-2.264853,43.256499,0.197151,0.951738,-0.055811,0.22849899999999998 38 | OldHospital,test,seq8,OldHospital/seq8/frame00037.png,-7.355010000000001,-2.571473,42.676111,0.15013900000000002,0.9667469999999999,-0.019609,0.206092 39 | OldHospital,test,seq8,OldHospital/seq8/frame00038.png,-6.491364,-3.3548620000000002,42.75421,0.126911,0.9768870000000001,-0.035614,0.168277 40 | OldHospital,test,seq8,OldHospital/seq8/frame00039.png,-7.420686999999999,-2.554691,43.104682000000004,0.114793,0.981299,-0.048724,0.14663099999999998 41 | OldHospital,test,seq8,OldHospital/seq8/frame00040.png,-7.920192,-3.3574949999999997,42.550332,0.170485,0.956951,-0.11068800000000001,0.20718899999999998 42 | OldHospital,test,seq8,OldHospital/seq8/frame00041.png,-8.226216,-3.0474669999999997,43.096624,0.164609,0.944261,-0.071363,0.276013 43 | OldHospital,test,seq8,OldHospital/seq8/frame00042.png,-9.569072,-3.186466,41.921813,0.185146,0.926509,-0.058944,0.32222199999999995 44 | OldHospital,test,seq8,OldHospital/seq8/frame00043.png,-9.907716,-1.955264,41.310289000000004,0.164936,0.937942,-0.030091000000000003,0.303573 45 | OldHospital,test,seq8,OldHospital/seq8/frame00044.png,-10.098741,-2.452313,40.781828999999995,0.16849,0.919799,-0.008191,0.35428000000000004 46 | OldHospital,test,seq8,OldHospital/seq8/frame00045.png,-9.817172,-2.138902,40.378147999999996,0.165721,0.9349350000000001,-0.008284999999999999,0.31363 47 | OldHospital,test,seq8,OldHospital/seq8/frame00046.png,-9.956614,-2.855083,39.730726000000004,0.170347,0.921568,-0.005287,0.34880700000000003 48 | OldHospital,test,seq8,OldHospital/seq8/frame00047.png,-9.971954,-3.7101629999999997,38.478459,0.16008,0.9392950000000001,0.005954999999999999,0.30341999999999997 49 | OldHospital,test,seq8,OldHospital/seq8/frame00048.png,-10.294504,-2.661848,37.941099,0.128608,0.954235,0.008965,0.269842 50 | OldHospital,test,seq8,OldHospital/seq8/frame00049.png,-10.412172,-2.436211,37.734299,0.117323,0.9673879999999999,0.008745999999999999,0.224318 51 | OldHospital,test,seq8,OldHospital/seq8/frame00050.png,-10.74595,-2.100535,37.029222,0.131054,0.964722,0.007240000000000001,0.228219 52 | OldHospital,test,seq8,OldHospital/seq8/frame00051.png,-11.261707000000001,-2.645372,36.208326,0.13616,0.959958,-0.009641,0.244641 53 | OldHospital,test,seq8,OldHospital/seq8/frame00052.png,-11.508345,-2.6043580000000004,35.812866,0.13106800000000002,0.955472,-0.003152,0.264356 54 | OldHospital,test,seq8,OldHospital/seq8/frame00053.png,-12.09498,-2.362059,35.299116999999995,0.11531300000000001,0.9666309999999999,-0.026633999999999998,0.227194 55 | OldHospital,test,seq8,OldHospital/seq8/frame00054.png,-12.788996000000001,-1.7468569999999999,35.387457,0.107412,0.973916,-0.009226999999999999,0.199665 56 | OldHospital,test,seq8,OldHospital/seq8/frame00055.png,-13.387978,-1.720093,34.49803,0.147715,0.9662219999999999,-0.02335,0.209883 57 | OldHospital,test,seq8,OldHospital/seq8/frame00056.png,-13.569998000000002,-1.519519,34.168596,0.140753,0.960844,-0.015902,0.23814699999999997 58 | OldHospital,test,seq8,OldHospital/seq8/frame00057.png,-14.080585999999998,-1.900254,33.725811,0.141552,0.953923,-0.005675,0.264502 59 | OldHospital,test,seq8,OldHospital/seq8/frame00058.png,-14.548817999999999,-1.522141,32.914186,0.13652,0.9553790000000001,-0.016863999999999997,0.261397 60 | OldHospital,test,seq8,OldHospital/seq8/frame00059.png,-15.084141,-1.181022,32.800698,0.104993,0.945333,-0.015274000000000001,0.308366 61 | OldHospital,test,seq8,OldHospital/seq8/frame00060.png,-15.595047000000001,-1.590694,31.881168,0.145574,0.9416030000000001,0.008457,0.303514 62 | OldHospital,test,seq8,OldHospital/seq8/frame00061.png,-16.060491,-1.601667,31.953088,0.12490599999999999,0.9496479999999999,-0.01484,0.286961 63 | OldHospital,test,seq8,OldHospital/seq8/frame00062.png,-16.388492000000003,-1.421606,31.289481,0.141933,0.950417,-0.005609,0.276642 64 | OldHospital,test,seq8,OldHospital/seq8/frame00063.png,-16.599838000000002,-1.086108,30.951626,0.13675,0.953918,0.012709999999999999,0.266793 65 | OldHospital,test,seq8,OldHospital/seq8/frame00064.png,-16.547531,-1.103073,29.91651,0.164762,0.947413,-0.0037270000000000003,0.27431300000000003 66 | OldHospital,test,seq8,OldHospital/seq8/frame00065.png,-16.097158,-1.025608,29.790257,0.173735,0.9384,0.005215,0.298653 67 | OldHospital,test,seq8,OldHospital/seq8/frame00066.png,-15.835704999999999,-1.280052,29.365899,0.204648,0.919033,0.028487000000000002,0.335687 68 | OldHospital,test,seq8,OldHospital/seq8/frame00067.png,-15.192814000000002,-1.532238,29.265622999999998,0.19525599999999999,0.922257,0.006829000000000001,0.333571 69 | OldHospital,test,seq8,OldHospital/seq8/frame00068.png,-14.711838,-1.7855419999999997,28.472046999999996,0.18381199999999998,0.916899,-0.004595,0.354243 70 | OldHospital,test,seq8,OldHospital/seq8/frame00069.png,-13.974738,-1.359767,28.32627,0.162649,0.929177,0.00182,0.331922 71 | OldHospital,test,seq8,OldHospital/seq8/frame00070.png,-13.512134,-0.759425,28.242309999999996,0.16883599999999999,0.920484,0.00499,0.35239000000000004 72 | OldHospital,test,seq8,OldHospital/seq8/frame00071.png,-12.769632000000001,-0.6976319999999999,28.048401000000002,0.158694,0.9270309999999999,0.015938,0.339375 73 | OldHospital,test,seq8,OldHospital/seq8/frame00072.png,-11.70428,-1.057046,28.212559000000002,0.149751,0.922351,0.005372,0.356109 74 | OldHospital,test,seq8,OldHospital/seq8/frame00073.png,-11.071762,-1.451681,28.254740999999996,0.140244,0.926667,0.008034,0.348649 75 | OldHospital,test,seq8,OldHospital/seq8/frame00074.png,-10.458419000000001,-0.957989,28.196,0.103379,0.924158,-0.016015,0.367408 76 | OldHospital,test,seq8,OldHospital/seq8/frame00075.png,-9.832276,-1.5871870000000001,27.864464,0.145526,0.913947,-0.004164,0.378821 77 | OldHospital,test,seq8,OldHospital/seq8/frame00076.png,-9.102349,-1.482815,27.91805,0.130646,0.921493,0.004789,0.365731 78 | OldHospital,test,seq8,OldHospital/seq8/frame00077.png,-8.575811999999999,-1.388875,27.381038,0.140287,0.92591,0.012256999999999999,0.350514 79 | OldHospital,test,seq8,OldHospital/seq8/frame00078.png,-7.8643529999999995,-1.2499209999999998,27.098078000000005,0.149059,0.9321149999999999,0.020464,0.32942899999999997 80 | OldHospital,test,seq8,OldHospital/seq8/frame00079.png,-7.770271000000001,-1.0958700000000001,26.258521000000002,0.161177,0.925869,0.029820999999999997,0.340439 81 | OldHospital,test,seq8,OldHospital/seq8/frame00080.png,-7.339857,-1.328143,25.975832999999998,0.167429,0.923991,0.023733,0.342993 82 | OldHospital,test,seq8,OldHospital/seq8/frame00081.png,-7.341732,-1.208189,25.370520000000003,0.163846,0.9229799999999999,0.010088,0.348081 83 | OldHospital,test,seq8,OldHospital/seq8/frame00082.png,-7.228996,-0.60678,24.648854999999998,0.165511,0.929018,0.013646,0.33067399999999997 84 | OldHospital,test,seq8,OldHospital/seq8/frame00083.png,-7.363319000000001,-0.8163,24.144074,0.17863800000000002,0.911027,-0.008133,0.371554 85 | OldHospital,test,seq8,OldHospital/seq8/frame00084.png,-7.545725999999999,-0.7213430000000001,23.261826,0.196157,0.904958,0.005084,0.377556 86 | OldHospital,test,seq8,OldHospital/seq8/frame00085.png,-7.82327,-0.765335,22.655203,0.18753499999999998,0.898777,0.011168,0.39611399999999997 87 | OldHospital,test,seq8,OldHospital/seq8/frame00086.png,-8.043603,-0.883056,22.049685999999998,0.195406,0.903791,0.03986,0.378669 88 | OldHospital,test,seq8,OldHospital/seq8/frame00087.png,-8.499443,-0.486641,21.310253,0.200251,0.899151,0.035295,0.38753200000000004 89 | OldHospital,test,seq8,OldHospital/seq8/frame00088.png,-8.708099,-0.548297,20.858987,0.215252,0.895618,0.012697,0.389069 90 | OldHospital,test,seq8,OldHospital/seq8/frame00089.png,-9.069987,-0.473829,20.287694000000002,0.205275,0.8858879999999999,0.024587,0.41528400000000004 91 | OldHospital,test,seq8,OldHospital/seq8/frame00090.png,-9.551484,-0.71116,19.600647,0.23343200000000003,0.8872760000000001,0.00492,0.397778 92 | OldHospital,test,seq8,OldHospital/seq8/frame00091.png,-9.945998,-0.44839399999999996,19.282232,0.226185,0.895101,-0.014211000000000001,0.383969 93 | OldHospital,test,seq8,OldHospital/seq8/frame00092.png,-10.405574,-0.564844,18.618423,0.238746,0.8855870000000001,0.0022670000000000004,0.398412 94 | OldHospital,test,seq8,OldHospital/seq8/frame00093.png,-10.921836,-0.5629689999999999,17.972041,0.227287,0.882425,0.030733999999999997,0.41075900000000004 95 | OldHospital,test,seq8,OldHospital/seq8/frame00094.png,-11.044686,-0.404233,17.104404000000002,0.203862,0.884925,0.026757999999999997,0.417891 96 | OldHospital,test,seq8,OldHospital/seq8/frame00095.png,-11.571814,-0.355405,16.779974,0.20755500000000002,0.8940870000000001,0.001929,0.396894 97 | OldHospital,test,seq8,OldHospital/seq8/frame00096.png,-11.995302,-0.3578,15.969373999999998,0.216031,0.8915040000000001,-0.024619,0.397423 98 | OldHospital,test,seq8,OldHospital/seq8/frame00097.png,-12.359447,-0.23885399999999998,15.598385,0.214901,0.873993,0.010043999999999999,0.435721 99 | OldHospital,test,seq8,OldHospital/seq8/frame00098.png,-12.597659,-0.017914,14.967017000000002,0.203348,0.8793850000000001,0.033797,0.42917299999999997 100 | OldHospital,test,seq8,OldHospital/seq8/frame00099.png,-12.531205,0.08741399999999999,14.332837,0.205172,0.872229,0.044307,0.441767 101 | OldHospital,test,seq8,OldHospital/seq8/frame00100.png,-12.398810000000001,0.311822,14.089575,0.193494,0.8580629999999999,0.03451,0.474445 102 | OldHospital,test,seq8,OldHospital/seq8/frame00101.png,-12.03003,-0.091472,13.367871,0.20904499999999998,0.8412129999999999,0.033503,0.497532 103 | OldHospital,test,seq8,OldHospital/seq8/frame00102.png,-11.510183999999999,0.232463,12.979080999999999,0.19917200000000002,0.826752,0.035966000000000005,0.524898 104 | OldHospital,test,seq8,OldHospital/seq8/frame00103.png,-10.955047,0.06205499999999999,12.585082,0.208089,0.825782,0.049041,0.521899 105 | OldHospital,test,seq8,OldHospital/seq8/frame00104.png,-10.326003,0.36243800000000004,12.445017,0.198811,0.816974,0.062133,0.5377430000000001 106 | OldHospital,test,seq8,OldHospital/seq8/frame00105.png,-9.703664999999999,0.10180499999999999,12.164951,0.22265500000000002,0.82037,0.05365399999999999,0.523965 107 | OldHospital,test,seq8,OldHospital/seq8/frame00106.png,-9.129819,0.24168299999999998,11.864133,0.20619400000000002,0.820398,0.065855,0.5292399999999999 108 | OldHospital,test,seq8,OldHospital/seq8/frame00107.png,-8.540609,0.019445,11.540969,0.22939600000000002,0.822382,0.071809,0.515663 109 | OldHospital,test,seq8,OldHospital/seq8/frame00108.png,-8.118350999999999,0.346642,11.311763000000001,0.209606,0.840342,0.07550499999999999,0.494155 110 | OldHospital,test,seq8,OldHospital/seq8/frame00109.png,-7.817305999999999,0.23471799999999998,10.810875,0.219273,0.8393799999999999,0.067004,0.49282 111 | OldHospital,test,seq8,OldHospital/seq8/frame00110.png,-7.887492,0.516713,10.34052,0.20940999999999999,0.8576090000000001,0.071075,0.46433 112 | OldHospital,test,seq8,OldHospital/seq8/frame00111.png,-8.127051,0.431605,9.881317999999998,0.219363,0.83049,0.053642999999999996,0.509205 113 | OldHospital,test,seq8,OldHospital/seq8/frame00112.png,-8.612066,0.6399819999999999,9.614224,0.23015100000000002,0.834576,0.06640599999999999,0.49608800000000003 114 | OldHospital,test,seq8,OldHospital/seq8/frame00113.png,-9.136325,0.29899899999999996,9.134936,0.21291100000000002,0.8276469999999999,0.045801,0.517273 115 | OldHospital,test,seq8,OldHospital/seq8/frame00114.png,-10.003556,0.29852399999999996,9.401434,0.201464,0.825475,0.034206,0.526149 116 | OldHospital,test,seq8,OldHospital/seq8/frame00115.png,-10.466186,0.396688,9.274656,0.169536,0.811912,0.035815,0.557471 117 | OldHospital,test,seq8,OldHospital/seq8/frame00116.png,-11.107244,0.44720200000000004,9.366142,0.189623,0.800028,0.057398000000000005,0.566307 118 | OldHospital,test,seq8,OldHospital/seq8/frame00117.png,-11.815058,0.48335200000000006,9.582904,0.171375,0.789098,0.057555999999999996,0.587062 119 | OldHospital,test,seq8,OldHospital/seq8/frame00118.png,-12.445335,0.341817,9.441057,0.179106,0.804385,0.051642999999999994,0.5641079999999999 120 | OldHospital,test,seq8,OldHospital/seq8/frame00119.png,-13.079711999999999,0.35796100000000003,9.372317,0.166983,0.805248,0.03283,0.567992 121 | OldHospital,test,seq8,OldHospital/seq8/frame00120.png,-13.758345000000002,0.343316,9.417628,0.191831,0.8058489999999999,0.058580999999999994,0.557114 122 | OldHospital,test,seq8,OldHospital/seq8/frame00121.png,-14.481793,0.190166,9.492127,0.19131199999999998,0.7988460000000001,0.039167,0.568956 123 | OldHospital,test,seq8,OldHospital/seq8/frame00122.png,-15.113062,0.13037200000000002,9.583039,0.20180499999999998,0.8068649999999999,0.030806,0.554342 124 | OldHospital,test,seq8,OldHospital/seq8/frame00123.png,-15.877396,0.229879,9.769394,0.16858199999999998,0.787507,0.035744,0.591721 125 | OldHospital,test,seq8,OldHospital/seq8/frame00124.png,-16.375213000000002,0.014491,9.763063,0.180576,0.77988,0.020567,0.598963 126 | OldHospital,test,seq8,OldHospital/seq8/frame00125.png,-16.989613000000002,-0.050422,9.802269,0.168775,0.7964060000000001,0.037341,0.5795319999999999 127 | OldHospital,test,seq8,OldHospital/seq8/frame00126.png,-17.649625,0.30285300000000004,10.009066,0.148226,0.801813,0.072767,0.5743090000000001 128 | OldHospital,test,seq4,OldHospital/seq4/frame00001.png,4.6361669999999995,0.329348,10.229614999999999,0.25702800000000003,0.8994340000000001,0.079071,0.344533 129 | OldHospital,test,seq4,OldHospital/seq4/frame00002.png,4.667675,0.327381,10.271954,0.253696,0.901495,0.074549,0.342619 130 | OldHospital,test,seq4,OldHospital/seq4/frame00003.png,4.692456,0.241296,10.305062,0.251342,0.90271,0.07418999999999999,0.341229 131 | OldHospital,test,seq4,OldHospital/seq4/frame00004.png,4.847868,0.36126199999999997,10.382508999999999,0.22757199999999997,0.9138870000000001,0.05566,0.331546 132 | OldHospital,test,seq4,OldHospital/seq4/frame00005.png,5.205551,0.45247299999999996,10.720222999999999,0.20535799999999998,0.942519,0.059123,0.256884 133 | OldHospital,test,seq4,OldHospital/seq4/frame00006.png,5.607176,0.22373600000000002,11.167607,0.216629,0.945641,0.059746,0.23508400000000002 134 | OldHospital,test,seq4,OldHospital/seq4/frame00007.png,6.194985,0.132026,11.709719999999999,0.22264099999999998,0.9491430000000001,0.03613,0.219665 135 | OldHospital,test,seq4,OldHospital/seq4/frame00008.png,6.601192999999999,0.153165,12.283806,0.22050300000000003,0.954741,0.037533,0.19605799999999998 136 | OldHospital,test,seq4,OldHospital/seq4/frame00009.png,7.040317,0.283916,12.676001,0.202312,0.964397,0.030577999999999998,0.167549 137 | OldHospital,test,seq4,OldHospital/seq4/frame00010.png,7.632604,0.239486,13.210491000000001,0.215256,0.9643870000000001,0.031831,0.150364 138 | OldHospital,test,seq4,OldHospital/seq4/frame00011.png,8.047865,0.037096,13.784476999999999,0.24327800000000002,0.964986,0.015526,0.09683 139 | OldHospital,test,seq4,OldHospital/seq4/frame00012.png,8.556682,0.010896,14.325209,0.236646,0.964333,0.018659000000000002,0.117096 140 | OldHospital,test,seq4,OldHospital/seq4/frame00013.png,9.298053,-0.128558,14.861312,0.22020100000000004,0.973707,0.013863999999999998,0.05669299999999999 141 | OldHospital,test,seq4,OldHospital/seq4/frame00014.png,9.829873,-0.01605,15.351907,0.212227,0.9732120000000001,0.00035,0.088422 142 | OldHospital,test,seq4,OldHospital/seq4/frame00015.png,10.118360000000001,-0.257073,15.766917000000001,0.221595,0.974234,-0.007237,0.041371 143 | OldHospital,test,seq4,OldHospital/seq4/frame00016.png,10.655113,-0.270431,16.333641,0.206913,0.978022,-0.012517,0.02246 144 | OldHospital,test,seq4,OldHospital/seq4/frame00017.png,11.222869000000001,-0.437409,16.606315,0.21078000000000002,0.9772209999999999,-0.024538,0.002916 145 | OldHospital,test,seq4,OldHospital/seq4/frame00018.png,11.717708,-0.358185,17.189378,0.19425599999999998,0.9809120000000001,-0.00196,-0.00852 146 | OldHospital,test,seq4,OldHospital/seq4/frame00019.png,12.452403,-0.360613,17.820757,0.176503,0.983115,-0.022883,-0.042523000000000005 147 | OldHospital,test,seq4,OldHospital/seq4/frame00020.png,13.260006,-0.346964,18.427149,0.15498499999999998,0.986878,-0.005842,-0.044916000000000005 148 | OldHospital,test,seq4,OldHospital/seq4/frame00021.png,13.303157,-0.62493,18.765695,0.148578,0.98719,0.012995,-0.056672 149 | OldHospital,test,seq4,OldHospital/seq4/frame00022.png,13.779442999999999,-0.636177,19.36656,0.147988,0.987073,0.008183,-0.060980999999999994 150 | OldHospital,test,seq4,OldHospital/seq4/frame00023.png,14.454214000000002,-0.8350870000000001,19.758682999999998,0.181073,0.981613,0.020288,-0.056901 151 | OldHospital,test,seq4,OldHospital/seq4/frame00024.png,15.014581,-0.29424,20.44725,0.17519300000000002,0.9817450000000001,0.022673,-0.070495 152 | OldHospital,test,seq4,OldHospital/seq4/frame00025.png,15.453566,-0.413937,20.90618,0.19882,0.9791860000000001,0.0006320000000000001,-0.040806999999999996 153 | OldHospital,test,seq4,OldHospital/seq4/frame00026.png,15.887926,-0.319452,21.729019,0.20119700000000001,0.9742629999999999,-0.001549,-0.101636 154 | OldHospital,test,seq4,OldHospital/seq4/frame00027.png,16.406156,-0.496047,22.106573,0.222584,0.972367,0.010423,-0.069642 155 | OldHospital,test,seq4,OldHospital/seq4/frame00028.png,16.444426999999997,-0.619513,22.81506,0.20282,0.974914,0.009247,-0.091223 156 | OldHospital,test,seq4,OldHospital/seq4/frame00029.png,17.168392,-0.679685,23.086584,0.188942,0.972284,-0.007455,-0.13751 157 | OldHospital,test,seq4,OldHospital/seq4/frame00030.png,17.700132999999997,-0.671733,23.627992000000003,0.16351300000000002,0.976225,-0.002471,-0.142273 158 | OldHospital,test,seq4,OldHospital/seq4/frame00031.png,18.335402,-0.579957,24.068297,0.199778,0.969505,-0.001254,-0.141941 159 | OldHospital,test,seq4,OldHospital/seq4/frame00032.png,19.119016000000002,-0.82201,24.202078,0.20850100000000002,0.966633,0.00848,-0.148577 160 | OldHospital,test,seq4,OldHospital/seq4/frame00033.png,19.434192000000003,-0.5157229999999999,24.900107000000002,0.222489,0.963043,-0.002027,-0.1518 161 | OldHospital,test,seq4,OldHospital/seq4/frame00034.png,19.805657999999998,-1.063715,25.490336,0.192934,0.962007,0.0069689999999999995,-0.193054 162 | OldHospital,test,seq4,OldHospital/seq4/frame00035.png,20.681665,-0.796673,25.733239,0.188399,0.972352,0.015054,-0.137156 163 | OldHospital,test,seq4,OldHospital/seq4/frame00036.png,20.968375,-0.892474,26.305083000000003,0.19150599999999998,0.971936,0.029106,-0.13349 164 | OldHospital,test,seq4,OldHospital/seq4/frame00037.png,21.645317000000002,-1.031057,26.706697,0.19433699999999998,0.973023,0.012076,-0.123748 165 | OldHospital,test,seq4,OldHospital/seq4/frame00038.png,22.089388,-1.34679,27.307365,0.21376399999999998,0.965116,0.025718,-0.148977 166 | OldHospital,test,seq4,OldHospital/seq4/frame00039.png,22.685757000000002,-0.715531,27.876766999999997,0.200128,0.959792,0.019509000000000002,-0.195876 167 | OldHospital,test,seq4,OldHospital/seq4/frame00040.png,23.218945,-1.516457,28.112842999999998,0.23253000000000001,0.955442,-0.001475,-0.181819 168 | OldHospital,test,seq4,OldHospital/seq4/frame00041.png,24.106699,-0.93411,28.306384,0.20737199999999997,0.955369,-0.00458,-0.21034699999999998 169 | OldHospital,test,seq4,OldHospital/seq4/frame00042.png,24.490745999999998,-0.8604700000000001,28.139924,0.193012,0.961,-0.010131999999999999,-0.197797 170 | OldHospital,test,seq4,OldHospital/seq4/frame00043.png,25.418532,-1.223964,27.905014,0.207544,0.959319,0.003351,-0.191369 171 | OldHospital,test,seq4,OldHospital/seq4/frame00044.png,25.293617,-0.647505,27.671772999999998,0.18796400000000002,0.96495,-0.011437000000000001,-0.182783 172 | OldHospital,test,seq4,OldHospital/seq4/frame00045.png,25.82113,-0.407163,27.207141999999997,0.167241,0.956918,-0.025344,-0.236 173 | OldHospital,test,seq4,OldHospital/seq4/frame00046.png,25.495616000000002,-0.929481,26.447706,0.197661,0.961153,-0.016761,-0.191923 174 | OldHospital,test,seq4,OldHospital/seq4/frame00047.png,25.408664,-0.7127859999999999,25.983153,0.192109,0.957284,-0.046785,-0.21098000000000003 175 | OldHospital,test,seq4,OldHospital/seq4/frame00048.png,24.989410999999997,-0.5877220000000001,25.807478,0.177305,0.959566,-0.027277,-0.216914 176 | OldHospital,test,seq4,OldHospital/seq4/frame00049.png,24.388672,-0.580092,25.438595,0.16413599999999998,0.96688,-0.023441999999999998,-0.194045 177 | OldHospital,test,seq4,OldHospital/seq4/frame00050.png,23.761282,-0.36130100000000004,25.095515,0.146458,0.962468,-0.036822,-0.225498 178 | OldHospital,test,seq4,OldHospital/seq4/frame00051.png,22.763969,-0.742219,25.21425,0.121992,0.963709,-0.03275,-0.235183 179 | OldHospital,test,seq4,OldHospital/seq4/frame00052.png,22.1325,-0.778223,24.398939000000002,0.12278399999999999,0.962467,-0.039657,-0.238765 180 | OldHospital,test,seq4,OldHospital/seq4/frame00053.png,21.685727,-0.78133,24.321976,0.126834,0.954785,-0.035546,-0.26652600000000004 181 | OldHospital,test,seq4,OldHospital/seq4/frame00054.png,21.147834,-0.778949,24.169297,0.159484,0.954217,-0.003409,-0.253029 182 | OldHospital,test,seq4,OldHospital/seq4/frame00055.png,20.571029,-0.796181,24.077499,0.16984200000000002,0.9625950000000001,-0.004987,-0.211042 183 | OldHospital,test,seq4,OldHospital/seq4/frame00056.png,20.26628,-0.9812280000000001,23.566341,0.210508,0.9635090000000001,-0.03228,-0.162155 184 | -------------------------------------------------------------------------------- /datasets/CambridgeLandmarks/abs_cambridge_pose_sorted.csv_ShopFacade_test.csv: -------------------------------------------------------------------------------- 1 | scene,split,seq,img_path,t1,t2,t3,q1,q2,q3,q4 2 | ShopFacade,test,seq3,ShopFacade/seq3/frame00001.png,-12.561518,-7.815853999999999,1.968957,0.6368199999999999,0.6207630000000001,-0.332124,0.314337 3 | ShopFacade,test,seq3,ShopFacade/seq3/frame00002.png,-12.499386999999999,-7.8762490000000005,1.9454349999999998,0.6348520000000001,0.623931,-0.329884,0.31440300000000004 4 | ShopFacade,test,seq3,ShopFacade/seq3/frame00003.png,-12.534307,-7.905508,1.937112,0.634,0.630005,-0.32216100000000003,0.31201100000000004 5 | ShopFacade,test,seq3,ShopFacade/seq3/frame00004.png,-12.357323,-7.936909,1.949609,0.638523,0.636454,-0.310773,0.301057 6 | ShopFacade,test,seq3,ShopFacade/seq3/frame00005.png,-11.543763,-7.977441000000001,1.951143,0.633145,0.642212,-0.301952,0.309057 7 | ShopFacade,test,seq3,ShopFacade/seq3/frame00006.png,-10.815438,-8.226074,1.9343759999999999,0.642936,0.65146,-0.273952,0.29527 8 | ShopFacade,test,seq3,ShopFacade/seq3/frame00007.png,-10.064691,-8.232509,1.876426,0.6400819999999999,0.6538109999999999,-0.285512,0.285148 9 | ShopFacade,test,seq3,ShopFacade/seq3/frame00008.png,-9.204425,-8.325952000000001,1.865559,0.658794,0.642352,-0.265608,0.28779499999999997 10 | ShopFacade,test,seq3,ShopFacade/seq3/frame00009.png,-8.482593,-8.158344999999999,1.839166,0.670417,0.654995,-0.22983,0.262106 11 | ShopFacade,test,seq3,ShopFacade/seq3/frame00010.png,-7.821222,-7.883493,1.799984,0.669655,0.654646,-0.24809299999999998,0.247892 12 | ShopFacade,test,seq3,ShopFacade/seq3/frame00011.png,-7.370363,-7.362491,1.7629700000000001,0.67593,0.645456,-0.23590999999999998,0.26618 13 | ShopFacade,test,seq3,ShopFacade/seq3/frame00012.png,-6.922084,-6.727167,1.7701810000000002,0.674064,0.648575,-0.264191,0.23493000000000003 14 | ShopFacade,test,seq3,ShopFacade/seq3/frame00013.png,-6.521548999999999,-6.130868,1.788032,0.6705939999999999,0.658936,-0.257596,0.22304699999999997 15 | ShopFacade,test,seq3,ShopFacade/seq3/frame00014.png,-6.148171,-5.669288,1.819518,0.681381,0.660842,-0.236312,0.207761 16 | ShopFacade,test,seq3,ShopFacade/seq3/frame00015.png,-5.58272,-5.446016999999999,1.8162150000000001,0.695473,0.678942,-0.17613299999999998,0.15599000000000002 17 | ShopFacade,test,seq3,ShopFacade/seq3/frame00016.png,-4.911296,-5.452661,1.8012110000000001,0.707154,0.675525,-0.15123499999999998,0.143967 18 | ShopFacade,test,seq3,ShopFacade/seq3/frame00017.png,-4.284564,-5.853968,1.7063720000000002,0.703529,0.694543,-0.088048,0.12208699999999999 19 | ShopFacade,test,seq3,ShopFacade/seq3/frame00018.png,-3.5972169999999997,-6.142136,1.789907,0.698298,0.684936,-0.13052,0.161886 20 | ShopFacade,test,seq3,ShopFacade/seq3/frame00019.png,-3.087392,-6.749714,1.777553,0.6979,0.6807449999999999,-0.15213800000000002,0.162403 21 | ShopFacade,test,seq3,ShopFacade/seq3/frame00020.png,-2.519084,-7.232577,1.755482,0.6917939999999999,0.686385,-0.154745,0.16233 22 | ShopFacade,test,seq3,ShopFacade/seq3/frame00021.png,-1.940175,-7.972998,1.728171,0.698045,0.6828029999999999,-0.131447,0.170983 23 | ShopFacade,test,seq3,ShopFacade/seq3/frame00022.png,-1.408711,-8.302488,1.689914,0.697196,0.692809,-0.12406199999999999,0.13617100000000001 24 | ShopFacade,test,seq3,ShopFacade/seq3/frame00023.png,-0.897731,-8.755787,1.7157630000000001,0.709021,0.683394,-0.087144,0.150562 25 | ShopFacade,test,seq3,ShopFacade/seq3/frame00024.png,-0.883034,-9.021782,1.7154490000000002,0.726089,0.673212,-0.09049,0.106734 26 | ShopFacade,test,seq3,ShopFacade/seq3/frame00025.png,-1.193414,-9.038574,1.716605,0.726958,0.6638649999999999,-0.133761,0.113679 27 | ShopFacade,test,seq3,ShopFacade/seq3/frame00026.png,-1.6615630000000001,-8.6804,1.6787159999999999,0.719146,0.675064,-0.135525,0.093548 28 | ShopFacade,test,seq3,ShopFacade/seq3/frame00027.png,-2.149483,-8.237167,1.720392,0.723006,0.653994,-0.180422,0.130394 29 | ShopFacade,test,seq3,ShopFacade/seq3/frame00028.png,-2.714449,-7.713044,1.7315720000000001,0.6924939999999999,0.671313,-0.204656,0.167053 30 | ShopFacade,test,seq3,ShopFacade/seq3/frame00029.png,-3.4120410000000003,-7.2700949999999995,1.72282,0.686466,0.675241,-0.188631,0.19296 31 | ShopFacade,test,seq3,ShopFacade/seq3/frame00030.png,-3.894652,-6.666376,1.7790380000000001,0.6823020000000001,0.658758,-0.23754499999999998,0.20994000000000002 32 | ShopFacade,test,seq3,ShopFacade/seq3/frame00031.png,-4.469964,-6.00851,1.8304310000000001,0.671265,0.63593,-0.265027,0.273419 33 | ShopFacade,test,seq3,ShopFacade/seq3/frame00032.png,-5.0877669999999995,-5.491982,1.790948,0.6586420000000001,0.6242479999999999,-0.284084,0.309517 34 | ShopFacade,test,seq3,ShopFacade/seq3/frame00033.png,-5.521083999999999,-4.823837999999999,1.8097729999999999,0.639888,0.595453,-0.323341,0.362532 35 | ShopFacade,test,seq3,ShopFacade/seq3/frame00034.png,-6.112691000000001,-4.271771,1.775936,0.624066,0.579417,-0.342478,0.396897 36 | ShopFacade,test,seq3,ShopFacade/seq3/frame00035.png,-6.551069,-3.6055129999999997,1.835739,0.625889,0.582629,-0.342169,0.389521 37 | ShopFacade,test,seq3,ShopFacade/seq3/frame00036.png,-7.033434,-3.024124,1.849594,0.5952029999999999,0.564339,-0.375454,0.431612 38 | ShopFacade,test,seq3,ShopFacade/seq3/frame00037.png,-7.321289,-2.2896,1.782636,0.575363,0.530578,-0.42518900000000004,0.45459700000000003 39 | ShopFacade,test,seq3,ShopFacade/seq3/frame00038.png,-7.706399,-1.570649,1.798517,0.5555329999999999,0.504757,-0.43552700000000005,0.49691 40 | ShopFacade,test,seq3,ShopFacade/seq3/frame00039.png,-8.019159,-0.874265,1.708922,0.528408,0.47950699999999996,-0.477394,0.512789 41 | ShopFacade,test,seq3,ShopFacade/seq3/frame00040.png,-8.257336,-0.034491,1.7941630000000002,0.510845,0.498979,-0.45269899999999996,0.533967 42 | ShopFacade,test,seq3,ShopFacade/seq3/frame00041.png,-8.410961,0.772992,1.769022,0.513717,0.5055350000000001,-0.446774,0.530021 43 | ShopFacade,test,seq3,ShopFacade/seq3/frame00042.png,-8.63295,1.613032,1.7707110000000001,0.506763,0.489046,-0.456901,0.543384 44 | ShopFacade,test,seq3,ShopFacade/seq3/frame00043.png,-8.661425999999999,2.3637200000000003,1.688996,0.47851800000000005,0.48148100000000005,-0.478296,0.5571619999999999 45 | ShopFacade,test,seq3,ShopFacade/seq3/frame00044.png,-8.64155,3.233202,1.730178,0.47292399999999996,0.468858,-0.47169799999999995,0.577941 46 | ShopFacade,test,seq3,ShopFacade/seq3/frame00045.png,-8.567846000000001,3.911981,1.6595360000000001,0.440693,0.447087,-0.503891,0.5932930000000001 47 | ShopFacade,test,seq3,ShopFacade/seq3/frame00046.png,-8.356992,4.756325,1.6877529999999998,0.445737,0.44020699999999996,-0.48837299999999995,0.607477 48 | ShopFacade,test,seq3,ShopFacade/seq3/frame00047.png,-8.235485,5.457065,1.509935,0.421393,0.42518900000000004,-0.511059,0.616815 49 | ShopFacade,test,seq3,ShopFacade/seq3/frame00048.png,-7.952072,6.189677,1.622417,0.42074799999999996,0.433859,-0.505732,0.615608 50 | ShopFacade,test,seq3,ShopFacade/seq3/frame00049.png,-7.742507000000001,6.892044,1.696611,0.388889,0.423422,-0.5204439999999999,0.631361 51 | ShopFacade,test,seq3,ShopFacade/seq3/frame00050.png,-7.346703,7.470917999999999,1.6270959999999999,0.388847,0.41438800000000003,-0.525148,0.633483 52 | ShopFacade,test,seq3,ShopFacade/seq3/frame00051.png,-7.024091,8.116442,1.7972380000000001,0.347283,0.391648,-0.547862,0.652575 53 | ShopFacade,test,seq3,ShopFacade/seq3/frame00052.png,-6.628597,8.591597,1.586498,0.361752,0.384281,-0.549167,0.647981 54 | ShopFacade,test,seq3,ShopFacade/seq3/frame00053.png,-6.267061,9.254947999999999,1.6894040000000001,0.368823,0.374108,-0.537876,0.659319 55 | ShopFacade,test,seq3,ShopFacade/seq3/frame00054.png,-6.07871,9.865115,1.6128639999999999,0.416092,0.386331,-0.519925,0.638196 56 | ShopFacade,test,seq3,ShopFacade/seq3/frame00055.png,-6.2347779999999995,10.391597,2.095708,0.380323,0.382073,-0.550416,0.637508 57 | ShopFacade,test,seq3,ShopFacade/seq3/frame00056.png,-6.537202,10.645053,1.652116,0.319374,0.33941,-0.572817,0.674301 58 | ShopFacade,test,seq3,ShopFacade/seq3/frame00057.png,-6.897384,11.077228,1.71085,0.292047,0.338442,-0.578769,0.68205 59 | ShopFacade,test,seq3,ShopFacade/seq3/frame00058.png,-7.155314,11.707927,1.676865,0.249221,0.303145,-0.594425,0.7018909999999999 60 | ShopFacade,test,seq3,ShopFacade/seq3/frame00059.png,-7.083266,12.382244,1.709602,0.253867,0.292059,-0.611952,0.68976 61 | ShopFacade,test,seq3,ShopFacade/seq3/frame00060.png,-7.1755320000000005,13.209772000000001,1.71412,0.231458,0.298655,-0.609548,0.69691 62 | ShopFacade,test,seq3,ShopFacade/seq3/frame00061.png,-6.958874000000001,13.887004000000001,1.703341,0.25114000000000003,0.29234,-0.620641,0.68284 63 | ShopFacade,test,seq3,ShopFacade/seq3/frame00062.png,-7.0679300000000005,14.704239999999999,1.6880169999999999,0.24247,0.30126,-0.6144970000000001,0.6876369999999999 64 | ShopFacade,test,seq3,ShopFacade/seq3/frame00063.png,-6.722604,15.347942000000002,1.708965,0.23934899999999998,0.300699,-0.61866,0.685238 65 | ShopFacade,test,seq3,ShopFacade/seq3/frame00064.png,-6.619851,16.116224,1.715629,0.24050300000000002,0.27842,-0.613305,0.698926 66 | ShopFacade,test,seq3,ShopFacade/seq3/frame00065.png,-6.35954,16.699919,1.71908,0.224872,0.256852,-0.632942,0.694869 67 | ShopFacade,test,seq3,ShopFacade/seq3/frame00066.png,-6.000021,17.13314,1.8005830000000003,0.19956,0.202955,-0.6558689999999999,0.6991569999999999 68 | ShopFacade,test,seq3,ShopFacade/seq3/frame00067.png,-5.877576,17.532507,1.766703,0.165579,0.158985,-0.674412,0.701767 69 | ShopFacade,test,seq1,ShopFacade/seq1/frame00001.png,-0.157816,-10.41315,1.8320740000000002,0.7122609999999999,0.6826909999999999,-0.12319300000000001,0.10696199999999999 70 | ShopFacade,test,seq1,ShopFacade/seq1/frame00002.png,-0.179848,-10.468066,1.825172,0.710979,0.683292,-0.12473499999999998,0.109825 71 | ShopFacade,test,seq1,ShopFacade/seq1/frame00003.png,-0.203156,-10.539543,1.816328,0.710417,0.684213,-0.12322899999999999,0.109429 72 | ShopFacade,test,seq1,ShopFacade/seq1/frame00004.png,-0.234021,-10.577577,1.8153439999999998,0.7077289999999999,0.687557,-0.117052,0.112624 73 | ShopFacade,test,seq1,ShopFacade/seq1/frame00005.png,-0.71335,-10.492572000000001,1.837435,0.7396689999999999,0.659076,-0.10715,0.083834 74 | ShopFacade,test,seq1,ShopFacade/seq1/frame00006.png,-1.074073,-10.157045,1.800705,0.743901,0.654718,-0.11465,0.069354 75 | ShopFacade,test,seq1,ShopFacade/seq1/frame00007.png,-1.691234,-9.851344000000001,1.787511,0.744314,0.650809,-0.115803,0.095047 76 | ShopFacade,test,seq1,ShopFacade/seq1/frame00008.png,-2.344894,-9.499715,1.811798,0.7289869999999999,0.666492,-0.101604,0.118504 77 | ShopFacade,test,seq1,ShopFacade/seq1/frame00009.png,-2.917586,-9.130987,1.8636849999999998,0.722286,0.643202,-0.158027,0.199049 78 | ShopFacade,test,seq1,ShopFacade/seq1/frame00010.png,-3.590961,-8.820725,1.8680759999999998,0.7041,0.65299,-0.17790899999999998,0.21493400000000001 79 | ShopFacade,test,seq1,ShopFacade/seq1/frame00011.png,-4.265172,-8.377417999999999,1.905215,0.694707,0.6721,-0.174035,0.188082 80 | ShopFacade,test,seq1,ShopFacade/seq1/frame00012.png,-4.827536,-7.997613,1.891794,0.6754720000000001,0.65666,-0.21760300000000002,0.255311 81 | ShopFacade,test,seq1,ShopFacade/seq1/frame00013.png,-5.4961660000000006,-7.588017,1.89485,0.663664,0.646455,-0.254834,0.276959 82 | ShopFacade,test,seq1,ShopFacade/seq1/frame00014.png,-6.227868,-7.083541,1.8876130000000002,0.667211,0.623564,-0.289091,0.287095 83 | ShopFacade,test,seq1,ShopFacade/seq1/frame00015.png,-6.732972,-6.572852,1.921548,0.645263,0.611137,-0.324639,0.323662 84 | ShopFacade,test,seq1,ShopFacade/seq1/frame00016.png,-7.4501479999999995,-6.160753,1.920637,0.630386,0.5860920000000001,-0.345522,0.373797 85 | ShopFacade,test,seq1,ShopFacade/seq1/frame00017.png,-7.997366,-5.727114,1.867325,0.624387,0.572886,-0.363282,0.387259 86 | ShopFacade,test,seq1,ShopFacade/seq1/frame00018.png,-8.572517999999999,-5.239927,1.894682,0.63608,0.5543640000000001,-0.353083,0.404246 87 | ShopFacade,test,seq1,ShopFacade/seq1/frame00019.png,-9.066037,-4.7186900000000005,1.962755,0.624695,0.555621,-0.360716,0.41343199999999997 88 | ShopFacade,test,seq1,ShopFacade/seq1/frame00020.png,-9.548701,-4.1380349999999995,1.9840689999999999,0.623732,0.544593,-0.376832,0.415179 89 | ShopFacade,test,seq1,ShopFacade/seq1/frame00021.png,-10.011516,-3.4936190000000003,1.9982330000000001,0.5994079999999999,0.549285,-0.39514499999999997,0.427617 90 | ShopFacade,test,seq1,ShopFacade/seq1/frame00022.png,-10.413126,-2.8920310000000002,1.978951,0.600739,0.528284,-0.407194,0.44070600000000004 91 | ShopFacade,test,seq1,ShopFacade/seq1/frame00023.png,-10.772741,-2.1542470000000002,2.007878,0.5915600000000001,0.516274,-0.413357,0.46114399999999994 92 | ShopFacade,test,seq1,ShopFacade/seq1/frame00024.png,-11.072366,-1.440274,2.013823,0.595701,0.519407,-0.413601,0.451985 93 | ShopFacade,test,seq1,ShopFacade/seq1/frame00025.png,-11.553938,-0.844485,1.977193,0.582021,0.495018,-0.44428599999999996,0.46778000000000003 94 | ShopFacade,test,seq1,ShopFacade/seq1/frame00026.png,-12.284355999999999,0.32706199999999996,2.28335,0.5623779999999999,0.495642,-0.47103999999999996,0.464963 95 | ShopFacade,test,seq1,ShopFacade/seq1/frame00027.png,-12.465649,0.317146,2.256936,0.549375,0.490525,-0.46333,0.49284700000000004 96 | ShopFacade,test,seq1,ShopFacade/seq1/frame00028.png,-12.567444,1.15042,1.9909430000000001,0.536485,0.46664300000000003,-0.48663100000000004,0.5075609999999999 97 | ShopFacade,test,seq1,ShopFacade/seq1/frame00029.png,-12.630668,1.727297,2.285605,0.525995,0.488525,-0.47834099999999996,0.5058279999999999 98 | ShopFacade,test,seq1,ShopFacade/seq1/frame00030.png,-12.380997,2.330192,2.050663,0.501165,0.46719499999999997,-0.49513500000000005,0.5342319999999999 99 | ShopFacade,test,seq1,ShopFacade/seq1/frame00031.png,-11.929746000000002,2.78831,2.013847,0.534606,0.507188,-0.462971,0.492559 100 | ShopFacade,test,seq1,ShopFacade/seq1/frame00032.png,-11.698486,3.262359,1.9107150000000002,0.544009,0.538043,-0.465542,0.44478599999999996 101 | ShopFacade,test,seq1,ShopFacade/seq1/frame00033.png,-11.36486,3.822912,1.9179869999999999,0.545309,0.555409,-0.451613,0.436125 102 | ShopFacade,test,seq1,ShopFacade/seq1/frame00034.png,-11.303455,4.451127,1.853675,0.550842,0.543287,-0.448564,0.44743900000000003 103 | ShopFacade,test,seq1,ShopFacade/seq1/frame00035.png,-11.19225,4.840878,1.8521450000000002,0.554431,0.546593,-0.455604,0.431588 104 | ShopFacade,test,seq1,ShopFacade/seq1/frame00036.png,-11.108467,5.492242,1.83195,0.549615,0.5439510000000001,-0.45315900000000003,0.443495 105 | -------------------------------------------------------------------------------- /datasets/CambridgeLandmarks/abs_cambridge_pose_sorted.csv_ShopFacade_train.csv: -------------------------------------------------------------------------------- 1 | scene,split,seq,img_path,t1,t2,t3,q1,q2,q3,q4 2 | ShopFacade,train,seq2,ShopFacade/seq2/frame00001.png,-11.664603,-8.199192,1.947634,0.6394890000000001,0.635026,-0.30913,0.303701 3 | ShopFacade,train,seq2,ShopFacade/seq2/frame00002.png,-11.571128999999999,-8.124575,1.9272740000000002,0.6396310000000001,0.633421,-0.311817,0.304007 4 | ShopFacade,train,seq2,ShopFacade/seq2/frame00003.png,-11.538824,-8.112645,1.9247130000000001,0.6387189999999999,0.633004,-0.312232,0.306358 5 | ShopFacade,train,seq2,ShopFacade/seq2/frame00004.png,-11.355083,-8.097187,1.931257,0.6393220000000001,0.626909,-0.324235,0.305162 6 | ShopFacade,train,seq2,ShopFacade/seq2/frame00005.png,-10.899599,-8.262960000000001,1.88563,0.639442,0.656044,-0.304822,0.26039 7 | ShopFacade,train,seq2,ShopFacade/seq2/frame00006.png,-10.167713000000001,-8.257541999999999,1.991857,0.633102,0.658194,-0.33641,0.22976300000000002 8 | ShopFacade,train,seq2,ShopFacade/seq2/frame00007.png,-9.663778,-8.502371,1.888298,0.646109,0.6434850000000001,-0.29988899999999996,0.28024299999999996 9 | ShopFacade,train,seq2,ShopFacade/seq2/frame00008.png,-9.019933,-8.666772,1.869336,0.643663,0.663484,-0.29008,0.247671 10 | ShopFacade,train,seq2,ShopFacade/seq2/frame00009.png,-8.325061,-8.790656,1.8734419999999998,0.6290680000000001,0.657017,-0.322297,0.26215900000000003 11 | ShopFacade,train,seq2,ShopFacade/seq2/frame00010.png,-7.762332000000001,-9.037367,1.890945,0.6407609999999999,0.6687770000000001,-0.299954,0.228452 12 | ShopFacade,train,seq2,ShopFacade/seq2/frame00011.png,-7.083651,-9.075439,1.8674330000000001,0.649007,0.6628,-0.301987,0.21975100000000003 13 | ShopFacade,train,seq2,ShopFacade/seq2/frame00012.png,-6.355244,-9.202148,1.8320900000000002,0.656384,0.662601,-0.286306,0.219428 14 | ShopFacade,train,seq2,ShopFacade/seq2/frame00013.png,-5.627983,-9.337562,1.7817630000000002,0.655507,0.667736,-0.28171,0.21231599999999998 15 | ShopFacade,train,seq2,ShopFacade/seq2/frame00014.png,-4.795787000000001,-9.432166,1.780116,0.658304,0.67005,-0.271119,0.210152 16 | ShopFacade,train,seq2,ShopFacade/seq2/frame00015.png,-3.988494,-9.349111,1.7285540000000001,0.651347,0.695494,-0.241986,0.182971 17 | ShopFacade,train,seq2,ShopFacade/seq2/frame00016.png,-3.240798,-9.508576,1.731322,0.669546,0.6829,-0.247689,0.15494000000000002 18 | ShopFacade,train,seq2,ShopFacade/seq2/frame00017.png,-2.486688,-9.694231,1.7057790000000002,0.677922,0.689801,-0.20546199999999998,0.14960299999999999 19 | ShopFacade,train,seq2,ShopFacade/seq2/frame00018.png,-1.6713689999999999,-9.767439,1.698268,0.684833,0.677071,-0.227987,0.143529 20 | ShopFacade,train,seq2,ShopFacade/seq2/frame00019.png,-0.9873559999999999,-9.904027000000001,1.699195,0.685363,0.6984899999999999,-0.174422,0.109385 21 | ShopFacade,train,seq2,ShopFacade/seq2/frame00020.png,-0.180835,-9.947739,1.7076259999999999,0.691153,0.686189,-0.19284300000000001,0.119431 22 | ShopFacade,train,seq2,ShopFacade/seq2/frame00021.png,0.5633100000000001,-10.049710000000001,1.6834330000000002,0.689333,0.712383,-0.116854,0.060617 23 | ShopFacade,train,seq2,ShopFacade/seq2/frame00022.png,1.312553,-10.068251,1.686563,0.6841619999999999,0.72288,-0.092714,0.02777 24 | ShopFacade,train,seq2,ShopFacade/seq2/frame00023.png,2.04434,-10.190673,1.6647610000000002,0.693013,0.715073,-0.089597,0.019393999999999998 25 | ShopFacade,train,seq2,ShopFacade/seq2/frame00024.png,2.773261,-10.186876,1.643419,0.6885100000000001,0.723839,-0.043662,-0.010204000000000001 26 | ShopFacade,train,seq2,ShopFacade/seq2/frame00025.png,3.53954,-10.379131,1.609592,0.6848920000000001,0.721707,0.02053,-0.09818099999999999 27 | ShopFacade,train,seq2,ShopFacade/seq2/frame00026.png,4.250851,-10.194807,1.563036,0.6637,0.739368,0.051512,-0.10091699999999999 28 | ShopFacade,train,seq2,ShopFacade/seq2/frame00027.png,4.933825,-10.159637,1.574662,0.6848069999999999,0.717003,0.050741,-0.11988199999999999 29 | ShopFacade,train,seq2,ShopFacade/seq2/frame00028.png,5.644449,-9.965472,1.579954,0.689164,0.715389,0.054588,-0.101454 30 | ShopFacade,train,seq2,ShopFacade/seq2/frame00029.png,6.280094,-9.754399000000001,1.5691979999999999,0.700991,0.7016819999999999,0.061789,-0.11152000000000001 31 | ShopFacade,train,seq2,ShopFacade/seq2/frame00030.png,7.002099,-9.506314,1.575289,0.683371,0.709529,0.09542,-0.143066 32 | ShopFacade,train,seq2,ShopFacade/seq2/frame00031.png,7.625992,-9.122956,1.596652,0.6799729999999999,0.7059270000000001,0.106484,-0.16723 33 | ShopFacade,train,seq2,ShopFacade/seq2/frame00032.png,8.276518,-8.744972,1.590203,0.653634,0.711063,0.155637,-0.207193 34 | ShopFacade,train,seq2,ShopFacade/seq2/frame00033.png,8.817048,-8.221924000000001,1.587895,0.650108,0.708256,0.163469,-0.22138400000000003 35 | ShopFacade,train,seq2,ShopFacade/seq2/frame00034.png,9.330071,-7.678050999999999,1.560273,0.639938,0.706028,0.18873099999999998,-0.23745500000000003 36 | ShopFacade,train,seq2,ShopFacade/seq2/frame00035.png,9.738128999999999,-7.1397710000000005,1.54837,0.639674,0.709244,0.190617,-0.22683699999999998 37 | ShopFacade,train,seq2,ShopFacade/seq2/frame00036.png,-5.122666000000001,-5.459624,-0.334044,0.46020900000000003,-0.828325,0.109446,0.300178 38 | ShopFacade,train,seq2,ShopFacade/seq2/frame00037.png,10.330683,-6.151676999999999,1.560209,0.603386,0.701588,0.237645,-0.29533899999999996 39 | ShopFacade,train,seq2,ShopFacade/seq2/frame00038.png,10.226756,-5.5682160000000005,1.50925,0.627929,0.716018,0.203977,-0.226753 40 | ShopFacade,train,seq2,ShopFacade/seq2/frame00039.png,9.866356,-5.326474,1.531824,0.649525,0.707758,0.203775,-0.188871 41 | ShopFacade,train,seq2,ShopFacade/seq2/frame00040.png,9.308572999999999,-5.294928,1.561339,0.663061,0.698126,0.18171500000000002,-0.199875 42 | ShopFacade,train,seq2,ShopFacade/seq2/frame00041.png,8.612119,-5.203787,1.5886120000000001,0.68029,0.671971,0.208916,-0.20497600000000002 43 | ShopFacade,train,seq2,ShopFacade/seq2/frame00042.png,7.927693,-5.257683999999999,1.607108,0.675487,0.6752859999999999,0.227293,-0.189851 44 | ShopFacade,train,seq2,ShopFacade/seq2/frame00043.png,-3.541003,-3.20741,2.198234,0.41031000000000006,-0.785844,0.087077,0.454437 45 | ShopFacade,train,seq2,ShopFacade/seq2/frame00044.png,6.495789,-5.216931,1.625011,0.733103,0.64567,0.156193,-0.145859 46 | ShopFacade,train,seq2,ShopFacade/seq2/frame00045.png,5.77556,-5.221096,1.664916,0.727222,0.663691,0.10977100000000001,-0.136428 47 | ShopFacade,train,seq2,ShopFacade/seq2/frame00046.png,4.9730669999999995,-5.205913,1.661016,0.734641,0.6654800000000001,0.094726,-0.092008 48 | ShopFacade,train,seq2,ShopFacade/seq2/frame00047.png,4.247172,-5.185575,1.661709,0.729125,0.675497,0.07898200000000001,-0.076433 49 | ShopFacade,train,seq2,ShopFacade/seq2/frame00048.png,3.4514720000000003,-5.133945,1.674498,0.733481,0.66809,0.092187,-0.084636 50 | ShopFacade,train,seq2,ShopFacade/seq2/frame00049.png,2.691035,-4.944397,1.7049159999999999,0.720544,0.6908449999999999,0.037689999999999994,-0.04615 51 | ShopFacade,train,seq2,ShopFacade/seq2/frame00050.png,1.978865,-4.768989,1.7166700000000001,0.729014,0.6834319999999999,0.037585,-0.006806 52 | ShopFacade,train,seq2,ShopFacade/seq2/frame00051.png,1.213388,-4.516148,1.754529,0.711832,0.6933739999999999,-0.07283400000000001,0.084991 53 | ShopFacade,train,seq2,ShopFacade/seq2/frame00052.png,0.568127,-4.172485,1.7632720000000002,0.705598,0.668547,-0.16031700000000002,0.171684 54 | ShopFacade,train,seq2,ShopFacade/seq2/frame00053.png,-0.10923900000000002,-3.848935,1.7685099999999998,0.6686840000000001,0.659656,-0.22857399999999997,0.255871 55 | ShopFacade,train,seq2,ShopFacade/seq2/frame00054.png,-0.695254,-3.4354,1.7705330000000001,0.660529,0.651841,-0.243484,0.281994 56 | ShopFacade,train,seq2,ShopFacade/seq2/frame00055.png,-1.333611,-3.03257,1.78552,0.6361640000000001,0.636961,-0.286389,0.32795799999999997 57 | ShopFacade,train,seq2,ShopFacade/seq2/frame00056.png,-1.946737,-2.554118,1.777569,0.6497350000000001,0.648768,-0.26310500000000003,0.296175 58 | ShopFacade,train,seq2,ShopFacade/seq2/frame00057.png,-2.56983,-2.083944,1.771941,0.6259939999999999,0.633134,-0.30134099999999997,0.34127199999999996 59 | ShopFacade,train,seq2,ShopFacade/seq2/frame00058.png,-3.086691,-1.493452,1.736323,0.618302,0.6189680000000001,-0.32657800000000003,0.357671 60 | ShopFacade,train,seq2,ShopFacade/seq2/frame00059.png,-3.6948540000000003,-0.929666,1.730855,0.616375,0.599435,-0.32431,0.394439 61 | ShopFacade,train,seq2,ShopFacade/seq2/frame00060.png,-4.029592,-0.23985599999999999,1.712307,0.564992,0.596479,-0.375796,0.42868900000000004 62 | ShopFacade,train,seq2,ShopFacade/seq2/frame00061.png,-4.42033,0.46518400000000004,1.7345830000000002,0.583475,0.548462,-0.389229,0.455243 63 | ShopFacade,train,seq2,ShopFacade/seq2/frame00062.png,-4.6486339999999995,1.188964,1.7181060000000001,0.533455,0.548409,-0.423616,0.48499799999999993 64 | ShopFacade,train,seq2,ShopFacade/seq2/frame00063.png,-4.879341,2.001271,1.7150040000000002,0.531959,0.538949,-0.414829,0.504451 65 | ShopFacade,train,seq2,ShopFacade/seq2/frame00064.png,-5.112845,2.71644,1.775238,0.500845,0.5260630000000001,-0.456558,0.513776 66 | ShopFacade,train,seq2,ShopFacade/seq2/frame00065.png,-5.386792,3.536114,1.77112,0.514442,0.516962,-0.440283,0.52369 67 | ShopFacade,train,seq2,ShopFacade/seq2/frame00066.png,-5.654401999999999,4.225546,1.749571,0.472339,0.506262,-0.46500600000000003,0.5516909999999999 68 | ShopFacade,train,seq2,ShopFacade/seq2/frame00067.png,-5.7679849999999995,5.072712,1.737025,0.465292,0.495613,-0.47003999999999996,0.562968 69 | ShopFacade,train,seq2,ShopFacade/seq2/frame00068.png,-5.997003,5.8134559999999995,1.732388,0.44483500000000004,0.48366499999999996,-0.48464700000000005,0.577327 70 | ShopFacade,train,seq2,ShopFacade/seq2/frame00069.png,-6.003316000000001,6.743774,1.7355450000000001,0.42908900000000005,0.482411,-0.49286599999999997,0.583306 71 | ShopFacade,train,seq2,ShopFacade/seq2/frame00070.png,-6.088437,7.490436,1.757326,0.421929,0.459517,-0.510125,0.592108 72 | ShopFacade,train,seq2,ShopFacade/seq2/frame00071.png,-6.100262,8.164749,1.739709,0.41913199999999995,0.448208,-0.5227539999999999,0.5917479999999999 73 | ShopFacade,train,seq2,ShopFacade/seq2/frame00072.png,-6.138024,8.941007,1.788611,0.40060100000000004,0.459373,-0.5634939999999999,0.557646 74 | ShopFacade,train,seq2,ShopFacade/seq2/frame00073.png,-6.072508,9.737767999999999,1.614342,0.38669899999999996,0.44154099999999996,-0.5742619999999999,0.5707270000000001 75 | ShopFacade,train,seq2,ShopFacade/seq2/frame00074.png,-6.035634,10.536116,1.91372,0.331359,0.42685200000000006,-0.583052,0.606671 76 | ShopFacade,train,seq2,ShopFacade/seq2/frame00075.png,-6.099874,11.169496,1.605286,0.337739,0.41685500000000003,-0.580465,0.612556 77 | ShopFacade,train,seq2,ShopFacade/seq2/frame00076.png,-5.95478,11.99505,1.7297740000000001,0.32263400000000003,0.396903,-0.5801310000000001,0.633895 78 | ShopFacade,train,seq2,ShopFacade/seq2/frame00077.png,-6.003867,12.633731,1.700043,0.313813,0.41461000000000003,-0.59331,0.614494 79 | ShopFacade,train,seq2,ShopFacade/seq2/frame00078.png,-5.87977,13.268714000000001,1.765259,0.25703200000000004,0.361082,-0.630965,0.63674 80 | ShopFacade,train,seq2,ShopFacade/seq2/frame00079.png,-5.928128,13.981828,1.715197,0.24142800000000003,0.32869899999999996,-0.639407,0.651788 81 | ShopFacade,train,seq2,ShopFacade/seq2/frame00080.png,-5.719398,14.701989999999999,1.777537,0.267977,0.332045,-0.62415,0.654501 82 | ShopFacade,train,seq2,ShopFacade/seq2/frame00081.png,-5.568894,15.393207,1.784776,0.23088499999999998,0.314868,-0.624396,0.67652 83 | ShopFacade,train,seq2,ShopFacade/seq2/frame00082.png,-5.235935,15.913972,1.7919209999999999,0.19636099999999998,0.259737,-0.6511899999999999,0.685515 84 | ShopFacade,train,seq2,ShopFacade/seq2/frame00083.png,-4.919282,16.502224,1.7472279999999998,0.161676,0.21933699999999998,-0.6669649999999999,0.693476 85 | ShopFacade,train,seq2,ShopFacade/seq2/frame00084.png,-4.5259339999999995,16.946718,1.7599150000000001,0.15751199999999999,0.180479,-0.679157,0.693804 86 | ShopFacade,train,seq2,ShopFacade/seq2/frame00085.png,-4.244145,17.231065,1.8468939999999998,0.16632,0.165421,-0.688164,0.686589 87 | ShopFacade,train,seq2,ShopFacade/seq2/frame00086.png,-4.041933,17.42446,1.8464040000000002,0.15446400000000002,0.12501199999999998,-0.702018,0.683874 88 | ShopFacade,train,seq2,ShopFacade/seq2/frame00087.png,-4.108819,17.414077,1.84372,0.195653,0.178972,-0.682447,0.681143 89 | ShopFacade,train,seq2,ShopFacade/seq2/frame00088.png,-4.272024,17.258266,1.860382,0.20335899999999998,0.200803,-0.688948,0.666089 90 | ShopFacade,train,seq2,ShopFacade/seq2/frame00089.png,-4.256986,16.819801000000002,1.8840139999999999,0.196919,0.199323,-0.6806260000000001,0.676936 91 | ShopFacade,train,seq2,ShopFacade/seq2/frame00090.png,-4.278925,16.374083,1.843343,0.208038,0.184616,-0.690077,0.668155 92 | ShopFacade,train,seq2,ShopFacade/seq2/frame00091.png,-4.260509,15.790957999999998,1.8451970000000002,0.220468,0.211216,-0.688399,0.657942 93 | ShopFacade,train,seq2,ShopFacade/seq2/frame00092.png,-4.216316,15.156404,1.853402,0.22586399999999998,0.195208,-0.686419,0.663105 94 | ShopFacade,train,seq2,ShopFacade/seq2/frame00093.png,-4.281184,14.538761,1.8588310000000001,0.227726,0.205744,-0.683154,0.662654 95 | ShopFacade,train,seq2,ShopFacade/seq2/frame00094.png,-4.259221,13.929587,1.8387650000000002,0.22256700000000001,0.21272399999999997,-0.678815,0.666651 96 | ShopFacade,train,seq2,ShopFacade/seq2/frame00095.png,-4.361398,13.328298,1.8176,0.23901999999999998,0.193245,-0.675121,0.670624 97 | ShopFacade,train,seq2,ShopFacade/seq2/frame00096.png,-4.395268,12.703411000000001,1.813193,0.245748,0.237294,-0.670743,0.658334 98 | ShopFacade,train,seq2,ShopFacade/seq2/frame00097.png,-4.375317,12.062987,1.8471819999999999,0.26104299999999997,0.236125,-0.669945,0.653663 99 | ShopFacade,train,seq2,ShopFacade/seq2/frame00098.png,-4.518865,11.461651,1.824798,0.27058899999999997,0.259773,-0.661237,0.6496649999999999 100 | ShopFacade,train,seq2,ShopFacade/seq2/frame00099.png,-4.523663,10.787994,1.866437,0.252738,0.234656,-0.6937270000000001,0.6323 101 | ShopFacade,train,seq2,ShopFacade/seq2/frame00100.png,-4.821102,10.139854,1.847898,0.256847,0.23316599999999998,-0.683609,0.642138 102 | ShopFacade,train,seq2,ShopFacade/seq2/frame00101.png,-4.878566,9.365202,1.6904860000000002,0.21506199999999998,0.21256799999999998,-0.701627,0.6452 103 | ShopFacade,train,seq2,ShopFacade/seq2/frame00102.png,-5.194922,8.699517,1.700812,0.250855,0.239864,-0.680955,0.644854 104 | ShopFacade,train,seq2,ShopFacade/seq2/frame00103.png,-5.350353,8.038461,1.730668,0.27198,0.28476599999999996,-0.658223,0.641622 105 | ShopFacade,train,seq2,ShopFacade/seq2/frame00104.png,-5.408706,7.334085000000001,1.7133939999999999,0.28457899999999997,0.27134400000000003,-0.655775,0.644473 106 | ShopFacade,train,seq2,ShopFacade/seq2/frame00105.png,-5.462833,6.603542999999999,1.6666169999999998,0.321326,0.300265,-0.644422,0.625548 107 | ShopFacade,train,seq2,ShopFacade/seq2/frame00106.png,-5.452337,5.850613,1.676036,0.354342,0.324042,-0.6228520000000001,0.6176520000000001 108 | ShopFacade,train,seq2,ShopFacade/seq2/frame00107.png,-5.501428,5.132852,1.7542919999999997,0.39615900000000004,0.37150700000000003,-0.605301,0.5819380000000001 109 | ShopFacade,train,seq2,ShopFacade/seq2/frame00108.png,-5.53984,4.383329,1.7090490000000003,0.406091,0.392443,-0.593793,0.5731390000000001 110 | ShopFacade,train,seq2,ShopFacade/seq2/frame00109.png,-5.648276999999999,3.696844,1.72167,0.46089399999999997,0.438597,-0.5508609999999999,0.540149 111 | ShopFacade,train,seq2,ShopFacade/seq2/frame00110.png,-5.620878,2.9650790000000002,1.7340950000000002,0.46848599999999996,0.46095600000000003,-0.5432,0.522468 112 | ShopFacade,train,seq2,ShopFacade/seq2/frame00111.png,-5.703556,2.196457,1.730314,0.5049899999999999,0.49511700000000003,-0.516954,0.482289 113 | ShopFacade,train,seq2,ShopFacade/seq2/frame00112.png,-5.689464,1.460177,1.735553,0.521196,0.49386199999999997,-0.5071979999999999,0.47666000000000003 114 | ShopFacade,train,seq2,ShopFacade/seq2/frame00113.png,-5.759217,0.652075,1.7379950000000002,0.555645,0.516832,-0.4744,0.446193 115 | ShopFacade,train,seq2,ShopFacade/seq2/frame00114.png,-5.68795,-0.061725,1.7369729999999999,0.576699,0.5336350000000001,-0.46041099999999996,0.41312600000000005 116 | ShopFacade,train,seq2,ShopFacade/seq2/frame00115.png,-5.725836,-0.80855,1.717295,0.592079,0.543879,-0.433964,0.406588 117 | ShopFacade,train,seq2,ShopFacade/seq2/frame00116.png,-5.636499,-1.5043440000000001,1.6855849999999999,0.61215,0.593959,-0.391477,0.345298 118 | ShopFacade,train,seq2,ShopFacade/seq2/frame00117.png,-5.493448,-2.2345479999999998,1.7828330000000001,0.634263,0.584442,-0.383708,0.330009 119 | ShopFacade,train,seq2,ShopFacade/seq2/frame00118.png,-5.44272,-3.016936,1.8285740000000001,0.643992,0.607891,-0.360729,0.292606 120 | ShopFacade,train,seq2,ShopFacade/seq2/frame00119.png,-5.147705,-3.6996230000000003,1.860379,0.6499060000000001,0.621239,-0.33719499999999997,0.27925500000000003 121 | ShopFacade,train,seq2,ShopFacade/seq2/frame00120.png,-5.034016,-4.493431,1.853707,0.650055,0.621967,-0.338909,0.27518400000000004 122 | ShopFacade,train,seq2,ShopFacade/seq2/frame00121.png,-4.856546,-5.198582,1.848125,0.659192,0.632191,-0.320847,0.250714 123 | ShopFacade,train,seq2,ShopFacade/seq2/frame00122.png,-4.770333,-6.061088,1.823546,0.680053,0.630572,-0.297495,0.22672399999999998 124 | ShopFacade,train,seq2,ShopFacade/seq2/frame00123.png,-4.478053,-6.699936999999999,1.824509,0.677662,0.630358,-0.308967,0.219004 125 | ShopFacade,train,seq2,ShopFacade/seq2/frame00124.png,-4.328037,-7.5799460000000005,1.82047,0.70312,0.636051,-0.265054,0.175521 126 | ShopFacade,train,seq2,ShopFacade/seq2/frame00125.png,-4.161819,-8.327572,1.792255,0.701446,0.6637770000000001,-0.222663,0.133394 127 | ShopFacade,train,seq2,ShopFacade/seq2/frame00126.png,-3.9949230000000004,-9.0473,1.8420310000000002,0.709817,0.661311,-0.20605199999999999,0.127944 128 | ShopFacade,train,seq2,ShopFacade/seq2/frame00127.png,-3.79124,-9.74644,1.749586,0.709961,0.67555,-0.177331,0.09023099999999999 129 | ShopFacade,train,seq2,ShopFacade/seq2/frame00128.png,-3.574997,-10.484119,1.7985849999999999,0.701926,0.69298,-0.155302,0.054395000000000006 130 | ShopFacade,train,seq2,ShopFacade/seq2/frame00129.png,-3.242547,-11.162516,1.8116970000000001,0.695256,0.6987680000000001,-0.16289,0.042535 131 | ShopFacade,train,seq2,ShopFacade/seq2/frame00130.png,-2.741539,-11.648919,1.8497580000000002,0.7002109999999999,0.686851,-0.188466,0.049204000000000005 132 | ShopFacade,train,seq2,ShopFacade/seq2/frame00131.png,-2.210332,-12.230947,1.846166,0.702174,0.6918270000000001,-0.163579,0.039619999999999995 133 | ShopFacade,train,seq2,ShopFacade/seq2/frame00132.png,-1.586775,-12.706724000000001,1.8657540000000001,0.709125,0.686357,-0.159444,0.025162 134 | ShopFacade,train,seq2,ShopFacade/seq2/frame00133.png,-0.9972469999999999,-13.139592000000002,1.884191,0.706508,0.695787,-0.128828,0.011448999999999999 135 | ShopFacade,train,seq2,ShopFacade/seq2/frame00134.png,-0.495292,-13.431373,1.852641,0.712002,0.69109,-0.122123,0.023094 136 | ShopFacade,train,seq2,ShopFacade/seq2/frame00135.png,0.20430399999999999,-13.847209,1.850355,0.7087640000000001,0.695599,-0.11738900000000001,0.003967 137 | ShopFacade,train,seq2,ShopFacade/seq2/frame00136.png,0.715934,-13.933299,1.814546,0.7047899999999999,0.7031689999999999,-0.092184,-0.018074 138 | ShopFacade,train,seq2,ShopFacade/seq2/frame00137.png,1.242548,-14.108498999999998,1.78045,0.700132,0.712296,-0.045816,-0.01872 139 | ShopFacade,train,seq2,ShopFacade/seq2/frame00138.png,1.610543,-13.84092,1.7353290000000001,0.702669,0.7087060000000001,0.013059999999999999,-0.06182000000000001 140 | ShopFacade,train,seq2,ShopFacade/seq2/frame00139.png,1.8344669999999998,-13.297903,1.775628,0.706106,0.699242,0.046223,-0.10168200000000001 141 | ShopFacade,train,seq2,ShopFacade/seq2/frame00140.png,1.6417680000000001,-12.66803,1.7135049999999998,0.704715,0.700746,0.073341,-0.083389 142 | ShopFacade,train,seq2,ShopFacade/seq2/frame00141.png,1.186577,-11.995704,1.731091,0.695425,0.71837,0.014952000000000002,-0.010264 143 | ShopFacade,train,seq2,ShopFacade/seq2/frame00142.png,0.703534,-11.389066999999999,1.772241,0.7251920000000001,0.6865979999999999,-0.01551,0.049388999999999995 144 | ShopFacade,train,seq2,ShopFacade/seq2/frame00143.png,0.037554000000000004,-10.945637,1.7782060000000002,0.72241,0.673041,-0.086115,0.13313 145 | ShopFacade,train,seq2,ShopFacade/seq2/frame00144.png,-0.569555,-10.362099,1.7450869999999998,0.7191569999999999,0.667079,-0.13808800000000002,0.136934 146 | ShopFacade,train,seq2,ShopFacade/seq2/frame00145.png,-1.319613,-9.838111,1.6957330000000002,0.713242,0.646763,-0.18442999999999998,0.197403 147 | ShopFacade,train,seq2,ShopFacade/seq2/frame00146.png,-1.811064,-9.015725999999999,1.6623900000000003,0.698601,0.640051,-0.234013,0.21801399999999999 148 | ShopFacade,train,seq2,ShopFacade/seq2/frame00147.png,-2.54868,-8.460766,1.731382,0.6755720000000001,0.64108,-0.250886,0.263961 149 | ShopFacade,train,seq2,ShopFacade/seq2/frame00148.png,-3.023834,-7.72576,1.7375990000000001,0.6402329999999999,0.640358,-0.29543200000000003,0.304571 150 | ShopFacade,train,seq2,ShopFacade/seq2/frame00149.png,-3.7037730000000004,-7.140175999999999,1.7759330000000002,0.654702,0.617801,-0.292498,0.322693 151 | ShopFacade,train,seq2,ShopFacade/seq2/frame00150.png,-4.215034999999999,-6.498385,1.788368,0.639687,0.621265,-0.317266,0.322759 152 | ShopFacade,train,seq2,ShopFacade/seq2/frame00151.png,-4.947846,-5.918362999999999,1.7812430000000001,0.640033,0.603907,-0.305895,0.363431 153 | ShopFacade,train,seq2,ShopFacade/seq2/frame00152.png,-5.389339,-5.2437879999999994,1.793859,0.641768,0.598124,-0.32910500000000004,0.34938800000000003 154 | ShopFacade,train,seq2,ShopFacade/seq2/frame00153.png,-6.064936,-4.608887999999999,1.779332,0.6390359999999999,0.598111,-0.320461,0.362216 155 | ShopFacade,train,seq2,ShopFacade/seq2/frame00154.png,-6.564058,-4.015258,1.822987,0.6270399999999999,0.604066,-0.323936,0.370121 156 | ShopFacade,train,seq2,ShopFacade/seq2/frame00155.png,-7.11937,-3.327144,1.8220880000000002,0.6268560000000001,0.597427,-0.3302,0.375634 157 | ShopFacade,train,seq2,ShopFacade/seq2/frame00156.png,-7.526282000000001,-2.690249,1.849407,0.593404,0.585067,-0.371133,0.40966899999999995 158 | ShopFacade,train,seq2,ShopFacade/seq2/frame00157.png,-7.911771000000001,-2.072146,1.852263,0.564299,0.563751,-0.40689200000000003,0.44518599999999997 159 | ShopFacade,train,seq2,ShopFacade/seq2/frame00158.png,-8.478839,-1.423201,1.814561,0.545504,0.566603,-0.399841,0.47065200000000007 160 | ShopFacade,train,seq2,ShopFacade/seq2/frame00159.png,-8.912894999999999,-0.740636,1.8563180000000001,0.5624,0.559133,-0.39211599999999996,0.46617700000000006 161 | ShopFacade,train,seq2,ShopFacade/seq2/frame00160.png,-9.454392,-0.106743,1.877725,0.563539,0.562345,-0.395771,0.45777399999999996 162 | ShopFacade,train,seq2,ShopFacade/seq2/frame00161.png,-9.892956,0.526252,1.8198189999999999,0.578087,0.563158,-0.39367199999999997,0.44010299999999997 163 | ShopFacade,train,seq2,ShopFacade/seq2/frame00162.png,-10.325123,1.140654,1.8750529999999999,0.54672,0.526939,-0.426317,0.491616 164 | ShopFacade,train,seq2,ShopFacade/seq2/frame00163.png,-10.689498,1.8361919999999998,1.8749060000000002,0.543321,0.549139,-0.416758,0.479125 165 | ShopFacade,train,seq2,ShopFacade/seq2/frame00164.png,-11.086072,2.608641,1.8790939999999998,0.532288,0.532465,-0.422865,0.504316 166 | ShopFacade,train,seq2,ShopFacade/seq2/frame00165.png,-11.302892,3.297154,1.8334560000000002,0.536909,0.512285,-0.455176,0.49204499999999995 167 | ShopFacade,train,seq2,ShopFacade/seq2/frame00166.png,-11.589746,3.989499,1.7851169999999998,0.49218,0.47354300000000005,-0.48465600000000003,0.546466 168 | ShopFacade,train,seq2,ShopFacade/seq2/frame00167.png,-11.485007000000001,4.821822,1.844184,0.46720100000000003,0.452297,-0.50752,0.5653090000000001 169 | ShopFacade,train,seq2,ShopFacade/seq2/frame00168.png,-11.336556,5.558606,1.7491430000000001,0.450189,0.42325100000000004,-0.520874,0.588964 170 | ShopFacade,train,seq2,ShopFacade/seq2/frame00169.png,-11.169055,6.120239,1.714486,0.414578,0.403636,-0.54277,0.608773 171 | ShopFacade,train,seq2,ShopFacade/seq2/frame00170.png,-10.791649000000001,6.871486,1.703227,0.42103100000000004,0.392445,-0.531238,0.621696 172 | ShopFacade,train,seq2,ShopFacade/seq2/frame00171.png,-10.424402,7.496111,1.763729,0.37738,0.35767600000000005,-0.547668,0.655524 173 | ShopFacade,train,seq2,ShopFacade/seq2/frame00172.png,-9.962444999999999,8.120311000000001,1.738996,0.373193,0.344992,-0.5529850000000001,0.660238 174 | ShopFacade,train,seq2,ShopFacade/seq2/frame00173.png,-9.651667999999999,8.797229,1.619726,0.344412,0.330451,-0.561656,0.675814 175 | ShopFacade,train,seq2,ShopFacade/seq2/frame00174.png,-9.056567,9.532538,1.630133,0.370373,0.35143,-0.547752,0.6627890000000001 176 | ShopFacade,train,seq2,ShopFacade/seq2/frame00175.png,-8.842489,10.239599,1.698494,0.357661,0.320024,-0.564925,0.6712100000000001 177 | ShopFacade,train,seq2,ShopFacade/seq2/frame00176.png,-8.532888999999999,10.954326,1.672294,0.348467,0.300058,-0.585013,0.668054 178 | ShopFacade,train,seq2,ShopFacade/seq2/frame00177.png,-8.209253,11.685034,1.703028,0.331903,0.264228,-0.595705,0.682026 179 | ShopFacade,train,seq2,ShopFacade/seq2/frame00178.png,-7.919058000000001,12.444492,1.620285,0.365035,0.283423,-0.577068,0.6733600000000001 180 | ShopFacade,train,seq2,ShopFacade/seq2/frame00179.png,-7.685778999999999,13.181154000000001,1.697555,0.326759,0.28831,-0.595826,0.674609 181 | ShopFacade,train,seq2,ShopFacade/seq2/frame00180.png,-7.451647,13.965758,1.6445439999999998,0.323164,0.32450500000000004,-0.586477,0.6680619999999999 182 | ShopFacade,train,seq2,ShopFacade/seq2/frame00181.png,-7.4835259999999995,14.91151,1.702725,0.371898,0.329773,-0.561581,0.6614899999999999 183 | ShopFacade,train,seq2,ShopFacade/seq2/frame00182.png,-7.372075,15.708335,1.7740919999999998,0.359662,0.307799,-0.588134,0.655745 184 | ShopFacade,train,seq2,ShopFacade/seq2/frame00183.png,-7.309963000000001,16.533336,1.681577,0.363611,0.298293,-0.5796680000000001,0.665427 185 | ShopFacade,train,seq2,ShopFacade/seq2/frame00184.png,-7.371616,17.247888,1.677687,0.377012,0.30783,-0.574821,0.657787 186 | ShopFacade,train,seq2,ShopFacade/seq2/frame00185.png,-7.44045,18.032106,1.7067970000000001,0.412454,0.328497,-0.563265,0.636163 187 | ShopFacade,train,seq2,ShopFacade/seq2/frame00186.png,-7.640244999999999,18.71565,1.8992310000000001,0.336262,0.311616,-0.604632,0.651339 188 | ShopFacade,train,seq2,ShopFacade/seq2/frame00187.png,-7.861155999999999,19.285141,1.964907,0.249392,0.23885100000000004,-0.654886,0.672219 189 | ShopFacade,train,seq2,ShopFacade/seq2/frame00188.png,-7.933636999999999,19.793789,1.693709,0.16584300000000002,0.18654500000000002,-0.6683819999999999,0.700687 190 | ShopFacade,train,seq2,ShopFacade/seq2/frame00189.png,-8.349155999999999,20.250577,1.875939,0.182816,0.180983,-0.675971,0.69057 191 | ShopFacade,train,seq2,ShopFacade/seq2/frame00190.png,-8.681493,20.839517,1.711067,0.15401800000000002,0.185613,-0.666858,0.705072 192 | ShopFacade,train,seq2,ShopFacade/seq2/frame00191.png,-9.030763,21.138504,1.7161819999999999,0.199531,0.211885,-0.685096,0.667784 193 | ShopFacade,train,seq2,ShopFacade/seq2/frame00192.png,-8.883655000000001,21.515125,1.755164,0.18629500000000002,0.213823,-0.696842,0.658775 194 | ShopFacade,train,seq2,ShopFacade/seq2/frame00193.png,-8.506847,21.822485999999998,1.7540490000000002,0.22118200000000002,0.225158,-0.712651,0.626506 195 | ShopFacade,train,seq2,ShopFacade/seq2/frame00194.png,-7.9551,21.858954,1.791461,0.229879,0.20808200000000002,-0.706498,0.636175 196 | ShopFacade,train,seq2,ShopFacade/seq2/frame00195.png,-7.279255,21.862726000000002,1.7963220000000002,0.22273600000000002,0.197977,-0.705515,0.642995 197 | ShopFacade,train,seq2,ShopFacade/seq2/frame00196.png,-6.759815,21.551937,1.8264040000000001,0.207821,0.177726,-0.697707,0.66214 198 | ShopFacade,train,seq2,ShopFacade/seq2/frame00197.png,-6.278454,21.076511,1.8211,0.189046,0.17102,-0.6979529999999999,0.669235 199 | ShopFacade,train,seq2,ShopFacade/seq2/frame00198.png,-5.764679,20.346144,1.763511,0.191875,0.153683,-0.689435,0.681355 200 | ShopFacade,train,seq2,ShopFacade/seq2/frame00199.png,-5.696345,19.61525,1.8052169999999998,0.207261,0.177007,-0.6834060000000001,0.67725 201 | ShopFacade,train,seq2,ShopFacade/seq2/frame00200.png,-5.635168,18.844572,1.833981,0.201708,0.170033,-0.689826,0.674198 202 | ShopFacade,train,seq2,ShopFacade/seq2/frame00201.png,-5.641475,17.990192,1.796935,0.23299499999999998,0.20803200000000002,-0.6875560000000001,0.655517 203 | ShopFacade,train,seq2,ShopFacade/seq2/frame00202.png,-5.703567,17.147084,1.7931169999999998,0.22400599999999998,0.200808,-0.691427,0.65683 204 | ShopFacade,train,seq2,ShopFacade/seq2/frame00203.png,-5.736442,16.301745999999998,1.815823,0.229979,0.223345,-0.690542,0.648366 205 | ShopFacade,train,seq2,ShopFacade/seq2/frame00204.png,-5.741874,15.449053,1.8026790000000001,0.24464699999999998,0.224773,-0.683154,0.650328 206 | ShopFacade,train,seq2,ShopFacade/seq2/frame00205.png,-5.7651129999999995,14.610729000000001,1.794978,0.274754,0.269094,-0.666189,0.638976 207 | ShopFacade,train,seq2,ShopFacade/seq2/frame00206.png,-5.792117,13.769241000000001,1.7998610000000002,0.284193,0.260024,-0.656619,0.648439 208 | ShopFacade,train,seq2,ShopFacade/seq2/frame00207.png,-5.8482769999999995,12.924791,1.7830529999999998,0.31492600000000004,0.300414,-0.646857,0.626218 209 | ShopFacade,train,seq2,ShopFacade/seq2/frame00208.png,-5.854255,12.090822,1.8145650000000002,0.32560500000000003,0.288018,-0.642407,0.631143 210 | ShopFacade,train,seq2,ShopFacade/seq2/frame00209.png,-6.015384,11.242051,1.794718,0.350453,0.320031,-0.6323989999999999,0.612237 211 | ShopFacade,train,seq2,ShopFacade/seq2/frame00210.png,-6.165049,10.370845,1.802242,0.354425,0.324044,-0.633127,0.607066 212 | ShopFacade,train,seq2,ShopFacade/seq2/frame00211.png,-6.387891000000001,9.541506,1.7794990000000002,0.372638,0.340229,-0.622732,0.597989 213 | ShopFacade,train,seq2,ShopFacade/seq2/frame00212.png,-6.573385000000001,8.68319,1.7739029999999998,0.38516,0.351071,-0.610487,0.5964119999999999 214 | ShopFacade,train,seq2,ShopFacade/seq2/frame00213.png,-6.894183,7.751222,1.7698060000000002,0.41092799999999996,0.368641,-0.603018,0.575857 215 | ShopFacade,train,seq2,ShopFacade/seq2/frame00214.png,-6.972502,6.974036,1.784644,0.41945600000000005,0.384356,-0.594958,0.567761 216 | ShopFacade,train,seq2,ShopFacade/seq2/frame00215.png,-7.3388979999999995,6.039293,1.718691,0.46105799999999997,0.41595,-0.574009,0.533784 217 | ShopFacade,train,seq2,ShopFacade/seq2/frame00216.png,-7.434938000000001,5.214279,1.815189,0.44518,0.400399,-0.5930810000000001,0.538285 218 | ShopFacade,train,seq2,ShopFacade/seq2/frame00217.png,-7.926194000000001,4.346458999999999,1.7711259999999998,0.473866,0.41744799999999993,-0.568861,0.526863 219 | ShopFacade,train,seq2,ShopFacade/seq2/frame00218.png,-8.079417999999999,3.259267,1.846757,0.48021899999999995,0.41914799999999997,-0.5663699999999999,0.5224270000000001 220 | ShopFacade,train,seq2,ShopFacade/seq2/frame00219.png,-8.653273,2.5807330000000004,1.8583580000000002,0.45152600000000004,0.408722,-0.577525,0.5436310000000001 221 | ShopFacade,train,seq2,ShopFacade/seq2/frame00220.png,-8.951267,1.8270919999999997,1.917183,0.498013,0.46648199999999995,-0.5277189999999999,0.505855 222 | ShopFacade,train,seq2,ShopFacade/seq2/frame00221.png,-9.404969,1.0116129999999999,1.8524610000000001,0.539229,0.48861000000000004,-0.5053890000000001,0.463761 223 | ShopFacade,train,seq2,ShopFacade/seq2/frame00222.png,-9.699924000000001,0.186755,1.8663939999999999,0.56218,0.492595,-0.501203,0.43600500000000003 224 | ShopFacade,train,seq2,ShopFacade/seq2/frame00223.png,-10.010239,-0.570879,1.884455,0.565106,0.485836,-0.50251,0.43829399999999996 225 | ShopFacade,train,seq2,ShopFacade/seq2/frame00224.png,-10.317241000000001,-1.310241,1.841321,0.575066,0.52355,-0.482998,0.402378 226 | ShopFacade,train,seq2,ShopFacade/seq2/frame00225.png,-10.461217,-2.006601,1.9162169999999998,0.608015,0.5255340000000001,-0.436123,0.404882 227 | ShopFacade,train,seq2,ShopFacade/seq2/frame00226.png,-10.831828,-2.733859,1.963468,0.611017,0.51915,-0.452222,0.390687 228 | ShopFacade,train,seq2,ShopFacade/seq2/frame00227.png,-11.000229,-3.505645,1.9812900000000002,0.614,0.538343,-0.44813000000000003,0.363827 229 | ShopFacade,train,seq2,ShopFacade/seq2/frame00228.png,-11.372489,-4.072622,1.981596,0.6177560000000001,0.6017779999999999,-0.36190500000000003,0.353929 230 | ShopFacade,train,seq2,ShopFacade/seq2/frame00229.png,-11.805771,-4.403497,2.001193,0.592512,0.6214149999999999,-0.38256100000000004,0.34120300000000003 231 | ShopFacade,train,seq2,ShopFacade/seq2/frame00230.png,-12.227476,-4.971431,2.011527,0.60231,0.625405,-0.348584,0.35296 232 | ShopFacade,train,seq2,ShopFacade/seq2/frame00231.png,-12.459448,-5.551986,2.038282,0.614812,0.600801,-0.349748,0.372452 233 | -------------------------------------------------------------------------------- /datasets/CameraPoseDataset.py: -------------------------------------------------------------------------------- 1 | from skimage.io import imread 2 | from torch.utils.data import Dataset 3 | import pandas as pd 4 | from os.path import join 5 | import numpy as np 6 | 7 | 8 | class CameraPoseDataset(Dataset): 9 | """ 10 | A class representing a dataset of images and their poses 11 | """ 12 | 13 | def __init__(self, dataset_path, labels_file, data_transform=None, equalize_scenes=False): 14 | """ 15 | :param dataset_path: (str) the path to the dataset 16 | :param labels_file: (str) a file with images and their path labels 17 | :param data_transform: (Transform object) a torchvision transform object 18 | :return: an instance of the class 19 | """ 20 | super(CameraPoseDataset, self).__init__() 21 | self.img_paths, self.poses, self.scenes, self.scenes_ids = read_labels_file(labels_file, dataset_path) 22 | self.dataset_size = self.poses.shape[0] 23 | self.num_scenes = np.max(self.scenes_ids) + 1 24 | self.scenes_sample_indices = [np.where(np.array(self.scenes_ids) == i)[0] for i in range(self.num_scenes)] 25 | self.scene_prob_selection = [len(self.scenes_sample_indices[i])/len(self.scenes_ids) 26 | for i in range(self.num_scenes)] 27 | if self.num_scenes > 1 and equalize_scenes: 28 | max_samples_in_scene = np.max([len(indices) for indices in self.scenes_sample_indices]) 29 | unbalanced_dataset_size = self.dataset_size 30 | self.dataset_size = max_samples_in_scene*self.num_scenes 31 | num_added_positions = self.dataset_size - unbalanced_dataset_size 32 | # gap of each scene to maximum / # of added fake positions 33 | self.scene_prob_selection = [ (max_samples_in_scene-len(self.scenes_sample_indices[i]))/num_added_positions for i in range(self.num_scenes) ] 34 | self.transform = data_transform 35 | 36 | def __len__(self): 37 | return self.dataset_size 38 | 39 | def __getitem__(self, idx): 40 | 41 | if idx >= len(self.poses): # sample from an under-repsented scene 42 | sampled_scene_idx = np.random.choice(range(self.num_scenes), p=self.scene_prob_selection) 43 | idx = np.random.choice(self.scenes_sample_indices[sampled_scene_idx]) 44 | 45 | img = imread(self.img_paths[idx]) 46 | pose = self.poses[idx] 47 | scene = self.scenes_ids[idx] 48 | if self.transform: 49 | img = self.transform(img) 50 | 51 | sample = {'img': img, 'pose': pose, 'scene': scene} 52 | return sample 53 | 54 | 55 | def read_labels_file(labels_file, dataset_path): 56 | df = pd.read_csv(labels_file) 57 | imgs_paths = [join(dataset_path, path) for path in df['img_path'].values] 58 | scenes = df['scene'].values 59 | scene_unique_names = np.unique(scenes) 60 | scene_name_to_id = dict(zip(scene_unique_names, list(range(len(scene_unique_names))))) 61 | scenes_ids = [scene_name_to_id[s] for s in scenes] 62 | n = df.shape[0] 63 | poses = np.zeros((n, 7)) 64 | poses[:, 0] = df['t1'].values 65 | poses[:, 1] = df['t2'].values 66 | poses[:, 2] = df['t3'].values 67 | poses[:, 3] = df['q1'].values 68 | poses[:, 4] = df['q2'].values 69 | poses[:, 5] = df['q3'].values 70 | poses[:, 6] = df['q4'].values 71 | return imgs_paths, poses, scenes, scenes_ids -------------------------------------------------------------------------------- /example_configs.json: -------------------------------------------------------------------------------- 1 | { 2 | 3 | "ems-transposenet-all": 4 | { 5 | "batch_size": 8, 6 | "equalize_scenes": false, 7 | "num_scenes": 11, 8 | "learnable": true, 9 | "s_x": -3.0, 10 | "s_q": -6.5, 11 | "lr": 1e-4, 12 | "norm": 2, 13 | "weight_decay": 1e-4, 14 | "eps": 1e-10, 15 | "lr_scheduler_gamma": 0.1, 16 | "lr_scheduler_step_size": 10, 17 | "n_epochs": 30, 18 | "num_t_encoder_layers": 6, 19 | "num_t_decoder_layers": 6, 20 | "num_rot_encoder_layers": 6, 21 | "num_rot_decoder_layers": 6, 22 | "dim_feedforward": 256, 23 | "hidden_dim":256, 24 | "dropout": 0.1, 25 | "nheads": 4, 26 | "reduction": ["reduction_4", "reduction_3"], 27 | "freeze": false, 28 | "freeze_exclude_phrase": "regressor_head_rot" 29 | 30 | }, 31 | "ems-transposenet-cambridge-finetune": 32 | { 33 | "batch_size": 8, 34 | "equalize_scenes": true, 35 | "num_scenes": 4, 36 | "learnable": false, 37 | "s_x": 1.0, 38 | "s_q": 0.0, 39 | "lr": 1e-4, 40 | "norm": 2, 41 | "weight_decay": 1e-4, 42 | "eps": 1e-10, 43 | "lr_scheduler_gamma": 0.1, 44 | "lr_scheduler_step_size": 20, 45 | "n_epochs": 60, 46 | "num_t_encoder_layers": 6, 47 | "num_t_decoder_layers": 6, 48 | "num_rot_encoder_layers": 6, 49 | "num_rot_decoder_layers": 6, 50 | "dim_feedforward": 256, 51 | "hidden_dim":256, 52 | "dropout": 0.1, 53 | "nheads": 4, 54 | "reduction": ["reduction_4", "reduction_3"], 55 | "freeze": true, 56 | "freeze_exclude_phrase": ["regressor_head_t", "transformer_t"], 57 | "no_augment": false 58 | 59 | }, 60 | "ems-transposenet-cambridge-init": 61 | { 62 | "batch_size": 8, 63 | "equalize_scenes": true, 64 | "num_scenes": 4, 65 | "learnable": true, 66 | "s_x": -3.0, 67 | "s_q": -6.5, 68 | "lr": 1e-4, 69 | "norm": 2, 70 | "weight_decay": 1e-4, 71 | "eps": 1e-10, 72 | "lr_scheduler_gamma": 0.1, 73 | "lr_scheduler_step_size": 200, 74 | "n_epochs": 600, 75 | "num_t_encoder_layers": 6, 76 | "num_t_decoder_layers": 6, 77 | "num_rot_encoder_layers": 6, 78 | "num_rot_decoder_layers": 6, 79 | "dim_feedforward": 256, 80 | "hidden_dim":256, 81 | "dropout": 0.1, 82 | "nheads": 4, 83 | "reduction": ["reduction_4", "reduction_3"], 84 | "freeze": false, 85 | "freeze_exclude_phrase": ["regressor_head_t", "transformer_t"], 86 | "no_augment": true 87 | }, 88 | "ems-transposenet-7scenes": 89 | { 90 | "batch_size": 8, 91 | "equalize_scenes": false, 92 | "num_scenes": 7, 93 | "learnable": true, 94 | "s_x": 0.0, 95 | "s_q": -3.0, 96 | "lr": 1e-4, 97 | "norm": 2, 98 | "weight_decay": 1e-4, 99 | "eps": 1e-10, 100 | "lr_scheduler_gamma": 0.1, 101 | "lr_scheduler_step_size": 10, 102 | "n_epochs": 30, 103 | "num_t_encoder_layers": 6, 104 | "num_t_decoder_layers": 6, 105 | "num_rot_encoder_layers": 4, 106 | "num_rot_decoder_layers": 4, 107 | "dim_feedforward": 256, 108 | "hidden_dim":256, 109 | "dropout": 0.1, 110 | "nheads": 4, 111 | "reduction": ["reduction_4", "reduction_3"], 112 | "freeze": false, 113 | "freeze_exclude_phrase": "regressor_head_rot" 114 | }, 115 | "ems-transposenet-scene-ablation": 116 | { 117 | "batch_size": 8, 118 | "equalize_scenes": false, 119 | "num_scenes": 3, 120 | "learnable": true, 121 | "s_x": 0.0, 122 | "s_q": -3.0, 123 | "lr": 1e-4, 124 | "norm": 2, 125 | "weight_decay": 1e-4, 126 | "eps": 1e-10, 127 | "lr_scheduler_gamma": 0.1, 128 | "lr_scheduler_step_size": 10, 129 | "n_epochs": 30, 130 | "num_t_encoder_layers": 6, 131 | "num_t_decoder_layers": 6, 132 | "num_rot_encoder_layers": 4, 133 | "num_rot_decoder_layers": 4, 134 | "dim_feedforward": 256, 135 | "hidden_dim":256, 136 | "dropout": 0.1, 137 | "nheads": 4, 138 | "reduction": ["reduction_4", "reduction_3"], 139 | "freeze": false, 140 | "freeze_exclude_phrase": "regressor_head_rot", 141 | "no_augment": false 142 | }, 143 | "posenet": { 144 | "batch_size": 32, 145 | "learnable": true, 146 | "s_x": -3.0, 147 | "s_q": -6.5, 148 | "norm": 2, 149 | "lr": 1e-3, 150 | "weight_decay": 1e-4, 151 | "eps": 1e-10, 152 | "lr_scheduler_step_size": 200, 153 | "lr_scheduler_gamma": 0.5, 154 | "n_epochs": 600 155 | }, 156 | "ms-transposenet": 157 | { 158 | "batch_size": 8, 159 | "num_scenes": 4, 160 | "equalize_scenes": true, 161 | "learnable": true, 162 | "s_x": -3, 163 | "s_q": -6.5, 164 | "lr": 1e-4, 165 | "norm": 2, 166 | "weight_decay": 1e-4, 167 | "eps": 1e-10, 168 | "lr_scheduler_gamma": 0.1, 169 | "lr_scheduler_step_size": 200, 170 | "n_epochs": 600, 171 | "num_t_encoder_layers": 6, 172 | "num_t_decoder_layers": 6, 173 | "num_rot_encoder_layers": 6, 174 | "num_rot_decoder_layers": 6, 175 | "dim_feedforward": 256, 176 | "hidden_dim":256, 177 | "dropout": 0.1, 178 | "nheads": 4, 179 | "reduction": ["reduction_4", "reduction_3"], 180 | "freeze": false, 181 | "freeze_exclude_phrase": "regressor_head_rot" 182 | } 183 | } -------------------------------------------------------------------------------- /img/cropped_teaser_small.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yolish/multi-scene-pose-transformer/56ca699fa61ad689f3631231c03608e46c9c7938/img/cropped_teaser_small.pdf -------------------------------------------------------------------------------- /img/teaser.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yolish/multi-scene-pose-transformer/56ca699fa61ad689f3631231c03608e46c9c7938/img/teaser.PNG -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | """ 2 | Entry point training and testing multi-scene transformer 3 | """ 4 | import argparse 5 | import torch 6 | import numpy as np 7 | import json 8 | import logging 9 | from util import utils 10 | import time 11 | from datasets.CameraPoseDataset import CameraPoseDataset 12 | from models.pose_losses import CameraPoseLoss 13 | from models.pose_regressors import get_model 14 | from os.path import join 15 | 16 | 17 | 18 | if __name__ == "__main__": 19 | arg_parser = argparse.ArgumentParser() 20 | arg_parser.add_argument("model_name", 21 | help="name of model to create (e.g. posenet, transposenet") 22 | arg_parser.add_argument("mode", help="train or eval") 23 | arg_parser.add_argument("backbone_path", help="path to backbone .pth - e.g. efficientnet") 24 | arg_parser.add_argument("dataset_path", help="path to the physical location of the dataset") 25 | arg_parser.add_argument("labels_file", help="path to a file mapping images to their poses") 26 | arg_parser.add_argument("config_file", help="path to configuration file", default="7scenes-config.json") 27 | arg_parser.add_argument("--checkpoint_path", 28 | help="path to a pre-trained model (should match the model indicated in model_name") 29 | arg_parser.add_argument("--experiment", help="a short string to describe the experiment/commit used") 30 | 31 | args = arg_parser.parse_args() 32 | utils.init_logger() 33 | 34 | # Record execution details 35 | logging.info("Start {} with {}".format(args.model_name, args.mode)) 36 | if args.experiment is not None: 37 | logging.info("Experiment details: {}".format(args.experiment)) 38 | logging.info("Using dataset: {}".format(args.dataset_path)) 39 | logging.info("Using labels file: {}".format(args.labels_file)) 40 | 41 | # Read configuration 42 | with open(args.config_file, "r") as read_file: 43 | config = json.load(read_file) 44 | model_params = config[args.model_name] 45 | general_params = config['general'] 46 | config = {**model_params, **general_params} 47 | logging.info("Running with configuration:\n{}".format( 48 | '\n'.join(["\t{}: {}".format(k, v) for k, v in config.items()]))) 49 | 50 | # Set the seeds and the device 51 | use_cuda = torch.cuda.is_available() 52 | device_id = 'cpu' 53 | torch_seed = 0 54 | numpy_seed = 2 55 | torch.manual_seed(torch_seed) 56 | if use_cuda: 57 | torch.backends.cudnn.deterministic = True 58 | torch.backends.cudnn.benchmark = False 59 | device_id = config.get('device_id') 60 | np.random.seed(numpy_seed) 61 | device = torch.device(device_id) 62 | 63 | # Create the model 64 | model = get_model(args.model_name, args.backbone_path, config).to(device) 65 | # Load the checkpoint if needed 66 | if args.checkpoint_path: 67 | model.load_state_dict(torch.load(args.checkpoint_path, map_location=device_id)) 68 | logging.info("Initializing from checkpoint: {}".format(args.checkpoint_path)) 69 | 70 | if args.mode == 'train': 71 | # Set to train mode 72 | model.train() 73 | 74 | # Freeze parts of the model if indicated 75 | freeze = config.get("freeze") 76 | freeze_exclude_phrase = config.get("freeze_exclude_phrase") 77 | if isinstance(freeze_exclude_phrase, str): 78 | freeze_exclude_phrase = [freeze_exclude_phrase] 79 | if freeze: 80 | for name, parameter in model.named_parameters(): 81 | freeze_param = True 82 | for phrase in freeze_exclude_phrase: 83 | if phrase in name: 84 | freeze_param = False 85 | break 86 | if freeze_param: 87 | parameter.requires_grad_(False) 88 | 89 | # Set the loss 90 | pose_loss = CameraPoseLoss(config).to(device) 91 | nll_loss = torch.nn.NLLLoss() 92 | 93 | # Set the optimizer and scheduler 94 | params = list(model.parameters()) + list(pose_loss.parameters()) 95 | optim = torch.optim.Adam(filter(lambda p: p.requires_grad, params), 96 | lr=config.get('lr'), 97 | eps=config.get('eps'), 98 | weight_decay=config.get('weight_decay')) 99 | scheduler = torch.optim.lr_scheduler.StepLR(optim, 100 | step_size=config.get('lr_scheduler_step_size'), 101 | gamma=config.get('lr_scheduler_gamma')) 102 | 103 | # Set the dataset and data loader 104 | no_augment = config.get("no_augment") 105 | if no_augment: 106 | transform = utils.test_transforms.get('baseline') 107 | else: 108 | transform = utils.train_transforms.get('baseline') 109 | 110 | equalize_scenes = config.get("equalize_scenes") 111 | dataset = CameraPoseDataset(args.dataset_path, args.labels_file, transform, equalize_scenes) 112 | loader_params = {'batch_size': config.get('batch_size'), 113 | 'shuffle': True, 114 | 'num_workers': config.get('n_workers')} 115 | dataloader = torch.utils.data.DataLoader(dataset, **loader_params) 116 | 117 | # Get training details 118 | n_freq_print = config.get("n_freq_print") 119 | n_freq_checkpoint = config.get("n_freq_checkpoint") 120 | n_epochs = config.get("n_epochs") 121 | 122 | # Train 123 | checkpoint_prefix = join(utils.create_output_dir('out'),utils.get_stamp_from_log()) 124 | n_total_samples = 0.0 125 | loss_vals = [] 126 | sample_count = [] 127 | for epoch in range(n_epochs): 128 | 129 | # Resetting temporal loss used for logging 130 | running_loss = 0.0 131 | n_samples = 0 132 | 133 | for batch_idx, minibatch in enumerate(dataloader): 134 | for k, v in minibatch.items(): 135 | minibatch[k] = v.to(device) 136 | gt_pose = minibatch.get('pose').to(dtype=torch.float32) 137 | gt_scene = minibatch.get('scene').to(device) 138 | batch_size = gt_pose.shape[0] 139 | n_samples += batch_size 140 | n_total_samples += batch_size 141 | 142 | if freeze: # For TransPoseNet 143 | model.eval() 144 | with torch.no_grad(): 145 | transformers_res = model.forward_transformers(minibatch) 146 | model.train() 147 | 148 | # Zero the gradients 149 | optim.zero_grad() 150 | 151 | # Forward pass to estimate the pose 152 | if freeze: 153 | res = model.forward_heads(transformers_res) 154 | else: 155 | res = model(minibatch) 156 | 157 | est_pose = res.get('pose') 158 | est_scene_log_distr = res.get('scene_log_distr') 159 | if est_scene_log_distr is not None: 160 | # Pose Loss + Scene Loss 161 | criterion = pose_loss(est_pose, gt_pose) + nll_loss(est_scene_log_distr, gt_scene) 162 | else: 163 | # Pose loss 164 | criterion = pose_loss(est_pose, gt_pose) 165 | 166 | # Collect for recoding and plotting 167 | running_loss += criterion.item() 168 | loss_vals.append(criterion.item()) 169 | sample_count.append(n_total_samples) 170 | 171 | # Back prop 172 | criterion.backward() 173 | optim.step() 174 | 175 | # Record loss and performance on train set 176 | if batch_idx % n_freq_print == 0: 177 | posit_err, orient_err = utils.pose_err(est_pose.detach(), gt_pose.detach()) 178 | logging.info("[Batch-{}/Epoch-{}] running camera pose loss: {:.3f}, " 179 | "camera pose error: {:.2f}[m], {:.2f}[deg]".format( 180 | batch_idx+1, epoch+1, (running_loss/n_samples), 181 | posit_err.mean().item(), 182 | orient_err.mean().item())) 183 | # Save checkpoint 184 | if (epoch % n_freq_checkpoint) == 0 and epoch > 0: 185 | torch.save(model.state_dict(), checkpoint_prefix + '_checkpoint-{}.pth'.format(epoch)) 186 | 187 | # Scheduler update 188 | scheduler.step() 189 | 190 | logging.info('Training completed') 191 | torch.save(model.state_dict(), checkpoint_prefix + '_final.pth'.format(epoch)) 192 | 193 | # Plot the loss function 194 | loss_fig_path = checkpoint_prefix + "_loss_fig.png" 195 | utils.plot_loss_func(sample_count, loss_vals, loss_fig_path) 196 | 197 | else: # Test 198 | # Set to eval mode 199 | model.eval() 200 | 201 | # Set the dataset and data loader 202 | transform = utils.test_transforms.get('baseline') 203 | dataset = CameraPoseDataset(args.dataset_path, args.labels_file, transform) 204 | loader_params = {'batch_size': 1, 205 | 'shuffle': False, 206 | 'num_workers': config.get('n_workers')} 207 | dataloader = torch.utils.data.DataLoader(dataset, **loader_params) 208 | 209 | stats = np.zeros((len(dataloader.dataset), 3)) 210 | 211 | with torch.no_grad(): 212 | for i, minibatch in enumerate(dataloader, 0): 213 | for k, v in minibatch.items(): 214 | minibatch[k] = v.to(device) 215 | gt_scene = minibatch.get('scene') 216 | minibatch['scene'] = None # avoid using ground-truth scene during prediction 217 | 218 | gt_pose = minibatch.get('pose').to(dtype=torch.float32) 219 | 220 | # Forward pass to predict the pose 221 | tic = time.time() 222 | est_pose = model(minibatch).get('pose') 223 | toc = time.time() 224 | 225 | # Evaluate error 226 | posit_err, orient_err = utils.pose_err(est_pose, gt_pose) 227 | 228 | # Collect statistics 229 | stats[i, 0] = posit_err.item() 230 | stats[i, 1] = orient_err.item() 231 | stats[i, 2] = (toc - tic)*1000 232 | 233 | logging.info("Pose error: {:.3f}[m], {:.3f}[deg], inferred in {:.2f}[ms]".format( 234 | stats[i, 0], stats[i, 1], stats[i, 2])) 235 | 236 | # Record overall statistics 237 | logging.info("Performance of {} on {}".format(args.checkpoint_path, args.labels_file)) 238 | logging.info("Median pose error: {:.3f}[m], {:.3f}[deg]".format(np.nanmedian(stats[:, 0]), np.nanmedian(stats[:, 1]))) 239 | logging.info("Mean inference time:{:.2f}[ms]".format(np.mean(stats[:, 2]))) 240 | 241 | 242 | 243 | 244 | 245 | -------------------------------------------------------------------------------- /models/backbones/efficient-net-b0.pth: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yolish/multi-scene-pose-transformer/56ca699fa61ad689f3631231c03608e46c9c7938/models/backbones/efficient-net-b0.pth -------------------------------------------------------------------------------- /models/pose_losses.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import torch.nn.functional as F 3 | import torch.nn as nn 4 | 5 | 6 | class CameraPoseLoss(nn.Module): 7 | """ 8 | A class to represent camera pose loss 9 | """ 10 | 11 | def __init__(self, config): 12 | """ 13 | :param config: (dict) configuration to determine behavior 14 | """ 15 | super(CameraPoseLoss, self).__init__() 16 | self.learnable = config.get("learnable") 17 | self.s_x = torch.nn.Parameter(torch.Tensor([config.get("s_x")]), requires_grad=self.learnable) 18 | self.s_q = torch.nn.Parameter(torch.Tensor([config.get("s_q")]), requires_grad=self.learnable) 19 | self.norm = config.get("norm") 20 | 21 | def forward(self, est_pose, gt_pose): 22 | """ 23 | Forward pass 24 | :param est_pose: (torch.Tensor) batch of estimated poses, a Nx7 tensor 25 | :param gt_pose: (torch.Tensor) batch of ground_truth poses, a Nx7 tensor 26 | :return: camera pose loss 27 | """ 28 | # Position loss 29 | l_x = torch.norm(gt_pose[:, 0:3] - est_pose[:, 0:3], dim=1, p=self.norm).mean() 30 | # Orientation loss (normalized to unit norm) 31 | l_q = torch.norm(F.normalize(gt_pose[:, 3:], p=2, dim=1) - F.normalize(est_pose[:, 3:], p=2, dim=1), 32 | dim=1, p=self.norm).mean() 33 | 34 | if self.learnable: 35 | return l_x * torch.exp(-self.s_x) + self.s_x + l_q * torch.exp(-self.s_q) + self.s_q 36 | else: 37 | return self.s_x*l_x + self.s_q*l_q -------------------------------------------------------------------------------- /models/pose_regressors.py: -------------------------------------------------------------------------------- 1 | from .posenet.PoseNet import PoseNet 2 | from .transposenet.EMSTransPoseNet import EMSTransPoseNet 3 | from .transposenet.MSTransPoseNet import MSTransPoseNet 4 | 5 | def get_model(model_name, backbone_path, config): 6 | """ 7 | Get the instance of the request model 8 | :param model_name: (str) model name 9 | :param backbone_path: (str) path to a .pth backbone 10 | :param config: (dict) config file 11 | :return: instance of the model (nn.Module) 12 | """ 13 | if model_name == 'posenet': 14 | return PoseNet(backbone_path) 15 | elif model_name == 'ms-transposenet': 16 | return MSTransPoseNet(config, backbone_path) 17 | elif model_name == 'ems-transposenet': 18 | return EMSTransPoseNet(config, backbone_path) 19 | else: 20 | raise "{} not supported".format(model_name) -------------------------------------------------------------------------------- /models/posenet/PoseNet.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import torch.nn as nn 3 | import torch.nn.functional as F 4 | 5 | 6 | class PoseNet(nn.Module): 7 | """ 8 | A class to represent a classic pose regressor (PoseNet) with an efficient-net backbone 9 | PoseNet: A Convolutional Network for Real-Time 6-DOF Camera Relocalization, 10 | Kendall et al., 2015 11 | """ 12 | def __init__(self, backbone_path): 13 | """ 14 | Constructor 15 | :param backbone_path: backbone path to a resnet backbone 16 | """ 17 | super(PoseNet, self).__init__() 18 | 19 | # Efficient net 20 | self.backbone = torch.load(backbone_path) 21 | backbone_dim = 1280 22 | latent_dim = 1024 23 | 24 | # Regressor layers 25 | self.fc1 = nn.Linear(backbone_dim, latent_dim) 26 | self.fc2 = nn.Linear(latent_dim, 3) 27 | self.fc3 = nn.Linear(latent_dim, 4) 28 | 29 | self.dropout = nn.Dropout(p=0.1) 30 | self.avg_pooling_2d = nn.AdaptiveAvgPool2d(1) 31 | 32 | # Initialize FC layers 33 | for m in list(self.modules()): 34 | if isinstance(m, nn.Linear): 35 | torch.nn.init.kaiming_normal_(m.weight) 36 | 37 | def forward(self, data): 38 | """ 39 | Forward pass 40 | :param data: (torch.Tensor) dictionary with key-value 'img' -- input image (N X C X H X W) 41 | :return: (torch.Tensor) dictionary with key-value 'pose' -- 7-dimensional absolute pose for (N X 7) 42 | """ 43 | x = self.backbone.extract_features(data.get('img')) 44 | x = self.avg_pooling_2d(x) 45 | x = x.flatten(start_dim=1) 46 | x = self.dropout(F.relu(self.fc1(x))) 47 | p_x = self.fc2(x) 48 | p_q = self.fc3(x) 49 | return {'pose': torch.cat((p_x, p_q), dim=1)} 50 | 51 | -------------------------------------------------------------------------------- /models/transposenet/EMSTransPoseNet.py: -------------------------------------------------------------------------------- 1 | """ 2 | The Efficient Multi-Scene TransPoseNet model 3 | """ 4 | 5 | import torch 6 | import torch.nn.functional as F 7 | from torch import nn 8 | from .transformer import Transformer 9 | from .pencoder import NestedTensor, nested_tensor_from_tensor_list 10 | from .backbone import build_backbone 11 | from .MSTransPoseNet import MSTransPoseNet, PoseRegressor 12 | 13 | 14 | class EMSTransPoseNet(MSTransPoseNet): 15 | 16 | def __init__(self, config, pretrained_path): 17 | """ Initializes the model. 18 | """ 19 | super().__init__(config, pretrained_path) 20 | 21 | decoder_dim = self.transformer_t.d_model 22 | self.regressor_head_t = PoseRegressor(decoder_dim, 3) 23 | self.regressor_head_rot = PoseRegressor(decoder_dim, 4) 24 | 25 | def forward_heads(self, transformers_res): 26 | """ 27 | Forward pass of the MLP heads 28 | The forward pass execpts a dictionary with two keys-values: 29 | global_desc_t: latent representation from the position encoder 30 | global_dec_rot: latent representation from the orientation encoder 31 | scene_log_distr: the log softmax over the scenes 32 | max_indices: the index of the max value in the scene distribution 33 | returns: dictionary with key-value 'pose'--expected pose (NX7) and scene_log_distr 34 | """ 35 | global_desc_t = transformers_res.get('global_desc_t') 36 | global_desc_rot = transformers_res.get('global_desc_rot') 37 | x_t = self.regressor_head_t(global_desc_t) 38 | x_rot = self.regressor_head_rot(global_desc_rot) 39 | expected_pose = torch.cat((x_t, x_rot), dim=1) 40 | return {'pose':expected_pose, 'scene_log_distr':transformers_res.get('scene_log_distr')} -------------------------------------------------------------------------------- /models/transposenet/MSTransPoseNet.py: -------------------------------------------------------------------------------- 1 | """ 2 | The Multi-Scene TransPoseNet model 3 | """ 4 | 5 | import torch 6 | import torch.nn.functional as F 7 | from torch import nn 8 | from .transformer import Transformer 9 | from .pencoder import NestedTensor, nested_tensor_from_tensor_list 10 | from .backbone import build_backbone 11 | 12 | class MSTransPoseNet(nn.Module): 13 | 14 | def __init__(self, config, pretrained_path): 15 | """ Initializes the model. 16 | """ 17 | super().__init__() 18 | 19 | config["backbone"] = pretrained_path 20 | config["learn_embedding_with_pose_token"] = False 21 | num_scenes = config.get("num_scenes") 22 | self.backbone = build_backbone(config) 23 | 24 | config_t = {**config} 25 | config_t["num_encoder_layers"] = config["num_t_encoder_layers"] 26 | config_t["num_decoder_layers"] = config["num_t_decoder_layers"] 27 | config_rot = {**config} 28 | config_rot["num_encoder_layers"] = config["num_rot_encoder_layers"] 29 | config_rot["num_decoder_layers"] = config["num_rot_decoder_layers"] 30 | self.transformer_t = Transformer(config_t) 31 | self.transformer_rot = Transformer(config_rot) 32 | 33 | decoder_dim = self.transformer_t.d_model 34 | 35 | self.input_proj_t = nn.Conv2d(self.backbone.num_channels[0], decoder_dim, kernel_size=1) 36 | self.input_proj_rot = nn.Conv2d(self.backbone.num_channels[1], decoder_dim, kernel_size=1) 37 | 38 | self.query_embed_t = nn.Embedding(num_scenes, decoder_dim) 39 | self.query_embed_rot = nn.Embedding(num_scenes, decoder_dim) 40 | 41 | self.log_softmax = nn.LogSoftmax(dim=1) 42 | 43 | self.scene_embed = nn.Linear(decoder_dim*2, 1) 44 | self.regressor_head_t = nn.Sequential(*[PoseRegressor(decoder_dim, 3) for _ in range(num_scenes)]) 45 | self.regressor_head_rot = nn.Sequential(*[PoseRegressor(decoder_dim, 4) for _ in range(num_scenes)]) 46 | 47 | def forward_transformers(self, data): 48 | """ 49 | Forward of the Transformers 50 | The forward pass expects a dictionary with key-value 'img' -- NestedTensor, which consists of: 51 | - samples.tensor: batched images, of shape [batch_size x 3 x H x W] 52 | - samples.mask: a binary mask of shape [batch_size x H x W], containing 1 on padded pixels NOT USED 53 | return a dictionary with the following keys--values: 54 | global_desc_t: latent representation from the position encoder 55 | global_dec_rot: latent representation from the orientation encoder 56 | scene_log_distr: the log softmax over the scenes 57 | max_indices: the index of the max value in the scene distribution 58 | """ 59 | samples = data.get('img') 60 | scene_indices = data.get('scene') 61 | batch_size = samples.shape[0] 62 | 63 | # Handle data structures 64 | if isinstance(samples, (list, torch.Tensor)): 65 | samples = nested_tensor_from_tensor_list(samples) 66 | 67 | # Extract the features and the position embedding from the visual backbone 68 | features, pos = self.backbone(samples) 69 | 70 | src_t, mask_t = features[0].decompose() 71 | src_rot, mask_rot = features[1].decompose() 72 | 73 | # Run through the transformer to translate to "camera-pose" language 74 | assert mask_t is not None 75 | assert mask_rot is not None 76 | local_descs_t = self.transformer_t(self.input_proj_t(src_t), mask_t, self.query_embed_t.weight, pos[0])[0][0] 77 | local_descs_rot = self.transformer_rot(self.input_proj_rot(src_rot), mask_rot, self.query_embed_rot.weight, pos[1])[0][0] 78 | 79 | # Get the scene index with FC + log-softmax 80 | scene_log_distr = self.log_softmax(self.scene_embed(torch.cat((local_descs_t, local_descs_rot), dim=2))).squeeze(2) 81 | _, max_indices = scene_log_distr.max(dim=1) 82 | if scene_indices is not None: 83 | max_indices = scene_indices 84 | # Take the global latents by zeroing other scene's predictions and summing up 85 | w = local_descs_t*0 86 | w[range(batch_size),max_indices, :] = 1 87 | global_desc_t = torch.sum(w * local_descs_t, dim=1) 88 | global_desc_rot = torch.sum(w * local_descs_rot, dim=1) 89 | 90 | return {'global_desc_t':global_desc_t, 91 | 'global_desc_rot':global_desc_rot, 92 | 'scene_log_distr':scene_log_distr, 93 | 'max_indices':max_indices} 94 | 95 | def forward_heads(self, transformers_res): 96 | """ 97 | Forward pass of the MLP heads 98 | The forward pass execpts a dictionary with two keys-values: 99 | global_desc_t: latent representation from the position encoder 100 | global_dec_rot: latent representation from the orientation encoder 101 | scene_log_distr: the log softmax over the scenes 102 | max_indices: the index of the max value in the scene distribution 103 | returns: dictionary with key-value 'pose'--expected pose (NX7) and scene_log_distr 104 | """ 105 | global_desc_t = transformers_res.get('global_desc_t') 106 | global_desc_rot = transformers_res.get('global_desc_rot') 107 | max_indices = transformers_res.get('max_indices') # We can only use the max index for weights selection 108 | batch_size = global_desc_t.shape[0] 109 | expected_pose = torch.zeros((batch_size,7)).to(global_desc_t.device).to(global_desc_t.dtype) 110 | for i in range(batch_size): 111 | x_t = self.regressor_head_t[max_indices[i]](global_desc_t[i].unsqueeze(0)) 112 | x_rot = self.regressor_head_rot[max_indices[i]](global_desc_rot[i].unsqueeze(0)) 113 | expected_pose[i, :] = torch.cat((x_t, x_rot), dim=1) 114 | return {'pose':expected_pose, 'scene_log_distr':transformers_res.get('scene_log_distr')} 115 | 116 | def forward(self, data): 117 | """ The forward pass expects a dictionary with the following keys-values 118 | 'img' -- NestedTensor, which consists of: 119 | - samples.tensor: batched images, of shape [batch_size x 3 x H x W] 120 | - samples.mask: a binary mask of shape [batch_size x H x W], containing 1 on padded pixels NOT USED 121 | 'scene_indices': ground truth scene indices for each image (can be None) 122 | 123 | returns a dictionary with the following keys-values; 124 | 'pose': expected pose (NX7) 125 | 'log_scene_distr': (log) probability distribution over scenes 126 | """ 127 | transformers_res = self.forward_transformers(data) 128 | # Regress the pose from the image descriptors 129 | 130 | heads_res = self.forward_heads(transformers_res) 131 | 132 | return heads_res 133 | 134 | class PoseRegressor(nn.Module): 135 | """ A simple MLP to regress a pose component""" 136 | 137 | def __init__(self, decoder_dim, output_dim, use_prior=False): 138 | """ 139 | decoder_dim: (int) the input dimension 140 | output_dim: (int) the outpur dimension 141 | use_prior: (bool) whether to use prior information 142 | """ 143 | super().__init__() 144 | ch = 1024 145 | self.fc_h = nn.Linear(decoder_dim, ch) 146 | self.use_prior = use_prior 147 | if self.use_prior: 148 | self.fc_h_prior = nn.Linear(decoder_dim * 2, ch) 149 | self.fc_o = nn.Linear(ch, output_dim) 150 | self._reset_parameters() 151 | 152 | def _reset_parameters(self): 153 | for p in self.parameters(): 154 | if p.dim() > 1: 155 | nn.init.xavier_uniform_(p) 156 | 157 | def forward(self, x): 158 | """ 159 | Forward pass 160 | """ 161 | if self.use_prior: 162 | x = F.gelu(self.fc_h_prior(x)) 163 | else: 164 | x = F.gelu(self.fc_h(x)) 165 | 166 | return self.fc_o(x) 167 | -------------------------------------------------------------------------------- /models/transposenet/backbone.py: -------------------------------------------------------------------------------- 1 | """ 2 | Code for the backbone of TransPoseNet 3 | Backbone code is based on https://github.com/facebookresearch/detr/tree/master/models with the following modifications: 4 | - use efficient-net as backbone and extract different activation maps from different reduction maps 5 | - change learned encoding to have a learned token for the pose 6 | """ 7 | import torch.nn.functional as F 8 | from torch import nn 9 | from .pencoder import build_position_encoding, NestedTensor 10 | from typing import Dict, List 11 | import torch 12 | 13 | class BackboneBase(nn.Module): 14 | 15 | def __init__(self, backbone: nn.Module, reduction): 16 | super().__init__() 17 | self.body = backbone 18 | self.reductions = reduction 19 | self.reduction_map = {"reduction_3": 40, "reduction_4": 112} 20 | self.num_channels = [self.reduction_map[reduction] for reduction in self.reductions] 21 | 22 | def forward(self, tensor_list: NestedTensor): 23 | xs = self.body.extract_endpoints(tensor_list.tensors) 24 | out: Dict[str, NestedTensor] = {} 25 | for name in self.reductions: 26 | x = xs[name] 27 | m = tensor_list.mask 28 | assert m is not None 29 | mask = F.interpolate(m[None].float(), size=x.shape[-2:]).to(torch.bool)[0] 30 | out[name] = NestedTensor(x, mask) 31 | return out 32 | 33 | 34 | class Backbone(BackboneBase): 35 | def __init__(self, backbone_model_path: str, reduction): 36 | backbone = torch.load(backbone_model_path) 37 | super().__init__(backbone, reduction) 38 | 39 | 40 | class Joiner(nn.Sequential): 41 | def __init__(self, backbone, position_embedding): 42 | super().__init__(backbone, position_embedding) 43 | 44 | def forward(self, tensor_list: NestedTensor): 45 | xs = self[0](tensor_list) 46 | out: List[NestedTensor] = [] 47 | pos = [] 48 | for name, x in xs.items(): 49 | out.append(x) 50 | # position encoding 51 | ret = self[1](x) 52 | if isinstance(ret, tuple): 53 | p_emb, m_emb = ret 54 | pos.append([p_emb.to(x.tensors.dtype), m_emb.to(x.tensors.dtype)]) 55 | else: 56 | pos.append(ret.to(x.tensors.dtype)) 57 | 58 | return out, pos 59 | 60 | def build_backbone(config): 61 | position_embedding = build_position_encoding(config) 62 | backbone = Backbone(config.get("backbone"), config.get("reduction")) 63 | model = Joiner(backbone, position_embedding) 64 | model.num_channels = backbone.num_channels 65 | return model 66 | -------------------------------------------------------------------------------- /models/transposenet/pencoder.py: -------------------------------------------------------------------------------- 1 | """ 2 | Code for the position encoding of TransPoseNet 3 | code is based on https://github.com/facebookresearch/detr/tree/master/models with the following modifications: 4 | - changed to learn also the position of a learned pose token 5 | """ 6 | import torch 7 | from torch import nn 8 | from typing import Optional 9 | from torch import Tensor 10 | 11 | import os 12 | import subprocess 13 | import time 14 | from collections import defaultdict, deque 15 | import datetime 16 | import pickle 17 | from typing import Optional, List 18 | 19 | import torch 20 | import torch.distributed as dist 21 | from torch import Tensor 22 | 23 | # needed due to empty tensor bug in pytorch and torchvision 0.5 24 | import torchvision 25 | if float(torchvision.__version__[:3]) < 0.7: 26 | from torchvision.ops import _new_empty_tensor 27 | from torchvision.ops.misc import _output_size 28 | 29 | def _max_by_axis(the_list): 30 | # type: (List[List[int]]) -> List[int] 31 | maxes = the_list[0] 32 | for sublist in the_list[1:]: 33 | for index, item in enumerate(sublist): 34 | maxes[index] = max(maxes[index], item) 35 | return maxes 36 | 37 | class NestedTensor(object): 38 | def __init__(self, tensors, mask: Optional[Tensor]): 39 | self.tensors = tensors 40 | self.mask = mask 41 | 42 | def to(self, device): 43 | # type: (Device) -> NestedTensor # noqa 44 | cast_tensor = self.tensors.to(device) 45 | mask = self.mask 46 | if mask is not None: 47 | assert mask is not None 48 | cast_mask = mask.to(device) 49 | else: 50 | cast_mask = None 51 | return NestedTensor(cast_tensor, cast_mask) 52 | 53 | def decompose(self): 54 | return self.tensors, self.mask 55 | 56 | def __repr__(self): 57 | return str(self.tensors) 58 | 59 | def nested_tensor_from_tensor_list(tensor_list: List[Tensor]): 60 | # TODO make this more general 61 | if tensor_list[0].ndim == 3: 62 | if torchvision._is_tracing(): 63 | # nested_tensor_from_tensor_list() does not export well to ONNX 64 | # call _onnx_nested_tensor_from_tensor_list() instead 65 | return _onnx_nested_tensor_from_tensor_list(tensor_list) 66 | 67 | # TODO make it support different-sized images 68 | max_size = _max_by_axis([list(img.shape) for img in tensor_list]) 69 | # min_size = tuple(min(s) for s in zip(*[img.shape for img in tensor_list])) 70 | batch_shape = [len(tensor_list)] + max_size 71 | b, c, h, w = batch_shape 72 | dtype = tensor_list[0].dtype 73 | device = tensor_list[0].device 74 | tensor = torch.zeros(batch_shape, dtype=dtype, device=device) 75 | mask = torch.ones((b, h, w), dtype=torch.bool, device=device) 76 | for img, pad_img, m in zip(tensor_list, tensor, mask): 77 | pad_img[: img.shape[0], : img.shape[1], : img.shape[2]].copy_(img) 78 | m[: img.shape[1], :img.shape[2]] = False 79 | else: 80 | raise ValueError('not supported') 81 | return NestedTensor(tensor, mask) 82 | 83 | 84 | # _onnx_nested_tensor_from_tensor_list() is an implementation of 85 | # nested_tensor_from_tensor_list() that is supported by ONNX tracing. 86 | @torch.jit.unused 87 | def _onnx_nested_tensor_from_tensor_list(tensor_list): 88 | max_size = [] 89 | for i in range(tensor_list[0].dim()): 90 | max_size_i = torch.max(torch.stack([img.shape[i] for img in tensor_list]).to(torch.float32)).to(torch.int64) 91 | max_size.append(max_size_i) 92 | max_size = tuple(max_size) 93 | 94 | # work around for 95 | # pad_img[: img.shape[0], : img.shape[1], : img.shape[2]].copy_(img) 96 | # m[: img.shape[1], :img.shape[2]] = False 97 | # which is not yet supported in onnx 98 | padded_imgs = [] 99 | padded_masks = [] 100 | for img in tensor_list: 101 | padding = [(s1 - s2) for s1, s2 in zip(max_size, tuple(img.shape))] 102 | padded_img = torch.nn.functional.pad(img, (0, padding[2], 0, padding[1], 0, padding[0])) 103 | padded_imgs.append(padded_img) 104 | 105 | m = torch.zeros_like(img[0], dtype=torch.int, device=img.device) 106 | padded_mask = torch.nn.functional.pad(m, (0, padding[2], 0, padding[1]), "constant", 1) 107 | padded_masks.append(padded_mask.to(torch.bool)) 108 | 109 | tensor = torch.stack(padded_imgs) 110 | mask = torch.stack(padded_masks) 111 | 112 | return NestedTensor(tensor, mask=mask) 113 | 114 | class PositionEmbeddingLearnedWithPoseToken(nn.Module): 115 | """ 116 | Absolute pos embedding, learned. 117 | """ 118 | def __init__(self, num_pos_feats=256): 119 | super().__init__() 120 | self.row_embed = nn.Embedding(60, num_pos_feats) 121 | self.col_embed = nn.Embedding(60, num_pos_feats) 122 | self.pose_token_embed = nn.Embedding(60, num_pos_feats) 123 | self.reset_parameters() 124 | 125 | def reset_parameters(self): 126 | nn.init.uniform_(self.row_embed.weight) 127 | nn.init.uniform_(self.col_embed.weight) 128 | nn.init.uniform_(self.pose_token_embed.weight) 129 | 130 | def forward(self, tensor_list: NestedTensor): 131 | x = tensor_list.tensors 132 | h, w = x.shape[-2:] 133 | i = torch.arange(w, device=x.device) + 1 134 | j = torch.arange(h, device=x.device) + 1 135 | p = i[0]-1 136 | x_emb = self.col_embed(i) 137 | y_emb = self.row_embed(j) 138 | 139 | p_emb = torch.cat([self.pose_token_embed(p),self.pose_token_embed(p)]).repeat(x.shape[0], 1) 140 | 141 | # embed of position in the activation map 142 | m_emb = torch.cat([ 143 | x_emb.unsqueeze(0).repeat(h, 1, 1), 144 | y_emb.unsqueeze(1).repeat(1, w, 1), 145 | ], dim=-1).permute(2, 0, 1).unsqueeze(0).repeat(x.shape[0], 1, 1, 1) 146 | return p_emb, m_emb 147 | 148 | class PositionEmbeddingLearned(nn.Module): 149 | """ 150 | Absolute pos embedding, learned. 151 | """ 152 | def __init__(self, num_pos_feats=256): 153 | super().__init__() 154 | self.row_embed = nn.Embedding(50, num_pos_feats) 155 | self.col_embed = nn.Embedding(50, num_pos_feats) 156 | self.reset_parameters() 157 | 158 | def reset_parameters(self): 159 | nn.init.uniform_(self.row_embed.weight) 160 | nn.init.uniform_(self.col_embed.weight) 161 | 162 | def forward(self, tensor_list: NestedTensor): 163 | x = tensor_list.tensors 164 | h, w = x.shape[-2:] 165 | i = torch.arange(w, device=x.device) 166 | j = torch.arange(h, device=x.device) 167 | x_emb = self.col_embed(i) 168 | y_emb = self.row_embed(j) 169 | pos = torch.cat([ 170 | x_emb.unsqueeze(0).repeat(h, 1, 1), 171 | y_emb.unsqueeze(1).repeat(1, w, 1), 172 | ], dim=-1).permute(2, 0, 1).unsqueeze(0).repeat(x.shape[0], 1, 1, 1) 173 | return pos 174 | 175 | 176 | def build_position_encoding(config): 177 | hidden_dim = config.get("hidden_dim") 178 | N_steps = hidden_dim // 2 179 | learn_embedding_with_pose_token = config.get("learn_embedding_with_pose_token") 180 | if learn_embedding_with_pose_token: 181 | position_embedding = PositionEmbeddingLearnedWithPoseToken(N_steps) 182 | else: 183 | position_embedding = PositionEmbeddingLearned(N_steps) 184 | 185 | 186 | return position_embedding 187 | -------------------------------------------------------------------------------- /models/transposenet/transformer.py: -------------------------------------------------------------------------------- 1 | """ 2 | Transformer code taken from: https://github.com/facebookresearch/detr/tree/master/models 3 | with minor modifications 4 | Note: LN at the end of the encoder is not removed as in detr 5 | """ 6 | import copy 7 | from typing import Optional, List 8 | import torch 9 | import torch.nn.functional as F 10 | from torch import nn, Tensor 11 | from .transformer_encoder import TransformerEncoderLayer, TransformerEncoder,_get_clones, _get_activation_fn 12 | 13 | 14 | class Transformer(nn.Module): 15 | default_config = { 16 | "hidden_dim":512, 17 | "nhead":8, 18 | "num_encoder_layers": 6, 19 | "num_decoder_layers": 6, 20 | "dim_feedforward": 2048, 21 | "dropout":0.1, 22 | "activation": "gelu", 23 | "normalize_before": True, 24 | "return_intermediate_dec": False 25 | } 26 | 27 | def __init__(self, config = {}): 28 | super().__init__() 29 | config = {**self.default_config, **config} 30 | d_model = config.get("hidden_dim") 31 | nhead = config.get("nhead") 32 | dim_feedforward = config.get("dim_feedforward") 33 | dropout = config.get("dropout") 34 | activation = config.get("activation") 35 | normalize_before = config.get("normalize_before") 36 | num_encoder_layers = config.get("num_encoder_layers") 37 | num_decoder_layers = config.get("num_decoder_layers") 38 | encoder_layer = TransformerEncoderLayer(d_model, nhead, dim_feedforward, 39 | dropout, activation, normalize_before) 40 | encoder_norm = nn.LayerNorm(d_model) if normalize_before else None 41 | self.encoder = TransformerEncoder(encoder_layer, num_encoder_layers, encoder_norm) 42 | 43 | decoder_layer = TransformerDecoderLayer(d_model, nhead, dim_feedforward, 44 | dropout, activation, normalize_before) 45 | decoder_norm = nn.LayerNorm(d_model) 46 | self.decoder = TransformerDecoder(decoder_layer, num_decoder_layers, decoder_norm, 47 | return_intermediate=config.get("return_intermediate_dec")) 48 | 49 | self._reset_parameters() 50 | 51 | self.d_model = d_model 52 | self.nhead = nhead 53 | 54 | def _reset_parameters(self): 55 | for p in self.parameters(): 56 | if p.dim() > 1: 57 | nn.init.xavier_uniform_(p) 58 | 59 | def forward(self, src, mask, query_embed, pos_embed): 60 | # flatten NxCxHxW to HWxNxC 61 | bs, c, h, w = src.shape 62 | src = src.flatten(2).permute(2, 0, 1) 63 | pos_embed = pos_embed.flatten(2).permute(2, 0, 1) 64 | query_embed = query_embed.unsqueeze(1).repeat(1, bs, 1) 65 | mask = mask.flatten(1) 66 | 67 | tgt = torch.zeros_like(query_embed) 68 | memory = self.encoder(src, src_key_padding_mask=mask, pos=pos_embed) 69 | hs = self.decoder(tgt, memory, memory_key_padding_mask=mask, 70 | pos=pos_embed, query_pos=query_embed) 71 | return hs.transpose(1, 2), memory.permute(1, 2, 0).view(bs, c, h, w) 72 | 73 | class TransformerDecoder(nn.Module): 74 | 75 | def __init__(self, decoder_layer, num_layers, norm=None, return_intermediate=False): 76 | super().__init__() 77 | self.layers = _get_clones(decoder_layer, num_layers) 78 | self.num_layers = num_layers 79 | self.norm = norm 80 | self.return_intermediate = return_intermediate 81 | 82 | def forward(self, tgt, memory, 83 | tgt_mask: Optional[Tensor] = None, 84 | memory_mask: Optional[Tensor] = None, 85 | tgt_key_padding_mask: Optional[Tensor] = None, 86 | memory_key_padding_mask: Optional[Tensor] = None, 87 | pos: Optional[Tensor] = None, 88 | query_pos: Optional[Tensor] = None): 89 | output = tgt 90 | 91 | intermediate = [] 92 | 93 | for layer in self.layers: 94 | output = layer(output, memory, tgt_mask=tgt_mask, 95 | memory_mask=memory_mask, 96 | tgt_key_padding_mask=tgt_key_padding_mask, 97 | memory_key_padding_mask=memory_key_padding_mask, 98 | pos=pos, query_pos=query_pos) 99 | if self.return_intermediate: 100 | intermediate.append(self.norm(output)) 101 | 102 | if self.norm is not None: 103 | output = self.norm(output) 104 | if self.return_intermediate: 105 | intermediate.pop() 106 | intermediate.append(output) 107 | 108 | if self.return_intermediate: 109 | return torch.stack(intermediate) 110 | 111 | return output.unsqueeze(0) 112 | 113 | class TransformerDecoderLayer(nn.Module): 114 | 115 | def __init__(self, d_model, nhead, dim_feedforward=2048, dropout=0.1, 116 | activation="relu", normalize_before=False): 117 | super().__init__() 118 | self.self_attn = nn.MultiheadAttention(d_model, nhead, dropout=dropout) 119 | self.multihead_attn = nn.MultiheadAttention(d_model, nhead, dropout=dropout) 120 | # Implementation of Feedforward model 121 | self.linear1 = nn.Linear(d_model, dim_feedforward) 122 | self.dropout = nn.Dropout(dropout) 123 | self.linear2 = nn.Linear(dim_feedforward, d_model) 124 | 125 | self.norm1 = nn.LayerNorm(d_model) 126 | self.norm2 = nn.LayerNorm(d_model) 127 | self.norm3 = nn.LayerNorm(d_model) 128 | self.dropout1 = nn.Dropout(dropout) 129 | self.dropout2 = nn.Dropout(dropout) 130 | self.dropout3 = nn.Dropout(dropout) 131 | 132 | self.activation = _get_activation_fn(activation) 133 | self.normalize_before = normalize_before 134 | 135 | def with_pos_embed(self, tensor, pos: Optional[Tensor]): 136 | return tensor if pos is None else tensor + pos 137 | 138 | def forward_post(self, tgt, memory, 139 | tgt_mask: Optional[Tensor] = None, 140 | memory_mask: Optional[Tensor] = None, 141 | tgt_key_padding_mask: Optional[Tensor] = None, 142 | memory_key_padding_mask: Optional[Tensor] = None, 143 | pos: Optional[Tensor] = None, 144 | query_pos: Optional[Tensor] = None): 145 | q = k = self.with_pos_embed(tgt, query_pos) 146 | tgt2 = self.self_attn(q, k, value=tgt, attn_mask=tgt_mask, 147 | key_padding_mask=tgt_key_padding_mask)[0] 148 | tgt = tgt + self.dropout1(tgt2) 149 | tgt = self.norm1(tgt) 150 | tgt2 = self.multihead_attn(query=self.with_pos_embed(tgt, query_pos), 151 | key=self.with_pos_embed(memory, pos), 152 | value=memory, attn_mask=memory_mask, 153 | key_padding_mask=memory_key_padding_mask)[0] 154 | tgt = tgt + self.dropout2(tgt2) 155 | tgt = self.norm2(tgt) 156 | tgt2 = self.linear2(self.dropout(self.activation(self.linear1(tgt)))) 157 | tgt = tgt + self.dropout3(tgt2) 158 | tgt = self.norm3(tgt) 159 | return tgt 160 | 161 | def forward_pre(self, tgt, memory, 162 | tgt_mask: Optional[Tensor] = None, 163 | memory_mask: Optional[Tensor] = None, 164 | tgt_key_padding_mask: Optional[Tensor] = None, 165 | memory_key_padding_mask: Optional[Tensor] = None, 166 | pos: Optional[Tensor] = None, 167 | query_pos: Optional[Tensor] = None): 168 | tgt2 = self.norm1(tgt) 169 | q = k = self.with_pos_embed(tgt2, query_pos) 170 | tgt2 = self.self_attn(q, k, value=tgt2, attn_mask=tgt_mask, 171 | key_padding_mask=tgt_key_padding_mask)[0] 172 | tgt = tgt + self.dropout1(tgt2) 173 | tgt2 = self.norm2(tgt) 174 | tgt2 = self.multihead_attn(query=self.with_pos_embed(tgt2, query_pos), 175 | key=self.with_pos_embed(memory, pos), 176 | value=memory, attn_mask=memory_mask, 177 | key_padding_mask=memory_key_padding_mask)[0] 178 | tgt = tgt + self.dropout2(tgt2) 179 | tgt2 = self.norm3(tgt) 180 | tgt2 = self.linear2(self.dropout(self.activation(self.linear1(tgt2)))) 181 | tgt = tgt + self.dropout3(tgt2) 182 | return tgt 183 | 184 | def forward(self, tgt, memory, 185 | tgt_mask: Optional[Tensor] = None, 186 | memory_mask: Optional[Tensor] = None, 187 | tgt_key_padding_mask: Optional[Tensor] = None, 188 | memory_key_padding_mask: Optional[Tensor] = None, 189 | pos: Optional[Tensor] = None, 190 | query_pos: Optional[Tensor] = None): 191 | if self.normalize_before: 192 | return self.forward_pre(tgt, memory, tgt_mask, memory_mask, 193 | tgt_key_padding_mask, memory_key_padding_mask, pos, query_pos) 194 | return self.forward_post(tgt, memory, tgt_mask, memory_mask, 195 | tgt_key_padding_mask, memory_key_padding_mask, pos, query_pos) 196 | 197 | -------------------------------------------------------------------------------- /models/transposenet/transformer_encoder.py: -------------------------------------------------------------------------------- 1 | """ 2 | Code for the encoder of TransPoseNet 3 | code is based on https://github.com/facebookresearch/detr/tree/master/models 4 | (transformer + position encoding. Note: LN at the end of the encoder is not removed) 5 | with the following modifications: 6 | - decoder is removed 7 | - encoder is changed to take the encoding of the pose token and to output just the token 8 | """ 9 | 10 | import copy 11 | from typing import Optional 12 | import torch 13 | import torch.nn.functional as F 14 | from torch import nn, Tensor 15 | 16 | class Transformer(nn.Module): 17 | default_config = { 18 | "hidden_dim":512, 19 | "nhead":8, 20 | "num_encoder_layers": 6, 21 | "dim_feedforward": 2048, 22 | "dropout":0.1, 23 | "activation": "gelu", 24 | "normalize_before": True, 25 | "return_intermediate_dec": False 26 | } 27 | 28 | def __init__(self, config = {}): 29 | super().__init__() 30 | config = {**self.default_config, **config} 31 | d_model = config.get("hidden_dim") 32 | nhead = config.get("nhead") 33 | dim_feedforward = config.get("dim_feedforward") 34 | dropout = config.get("dropout") 35 | activation = config.get("activation") 36 | normalize_before = config.get("normalize_before") 37 | num_encoder_layers = config.get("num_encoder_layers") 38 | encoder_layer = TransformerEncoderLayer(d_model, nhead, dim_feedforward, 39 | dropout, activation, normalize_before) 40 | encoder_norm = nn.LayerNorm(d_model) if normalize_before else None 41 | self.encoder = TransformerEncoder(encoder_layer, num_encoder_layers, encoder_norm) 42 | self._reset_parameters() 43 | 44 | self.d_model = d_model 45 | self.nhead = nhead 46 | 47 | def _reset_parameters(self): 48 | for p in self.parameters(): 49 | if p.dim() > 1: 50 | nn.init.xavier_uniform_(p) 51 | 52 | def forward(self, src, mask, pos_embed, pose_token_embed): 53 | # flatten NxCxHxW to HWxNxC 54 | bs, c, h, w = src.shape 55 | 56 | pose_pos_embed, activation_pos_embed = pos_embed 57 | activation_pos_embed = activation_pos_embed.flatten(2).permute(2, 0, 1) 58 | pose_pos_embed = pose_pos_embed.unsqueeze(2).permute(2, 0, 1) 59 | pos_embed = torch.cat([pose_pos_embed, activation_pos_embed]) 60 | 61 | src = src.flatten(2).permute(2, 0, 1) 62 | pose_token_embed = pose_token_embed.unsqueeze(1).repeat(1, bs, 1) 63 | src = torch.cat([pose_token_embed, src]) 64 | memory = self.encoder(src, src_key_padding_mask=None, pos=pos_embed) 65 | return memory.transpose(0,1) 66 | 67 | 68 | class TransformerEncoder(nn.Module): 69 | 70 | def __init__(self, encoder_layer, num_layers, norm=None): 71 | super().__init__() 72 | self.layers = _get_clones(encoder_layer, num_layers) 73 | self.num_layers = num_layers 74 | self.norm = norm 75 | 76 | def forward(self, src, 77 | mask: Optional[Tensor] = None, 78 | src_key_padding_mask: Optional[Tensor] = None, 79 | pos: Optional[Tensor] = None): 80 | output = src 81 | 82 | for layer in self.layers: 83 | output = layer(output, src_mask=mask, 84 | src_key_padding_mask=src_key_padding_mask, pos=pos) 85 | 86 | if self.norm is not None: 87 | output = self.norm(output) 88 | 89 | return output 90 | 91 | 92 | class TransformerEncoderLayer(nn.Module): 93 | 94 | def __init__(self, d_model, nhead, dim_feedforward=2048, dropout=0.1, 95 | activation="relu", normalize_before=False): 96 | super().__init__() 97 | self.self_attn = nn.MultiheadAttention(d_model, nhead, dropout=dropout) 98 | # Implementation of Feedforward model 99 | self.linear1 = nn.Linear(d_model, dim_feedforward) 100 | self.dropout = nn.Dropout(dropout) 101 | self.linear2 = nn.Linear(dim_feedforward, d_model) 102 | 103 | self.norm1 = nn.LayerNorm(d_model) 104 | self.norm2 = nn.LayerNorm(d_model) 105 | self.dropout1 = nn.Dropout(dropout) 106 | self.dropout2 = nn.Dropout(dropout) 107 | 108 | self.activation = _get_activation_fn(activation) 109 | self.normalize_before = normalize_before 110 | 111 | def with_pos_embed(self, tensor, pos: Optional[Tensor]): 112 | return tensor if pos is None else tensor + pos 113 | 114 | def forward_post(self, 115 | src, 116 | src_mask: Optional[Tensor] = None, 117 | src_key_padding_mask: Optional[Tensor] = None, 118 | pos: Optional[Tensor] = None): 119 | q = k = self.with_pos_embed(src, pos) 120 | src2 = self.self_attn(q, k, value=src, attn_mask=src_mask, 121 | key_padding_mask=src_key_padding_mask)[0] 122 | src = src + self.dropout1(src2) 123 | src = self.norm1(src) 124 | src2 = self.linear2(self.dropout(self.activation(self.linear1(src)))) 125 | src = src + self.dropout2(src2) 126 | src = self.norm2(src) 127 | return src 128 | 129 | def forward_pre(self, src, 130 | src_mask: Optional[Tensor] = None, 131 | src_key_padding_mask: Optional[Tensor] = None, 132 | pos: Optional[Tensor] = None): 133 | src2 = self.norm1(src) 134 | q = k = self.with_pos_embed(src2, pos) 135 | src2 = self.self_attn(q, k, value=src2, attn_mask=src_mask, 136 | key_padding_mask=src_key_padding_mask)[0] 137 | src = src + self.dropout1(src2) 138 | src2 = self.norm2(src) 139 | src2 = self.linear2(self.dropout(self.activation(self.linear1(src2)))) 140 | src = src + self.dropout2(src2) 141 | return src 142 | 143 | def forward(self, src, 144 | src_mask: Optional[Tensor] = None, 145 | src_key_padding_mask: Optional[Tensor] = None, 146 | pos: Optional[Tensor] = None): 147 | if self.normalize_before: 148 | return self.forward_pre(src, src_mask, src_key_padding_mask, pos) 149 | return self.forward_post(src, src_mask, src_key_padding_mask, pos) 150 | 151 | 152 | def _get_clones(module, N): 153 | return nn.ModuleList([copy.deepcopy(module) for i in range(N)]) 154 | 155 | 156 | def _get_activation_fn(activation): 157 | """Return an activation function given a string""" 158 | if activation == "relu": 159 | return F.relu 160 | if activation == "gelu": 161 | return F.gelu 162 | if activation == "glu": 163 | return F.glu 164 | raise RuntimeError(F"activation should be relu/gelu, not {activation}.") 165 | 166 | 167 | def build_transformer(config): 168 | return Transformer(config) 169 | -------------------------------------------------------------------------------- /plots/ms-transformer-activation-maps-example.pickle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yolish/multi-scene-pose-transformer/56ca699fa61ad689f3631231c03608e46c9c7938/plots/ms-transformer-activation-maps-example.pickle -------------------------------------------------------------------------------- /plots/plot_activation_maps.py: -------------------------------------------------------------------------------- 1 | # A toy script to demonstrate plotting of attention maps 2 | import matplotlib.pyplot as plt 3 | import pickle 4 | import numpy as np 5 | import cv2 6 | 7 | filename = 'ms-transformer-activation-maps-example.pickle' 8 | with open(filename, 'rb') as handle: 9 | data = pickle.load(handle) 10 | 11 | img = data['img'].squeeze().data.cpu().numpy().transpose(1, 2, 0) 12 | img = 255 * (img - img.min()) / (img.max() - img.min()) 13 | img = np.uint8(img) 14 | 15 | # plt.figure() 16 | # plt.imshow(img) 17 | # plt.show() 18 | 19 | activations = data['acts'] 20 | for k,v in activations.items(): 21 | print (k, v.size()) 22 | 23 | act_img = activations['layers.4._merger.3'].squeeze().data.cpu().numpy() 24 | act_img = np.mean(act_img.reshape(-1, 14, 14), axis=0) 25 | act_img = 255 * (act_img - act_img.min()) / (act_img.max() - act_img.min()) 26 | act_img = np.uint8(act_img) 27 | 28 | disp_act_img = cv2.resize(act_img, (img.shape[1], img.shape[0]), interpolation=cv2.INTER_CUBIC) 29 | 30 | fig, ax = plt.subplots(nrows=1, ncols=2) 31 | ax[0].imshow(img) 32 | ax[0].axis('off') 33 | ax[0].set_title('Input Image') 34 | ax[1].imshow(img) 35 | ax[1].imshow(disp_act_img, alpha=0.3, cmap='jet') 36 | ax[1].axis('off') 37 | ax[1].set_title('Attention') 38 | plt.show() -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | cycler==0.10.0 2 | efficientnet-pytorch==0.7.1 3 | imageio==2.9.0 4 | kiwisolver==1.3.2 5 | matplotlib==3.4.3 6 | networkx==2.6.3 7 | numpy==1.21.2 8 | pandas==1.3.3 9 | Pillow==8.3.2 10 | pyparsing==2.4.7 11 | python-dateutil==2.8.2 12 | pytz==2021.1 13 | PyWavelets==1.1.1 14 | scikit-image==0.18.3 15 | scipy==1.7.1 16 | six==1.16.0 17 | tifffile==2021.8.30 18 | torch==1.4.0 19 | torchvision==0.5.0 20 | typing-extensions==3.10.0.2 21 | -------------------------------------------------------------------------------- /scripts/combine_scenes.py: -------------------------------------------------------------------------------- 1 | """ 2 | Script for combining multiple pose labelled files (creating multi-scene files) 3 | """ 4 | from os import listdir 5 | from os.path import isfile, join 6 | import pandas as pd 7 | import argparse 8 | 9 | if __name__ == "__main__": 10 | arg_parser = argparse.ArgumentParser() 11 | arg_parser.add_argument("scenes_path", 12 | help="path to a folder with scene labels files") 13 | arg_parser.add_argument("out_file", 14 | help="name of output file, combining all scenes in the input path") 15 | args = arg_parser.parse_args() 16 | labels_files = [join(args.scenes_path, f) for f in listdir(args.scenes_path) if isfile(join(args.scenes_path, f))] 17 | dfs = [pd.read_csv(labels_files[i], converters={'scene':str}) for i in range(len(labels_files))] 18 | combined_df = pd.concat(dfs) 19 | combined_df.to_csv(args.out_file, index=False) -------------------------------------------------------------------------------- /util/log_config.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 1, 3 | "disable_existing_loggers": true, 4 | 5 | "formatters": { 6 | "screen": { 7 | "format": "[%(asctime)s] [%(levelname)s] [%(filename)s():%(lineno)s] - %(message)s", 8 | "datefmt": "%d-%m-%y %H:%M" 9 | }, 10 | "full": 11 | { 12 | "format": "[%(asctime)s] [%(levelname)s] - %(message)s", 13 | "datefmt": "%d-%m-%y %H:%M" 14 | } 15 | }, 16 | "handlers": { 17 | "screen_handler": { 18 | "level": "INFO", 19 | "formatter": "screen", 20 | "class": "logging.StreamHandler", 21 | "stream": "ext://sys.stdout" 22 | }, 23 | "file_handler": { 24 | "level": "DEBUG", 25 | "formatter": "full", 26 | "class": "logging.FileHandler", 27 | "filename": "run", 28 | "mode": "w" 29 | } 30 | }, 31 | "loggers": { 32 | "": { 33 | "handlers": ["file_handler","screen_handler"], 34 | "level": "DEBUG", 35 | "propagate": false 36 | } 37 | } 38 | } 39 | 40 | -------------------------------------------------------------------------------- /util/utils.py: -------------------------------------------------------------------------------- 1 | import logging 2 | import logging.config 3 | import PIL 4 | import json 5 | from os.path import join, exists, split, realpath 6 | import time 7 | from os import mkdir, getcwd 8 | import torch 9 | import matplotlib.pyplot as plt 10 | import numpy as np 11 | import torch.nn.functional as F 12 | from torchvision import transforms 13 | 14 | # Logging and output utils 15 | ########################## 16 | def get_stamp_from_log(): 17 | """ 18 | Get the time stamp from the log file 19 | :return: 20 | """ 21 | return split(logging.getLogger().handlers[0].baseFilename)[-1].replace(".log","") 22 | 23 | 24 | def create_output_dir(name): 25 | """ 26 | Create a new directory for outputs, if it does not already exist 27 | :param name: (str) the name of the directory 28 | :return: the path to the outpur directory 29 | """ 30 | out_dir = join(getcwd(), name) 31 | if not exists(out_dir): 32 | mkdir(out_dir) 33 | return out_dir 34 | 35 | 36 | def init_logger(): 37 | """ 38 | Initialize the logger and create a time stamp for the file 39 | """ 40 | path = split(realpath(__file__))[0] 41 | 42 | with open(join(path, 'log_config.json')) as json_file: 43 | log_config_dict = json.load(json_file) 44 | filename = log_config_dict.get('handlers').get('file_handler').get('filename') 45 | filename = ''.join([filename, "_", time.strftime("%d_%m_%y_%H_%M", time.localtime()), ".log"]) 46 | 47 | # Creating logs' folder is needed 48 | log_path = create_output_dir('out') 49 | 50 | log_config_dict.get('handlers').get('file_handler')['filename'] = join(log_path, filename) 51 | logging.config.dictConfig(log_config_dict) 52 | 53 | # disable external modules' loggers (level warning and below) 54 | logging.getLogger(PIL.__name__).setLevel(logging.WARNING) 55 | 56 | 57 | 58 | # Evaluation utils 59 | ########################## 60 | def pose_err(est_pose, gt_pose): 61 | """ 62 | Calculate the position and orientation error given the estimated and ground truth pose(s 63 | :param est_pose: (torch.Tensor) a batch of estimated poses (Nx7, N is the batch size) 64 | :param gt_pose: (torch.Tensor) a batch of ground-truth poses (Nx7, N is the batch size) 65 | :return: position error(s) and orientation errors(s) 66 | """ 67 | posit_err = torch.norm(est_pose[:, 0:3] - gt_pose[:, 0:3], dim=1) 68 | est_pose_q = F.normalize(est_pose[:, 3:], p=2, dim=1) 69 | gt_pose_q = F.normalize(gt_pose[:, 3:], p=2, dim=1) 70 | inner_prod = torch.bmm(est_pose_q.view(est_pose_q.shape[0], 1, est_pose_q.shape[1]), 71 | gt_pose_q.view(gt_pose_q.shape[0], gt_pose_q.shape[1], 1)) 72 | orient_err = 2 * torch.acos(torch.abs(inner_prod)) * 180 / np.pi 73 | return posit_err, orient_err 74 | 75 | # Plotting utils 76 | ########################## 77 | def plot_loss_func(sample_count, loss_vals, loss_fig_path): 78 | plt.figure() 79 | plt.plot(sample_count, loss_vals) 80 | plt.grid() 81 | plt.title('Camera Pose Loss') 82 | plt.xlabel('Number of samples') 83 | plt.ylabel('Loss') 84 | plt.savefig(loss_fig_path) 85 | 86 | # Augmentations 87 | train_transforms = { 88 | 'baseline': transforms.Compose([transforms.ToPILImage(), 89 | transforms.Resize(256), 90 | transforms.RandomCrop(224), 91 | transforms.ColorJitter(0.5, 0.5, 0.5, 0.2), 92 | transforms.ToTensor(), 93 | transforms.Normalize(mean=[0.485, 0.456, 0.406], 94 | std=[0.229, 0.224, 0.225])]) 95 | 96 | } 97 | test_transforms = { 98 | 'baseline': transforms.Compose([transforms.ToPILImage(), 99 | transforms.Resize(256), 100 | transforms.CenterCrop(224), 101 | transforms.ToTensor(), 102 | transforms.Normalize(mean=[0.485, 0.456, 0.406], 103 | std=[0.229, 0.224, 0.225]) 104 | ]) 105 | } 106 | 107 | 108 | 109 | --------------------------------------------------------------------------------