├── README.md ├── experiments └── phtrack │ └── config.yaml ├── pretrained_models └── README.txt ├── pysot ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-37.pyc │ └── __init__.cpython-39.pyc ├── core │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-37.pyc │ │ ├── __init__.cpython-39.pyc │ │ ├── config.cpython-37.pyc │ │ └── config.cpython-39.pyc │ └── config.py ├── datasets │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-37.pyc │ │ ├── __init__.cpython-39.pyc │ │ ├── augmentation.cpython-37.pyc │ │ ├── augmentation.cpython-39.pyc │ │ ├── dataset.cpython-37.pyc │ │ └── dataset.cpython-39.pyc │ ├── augmentation.py │ └── dataset.py ├── models │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-37.pyc │ │ ├── __init__.cpython-39.pyc │ │ ├── loss_car.cpython-37.pyc │ │ ├── loss_car.cpython-39.pyc │ │ ├── model_builder.cpython-37.pyc │ │ └── model_builder.cpython-39.pyc │ ├── backbone │ │ ├── __init__.py │ │ ├── __pycache__ │ │ │ ├── __init__.cpython-37.pyc │ │ │ ├── __init__.cpython-39.pyc │ │ │ ├── alexnet.cpython-37.pyc │ │ │ ├── alexnet.cpython-39.pyc │ │ │ ├── mobile_v2.cpython-37.pyc │ │ │ ├── mobile_v2.cpython-39.pyc │ │ │ ├── resnet_atrous.cpython-37.pyc │ │ │ └── resnet_atrous.cpython-39.pyc │ │ ├── alexnet.py │ │ ├── mobile_v2.py │ │ └── resnet_atrous.py │ ├── channelsplit │ │ ├── __init__.py │ │ ├── __pycache__ │ │ │ ├── __init__.cpython-39.pyc │ │ │ └── msc.cpython-39.pyc │ │ └── msc.py │ ├── fusion │ │ ├── __init__.py │ │ ├── __pycache__ │ │ │ ├── __init__.cpython-39.pyc │ │ │ └── transfusion.cpython-39.pyc │ │ └── transfusion.py │ ├── head │ │ ├── __init__.py │ │ ├── __pycache__ │ │ │ ├── __init__.cpython-37.pyc │ │ │ ├── __init__.cpython-39.pyc │ │ │ ├── car_head.cpython-37.pyc │ │ │ └── car_head.cpython-39.pyc │ │ └── car_head.py │ ├── init_weight.py │ ├── loss_car.py │ ├── model_builder.py │ └── neck │ │ ├── __init__.py │ │ ├── __pycache__ │ │ ├── __init__.cpython-37.pyc │ │ ├── __init__.cpython-39.pyc │ │ ├── neck.cpython-37.pyc │ │ └── neck.cpython-39.pyc │ │ └── neck.py ├── tracker │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-37.pyc │ │ ├── __init__.cpython-39.pyc │ │ ├── base_tracker.cpython-37.pyc │ │ ├── base_tracker.cpython-39.pyc │ │ ├── phtrack_tracker.cpython-39.pyc │ │ └── tracker_builder.cpython-39.pyc │ ├── base_tracker.py │ ├── phtrack_tracker.py │ └── tracker_builder.py └── utils │ ├── __init__.py │ ├── __pycache__ │ ├── __init__.cpython-37.pyc │ ├── __init__.cpython-39.pyc │ ├── average_meter.cpython-37.pyc │ ├── average_meter.cpython-39.pyc │ ├── bbox.cpython-37.pyc │ ├── bbox.cpython-39.pyc │ ├── distributed.cpython-37.pyc │ ├── distributed.cpython-39.pyc │ ├── location_grid.cpython-37.pyc │ ├── location_grid.cpython-39.pyc │ ├── log_helper.cpython-37.pyc │ ├── log_helper.cpython-39.pyc │ ├── lr_scheduler.cpython-37.pyc │ ├── lr_scheduler.cpython-39.pyc │ ├── misc.cpython-37.pyc │ ├── misc.cpython-39.pyc │ ├── model_load.cpython-37.pyc │ ├── model_load.cpython-39.pyc │ ├── xcorr.cpython-37.pyc │ └── xcorr.cpython-39.pyc │ ├── average_meter.py │ ├── bbox.py │ ├── distributed.py │ ├── location_grid.py │ ├── log_helper.py │ ├── lr_scheduler.py │ ├── misc.py │ ├── model_load.py │ └── xcorr.py ├── toolkit ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-37.pyc │ └── __init__.cpython-39.pyc ├── datasets │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-37.pyc │ │ ├── __init__.cpython-39.pyc │ │ ├── dataset.cpython-37.pyc │ │ ├── dataset.cpython-39.pyc │ │ ├── got10k.cpython-37.pyc │ │ ├── got10k.cpython-39.pyc │ │ ├── lasot.cpython-37.pyc │ │ ├── lasot.cpython-39.pyc │ │ ├── otb.cpython-37.pyc │ │ ├── otb.cpython-39.pyc │ │ ├── uav.cpython-37.pyc │ │ ├── uav.cpython-39.pyc │ │ ├── video.cpython-37.pyc │ │ └── video.cpython-39.pyc │ ├── dataset.py │ ├── got10k.py │ ├── lasot.py │ ├── otb.py │ ├── uav.py │ └── video.py ├── evaluation │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-37.pyc │ │ ├── __init__.cpython-39.pyc │ │ ├── ope_benchmark.cpython-37.pyc │ │ └── ope_benchmark.cpython-39.pyc │ └── ope_benchmark.py ├── utils │ ├── __pycache__ │ │ ├── statistics.cpython-37.pyc │ │ └── statistics.cpython-39.pyc │ └── statistics.py └── visualization │ ├── __init__.py │ ├── draw_success_precision.py │ └── draw_utils.py ├── tools ├── eval.py ├── test.py └── train.py └── tracking_results ├── README.txt ├── hotc20test ├── ball.txt ├── basketball.txt ├── board.txt ├── book.txt ├── bus.txt ├── bus2.txt ├── campus.txt ├── car.txt ├── car2.txt ├── car3.txt ├── card.txt ├── coin.txt ├── coke.txt ├── drive.txt ├── excavator.txt ├── face.txt ├── face2.txt ├── forest.txt ├── forest2.txt ├── fruit.txt ├── hand.txt ├── kangaroo.txt ├── paper.txt ├── pedestrain.txt ├── pedestrian2.txt ├── player.txt ├── playground.txt ├── rider1.txt ├── rider2.txt ├── rubik.txt ├── student.txt ├── toy1.txt ├── toy2.txt ├── trucker.txt └── worker.txt ├── hotc23val_nir ├── basketball3.txt ├── car11.txt ├── car12.txt ├── car49.txt ├── car50.txt ├── car51.txt ├── car52.txt ├── car53.txt ├── car59.txt ├── car60.txt ├── car61.txt ├── car62.txt ├── car63.txt ├── car64.txt ├── car76.txt ├── car77.txt ├── car78.txt ├── car79.txt ├── car80.txt ├── car81.txt ├── car82.txt ├── car83.txt ├── car84.txt ├── car85.txt ├── pedestrian7.txt ├── rider11.txt ├── rider16.txt ├── rider17.txt ├── rider18.txt └── rider19.txt ├── hotc23val_rednir ├── ball&mirror9.txt ├── cards16.txt ├── cards19.txt ├── dice2.txt ├── duck5.txt ├── partylights6.txt ├── pool10.txt ├── pool11.txt ├── rainystreet10.txt ├── rainystreet16.txt └── whitecup1.txt ├── hotc23val_vis ├── ball&mirror9.txt ├── ball.txt ├── basketball.txt ├── board.txt ├── book.txt ├── bus.txt ├── bus2.txt ├── campus.txt ├── car.txt ├── car2.txt ├── car3.txt ├── card.txt ├── cards16.txt ├── cards19.txt ├── coin.txt ├── coke.txt ├── dice2.txt ├── drive.txt ├── duck5.txt ├── excavator.txt ├── face.txt ├── face2.txt ├── forest.txt ├── forest2.txt ├── fruit.txt ├── hand.txt ├── kangaroo.txt ├── paper.txt ├── partylights6.txt ├── pedestrain.txt ├── pedestrian2.txt ├── player.txt ├── playground.txt ├── pool10.txt ├── pool11.txt ├── rainystreet10.txt ├── rainystreet16.txt ├── rider1.txt ├── rider2.txt ├── rubik.txt ├── student.txt ├── toy1.txt ├── toy2.txt ├── trucker.txt ├── whitecup1.txt └── worker.txt ├── hotc24val_nir ├── basketball2.txt ├── car42.txt ├── car43.txt ├── car44.txt ├── car45.txt ├── car46.txt ├── car47.txt ├── car48.txt ├── car54.txt ├── car55.txt ├── car56.txt ├── car57.txt ├── car58.txt ├── car65.txt ├── car66.txt ├── car67.txt ├── car68.txt ├── car69.txt ├── car70.txt ├── car71.txt ├── car72.txt ├── car73.txt ├── car74.txt ├── car75.txt ├── car86.txt ├── pedestrian6.txt ├── rider10.txt ├── rider14.txt ├── rider15.txt └── rider9.txt ├── hotc24val_rednir ├── backpack4.txt ├── ball&mirror10.txt ├── cards6.txt ├── cloth3.txt ├── cranberries7.txt ├── dice3.txt ├── drone4.txt ├── dronecam4.txt ├── droneshow2.txt ├── duck4.txt ├── football1.txt ├── football2.txt ├── leaves5.txt ├── officechair2.txt ├── oranges5.txt ├── pills5.txt ├── pool12.txt ├── pool9.txt ├── rainystreet12.txt └── whitecup2.txt ├── hotc24val_vis ├── L_basketball.txt ├── L_basketball2.txt ├── L_basketball_person.txt ├── L_car2.txt ├── L_car3.txt ├── L_person.txt ├── L_person7.txt ├── L_person8.txt ├── L_person9.txt ├── L_runner.txt ├── S_jump2.txt ├── S_person2.txt ├── S_runner1.txt ├── S_runner2.txt ├── S_soccer1.txt ├── S_soccer3.txt ├── S_soccer4.txt ├── S_volleyball1.txt ├── S_walker.txt ├── S_warmup.txt ├── backpack4.txt ├── ball&mirror10.txt ├── cards6.txt ├── clamp.txt ├── clamp2.txt ├── clamp3.txt ├── cloth3.txt ├── cranberries7.txt ├── cup.txt ├── cup2.txt ├── cup3.txt ├── cup4.txt ├── cup5.txt ├── cup6.txt ├── dice3.txt ├── drone4.txt ├── dronecam4.txt ├── droneshow2.txt ├── duck4.txt ├── esophagectomy1.txt ├── football1.txt ├── football2.txt ├── hat.txt ├── heartsurgery2.txt ├── leaf.txt ├── leaves5.txt ├── officechair2.txt ├── oranges5.txt ├── pen.txt ├── pen2.txt ├── pen3.txt ├── pen4.txt ├── people.txt ├── people2.txt ├── people3.txt ├── people4.txt ├── pills5.txt ├── pool12.txt ├── pool9.txt ├── rainystreet12.txt ├── rubik.txt ├── rubik2.txt ├── rubik3.txt ├── rubik4.txt ├── rubik5.txt ├── rubik6.txt └── whitecup2.txt ├── mssot ├── airplane-0.txt ├── airplane-1.txt ├── airplane-11.txt ├── airplane-2.txt ├── airplane-20.txt ├── airplane-21.txt ├── basketball-0.txt ├── basketball-1.txt ├── bicycle-1n.txt ├── bicycle-7n.txt ├── boat-11.txt ├── boat-13.txt ├── boat-3.txt ├── boat-4.txt ├── boat-6.txt ├── car-15.txt ├── car-16.txt ├── car-24.txt ├── car-25.txt ├── car-26.txt ├── car-27.txt ├── double-6.txt ├── double-8.txt ├── double-9.txt ├── doublebasketball-0.txt ├── doublecar-1.txt ├── doublecar-9.txt ├── electriccar-6.txt ├── human-18.txt ├── human-19.txt ├── motorcycle-0.txt ├── motorcycle-3.txt ├── motorcycle-5.txt ├── motorcycle-6.txt ├── motorcycle-7.txt ├── motorcycle-8.txt ├── person-2.txt ├── person-3.txt ├── triple-2.txt └── triple-4.txt └── msvt ├── airplane.txt ├── airplane1.txt ├── airplane10.txt ├── airplane11.txt ├── airplane12.txt ├── airplane13.txt ├── airplane14.txt ├── airplane2.txt ├── airplane3.txt ├── airplane4.txt ├── airplane5.txt ├── airplane6.txt ├── airplane7.txt ├── airplane8.txt ├── airplane9.txt ├── bicycle.txt ├── bicycle1.txt ├── bicycle2.txt ├── bicycle3.txt ├── boat.txt ├── boat1.txt ├── boat10.txt ├── boat11.txt ├── boat12.txt ├── boat2.txt ├── boat3.txt ├── boat4.txt ├── boat5.txt ├── boat6.txt ├── boat7.txt ├── boat8.txt ├── boat9.txt ├── bottle.txt ├── camera.txt ├── car.txt ├── car1.txt ├── car2.txt ├── car3.txt ├── car4.txt ├── car5.txt ├── car6.txt ├── double.txt ├── double1.txt ├── double2.txt ├── double3.txt ├── double4.txt ├── double5.txt ├── doublebicycle.txt ├── doublecar.txt ├── doublecar1.txt ├── doublecar2.txt ├── doublecar3.txt ├── doublecar4.txt ├── doublecar5.txt ├── doublecar6.txt ├── doublecar7.txt ├── doublecar8.txt ├── electriccar.txt ├── electriccar1.txt ├── girl.txt ├── human.txt ├── human1.txt ├── human2.txt ├── human3.txt ├── human4.txt ├── human5.txt ├── human6.txt ├── human7.txt ├── human8.txt ├── human9.txt ├── man.txt ├── man1.txt ├── man2.txt ├── man3.txt ├── many_man.txt ├── motorcycle.txt ├── motorcycle1.txt ├── triple.txt ├── triple1.txt └── triple2.txt /README.md: -------------------------------------------------------------------------------- 1 | # [PHTrack: Prompting for Hyperspectral Video Tracking](https://ieeexplore.ieee.org/abstract/document/10680554) 2 | The official implementation for "**PHTrack: Prompting for Hyperspectral Video Tracking**" 3 | 4 | # Abstract 5 | Hyperspectral (HS) video captures continuous spectral information of objects, enhancing material identification in tracking tasks. It is expected to overcome the inherent limitations of RGB and multi-modal tracking, such as finite spectral cues and cumbersome modality alignment. However, HS tracking faces challenges like data anxiety, band gaps, and huge volumes. In this study, inspired by prompt learning in language models, we propose the Prompting for Hyperspectral Video Tracking (PHTrack) framework. PHTrack learns prompts to adapt foundation models, mitigating data anxiety and enhancing performance and efficiency. First, the modality prompter (MOP) is proposed to capture rich spectral cues and bridge band gaps for improved model adaptation and knowledge enhancement. Additionally, the distillation prompter (DIP) is developed to refine cross-modal features. PHTrack follows feature-level fusion, effectively managing huge volumes compared to traditional decision-level fusion fashions. Extensive experiments validate the proposed framework, offering valuable insights for future research. The code and data will be available at https://github.com/YZCU/PHTrack. 6 | ## Install 7 | ``` 8 | git clone https://github.com/YZCU/PHTrack.git 9 | ``` 10 | ## Environment 11 | > * CUDA 11.8 12 | > * Python 3.9.18 13 | > * PyTorch 2.0.0 14 | > * Torchvision 0.15.0 15 | > * numpy 1.25.0 16 | ## Usage 17 | - Download the RGB/Hyperspectral training/test datasets [GOT-10K](http://got-10k.aitestunion.com/downloads), [DET](http://image-net.org/challenges/LSVRC/2017/), [LaSOT](https://cis.temple.edu/lasot/), [COCO](http://cocodataset.org), [YOUTUBEBB](https://pan.baidu.com/s/1gQKmi7o7HCw954JriLXYvg) (code: v7s6), [VID](http://image-net.org/challenges/LSVRC/2017/), [HOTC](https://www.hsitracking.com/hot2020/). 18 | - Download the pretrained model: [pretrained model](https://pan.baidu.com/s/19pmFUAA0Bvj0s0GP_4xccA) (code: abcd) to `pretrained_models/`. 19 | - Please train the PHTrack based on the [foundation model](https://pan.baidu.com/s/19pmFUAA0Bvj0s0GP_4xccA) (code: abcd). 20 | - We will release the well-trained model of [PHTrack](https://pan.baidu.com/s/1TpODrs5IbnfXKyNC1N0uOAA) (code: abcd). 21 | - The generated model will be saved to the path of `tools/snapshot`. 22 | - Please test the model. The results will be saved in the path of `tools/results/OTB100`. 23 | - For evaluation, please download the evaluation benchmark [Toolkit](http://cvlab.hanyang.ac.kr/tracker_benchmark/) and [vlfeat](http://www.vlfeat.org/index.html) for more precision performance evaluation. 24 | - Refer to [HOTC](https://www.hsitracking.com/hot2022/) for evaluation. 25 | - Evaluation of the PHTrack tracker. Run `\tracker_benchmark_v1.0\perfPlot.m` 26 | - Relevant tracking results are provided in `PHTrack\tracking_results\hotc20test`. More evaluation results are provided in a `PHTrack\tracking_results`. 27 | -------------------------------------------------------------------------------------- 28 | :running:Keep updating:running:: More detailed tracking results for PHTrack have been released. 29 | - [hotc20test](https://www.hsitracking.com/) ([results](https://github.com/YZCU/PHTrack/tree/master/tracking_results)) 30 | - [hotc23val_nir](https://www.hsitracking.com/) ([results](https://github.com/YZCU/PHTrack/tree/master/tracking_results)) 31 | - [hotc23val_rednir](https://www.hsitracking.com/) ([results](https://github.com/YZCU/PHTrack/tree/master/tracking_results)) 32 | - [hotc23val_vis](https://www.hsitracking.com/) ([results](https://github.com/YZCU/PHTrack/tree/master/tracking_results)) 33 | - [hotc24val_nir](https://www.hsitracking.com/) ([results](https://github.com/YZCU/PHTrack/tree/master/tracking_results)) 34 | - [hotc24val_rednir](https://www.hsitracking.com/) ([results](https://github.com/YZCU/PHTrack/tree/master/tracking_results)) 35 | - [hotc24val_vis](https://www.hsitracking.com/) ([results](https://github.com/YZCU/PHTrack/tree/master/tracking_results)) 36 | - [mssot](https://www.sciencedirect.com/science/article/pii/S0924271623002551) ([results](https://github.com/YZCU/PHTrack/tree/master/tracking_results)) 37 | - [msvt](https://www.sciencedirect.com/science/article/pii/S0924271621002860) ([results](https://github.com/YZCU/PHTrack/tree/master/tracking_results)) 38 | -------------------------------------------------------------------------------------- 39 | For more comprehensive results and codes, please review the upcoming manuscript. 40 | 41 | ## Contact 42 | If you have any questions or suggestions, feel free to contact me. 43 | Email: yuzeng_chen@whu.edu.cn 44 | ## Citation 45 | If you find our work helpful in your research, kindly consider citing it. We appreciate your support. 46 | 47 | ``` 48 | @ARTICLE{10680554, 49 | author={Chen, Yuzeng and Tang, Yuqi and Su, Xin and Li, Jie and Xiao, Yi and He, Jiang and Yuan, Qiangqiang}, 50 | journal={IEEE Transactions on Geoscience and Remote Sensing}, 51 | title={PHTrack: Prompting for Hyperspectral Video Tracking}, 52 | year={2024}, 53 | volume={}, 54 | number={}, 55 | pages={1-1}, 56 | keywords={Feature extraction;Video tracking;Photonic band gap;Adaptation models;Visualization;Correlation;Anxiety disorders;Hyperspectral video tracking;Prompt learning;Self-expression model;Material information}, 57 | doi={10.1109/TGRS.2024.3461316}} 58 | keywords={}, 59 | doi={} 60 | ``` 61 | 62 | -------------------------------------------------------------------------------- /experiments/phtrack/config.yaml: -------------------------------------------------------------------------------- 1 | META_ARC: "phtrack_r50" 2 | 3 | BS: 4 | SELECT: true 5 | TYPE: "msc" 6 | 7 | FS: 8 | FUSION: true 9 | TYPE: "transfusion" 10 | 11 | BACKBONE: 12 | TYPE: "resnet50" 13 | KWARGS: 14 | used_layers: [2, 3, 4] 15 | PRETRAINED: '' 16 | TRAIN_LAYERS: ['layer2','layer3','layer4'] 17 | TRAIN_EPOCH: 30 18 | LAYERS_LR: 0.1 19 | 20 | ADJUST: 21 | ADJUST: true 22 | TYPE: "AdjustAllLayer" 23 | KWARGS: 24 | in_channels: [512, 1024, 2048] 25 | out_channels: [256, 256, 256] 26 | 27 | 28 | TRACK: 29 | TYPE: 'phtrackTracker' 30 | LR: 0.0 31 | PENALTY_K: 0.0 32 | WINDOW_INFLUENCE: 0.0 33 | CONTEXT_AMOUNT: 0.0 34 | 35 | STRIDE: 8 36 | EXEMPLAR_SIZE: 127 37 | INSTANCE_SIZE: 255 38 | 39 | TRAIN: 40 | PRINT_FREQ: 10 41 | PRETRAINED: 'model_general.pth' 42 | EPOCH: 20 43 | START_EPOCH: 0 44 | BATCH_SIZE: 32 45 | BASE_LR: 0.005 46 | CLS_WEIGHT: 1.0 47 | LOC_WEIGHT: 3.0 48 | CEN_WEIGHT: 1.0 49 | CG_WEIGHT: 3.0 50 | RESUME: 'true' 51 | NUM_CLASSES: 2 52 | NUM_CONVS: 4 53 | PRIOR_PROB: 0.01 54 | OUTPUT_SIZE: 25 55 | LR: 56 | TYPE: 'log' 57 | KWARGS: 58 | start_lr: 0.005 59 | end_lr: 0.0005 60 | LR_WARMUP: 61 | TYPE: 'step' 62 | EPOCH: 5 63 | KWARGS: 64 | start_lr: 0.001 65 | end_lr: 0.005 66 | step: 1 67 | 68 | DATASET: 69 | NAMES: 70 | - 'GOT' 71 | 72 | TEMPLATE: 73 | SHIFT: 4 74 | SCALE: 0.05 75 | BLUR: 0.0 76 | FLIP: 0.0 77 | COLOR: 0.0 78 | 79 | SEARCH: 80 | SHIFT: 64 81 | SCALE: 0.18 82 | BLUR: 0.2 83 | FLIP: 0.0 84 | COLOR: 0.0 85 | 86 | NEG: 0.0 87 | GRAY: 0.0 88 | -------------------------------------------------------------------------------- /pretrained_models/README.txt: -------------------------------------------------------------------------------- 1 | Download model_general.pth and put it here. -------------------------------------------------------------------------------- /pysot/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/__init__.py -------------------------------------------------------------------------------- /pysot/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /pysot/__pycache__/__init__.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/__pycache__/__init__.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/core/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/core/__init__.py -------------------------------------------------------------------------------- /pysot/core/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/core/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /pysot/core/__pycache__/__init__.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/core/__pycache__/__init__.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/core/__pycache__/config.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/core/__pycache__/config.cpython-37.pyc -------------------------------------------------------------------------------- /pysot/core/__pycache__/config.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/core/__pycache__/config.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/datasets/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/datasets/__init__.py -------------------------------------------------------------------------------- /pysot/datasets/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/datasets/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /pysot/datasets/__pycache__/__init__.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/datasets/__pycache__/__init__.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/datasets/__pycache__/augmentation.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/datasets/__pycache__/augmentation.cpython-37.pyc -------------------------------------------------------------------------------- /pysot/datasets/__pycache__/augmentation.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/datasets/__pycache__/augmentation.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/datasets/__pycache__/dataset.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/datasets/__pycache__/dataset.cpython-37.pyc -------------------------------------------------------------------------------- /pysot/datasets/__pycache__/dataset.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/datasets/__pycache__/dataset.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/datasets/augmentation.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) SenseTime. All Rights Reserved. 2 | 3 | from __future__ import absolute_import 4 | from __future__ import division 5 | from __future__ import print_function 6 | from __future__ import unicode_literals 7 | 8 | import numpy as np 9 | import cv2 10 | 11 | from pysot.utils.bbox import corner2center, \ 12 | Center, center2corner, Corner 13 | 14 | 15 | class Augmentation: 16 | def __init__(self, shift, scale, blur, flip, color): 17 | self.shift = shift 18 | self.scale = scale 19 | self.blur = blur 20 | self.flip = flip 21 | self.color = color 22 | self.rgbVar = np.array( 23 | [[-0.55919361, 0.98062831, - 0.41940627], 24 | [1.72091413, 0.19879334, - 1.82968581], 25 | [4.64467907, 4.73710203, 4.88324118]], dtype=np.float32) 26 | 27 | @staticmethod 28 | def random(): 29 | return np.random.random() * 2 - 1.0 30 | 31 | def _crop_roi(self, image, bbox, out_sz, padding=(0, 0, 0)): 32 | bbox = [float(x) for x in bbox] 33 | a = (out_sz-1) / (bbox[2]-bbox[0]) 34 | b = (out_sz-1) / (bbox[3]-bbox[1]) 35 | c = -a * bbox[0] 36 | d = -b * bbox[1] 37 | mapping = np.array([[a, 0, c], 38 | [0, b, d]]).astype(np.float) 39 | crop = cv2.warpAffine(image, mapping, (out_sz, out_sz), 40 | borderMode=cv2.BORDER_CONSTANT, 41 | borderValue=padding) 42 | return crop 43 | 44 | def _blur_aug(self, image): 45 | def rand_kernel(): 46 | sizes = np.arange(5, 46, 2) 47 | size = np.random.choice(sizes) 48 | kernel = np.zeros((size, size)) 49 | c = int(size/2) 50 | wx = np.random.random() 51 | kernel[:, c] += 1. / size * wx 52 | kernel[c, :] += 1. / size * (1-wx) 53 | return kernel 54 | kernel = rand_kernel() 55 | image = cv2.filter2D(image, -1, kernel) 56 | return image 57 | 58 | def _color_aug(self, image): 59 | offset = np.dot(self.rgbVar, np.random.randn(3, 1)) 60 | offset = offset[::-1] # bgr 2 rgb 61 | offset = offset.reshape(3) 62 | image = image - offset 63 | return image 64 | 65 | def _gray_aug(self, image): 66 | grayed = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 67 | image = cv2.cvtColor(grayed, cv2.COLOR_GRAY2BGR) 68 | return image 69 | 70 | def _shift_scale_aug(self, image, bbox, crop_bbox, size): 71 | im_h, im_w = image.shape[:2] 72 | 73 | # adjust crop bounding box 74 | crop_bbox_center = corner2center(crop_bbox) 75 | if self.scale: 76 | scale_x = (1.0 + Augmentation.random() * self.scale) 77 | scale_y = (1.0 + Augmentation.random() * self.scale) 78 | h, w = crop_bbox_center.h, crop_bbox_center.w 79 | scale_x = min(scale_x, float(im_w) / w) 80 | scale_y = min(scale_y, float(im_h) / h) 81 | crop_bbox_center = Center(crop_bbox_center.x, 82 | crop_bbox_center.y, 83 | crop_bbox_center.w * scale_x, 84 | crop_bbox_center.h * scale_y) 85 | 86 | crop_bbox = center2corner(crop_bbox_center) 87 | if self.shift: 88 | sx = Augmentation.random() * self.shift 89 | sy = Augmentation.random() * self.shift 90 | 91 | x1, y1, x2, y2 = crop_bbox 92 | 93 | sx = max(-x1, min(im_w - 1 - x2, sx)) 94 | sy = max(-y1, min(im_h - 1 - y2, sy)) 95 | 96 | crop_bbox = Corner(x1 + sx, y1 + sy, x2 + sx, y2 + sy) 97 | 98 | # adjust target bounding box 99 | x1, y1 = crop_bbox.x1, crop_bbox.y1 100 | bbox = Corner(bbox.x1 - x1, bbox.y1 - y1, 101 | bbox.x2 - x1, bbox.y2 - y1) 102 | 103 | if self.scale: 104 | bbox = Corner(bbox.x1 / scale_x, bbox.y1 / scale_y, 105 | bbox.x2 / scale_x, bbox.y2 / scale_y) 106 | 107 | image = self._crop_roi(image, crop_bbox, size) 108 | return image, bbox 109 | 110 | def _flip_aug(self, image, bbox): 111 | image = cv2.flip(image, 1) 112 | width = image.shape[1] 113 | bbox = Corner(width - 1 - bbox.x2, bbox.y1, 114 | width - 1 - bbox.x1, bbox.y2) 115 | return image, bbox 116 | 117 | def __call__(self, image, bbox, size, gray=False): 118 | shape = image.shape 119 | crop_bbox = center2corner(Center(shape[0]//2, shape[1]//2, 120 | size-1, size-1)) 121 | # gray augmentation 122 | if gray: 123 | image = self._gray_aug(image) 124 | 125 | # shift scale augmentation 126 | image, bbox = self._shift_scale_aug(image, bbox, crop_bbox, size) # 原来强行执行shift scale增强 127 | 128 | # color augmentation 129 | if self.color > np.random.random(): # 永远为true, 永远增强 130 | image = self._color_aug(image) 131 | 132 | # blur augmentation 133 | if self.blur > np.random.random(): 134 | image = self._blur_aug(image) 135 | 136 | # flip augmentation 137 | if self.flip and self.flip > np.random.random(): 138 | image, bbox = self._flip_aug(image, bbox) 139 | return image, bbox 140 | -------------------------------------------------------------------------------- /pysot/models/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/models/__init__.py -------------------------------------------------------------------------------- /pysot/models/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/models/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /pysot/models/__pycache__/__init__.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/models/__pycache__/__init__.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/models/__pycache__/loss_car.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/models/__pycache__/loss_car.cpython-37.pyc -------------------------------------------------------------------------------- /pysot/models/__pycache__/loss_car.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/models/__pycache__/loss_car.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/models/__pycache__/model_builder.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/models/__pycache__/model_builder.cpython-37.pyc -------------------------------------------------------------------------------- /pysot/models/__pycache__/model_builder.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/models/__pycache__/model_builder.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/models/backbone/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) SenseTime. All Rights Reserved. 2 | 3 | from __future__ import absolute_import 4 | from __future__ import division 5 | from __future__ import print_function 6 | from __future__ import unicode_literals 7 | 8 | from pysot.models.backbone.alexnet import alexnetlegacy, alexnet 9 | from pysot.models.backbone.mobile_v2 import mobilenetv2 10 | from pysot.models.backbone.resnet_atrous import resnet18, resnet34, resnet50 11 | 12 | BACKBONES = { 13 | 'alexnetlegacy': alexnetlegacy, 14 | 'mobilenetv2': mobilenetv2, 15 | 'resnet18': resnet18, 16 | 'resnet34': resnet34, 17 | 'resnet50': resnet50, 18 | 'alexnet': alexnet, 19 | } 20 | 21 | 22 | def get_backbone(name, **kwargs): 23 | return BACKBONES[name](**kwargs) 24 | -------------------------------------------------------------------------------- /pysot/models/backbone/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/models/backbone/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /pysot/models/backbone/__pycache__/__init__.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/models/backbone/__pycache__/__init__.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/models/backbone/__pycache__/alexnet.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/models/backbone/__pycache__/alexnet.cpython-37.pyc -------------------------------------------------------------------------------- /pysot/models/backbone/__pycache__/alexnet.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/models/backbone/__pycache__/alexnet.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/models/backbone/__pycache__/mobile_v2.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/models/backbone/__pycache__/mobile_v2.cpython-37.pyc -------------------------------------------------------------------------------- /pysot/models/backbone/__pycache__/mobile_v2.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/models/backbone/__pycache__/mobile_v2.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/models/backbone/__pycache__/resnet_atrous.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/models/backbone/__pycache__/resnet_atrous.cpython-37.pyc -------------------------------------------------------------------------------- /pysot/models/backbone/__pycache__/resnet_atrous.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/models/backbone/__pycache__/resnet_atrous.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/models/backbone/alexnet.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | from __future__ import division 3 | from __future__ import print_function 4 | from __future__ import unicode_literals 5 | 6 | import torch.nn as nn 7 | 8 | 9 | class AlexNetLegacy(nn.Module): 10 | configs = [3, 96, 256, 384, 384, 256] 11 | 12 | def __init__(self, width_mult=1): 13 | configs = list(map(lambda x: 3 if x == 3 else 14 | int(x*width_mult), AlexNet.configs)) 15 | super(AlexNetLegacy, self).__init__() 16 | self.features = nn.Sequential( 17 | nn.Conv2d(configs[0], configs[1], kernel_size=11, stride=2), 18 | nn.BatchNorm2d(configs[1]), 19 | nn.MaxPool2d(kernel_size=3, stride=2), 20 | nn.ReLU(inplace=True), 21 | nn.Conv2d(configs[1], configs[2], kernel_size=5), 22 | nn.BatchNorm2d(configs[2]), 23 | nn.MaxPool2d(kernel_size=3, stride=2), 24 | nn.ReLU(inplace=True), 25 | nn.Conv2d(configs[2], configs[3], kernel_size=3), 26 | nn.BatchNorm2d(configs[3]), 27 | nn.ReLU(inplace=True), 28 | nn.Conv2d(configs[3], configs[4], kernel_size=3), 29 | nn.BatchNorm2d(configs[4]), 30 | nn.ReLU(inplace=True), 31 | nn.Conv2d(configs[4], configs[5], kernel_size=3), 32 | nn.BatchNorm2d(configs[5]), 33 | ) 34 | self.feature_size = configs[5] 35 | 36 | def forward(self, x): 37 | x = self.features(x) 38 | return x 39 | 40 | 41 | class AlexNet(nn.Module): 42 | configs = [3, 96, 256, 384, 384, 256] 43 | 44 | def __init__(self, width_mult=1): 45 | configs = list(map(lambda x: 3 if x == 3 else 46 | int(x*width_mult), AlexNet.configs)) 47 | super(AlexNet, self).__init__() 48 | self.layer1 = nn.Sequential( 49 | nn.Conv2d(configs[0], configs[1], kernel_size=11, stride=2), 50 | nn.BatchNorm2d(configs[1]), 51 | nn.MaxPool2d(kernel_size=3, stride=2), 52 | nn.ReLU(inplace=True), 53 | ) 54 | self.layer2 = nn.Sequential( 55 | nn.Conv2d(configs[1], configs[2], kernel_size=5), 56 | nn.BatchNorm2d(configs[2]), 57 | nn.MaxPool2d(kernel_size=3, stride=2), 58 | nn.ReLU(inplace=True), 59 | ) 60 | self.layer3 = nn.Sequential( 61 | nn.Conv2d(configs[2], configs[3], kernel_size=3), 62 | nn.BatchNorm2d(configs[3]), 63 | nn.ReLU(inplace=True), 64 | ) 65 | self.layer4 = nn.Sequential( 66 | nn.Conv2d(configs[3], configs[4], kernel_size=3), 67 | nn.BatchNorm2d(configs[4]), 68 | nn.ReLU(inplace=True), 69 | ) 70 | 71 | self.layer5 = nn.Sequential( 72 | nn.Conv2d(configs[4], configs[5], kernel_size=3), 73 | nn.BatchNorm2d(configs[5]), 74 | ) 75 | self.feature_size = configs[5] 76 | 77 | def forward(self, x): 78 | x = self.layer1(x) 79 | x = self.layer2(x) 80 | x = self.layer3(x) 81 | x = self.layer4(x) 82 | x = self.layer5(x) 83 | return x 84 | 85 | 86 | def alexnetlegacy(**kwargs): 87 | return AlexNetLegacy(**kwargs) 88 | 89 | 90 | def alexnet(**kwargs): 91 | return AlexNet(**kwargs) 92 | -------------------------------------------------------------------------------- /pysot/models/backbone/mobile_v2.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | from __future__ import division 3 | from __future__ import print_function 4 | from __future__ import unicode_literals 5 | 6 | import torch 7 | import torch.nn as nn 8 | 9 | 10 | def conv_bn(inp, oup, stride, padding=1): 11 | return nn.Sequential( 12 | nn.Conv2d(inp, oup, 3, stride, padding, bias=False), 13 | nn.BatchNorm2d(oup), 14 | nn.ReLU6(inplace=True) 15 | ) 16 | 17 | 18 | def conv_1x1_bn(inp, oup): 19 | return nn.Sequential( 20 | nn.Conv2d(inp, oup, 1, 1, 0, bias=False), 21 | nn.BatchNorm2d(oup), 22 | nn.ReLU6(inplace=True) 23 | ) 24 | 25 | 26 | class InvertedResidual(nn.Module): 27 | def __init__(self, inp, oup, stride, expand_ratio, dilation=1): 28 | super(InvertedResidual, self).__init__() 29 | self.stride = stride 30 | 31 | self.use_res_connect = self.stride == 1 and inp == oup 32 | 33 | padding = 2 - stride 34 | if dilation > 1: 35 | padding = dilation 36 | 37 | self.conv = nn.Sequential( 38 | 39 | nn.Conv2d(inp, inp * expand_ratio, 1, 1, 0, bias=False), 40 | nn.BatchNorm2d(inp * expand_ratio), 41 | nn.ReLU6(inplace=True), 42 | 43 | nn.Conv2d(inp * expand_ratio, inp * expand_ratio, 3, 44 | stride, padding, dilation=dilation, 45 | groups=inp * expand_ratio, bias=False), 46 | nn.BatchNorm2d(inp * expand_ratio), 47 | nn.ReLU6(inplace=True), 48 | 49 | nn.Conv2d(inp * expand_ratio, oup, 1, 1, 0, bias=False), 50 | nn.BatchNorm2d(oup), 51 | ) 52 | 53 | def forward(self, x): 54 | if self.use_res_connect: 55 | return x + self.conv(x) 56 | else: 57 | return self.conv(x) 58 | 59 | 60 | class MobileNetV2(nn.Sequential): 61 | def __init__(self, width_mult=1.0, used_layers=[3, 5, 7]): 62 | super(MobileNetV2, self).__init__() 63 | 64 | self.interverted_residual_setting = [ 65 | 66 | [1, 16, 1, 1, 1], 67 | [6, 24, 2, 2, 1], 68 | [6, 32, 3, 2, 1], 69 | [6, 64, 4, 2, 1], 70 | [6, 96, 3, 1, 1], 71 | [6, 160, 3, 2, 1], 72 | [6, 320, 1, 1, 1], 73 | ] 74 | 75 | self.interverted_residual_setting = [ 76 | 77 | [1, 16, 1, 1, 1], 78 | [6, 24, 2, 2, 1], 79 | [6, 32, 3, 2, 1], 80 | [6, 64, 4, 1, 2], 81 | [6, 96, 3, 1, 2], 82 | [6, 160, 3, 1, 4], 83 | [6, 320, 1, 1, 4], 84 | ] 85 | 86 | self.channels = [24, 32, 96, 320] 87 | self.channels = [int(c * width_mult) for c in self.channels] 88 | 89 | input_channel = int(32 * width_mult) 90 | self.last_channel = int(1280 * width_mult) \ 91 | if width_mult > 1.0 else 1280 92 | 93 | self.add_module('layer0', conv_bn(3, input_channel, 2, 0)) 94 | 95 | last_dilation = 1 96 | 97 | self.used_layers = used_layers 98 | 99 | for idx, (t, c, n, s, d) in \ 100 | enumerate(self.interverted_residual_setting, start=1): 101 | output_channel = int(c * width_mult) 102 | 103 | layers = [] 104 | 105 | for i in range(n): 106 | if i == 0: 107 | if d == last_dilation: 108 | dd = d 109 | else: 110 | dd = max(d // 2, 1) 111 | layers.append(InvertedResidual(input_channel, 112 | output_channel, s, t, dd)) 113 | else: 114 | layers.append(InvertedResidual(input_channel, 115 | output_channel, 1, t, d)) 116 | input_channel = output_channel 117 | 118 | last_dilation = d 119 | 120 | self.add_module('layer%d' % (idx), nn.Sequential(*layers)) 121 | 122 | def forward(self, x): 123 | outputs = [] 124 | for idx in range(8): 125 | name = "layer%d" % idx 126 | x = getattr(self, name)(x) 127 | outputs.append(x) 128 | p0, p1, p2, p3, p4 = [outputs[i] for i in [1, 2, 3, 5, 7]] 129 | out = [outputs[i] for i in self.used_layers] 130 | return out 131 | 132 | 133 | def mobilenetv2(**kwargs): 134 | model = MobileNetV2(**kwargs) 135 | return model 136 | 137 | 138 | if __name__ == '__main__': 139 | net = mobilenetv2() 140 | 141 | print(net) 142 | 143 | from torch.autograd import Variable 144 | 145 | tensor = Variable(torch.Tensor(1, 3, 255, 255)).cuda() 146 | 147 | net = net.cuda() 148 | 149 | out = net(tensor) 150 | 151 | for i, p in enumerate(out): 152 | print(i, p.size()) 153 | -------------------------------------------------------------------------------- /pysot/models/channelsplit/__init__.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | from __future__ import division 3 | from __future__ import print_function 4 | from __future__ import unicode_literals 5 | from pysot.models.channelsplit.msc import MSC 6 | 7 | BS = { 8 | 'msc': MSC, 9 | } 10 | 11 | 12 | def get_BS(name, **kwargs): 13 | return BS[name](**kwargs) 14 | -------------------------------------------------------------------------------- /pysot/models/channelsplit/__pycache__/__init__.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/models/channelsplit/__pycache__/__init__.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/models/channelsplit/__pycache__/msc.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/models/channelsplit/__pycache__/msc.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/models/channelsplit/msc.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | from __future__ import division 3 | from __future__ import print_function 4 | from __future__ import unicode_literals 5 | import torch.nn.functional as F 6 | import torch.nn as nn 7 | import torch 8 | 9 | 10 | def scl(rc, order): 11 | br = [] 12 | b = rc.size()[0] 13 | ofr = [[None for j in range(b)] for i in range(5)] 14 | obi = order[0] 15 | ob = order[1] 16 | for i in range(5): 17 | select_three_band = ob[0, i * 3:i * 3 + 3] 18 | gg = rc[None, 0, select_three_band, :, :] 19 | ofr[i][0] = obi[0, i * 3:i * 3 + 3].detach().mean().item() 20 | for k in range(1, b): 21 | stbo = ob[k, i * 3:i * 3 + 3] 22 | gg = torch.cat((gg, rc[None, k, stbo, :, :]), dim=0) 23 | ofr[i][k] = obi[k, i * 3:i * 3 + 3].detach().mean().item() 24 | br.append(gg) 25 | return br, ofr 26 | 27 | 28 | class cbr_1(nn.Module): 29 | def __init__(self, in_channels, out_channels, kernel_size=1, padding=0, stride=1, dilation=1, groups=1, bias=False): 30 | super(cbr_1, self).__init__() 31 | self.conv = nn.Conv2d(in_channels, out_channels, kernel_size=kernel_size, padding=padding, stride=stride, 32 | dilation=dilation, groups=groups, bias=bias) 33 | self.bn = nn.BatchNorm2d(out_channels) 34 | 35 | def forward(self, x): 36 | return F.relu(self.bn(self.conv(x))) 37 | 38 | 39 | class db_3(nn.Module): 40 | def __init__(self, in_channels, out_channels, dilation, padding, kernel_size=3, stride=1, groups=1, bias=False): 41 | super(db_3, self).__init__() 42 | self.conv = nn.Conv2d(in_channels, out_channels, kernel_size=kernel_size, padding=padding, stride=stride, 43 | dilation=dilation, groups=groups, bias=bias) 44 | self.bn = nn.BatchNorm2d(out_channels) 45 | 46 | def forward(self, x): 47 | return F.relu(self.bn(self.conv(x))) 48 | 49 | 50 | class msp(nn.Module): 51 | def __init__(self, in_channels, mid_channels): 52 | super(msp, self).__init__() 53 | self.dc_1 = db_3(mid_channels, mid_channels, dilation=1, padding=1) 54 | self.dc_2 = db_3(mid_channels, mid_channels, dilation=6, padding=6) 55 | self.dc_3 = db_3(mid_channels, mid_channels, dilation=12, padding=12) 56 | self.c_0 = cbr_1(in_channels, mid_channels) 57 | self.c4_0 = cbr_1(mid_channels, mid_channels) 58 | self.c5_0 = cbr_1(mid_channels, mid_channels) 59 | self.c_4 = cbr_1(mid_channels, mid_channels) 60 | self.c_5 = cbr_1(mid_channels, mid_channels) 61 | self.fd = cbr_1(4 * mid_channels, in_channels) 62 | 63 | def forward(self, x): 64 | x_1 = self.dc_1(self.c_0(x)) 65 | x_2 = self.dc_2(self.c_0(x)) 66 | x_3 = self.dc_3(self.c_0(x)) 67 | x_0 = self.c_0(x) 68 | x_1_cos = self.c5_0(x_1 * torch.cos(x_1)) 69 | x_1_sin = self.c4_0(x_1 * torch.sin(x_1)) 70 | m_1 = self.c_4(x_1_sin * x_1_cos) 71 | s_1 = self.c_5(x_1_sin + x_1_cos) 72 | fus_1 = s_1 + m_1 73 | x_2_c = self.c5_0(x_2 * torch.cos(x_2)) 74 | x_2_s = self.c4_0(x_2 * torch.sin(x_2)) 75 | mn_2 = self.c_4(x_2_s * x_2_c) 76 | sn_2 = self.c_5(x_2_s + x_2_c) 77 | fus_2 = sn_2 + mn_2 78 | x_3_c = self.c5_0(x_3 * torch.cos(x_3)) 79 | x_3_s = self.c4_0(x_3 * torch.sin(x_3)) 80 | mn_3 = self.c_4(x_3_s * x_3_c) 81 | sn_3 = self.c_5(x_3_s + x_3_c) 82 | fus_3 = sn_3 + mn_3 83 | oc = torch.cat((fus_1, fus_2, fus_3, x_0), dim=1) 84 | out = self.fd(oc) 85 | return out 86 | 87 | 88 | class MSC(nn.Module): 89 | def __init__(self): 90 | super(MSC, self).__init__() 91 | in_channels = 16 92 | mid_channels = 8 93 | self.msp = msp(in_channels=in_channels, mid_channels=mid_channels) 94 | self.mlp = nn.Sequential(nn.Linear(in_channels, in_channels, bias=True), nn.Tanh(), 95 | nn.Linear(in_channels, in_channels, bias=True), nn.Tanh()) 96 | 97 | def forward(self, x): 98 | xx = x.mul(1 / 255.0).clamp(0.0, 1.0) 99 | x_assp = self.msp(xx) 100 | b, c, w, h = x_assp.size() 101 | x2 = x_assp.view(b, c, -1) 102 | x3 = x2.permute(0, 2, 1) 103 | ms_mlp = self.mlp(x3) 104 | ms_mlp_ = ms_mlp.transpose(1, 2) 105 | cm = torch.matmul(ms_mlp_, ms_mlp) 106 | for i in range(16): 107 | cm[:, i, i] = 0.0 108 | cm = F.normalize(cm, p=2, dim=-1) 109 | for i in range(16): 110 | cm[:, i, i] = 0.0 111 | w = torch.norm(cm, p=1, dim=-1) 112 | w_reshape = w.contiguous().view(w.shape[0], w.shape[1], 1, 1) 113 | x_att = w_reshape.expand_as(x) 114 | x_cg = xx * x_att 115 | x_cg = x_cg.view(x_cg.shape[0], x_cg.shape[1], -1) 116 | x_orig = xx.view(xx.shape[0], xx.shape[1], -1) 117 | cg_list = [x_orig, x_cg] 118 | order_Y = torch.sort(w, dim=-1, descending=True, out=None) 119 | fc_list, w_list = scl(x, order_Y) 120 | return fc_list, w_list, order_Y, cg_list 121 | -------------------------------------------------------------------------------- /pysot/models/fusion/__init__.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | from __future__ import division 3 | from __future__ import print_function 4 | from __future__ import unicode_literals 5 | from pysot.models.fusion.transfusion import transformerfusion # 6 | 7 | FS = { 8 | 'transfusion': transformerfusion, 9 | } 10 | 11 | 12 | def get_FS(name, **kwargs): 13 | return FS[name](**kwargs) 14 | -------------------------------------------------------------------------------- /pysot/models/fusion/__pycache__/__init__.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/models/fusion/__pycache__/__init__.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/models/fusion/__pycache__/transfusion.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/models/fusion/__pycache__/transfusion.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/models/fusion/transfusion.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | from __future__ import division 3 | from __future__ import print_function 4 | from __future__ import unicode_literals 5 | import torch.nn.functional as F 6 | import torch 7 | from torch import nn 8 | 9 | 10 | class transformerfusion(nn.Module): 11 | def __init__(self): 12 | super(transformerfusion, self).__init__() 13 | self.block0 = Block() 14 | 15 | def forward(self, down_x): 16 | x0 = down_x[0] 17 | x1 = down_x[1] 18 | x2 = down_x[2] 19 | x3 = down_x[3] 20 | x4 = down_x[4] 21 | nd_01 = self.block0(x0, x1) 22 | nd_12 = self.block0(x1, x2) 23 | nd_23 = self.block0(x2, x3) 24 | nd_34 = self.block0(x3, x4) 25 | f = nd_01 + nd_12 + nd_23 + nd_34 26 | return f 27 | 28 | 29 | class Block(nn.Module): 30 | def __init__(self): 31 | super(Block, self).__init__() 32 | channels = 256 33 | self.out_channels = channels // 4 34 | self.a_key = nn.Sequential( 35 | nn.Conv2d(in_channels=channels, out_channels=self.out_channels, kernel_size=1, stride=1, padding=0), 36 | nn.BatchNorm2d(self.out_channels), 37 | nn.ReLU(), ) 38 | self.a_query = nn.Sequential( 39 | nn.Conv2d(in_channels=channels, out_channels=self.out_channels, kernel_size=1, stride=1, padding=0), 40 | nn.BatchNorm2d(self.out_channels), 41 | nn.ReLU(), ) 42 | self.a_value = nn.Conv2d(in_channels=channels, out_channels=self.out_channels, kernel_size=1, stride=1, 43 | padding=0) 44 | self.a_W = nn.Conv2d(in_channels=self.out_channels, out_channels=self.out_channels * 2, kernel_size=1, stride=1, 45 | padding=0) 46 | self.b_key = nn.Sequential( 47 | nn.Conv2d(in_channels=channels, out_channels=self.out_channels, kernel_size=1, stride=1, padding=0), 48 | nn.BatchNorm2d(self.out_channels), 49 | nn.ReLU(), ) 50 | self.b_query = nn.Sequential( 51 | nn.Conv2d(in_channels=channels, out_channels=self.out_channels, kernel_size=1, stride=1, padding=0), 52 | nn.BatchNorm2d(self.out_channels), 53 | nn.ReLU(), ) 54 | self.b_value = nn.Conv2d(in_channels=channels, out_channels=self.out_channels, kernel_size=1, stride=1, 55 | padding=0) 56 | self.b_W = nn.Conv2d(in_channels=self.out_channels, out_channels=self.out_channels * 2, kernel_size=1, stride=1, 57 | padding=0) 58 | self.gate_a = nn.Sequential( 59 | nn.Conv2d(in_channels=channels, out_channels=channels, kernel_size=1, stride=1, padding=0), 60 | nn.Sigmoid(), ) 61 | 62 | def forward(self, a, b): 63 | ns = self.fuse(a, b) 64 | return ns 65 | 66 | def fuse(self, a, b): 67 | a_m = a 68 | b_m = b 69 | adapt_channels = self.out_channels 70 | batch_size = a_m.size(0) 71 | a_query = self.a_query(a_m).view(batch_size, adapt_channels, -1).permute(0, 2, 1) 72 | a_key = self.a_key(a_m).view(batch_size, adapt_channels, -1) 73 | a_value = self.a_value(a_m).view(batch_size, adapt_channels, -1).permute(0, 2, 1) 74 | batch_size = b_m.size(0) 75 | b_query = self.b_query(b_m).view(batch_size, adapt_channels, -1).permute(0, 2, 1) 76 | b_key = self.b_key(b_m).view(batch_size, adapt_channels, -1) 77 | b_value = self.b_value(b_m).view(batch_size, adapt_channels, -1).permute(0, 2, 1) 78 | a_sim_map = torch.matmul(b_query, a_key) 79 | a_sim_map = F.softmax(a_sim_map, dim=-1) 80 | a_context = torch.matmul(a_sim_map, a_value) 81 | a_context = a_context.permute(0, 2, 1).contiguous() 82 | a_context = a_context.view(batch_size, self.out_channels, *a_m.size()[2:]) 83 | a_context = self.a_W(a_context) 84 | b_sim_map = torch.matmul(a_query, b_key) 85 | b_sim_map = F.softmax(b_sim_map, dim=-1) 86 | b_context = torch.matmul(b_sim_map, b_value) 87 | b_context = b_context.permute(0, 2, 1).contiguous() 88 | b_context = b_context.view(batch_size, self.out_channels, *b_m.size()[2:]) 89 | b_context = self.b_W(b_context) 90 | cat_fea = torch.cat([b_context, a_context], dim=1) 91 | attention_vector_a = self.gate_a(cat_fea) 92 | attention_vector_T = 1 - attention_vector_a 93 | ns = a * attention_vector_a + b * attention_vector_T 94 | return ns 95 | -------------------------------------------------------------------------------- /pysot/models/head/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /pysot/models/head/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/models/head/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /pysot/models/head/__pycache__/__init__.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/models/head/__pycache__/__init__.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/models/head/__pycache__/car_head.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/models/head/__pycache__/car_head.cpython-37.pyc -------------------------------------------------------------------------------- /pysot/models/head/__pycache__/car_head.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/models/head/__pycache__/car_head.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/models/head/car_head.py: -------------------------------------------------------------------------------- 1 | import torch 2 | from torch import nn 3 | import math 4 | 5 | 6 | class CARHead(torch.nn.Module): 7 | def __init__(self, cfg, in_channels): 8 | """ 9 | Arguments: 10 | in_channels (int): number of channels of the input feature 11 | """ 12 | super(CARHead, self).__init__() 13 | 14 | num_classes = cfg.TRAIN.NUM_CLASSES 15 | 16 | cls_tower = [] 17 | bbox_tower = [] 18 | for i in range(cfg.TRAIN.NUM_CONVS): 19 | cls_tower.append(nn.Conv2d(in_channels, in_channels, kernel_size=3, stride=1, padding=1)) 20 | cls_tower.append(nn.GroupNorm(32, in_channels)) 21 | cls_tower.append(nn.ReLU()) 22 | bbox_tower.append(nn.Conv2d(in_channels, in_channels, kernel_size=3, stride=1, padding=1)) 23 | bbox_tower.append(nn.GroupNorm(32, in_channels)) 24 | bbox_tower.append(nn.ReLU()) 25 | 26 | self.add_module('cls_tower', nn.Sequential(*cls_tower)) 27 | 28 | self.add_module('bbox_tower', nn.Sequential(*bbox_tower)) 29 | 30 | self.cls_logits = nn.Conv2d(in_channels, num_classes, kernel_size=3, stride=1, padding=1) 31 | self.bbox_pred = nn.Conv2d(in_channels, 4, kernel_size=3, stride=1, padding=1) 32 | self.centerness = nn.Conv2d(in_channels, 1, kernel_size=3, stride=1, padding=1) 33 | 34 | for modules in [self.cls_tower, self.bbox_tower, self.cls_logits, self.bbox_pred, self.centerness]: 35 | for l in modules.modules(): 36 | if isinstance(l, nn.Conv2d): 37 | torch.nn.init.normal_(l.weight, std=0.01) 38 | torch.nn.init.constant_(l.bias, 0) 39 | 40 | prior_prob = cfg.TRAIN.PRIOR_PROB 41 | bias_value = -math.log((1 - prior_prob) / prior_prob) 42 | torch.nn.init.constant_(self.cls_logits.bias, bias_value) 43 | 44 | def forward(self, x): 45 | 46 | cls_tower = self.cls_tower(x) 47 | logits = self.cls_logits(cls_tower) 48 | centerness = self.centerness(cls_tower) 49 | 50 | bbox_reg = torch.exp(self.bbox_pred(self.bbox_tower(x))) 51 | 52 | return logits, bbox_reg, centerness 53 | 54 | 55 | class Scale(nn.Module): 56 | def __init__(self, init_value=1.0): 57 | super(Scale, self).__init__() 58 | self.scale = nn.Parameter(torch.FloatTensor([init_value])) 59 | 60 | def forward(self, input): 61 | return input * self.scale 62 | -------------------------------------------------------------------------------- /pysot/models/init_weight.py: -------------------------------------------------------------------------------- 1 | import torch.nn as nn 2 | 3 | 4 | def init_weights(model): 5 | for m in model.modules(): 6 | if isinstance(m, nn.Conv2d): 7 | nn.init.kaiming_normal_(m.weight.data, 8 | mode='fan_out', 9 | nonlinearity='relu') 10 | elif isinstance(m, nn.BatchNorm2d): 11 | m.weight.data.fill_(1) 12 | m.bias.data.zero_() 13 | -------------------------------------------------------------------------------- /pysot/models/model_builder.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | from __future__ import division 3 | from __future__ import print_function 4 | from __future__ import unicode_literals 5 | import torch 6 | import torch.nn as nn 7 | import torch.nn.functional as F 8 | from pysot.core.config import cfg 9 | from pysot.models.loss_car import make_phtrack_loss_evaluator 10 | from ..utils.location_grid import compute_locations 11 | from pysot.utils.xcorr import xcorr_depthwise 12 | from pysot.models.channelsplit import get_BS 13 | from pysot.models.backbone import get_backbone 14 | from pysot.models.neck import get_neck 15 | from pysot.models.fusion import get_FS 16 | from pysot.models.head.car_head import CARHead 17 | 18 | 19 | class ModelBuilder(nn.Module): 20 | def __init__(self): 21 | super(ModelBuilder, self).__init__() 22 | self.zf = None 23 | 24 | self.channelsplit = get_BS(cfg.BS.TYPE) 25 | 26 | self.backbone = get_backbone(cfg.BACKBONE.TYPE, **cfg.BACKBONE.KWARGS) 27 | 28 | self.neck = get_neck(cfg.ADJUST.TYPE, **cfg.ADJUST.KWARGS) 29 | 30 | self.xcorr_depthwise = xcorr_depthwise 31 | 32 | self.down = nn.ConvTranspose2d(256 * 3, 256, 1, 1) 33 | 34 | self.fs = get_FS(cfg.FS.TYPE) 35 | 36 | self.car_head = CARHead(cfg, 256) 37 | 38 | self.loss_evaluator = make_phtrack_loss_evaluator(cfg) 39 | 40 | def template(self, z): 41 | 42 | bs_z = self.channelsplit(z) 43 | 44 | for i in range(len(bs_z[0])): 45 | z = bs_z[0][i] 46 | 47 | zf = self.backbone(z) 48 | 49 | zf = self.neck(zf) 50 | 51 | if i == 0: 52 | zff = [zf] 53 | else: 54 | zff.append(zf) 55 | 56 | self.zf = zff 57 | 58 | def track(self, x): 59 | 60 | bs_x = self.channelsplit(x) 61 | 62 | for i in range(len(bs_x[0])): 63 | 64 | x = bs_x[0][i] 65 | 66 | xf = self.backbone(x) 67 | 68 | xf = self.neck(xf) 69 | 70 | features = self.xcorr_depthwise(xf[0], self.zf[i][0]) 71 | 72 | for j in range(len(xf) - 1): 73 | features_new = self.xcorr_depthwise(xf[j + 1], self.zf[i][j + 1]) 74 | 75 | features = torch.cat([features, features_new], 1) 76 | 77 | f_down = self.down(features) 78 | 79 | if i == 0: 80 | f_list = [f_down] 81 | else: 82 | f_list.append(f_down) 83 | 84 | f_f = self.fs(f_list) 85 | 86 | cls, loc, cen = self.car_head(f_f) 87 | bs_order = bs_x[2][1][0][0:3] 88 | 89 | w_16band = bs_x[2][0] 90 | 91 | w_std = torch.std(w_16band) 92 | 93 | return {'cls': cls, 'loc': loc, 'cen': cen, 'bs_order': bs_order, 'w_std': w_std} 94 | 95 | def log_softmax(self, cls): 96 | b, a2, h, w = cls.size() 97 | cls = cls.view(b, 2, a2 // 2, h, w) 98 | cls = cls.permute(0, 2, 3, 4, 1).contiguous() 99 | cls = F.log_softmax(cls, dim=4) 100 | return cls 101 | 102 | def forward(self, data): 103 | """ 104 | only used in training 105 | 输出为损失 106 | """ 107 | template = data['template'].cuda() 108 | search = data['search'].cuda() 109 | label_cls = data['label_cls'].cuda() 110 | label_loc = data['bbox'].cuda() 111 | 112 | template_cs = self.channelsplit(template) 113 | search_cs = self.channelsplit(search) 114 | 115 | for i in range(5): 116 | template_3 = template_cs[0][i] 117 | search_3 = search_cs[0][i] 118 | 119 | zf0 = self.backbone(template_3) 120 | 121 | xf0 = self.backbone(search_3) 122 | 123 | zf = self.neck(zf0) 124 | 125 | xf = self.neck(xf0) 126 | 127 | f_0 = self.xcorr_depthwise(xf[0], zf[0]) 128 | f_1 = self.xcorr_depthwise(xf[1], zf[1]) 129 | f_2 = self.xcorr_depthwise(xf[2], zf[2]) 130 | 131 | fea = torch.cat([f_0, f_1, f_2], dim=1) 132 | 133 | f_down = self.down(fea) 134 | 135 | if i == 0: 136 | f_five = [f_down] 137 | else: 138 | f_five.append(f_down) 139 | 140 | f_fs = self.fs(f_five) 141 | 142 | cls, loc, cen = self.car_head(f_fs) 143 | 144 | locations = compute_locations(cls, cfg.TRACK.STRIDE) 145 | cls = self.log_softmax(cls) 146 | 147 | cls_loss, loc_loss, cen_loss = self.loss_evaluator(locations, cls, loc, cen, label_cls, label_loc) 148 | 149 | t_cg_loss = F.l1_loss(template_cs[3][0], template_cs[3][1]) 150 | 151 | s_cg_loss = F.l1_loss(search_cs[3][0], search_cs[3][1]) 152 | cg_loss = (t_cg_loss.data + s_cg_loss.data) / 2 153 | 154 | total_loss = cfg.TRAIN.CLS_WEIGHT * cls_loss + cfg.TRAIN.LOC_WEIGHT * loc_loss + cfg.TRAIN.CEN_WEIGHT * cen_loss + cfg.TRAIN.CG_WEIGHT * cg_loss 155 | 156 | outputs = {'total_loss': total_loss, 'cls_loss': cls_loss, 'loc_loss': loc_loss, 'cen_loss': cen_loss, 157 | 'cg_loss': cg_loss} 158 | 159 | return outputs 160 | -------------------------------------------------------------------------------- /pysot/models/neck/__init__.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | from __future__ import division 3 | from __future__ import print_function 4 | from __future__ import unicode_literals 5 | 6 | import torch 7 | import torch.nn as nn 8 | import torch.nn.functional as F 9 | 10 | from pysot.models.neck.neck import AdjustLayer, AdjustAllLayer 11 | 12 | NECKS = { 13 | 'AdjustLayer': AdjustLayer, 14 | 'AdjustAllLayer': AdjustAllLayer 15 | } 16 | 17 | 18 | def get_neck(name, **kwargs): 19 | return NECKS[name](**kwargs) 20 | -------------------------------------------------------------------------------- /pysot/models/neck/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/models/neck/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /pysot/models/neck/__pycache__/__init__.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/models/neck/__pycache__/__init__.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/models/neck/__pycache__/neck.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/models/neck/__pycache__/neck.cpython-37.pyc -------------------------------------------------------------------------------- /pysot/models/neck/__pycache__/neck.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/models/neck/__pycache__/neck.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/models/neck/neck.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | from __future__ import division 3 | from __future__ import print_function 4 | from __future__ import unicode_literals 5 | 6 | import torch.nn as nn 7 | 8 | 9 | class AdjustLayer(nn.Module): 10 | def __init__(self, in_channels, out_channels): 11 | super(AdjustLayer, self).__init__() 12 | self.downsample = nn.Sequential( 13 | nn.Conv2d(in_channels, out_channels, kernel_size=1, bias=False), 14 | nn.BatchNorm2d(out_channels), 15 | ) 16 | 17 | def forward(self, x): 18 | x = self.downsample(x) 19 | 20 | if x.size(3) < 20: 21 | l = 4 22 | r = l + 7 23 | x = x[:, :, l:r, l:r] 24 | return x 25 | 26 | 27 | class AdjustAllLayer(nn.Module): 28 | def __init__(self, in_channels, out_channels): 29 | super(AdjustAllLayer, self).__init__() 30 | self.num = len(out_channels) 31 | if self.num == 1: 32 | self.downsample = AdjustLayer(in_channels[0], out_channels[0]) 33 | 34 | 35 | else: 36 | for i in range(self.num): 37 | self.add_module('downsample' + str(i + 2), AdjustLayer(in_channels[i], out_channels[i])) 38 | 39 | def forward(self, features): 40 | if self.num == 1: 41 | return self.downsample(features) 42 | 43 | else: 44 | out = [] 45 | for i in range(self.num): 46 | adj_layer = getattr(self, 'downsample' + str(i + 2)) 47 | 48 | out.append(adj_layer(features[i]).contiguous()) 49 | return out 50 | -------------------------------------------------------------------------------- /pysot/tracker/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/tracker/__init__.py -------------------------------------------------------------------------------- /pysot/tracker/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/tracker/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /pysot/tracker/__pycache__/__init__.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/tracker/__pycache__/__init__.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/tracker/__pycache__/base_tracker.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/tracker/__pycache__/base_tracker.cpython-37.pyc -------------------------------------------------------------------------------- /pysot/tracker/__pycache__/base_tracker.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/tracker/__pycache__/base_tracker.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/tracker/__pycache__/phtrack_tracker.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/tracker/__pycache__/phtrack_tracker.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/tracker/__pycache__/tracker_builder.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/tracker/__pycache__/tracker_builder.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/tracker/base_tracker.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | from __future__ import division 3 | from __future__ import print_function 4 | from __future__ import unicode_literals 5 | 6 | import cv2 7 | import numpy as np 8 | import torch 9 | 10 | from pysot.core.config import cfg 11 | 12 | 13 | class BaseTracker(object): 14 | """ Base tracker of single object tracking 15 | """ 16 | 17 | def init(self, img, bbox): 18 | """ 19 | args: 20 | img(np.ndarray): BGR image 21 | bbox(list): [x, y, width, height] 22 | x, y need to be 0-based 23 | """ 24 | raise NotImplementedError 25 | 26 | def track(self, img): 27 | """ 28 | args: 29 | img(np.ndarray): BGR image 30 | return: 31 | bbox(list):[x, y, width, height] 32 | """ 33 | raise NotImplementedError 34 | 35 | 36 | class SiameseTracker(BaseTracker): 37 | def get_subwindow(self, im, pos, model_sz, original_sz, avg_chans): 38 | """ 39 | args: 40 | im: bgr based image 41 | pos: center position 42 | model_sz: exemplar size 43 | s_z: original size 44 | avg_chans: channel average 45 | """ 46 | if isinstance(pos, float): 47 | pos = [pos, pos] 48 | sz = original_sz 49 | im_sz = im.shape 50 | c = (original_sz + 1) / 2 51 | 52 | context_xmin = np.floor(pos[0] - c + 0.5) 53 | context_xmax = context_xmin + sz - 1 54 | 55 | context_ymin = np.floor(pos[1] - c + 0.5) 56 | context_ymax = context_ymin + sz - 1 57 | left_pad = int(max(0., -context_xmin)) 58 | top_pad = int(max(0., -context_ymin)) 59 | right_pad = int(max(0., context_xmax - im_sz[1] + 1)) 60 | bottom_pad = int(max(0., context_ymax - im_sz[0] + 1)) 61 | 62 | context_xmin = context_xmin + left_pad 63 | context_xmax = context_xmax + left_pad 64 | context_ymin = context_ymin + top_pad 65 | context_ymax = context_ymax + top_pad 66 | 67 | r, c, k = im.shape 68 | if any([top_pad, bottom_pad, left_pad, right_pad]): 69 | size = (r + top_pad + bottom_pad, c + left_pad + right_pad, k) 70 | te_im = np.zeros(size, np.uint8) 71 | te_im[top_pad:top_pad + r, left_pad:left_pad + c, :] = im 72 | if top_pad: 73 | te_im[0:top_pad, left_pad:left_pad + c, :] = avg_chans 74 | if bottom_pad: 75 | te_im[r + top_pad:, left_pad:left_pad + c, :] = avg_chans 76 | if left_pad: 77 | te_im[:, 0:left_pad, :] = avg_chans 78 | if right_pad: 79 | te_im[:, c + left_pad:, :] = avg_chans 80 | im_patch = te_im[int(context_ymin):int(context_ymax + 1), int(context_xmin):int(context_xmax + 1), :] 81 | else: 82 | im_patch = im[int(context_ymin):int(context_ymax + 1), int(context_xmin):int(context_xmax + 1), :] 83 | 84 | if not np.array_equal(model_sz, original_sz): 85 | im_patch = cv2.resize(im_patch, (model_sz, model_sz)) 86 | im_patch = im_patch.transpose(2, 0, 1) 87 | im_patch = im_patch[np.newaxis, :, :, :] 88 | im_patch = im_patch.astype(np.float32) 89 | im_patch = torch.from_numpy(im_patch) 90 | if cfg.CUDA: 91 | im_patch = im_patch.cuda() 92 | return im_patch 93 | -------------------------------------------------------------------------------- /pysot/tracker/tracker_builder.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | from __future__ import division 3 | from __future__ import print_function 4 | from __future__ import unicode_literals 5 | 6 | from pysot.core.config import cfg 7 | from pysot.tracker.phtrack_tracker import phtrackTracker 8 | 9 | TRACKS = { 10 | 'phtrackTracker': phtrackTracker 11 | } 12 | 13 | 14 | def build_tracker(model, cfg): 15 | return TRACKS[model, cfg] -------------------------------------------------------------------------------- /pysot/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/utils/__init__.py -------------------------------------------------------------------------------- /pysot/utils/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/utils/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /pysot/utils/__pycache__/__init__.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/utils/__pycache__/__init__.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/utils/__pycache__/average_meter.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/utils/__pycache__/average_meter.cpython-37.pyc -------------------------------------------------------------------------------- /pysot/utils/__pycache__/average_meter.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/utils/__pycache__/average_meter.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/utils/__pycache__/bbox.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/utils/__pycache__/bbox.cpython-37.pyc -------------------------------------------------------------------------------- /pysot/utils/__pycache__/bbox.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/utils/__pycache__/bbox.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/utils/__pycache__/distributed.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/utils/__pycache__/distributed.cpython-37.pyc -------------------------------------------------------------------------------- /pysot/utils/__pycache__/distributed.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/utils/__pycache__/distributed.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/utils/__pycache__/location_grid.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/utils/__pycache__/location_grid.cpython-37.pyc -------------------------------------------------------------------------------- /pysot/utils/__pycache__/location_grid.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/utils/__pycache__/location_grid.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/utils/__pycache__/log_helper.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/utils/__pycache__/log_helper.cpython-37.pyc -------------------------------------------------------------------------------- /pysot/utils/__pycache__/log_helper.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/utils/__pycache__/log_helper.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/utils/__pycache__/lr_scheduler.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/utils/__pycache__/lr_scheduler.cpython-37.pyc -------------------------------------------------------------------------------- /pysot/utils/__pycache__/lr_scheduler.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/utils/__pycache__/lr_scheduler.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/utils/__pycache__/misc.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/utils/__pycache__/misc.cpython-37.pyc -------------------------------------------------------------------------------- /pysot/utils/__pycache__/misc.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/utils/__pycache__/misc.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/utils/__pycache__/model_load.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/utils/__pycache__/model_load.cpython-37.pyc -------------------------------------------------------------------------------- /pysot/utils/__pycache__/model_load.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/utils/__pycache__/model_load.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/utils/__pycache__/xcorr.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/utils/__pycache__/xcorr.cpython-37.pyc -------------------------------------------------------------------------------- /pysot/utils/__pycache__/xcorr.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/utils/__pycache__/xcorr.cpython-39.pyc -------------------------------------------------------------------------------- /pysot/utils/average_meter.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) SenseTime. All Rights Reserved. 2 | 3 | from __future__ import absolute_import 4 | from __future__ import division 5 | from __future__ import print_function 6 | from __future__ import unicode_literals 7 | 8 | 9 | class Meter(object): 10 | def __init__(self, name, val, avg): 11 | self.name = name 12 | self.val = val 13 | self.avg = avg 14 | 15 | def __repr__(self): 16 | return "{name}: {val:.6f} ({avg:.6f})".format( 17 | name=self.name, val=self.val, avg=self.avg 18 | ) 19 | 20 | def __format__(self, *tuples, **kwargs): 21 | return self.__repr__() 22 | 23 | 24 | class AverageMeter: 25 | """Computes and stores the average and current value""" 26 | def __init__(self, num=100): 27 | self.num = num 28 | self.reset() 29 | 30 | def reset(self): 31 | self.val = {} 32 | self.sum = {} 33 | self.count = {} 34 | self.history = {} 35 | 36 | def update(self, batch=1, **kwargs): 37 | val = {} 38 | for k in kwargs: 39 | val[k] = kwargs[k] / float(batch) 40 | self.val.update(val) 41 | for k in kwargs: 42 | if k not in self.sum: 43 | self.sum[k] = 0 44 | self.count[k] = 0 45 | self.history[k] = [] 46 | self.sum[k] += kwargs[k] 47 | self.count[k] += batch 48 | for _ in range(batch): 49 | self.history[k].append(val[k]) 50 | 51 | if self.num <= 0: 52 | # < 0, average all 53 | self.history[k] = [] 54 | 55 | # == 0: no average 56 | if self.num == 0: 57 | self.sum[k] = self.val[k] 58 | self.count[k] = 1 59 | 60 | elif len(self.history[k]) > self.num: 61 | pop_num = len(self.history[k]) - self.num 62 | for _ in range(pop_num): 63 | self.sum[k] -= self.history[k][0] 64 | del self.history[k][0] 65 | self.count[k] -= 1 66 | 67 | def __repr__(self): 68 | s = '' 69 | for k in self.sum: 70 | s += self.format_str(k) 71 | return s 72 | 73 | def format_str(self, attr): 74 | return "{name}: {val:.6f} ({avg:.6f}) ".format( 75 | name=attr, 76 | val=float(self.val[attr]), 77 | avg=float(self.sum[attr]) / self.count[attr]) 78 | 79 | def __getattr__(self, attr): 80 | if attr in self.__dict__: 81 | return super(AverageMeter, self).__getattr__(attr) 82 | if attr not in self.sum: 83 | print("invalid key '{}'".format(attr)) 84 | return Meter(attr, 0, 0) 85 | return Meter(attr, self.val[attr], self.avg(attr)) 86 | 87 | def avg(self, attr): 88 | return float(self.sum[attr]) / self.count[attr] 89 | 90 | 91 | if __name__ == '__main__': 92 | avg1 = AverageMeter(10) 93 | avg2 = AverageMeter(0) 94 | avg3 = AverageMeter(-1) 95 | 96 | for i in range(20): 97 | avg1.update(s=i) 98 | avg2.update(s=i) 99 | avg3.update(s=i) 100 | 101 | print('iter {}'.format(i)) 102 | print(avg1.s) 103 | print(avg2.s) 104 | print(avg3.s) 105 | -------------------------------------------------------------------------------- /pysot/utils/bbox.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) SenseTime. All Rights Reserved. 2 | 3 | from __future__ import absolute_import 4 | from __future__ import division 5 | from __future__ import print_function 6 | from __future__ import unicode_literals 7 | 8 | from collections import namedtuple 9 | 10 | import numpy as np 11 | 12 | 13 | Corner = namedtuple('Corner', 'x1 y1 x2 y2') 14 | # alias 15 | BBox = Corner 16 | Center = namedtuple('Center', 'x y w h') 17 | 18 | 19 | def corner2center(corner): 20 | """ convert (x1, y1, x2, y2) to (cx, cy, w, h) 21 | Args: 22 | conrner: Corner or np.array (4*N) 23 | Return: 24 | Center or np.array (4 * N) 25 | """ 26 | if isinstance(corner, Corner): 27 | x1, y1, x2, y2 = corner 28 | return Center((x1 + x2) * 0.5, (y1 + y2) * 0.5, (x2 - x1), (y2 - y1)) 29 | else: 30 | x1, y1, x2, y2 = corner[0], corner[1], corner[2], corner[3] 31 | x = (x1 + x2) * 0.5 32 | y = (y1 + y2) * 0.5 33 | w = x2 - x1 34 | h = y2 - y1 35 | return x, y, w, h 36 | 37 | 38 | def center2corner(center): 39 | """ convert (cx, cy, w, h) to (x1, y1, x2, y2) 40 | Args: 41 | center: Center or np.array (4 * N) 42 | Return: 43 | center or np.array (4 * N) 44 | """ 45 | if isinstance(center, Center): 46 | x, y, w, h = center 47 | return Corner(x - w * 0.5, y - h * 0.5, x + w * 0.5, y + h * 0.5) 48 | else: 49 | x, y, w, h = center[0], center[1], center[2], center[3] 50 | x1 = x - w * 0.5 51 | y1 = y - h * 0.5 52 | x2 = x + w * 0.5 53 | y2 = y + h * 0.5 54 | return x1, y1, x2, y2 55 | 56 | 57 | def IoU(rect1, rect2): 58 | """ caculate interection over union 59 | Args: 60 | rect1: (x1, y1, x2, y2) 61 | rect2: (x1, y1, x2, y2) 62 | Returns: 63 | iou 64 | """ 65 | # overlap 66 | x1, y1, x2, y2 = rect1[0], rect1[1], rect1[2], rect1[3] 67 | tx1, ty1, tx2, ty2 = rect2[0], rect2[1], rect2[2], rect2[3] 68 | 69 | xx1 = np.maximum(tx1, x1) 70 | yy1 = np.maximum(ty1, y1) 71 | xx2 = np.minimum(tx2, x2) 72 | yy2 = np.minimum(ty2, y2) 73 | 74 | ww = np.maximum(0, xx2 - xx1) 75 | hh = np.maximum(0, yy2 - yy1) 76 | 77 | area = (x2-x1) * (y2-y1) 78 | target_a = (tx2-tx1) * (ty2 - ty1) 79 | inter = ww * hh 80 | iou = inter / (area + target_a - inter) 81 | return iou 82 | 83 | 84 | def cxy_wh_2_rect(pos, sz): 85 | """ convert (cx, cy, w, h) to (x1, y1, w, h), 0-index 86 | """ 87 | return np.array([pos[0]-sz[0]/2, pos[1]-sz[1]/2, sz[0], sz[1]]) 88 | 89 | 90 | def rect_2_cxy_wh(rect): 91 | """ convert (x1, y1, w, h) to (cx, cy, w, h), 0-index 92 | """ 93 | return np.array([rect[0]+rect[2]/2, rect[1]+rect[3]/2]), \ 94 | np.array([rect[2], rect[3]]) 95 | 96 | 97 | def cxy_wh_2_rect1(pos, sz): 98 | """ convert (cx, cy, w, h) to (x1, y1, w, h), 1-index 99 | """ 100 | return np.array([pos[0]-sz[0]/2+1, pos[1]-sz[1]/2+1, sz[0], sz[1]]) 101 | 102 | 103 | def rect1_2_cxy_wh(rect): 104 | """ convert (x1, y1, w, h) to (cx, cy, w, h), 1-index 105 | """ 106 | return np.array([rect[0]+rect[2]/2-1, rect[1]+rect[3]/2-1]), \ 107 | np.array([rect[2], rect[3]]) 108 | 109 | 110 | def get_axis_aligned_bbox(region): 111 | """ convert region to (cx, cy, w, h) that represent by axis aligned box 112 | """ 113 | nv = region.size 114 | if nv == 8: 115 | cx = np.mean(region[0::2]) 116 | cy = np.mean(region[1::2]) 117 | x1 = min(region[0::2]) 118 | x2 = max(region[0::2]) 119 | y1 = min(region[1::2]) 120 | y2 = max(region[1::2]) 121 | A1 = np.linalg.norm(region[0:2] - region[2:4]) * \ 122 | np.linalg.norm(region[2:4] - region[4:6]) 123 | A2 = (x2 - x1) * (y2 - y1) 124 | s = np.sqrt(A1 / A2) 125 | w = s * (x2 - x1) + 1 126 | h = s * (y2 - y1) + 1 127 | else: 128 | x = region[0] 129 | y = region[1] 130 | w = region[2] 131 | h = region[3] 132 | cx = x+w/2 133 | cy = y+h/2 134 | return cx, cy, w, h 135 | 136 | 137 | def get_min_max_bbox(region): 138 | """ convert region to (cx, cy, w, h) that represent by mim-max box 139 | """ 140 | nv = region.size 141 | if nv == 8: 142 | cx = np.mean(region[0::2]) 143 | cy = np.mean(region[1::2]) 144 | x1 = min(region[0::2]) 145 | x2 = max(region[0::2]) 146 | y1 = min(region[1::2]) 147 | y2 = max(region[1::2]) 148 | w = x2 - x1 149 | h = y2 - y1 150 | else: 151 | x = region[0] 152 | y = region[1] 153 | w = region[2] 154 | h = region[3] 155 | cx = x+w/2 156 | cy = y+h/2 157 | return cx, cy, w, h 158 | -------------------------------------------------------------------------------- /pysot/utils/distributed.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) SenseTime. All Rights Reserved. 2 | 3 | from __future__ import absolute_import 4 | from __future__ import division 5 | from __future__ import print_function 6 | from __future__ import unicode_literals 7 | 8 | import os 9 | import socket 10 | import logging 11 | 12 | import torch 13 | import torch.nn as nn 14 | import torch.distributed as dist 15 | 16 | from pysot.utils.log_helper import log_once 17 | 18 | logger = logging.getLogger('global') 19 | 20 | 21 | def average_reduce(v): 22 | if get_world_size() == 1: 23 | return v 24 | tensor = torch.cuda.FloatTensor(1) 25 | tensor[0] = v 26 | dist.all_reduce(tensor) 27 | v = tensor[0] / get_world_size() 28 | return v 29 | 30 | 31 | class DistModule(nn.Module): 32 | def __init__(self, module, bn_method=0): 33 | super(DistModule, self).__init__() 34 | self.module = module 35 | self.bn_method = bn_method 36 | if get_world_size() > 1: 37 | broadcast_params(self.module) 38 | else: 39 | self.bn_method = 0 # single proccess 40 | 41 | def forward(self, *args, **kwargs): 42 | broadcast_buffers(self.module, self.bn_method) 43 | return self.module(*args, **kwargs) 44 | 45 | def train(self, mode=True): 46 | super(DistModule, self).train(mode) 47 | self.module.train(mode) 48 | return self 49 | 50 | 51 | def broadcast_params(model): 52 | """ broadcast model parameters """ 53 | for p in model.state_dict().values(): 54 | dist.broadcast(p, 0) 55 | 56 | 57 | def broadcast_buffers(model, method=0): 58 | """ broadcast model buffers """ 59 | if method == 0: 60 | return 61 | 62 | world_size = get_world_size() 63 | 64 | for b in model._all_buffers(): 65 | if method == 1: # broadcast from main proccess 66 | dist.broadcast(b, 0) 67 | elif method == 2: # average 68 | dist.all_reduce(b) 69 | b /= world_size 70 | else: 71 | raise Exception('Invalid buffer broadcast code {}'.format(method)) 72 | 73 | 74 | inited = False 75 | 76 | 77 | def _dist_init(): 78 | ''' 79 | if guess right: 80 | ntasks: world_size (process num) 81 | proc_id: rank 82 | ''' 83 | # rank = int(os.environ['RANK']) 84 | rank = 0 85 | num_gpus = torch.cuda.device_count() 86 | torch.cuda.set_device(rank % num_gpus) 87 | dist.init_process_group(backend='nccl') 88 | world_size = dist.get_world_size() 89 | return rank, world_size 90 | 91 | 92 | def _get_local_ip(): 93 | try: 94 | s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 95 | s.connect(('8.8.8.8', 80)) 96 | ip = s.getsockname()[0] 97 | finally: 98 | s.close() 99 | return ip 100 | 101 | 102 | def dist_init(): 103 | global rank, world_size, inited 104 | # try: #看来作者和我调整的一样,都屏蔽了这一段落 105 | # rank, world_size = _dist_init() 106 | # except RuntimeError as e: 107 | # if 'public' in e.args[0]: 108 | # logger.info(e) 109 | # logger.info('Warning: use single process') 110 | # rank, world_size = 0, 1 111 | # else: 112 | # raise RuntimeError(*e.args) 113 | rank, world_size = 0, 1 114 | inited = True 115 | return rank, world_size 116 | 117 | 118 | def get_rank(): 119 | if not inited: 120 | raise(Exception('dist not inited')) 121 | return rank 122 | 123 | 124 | def get_world_size(): 125 | if not inited: 126 | raise(Exception('dist not inited')) 127 | return world_size 128 | 129 | 130 | def reduce_gradients(model, _type='sum'): 131 | types = ['sum', 'avg'] 132 | assert _type in types, 'gradients method must be in "{}"'.format(types) 133 | log_once("gradients method is {}".format(_type)) 134 | if get_world_size() > 1: 135 | for param in model.parameters(): 136 | if param.requires_grad: 137 | dist.all_reduce(param.grad.data) 138 | if _type == 'avg': 139 | param.grad.data /= get_world_size() 140 | else: 141 | return None 142 | -------------------------------------------------------------------------------- /pysot/utils/location_grid.py: -------------------------------------------------------------------------------- 1 | import torch 2 | def compute_locations(features,stride): 3 | h, w = features.size()[-2:] 4 | locations_per_level = compute_locations_per_level( 5 | h, w, stride, 6 | features.device 7 | ) 8 | return locations_per_level # 计算每像素-对应原图中位置 9 | 10 | 11 | def compute_locations_per_level(h, w, stride, device): 12 | shifts_x = torch.arange( 13 | 0, w * stride, step=stride, 14 | dtype=torch.float32, device=device 15 | ) 16 | shifts_y = torch.arange( 17 | 0, h * stride, step=stride, 18 | dtype=torch.float32, device=device 19 | ) 20 | shift_y, shift_x = torch.meshgrid((shifts_y, shifts_x)) 21 | shift_x = shift_x.reshape(-1) 22 | shift_y = shift_y.reshape(-1) 23 | # locations = torch.stack((shift_x, shift_y), dim=1) + stride + 3*stride # (size_z-1)/2*size_z 28 24 | # locations = torch.stack((shift_x, shift_y), dim=1) + stride 25 | locations = torch.stack((shift_x, shift_y), dim=1) + 32 #alex:48 // 32 26 | return locations 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /pysot/utils/log_helper.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/utils/log_helper.py -------------------------------------------------------------------------------- /pysot/utils/misc.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/pysot/utils/misc.py -------------------------------------------------------------------------------- /pysot/utils/model_load.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | from __future__ import division 3 | from __future__ import print_function 4 | from __future__ import unicode_literals 5 | 6 | import logging 7 | 8 | import torch 9 | 10 | logger = logging.getLogger('global') 11 | 12 | 13 | def check_keys(model, pretrained_state_dict): 14 | ckpt_keys = set(pretrained_state_dict.keys()) 15 | model_keys = set(model.state_dict().keys()) 16 | used_pretrained_keys = model_keys & ckpt_keys 17 | unused_pretrained_keys = ckpt_keys - model_keys 18 | missing_keys = model_keys - ckpt_keys 19 | 20 | missing_keys = [x for x in missing_keys if not x.endswith('num_batches_tracked')] 21 | 22 | if len(missing_keys) > 0: 23 | logger.info('[Warning] missing keys: {}'.format(missing_keys)) 24 | logger.info('missing keys:{}'.format(len(missing_keys))) 25 | if len(unused_pretrained_keys) > 0: 26 | logger.info('[Warning] unused_pretrained_keys: {}'.format(unused_pretrained_keys)) 27 | logger.info('unused checkpoint keys:{}'.format(len(unused_pretrained_keys))) 28 | logger.info('used keys:{}'.format(len(used_pretrained_keys))) 29 | assert len(used_pretrained_keys) > 0, 'load NONE from pretrained checkpoint' 30 | 31 | return True 32 | 33 | 34 | def remove_prefix(state_dict, prefix): 35 | ''' Old style model is stored with all names of parameters 36 | share common prefix 'module.' ''' 37 | logger.info('remove prefix \'{}\''.format(prefix)) 38 | f = lambda x: x.split(prefix, 1)[-1] if x.startswith(prefix) else x 39 | return {f(key): value for key, value in state_dict.items()} 40 | 41 | 42 | def load_pretrain(model, pretrained_path): 43 | logger.info('load pretrained model from {}'.format(pretrained_path)) 44 | device = torch.cuda.current_device() 45 | pretrained_dict = torch.load(pretrained_path, map_location=lambda storage, loc: storage.cuda(device)) 46 | 47 | if "state_dict" in pretrained_dict.keys(): 48 | pretrained_dict = remove_prefix(pretrained_dict['state_dict'], 'module.') 49 | else: 50 | pretrained_dict = remove_prefix(pretrained_dict, 'module.') 51 | 52 | try: 53 | check_keys(model, pretrained_dict) 54 | except: 55 | logger.info('[Warning]: using pretrain as features. Adding "features." as prefix') 56 | new_dict = {} 57 | for k, v in pretrained_dict.items(): 58 | k = 'features.' + k 59 | new_dict[k] = v 60 | pretrained_dict = new_dict 61 | check_keys(model, pretrained_dict) 62 | model.load_state_dict(pretrained_dict, strict=False) 63 | 64 | return model 65 | 66 | 67 | def restore_from(model, optimizer, ckpt_path): 68 | device = torch.cuda.current_device() 69 | ckpt = torch.load(ckpt_path, map_location=lambda storage, loc: storage.cuda(device)) 70 | epoch = ckpt['epoch'] 71 | 72 | ckpt_model_dict = remove_prefix(ckpt['state_dict'], 'module.') 73 | check_keys(model, ckpt_model_dict) 74 | model.load_state_dict(ckpt_model_dict, strict=False) 75 | 76 | check_keys(optimizer, ckpt['optimizer']) 77 | optimizer.load_state_dict(ckpt['optimizer']) 78 | return model, optimizer, epoch 79 | -------------------------------------------------------------------------------- /pysot/utils/xcorr.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) SenseTime. All Rights Reserved. 2 | 3 | from __future__ import absolute_import 4 | from __future__ import division 5 | from __future__ import print_function 6 | from __future__ import unicode_literals 7 | 8 | import torch 9 | import torch.nn.functional as F 10 | 11 | 12 | def xcorr_slow(x, kernel): 13 | """for loop to calculate cross correlation, slow version 14 | """ 15 | batch = x.size()[0] 16 | out = [] 17 | for i in range(batch): 18 | px = x[i] 19 | pk = kernel[i] 20 | px = px.view(1, px.size()[0], px.size()[1], px.size()[2]) 21 | pk = pk.view(-1, px.size()[1], pk.size()[1], pk.size()[2]) 22 | po = F.conv2d(px, pk) 23 | out.append(po) 24 | out = torch.cat(out, 0) 25 | return out 26 | 27 | 28 | def xcorr_fast(x, kernel): 29 | """group conv2d to calculate cross correlation, fast version 30 | """ 31 | batch = kernel.size()[0] 32 | pk = kernel.view(-1, x.size()[1], kernel.size()[2], kernel.size()[3]) 33 | px = x.view(1, -1, x.size()[2], x.size()[3]) 34 | po = F.conv2d(px, pk, groups=batch) 35 | po = po.view(batch, -1, po.size()[2], po.size()[3]) 36 | return po 37 | 38 | 39 | def xcorr_depthwise(x, kernel): 40 | """depthwise cross correlation 41 | """ 42 | # x [32, 256, 31, 31], kernel:[32, 256, 7, 7] 43 | batch = kernel.size(0) 44 | channel = kernel.size(1) 45 | x = x.view(1, batch*channel, x.size(2), x.size(3)) # [32, 256, 31, 31] --> [1, 32*256, 31, 31] 46 | kernel = kernel.view(batch*channel, 1, kernel.size(2), kernel.size(3)) # [32, 256, 7, 7] --> [32*256, 1, 7, 7] 47 | 48 | # 互相换DW逐层卷积, out:[1, 32*256, 25, 25]; x:[1, 32*256, 31, 31], kernel:[32*256, 1, 7, 7] 49 | out = F.conv2d(x, kernel, groups=batch*channel) # ,互相关-创新点,多尺度互相关; 50 | 51 | # 展开互相关结果out 52 | out = out.view(batch, channel, out.size(2), out.size(3)) # [1, 32*256, 25, 25] --> [32, 256, 25, 25] 53 | return out 54 | -------------------------------------------------------------------------------- /toolkit/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/toolkit/__init__.py -------------------------------------------------------------------------------- /toolkit/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/toolkit/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /toolkit/__pycache__/__init__.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/toolkit/__pycache__/__init__.cpython-39.pyc -------------------------------------------------------------------------------- /toolkit/datasets/__init__.py: -------------------------------------------------------------------------------- 1 | from .otb import OTBDataset 2 | from .uav import UAVDataset 3 | from .lasot import LaSOTDataset 4 | from .got10k import GOT10kDataset 5 | 6 | class DatasetFactory(object): 7 | @staticmethod 8 | def create_dataset(**kwargs): 9 | """ 10 | Args: 11 | name: dataset name 'OTB2015', 'LaSOT', 'UAV123', 'NFS240', 'NFS30', 12 | 'VOT2018', 'VOT2016', 'VOT2018-LT' 13 | dataset_root: dataset root 14 | load_img: wether to load image 15 | Return: 16 | dataset 17 | """ 18 | assert 'name' in kwargs, "should provide dataset name" 19 | name = kwargs['name'] 20 | if 'OTB' in name: 21 | dataset = OTBDataset(**kwargs) # 22 | elif 'LaSOT' == name: 23 | dataset = LaSOTDataset(**kwargs) 24 | elif 'UAV' in name: 25 | dataset = UAVDataset(**kwargs) 26 | elif 'GOT-10k' == name: 27 | dataset = GOT10kDataset(**kwargs) 28 | else: 29 | raise Exception("unknow dataset {}".format(kwargs['name'])) 30 | return dataset 31 | 32 | -------------------------------------------------------------------------------- /toolkit/datasets/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/toolkit/datasets/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /toolkit/datasets/__pycache__/__init__.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/toolkit/datasets/__pycache__/__init__.cpython-39.pyc -------------------------------------------------------------------------------- /toolkit/datasets/__pycache__/dataset.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/toolkit/datasets/__pycache__/dataset.cpython-37.pyc -------------------------------------------------------------------------------- /toolkit/datasets/__pycache__/dataset.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/toolkit/datasets/__pycache__/dataset.cpython-39.pyc -------------------------------------------------------------------------------- /toolkit/datasets/__pycache__/got10k.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/toolkit/datasets/__pycache__/got10k.cpython-37.pyc -------------------------------------------------------------------------------- /toolkit/datasets/__pycache__/got10k.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/toolkit/datasets/__pycache__/got10k.cpython-39.pyc -------------------------------------------------------------------------------- /toolkit/datasets/__pycache__/lasot.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/toolkit/datasets/__pycache__/lasot.cpython-37.pyc -------------------------------------------------------------------------------- /toolkit/datasets/__pycache__/lasot.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/toolkit/datasets/__pycache__/lasot.cpython-39.pyc -------------------------------------------------------------------------------- /toolkit/datasets/__pycache__/otb.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/toolkit/datasets/__pycache__/otb.cpython-37.pyc -------------------------------------------------------------------------------- /toolkit/datasets/__pycache__/otb.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/toolkit/datasets/__pycache__/otb.cpython-39.pyc -------------------------------------------------------------------------------- /toolkit/datasets/__pycache__/uav.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/toolkit/datasets/__pycache__/uav.cpython-37.pyc -------------------------------------------------------------------------------- /toolkit/datasets/__pycache__/uav.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/toolkit/datasets/__pycache__/uav.cpython-39.pyc -------------------------------------------------------------------------------- /toolkit/datasets/__pycache__/video.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/toolkit/datasets/__pycache__/video.cpython-37.pyc -------------------------------------------------------------------------------- /toolkit/datasets/__pycache__/video.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/toolkit/datasets/__pycache__/video.cpython-39.pyc -------------------------------------------------------------------------------- /toolkit/datasets/dataset.py: -------------------------------------------------------------------------------- 1 | from tqdm import tqdm 2 | 3 | 4 | class Dataset(object): 5 | def __init__(self, name, dataset_root): 6 | self.name = name 7 | self.dataset_root = dataset_root 8 | self.videos = None 9 | 10 | def __getitem__(self, idx): 11 | if isinstance(idx, str): 12 | return self.videos[idx] 13 | elif isinstance(idx, int): 14 | return self.videos[sorted(list(self.videos.keys()))[idx]] 15 | 16 | def __len__(self): 17 | return len(self.videos) 18 | 19 | def __iter__(self): 20 | keys = sorted(list(self.videos.keys())) 21 | for key in keys: 22 | yield self.videos[key] 23 | 24 | def set_tracker(self, path, tracker_names): 25 | """ 26 | Args: 27 | path: path to tracker results, 28 | tracker_names: list of tracker name 29 | """ 30 | self.tracker_path = path 31 | self.tracker_names = tracker_names 32 | -------------------------------------------------------------------------------- /toolkit/datasets/got10k.py: -------------------------------------------------------------------------------- 1 | import json 2 | import os 3 | 4 | from tqdm import tqdm 5 | 6 | from .dataset import Dataset 7 | from .video import Video 8 | 9 | 10 | class GOT10kVideo(Video): 11 | """ 12 | Args: 13 | name: video name 14 | root: dataset root 15 | video_dir: video directory 16 | init_rect: init rectangle 17 | img_names: image names 18 | gt_rect: groundtruth rectangle 19 | attr: attribute of video 20 | """ 21 | 22 | def __init__(self, name, root, video_dir, init_rect, img_names, 23 | gt_rect, attr, load_img=False): 24 | super(GOT10kVideo, self).__init__(name, root, video_dir, init_rect, img_names, gt_rect, attr, load_img) 25 | 26 | 27 | class GOT10kDataset(Dataset): 28 | """ 29 | Args: 30 | name: dataset name, should be "NFS30" or "NFS240" 31 | dataset_root, dataset root dir 32 | """ 33 | 34 | def __init__(self, name, dataset_root, load_img=False): 35 | super(GOT10kDataset, self).__init__(name, dataset_root) 36 | with open(os.path.join(dataset_root, name + '.json'), 'r') as f: 37 | meta_data = json.load(f) 38 | 39 | pbar = tqdm(meta_data.keys(), desc='loading ' + name, ncols=100) 40 | self.videos = {} 41 | for video in pbar: 42 | pbar.set_postfix_str(video) 43 | self.videos[video] = GOT10kVideo(video, 44 | dataset_root, 45 | meta_data[video]['video_dir'], 46 | meta_data[video]['init_rect'], 47 | meta_data[video]['img_names'], 48 | meta_data[video]['gt_rect'], 49 | None) 50 | self.attr = {} 51 | self.attr['ALL'] = list(self.videos.keys()) 52 | -------------------------------------------------------------------------------- /toolkit/datasets/lasot.py: -------------------------------------------------------------------------------- 1 | import os 2 | import json 3 | import numpy as np 4 | 5 | from tqdm import tqdm 6 | from glob import glob 7 | 8 | from .dataset import Dataset 9 | from .video import Video 10 | 11 | class LaSOTVideo(Video): 12 | """ 13 | Args: 14 | name: video name 15 | root: dataset root 16 | video_dir: video directory 17 | init_rect: init rectangle 18 | img_names: image names 19 | gt_rect: groundtruth rectangle 20 | attr: attribute of video 21 | """ 22 | def __init__(self, name, root, video_dir, init_rect, img_names, 23 | gt_rect, attr, absent, load_img=False): 24 | super(LaSOTVideo, self).__init__(name, root, video_dir, 25 | init_rect, img_names, gt_rect, attr, load_img) 26 | self.absent = np.array(absent, np.int8) 27 | 28 | def load_tracker(self, path, tracker_names=None, store=True): 29 | """ 30 | Args: 31 | path(str): path to result 32 | tracker_name(list): name of tracker 33 | """ 34 | if not tracker_names: 35 | tracker_names = [x.split('/')[-1] for x in glob(path) 36 | if os.path.isdir(x)] 37 | if isinstance(tracker_names, str): 38 | tracker_names = [tracker_names] 39 | for name in tracker_names: 40 | traj_file = os.path.join(path, name, self.name+'.txt') 41 | if os.path.exists(traj_file): 42 | with open(traj_file, 'r') as f : 43 | pred_traj = [list(map(float, x.strip().split(','))) 44 | for x in f.readlines()] 45 | else: 46 | print("File not exists: ", traj_file) 47 | if self.name == 'monkey-17': 48 | pred_traj = pred_traj[:len(self.gt_traj)] 49 | if store: 50 | self.pred_trajs[name] = pred_traj 51 | else: 52 | return pred_traj 53 | self.tracker_names = list(self.pred_trajs.keys()) 54 | 55 | 56 | 57 | class LaSOTDataset(Dataset): 58 | """ 59 | Args: 60 | name: dataset name, should be 'phtrack_model_general', 'CVPR13', 'OTB50' 61 | dataset_root: dataset root 62 | load_img: wether to load all imgs 63 | """ 64 | def __init__(self, name, dataset_root, load_img=False): 65 | super(LaSOTDataset, self).__init__(name, dataset_root) 66 | with open(os.path.join(dataset_root, name+'.json'), 'r') as f: 67 | meta_data = json.load(f) 68 | 69 | # load videos 70 | pbar = tqdm(meta_data.keys(), desc='loading '+name, ncols=100) 71 | self.videos = {} 72 | for video in pbar: 73 | pbar.set_postfix_str(video) 74 | self.videos[video] = LaSOTVideo(video, 75 | dataset_root, 76 | meta_data[video]['video_dir'], 77 | meta_data[video]['init_rect'], 78 | meta_data[video]['img_names'], 79 | meta_data[video]['gt_rect'], 80 | meta_data[video]['attr'], 81 | meta_data[video]['absent']) 82 | 83 | # set attr 84 | attr = [] 85 | for x in self.videos.values(): 86 | attr += x.attr 87 | attr = set(attr) 88 | self.attr = {} 89 | self.attr['ALL'] = list(self.videos.keys()) 90 | for x in attr: 91 | self.attr[x] = [] 92 | for k, v in self.videos.items(): 93 | for attr_ in v.attr: 94 | self.attr[attr_].append(k) 95 | 96 | 97 | -------------------------------------------------------------------------------- /toolkit/datasets/otb.py: -------------------------------------------------------------------------------- 1 | import json 2 | import os 3 | import numpy as np 4 | 5 | from PIL import Image 6 | from tqdm import tqdm 7 | from glob import glob 8 | 9 | from .dataset import Dataset 10 | from .video import Video 11 | 12 | 13 | class OTBVideo(Video): 14 | """ 15 | Args: 16 | name: video name 17 | root: dataset root 18 | video_dir: video directory 19 | init_rect: init rectangle 20 | img_names: image names 21 | gt_rect: groundtruth rectangle 22 | attr: attribute of video 23 | """ 24 | 25 | def __init__(self, name, root, video_dir, init_rect, img_names, gt_rect, attr, load_img=False): 26 | super(OTBVideo, self).__init__(name, root, video_dir, init_rect, img_names, gt_rect, attr, load_img) 27 | 28 | def load_tracker(self, path, tracker_names=None, store=True): 29 | """ 30 | Args: 31 | path(str): path to result 32 | tracker_name(list): name of tracker 33 | """ 34 | if not tracker_names: 35 | tracker_names = [x.split('/')[-1] for x in glob(path) 36 | if os.path.isdir(x)] 37 | if isinstance(tracker_names, str): 38 | tracker_names = [tracker_names] 39 | for name in tracker_names: 40 | traj_file = os.path.join(path, name, self.name + '.txt') 41 | if not os.path.exists(traj_file): 42 | if self.name == 'FleetFace': 43 | txt_name = 'fleetface.txt' 44 | elif self.name == 'Jogging-1': 45 | txt_name = 'jogging_1.txt' 46 | elif self.name == 'Jogging-2': 47 | txt_name = 'jogging_2.txt' 48 | elif self.name == 'Skating2-1': 49 | txt_name = 'skating2_1.txt' 50 | elif self.name == 'Skating2-2': 51 | txt_name = 'skating2_2.txt' 52 | elif self.name == 'FaceOcc1': 53 | txt_name = 'faceocc1.txt' 54 | elif self.name == 'FaceOcc2': 55 | txt_name = 'faceocc2.txt' 56 | elif self.name == 'Human4-2': 57 | txt_name = 'human4_2.txt' 58 | else: 59 | txt_name = self.name[0].lower() + self.name[1:] + '.txt' 60 | traj_file = os.path.join(path, name, txt_name) 61 | if os.path.exists(traj_file): 62 | with open(traj_file, 'r') as f: 63 | pred_traj = [list(map(float, x.strip().split(','))) 64 | for x in f.readlines()] 65 | if len(pred_traj) != len(self.gt_traj): 66 | print(name, len(pred_traj), len(self.gt_traj), self.name) 67 | if store: 68 | self.pred_trajs[name] = pred_traj 69 | else: 70 | return pred_traj 71 | else: 72 | print(traj_file) 73 | self.tracker_names = list(self.pred_trajs.keys()) 74 | 75 | 76 | class OTBDataset(Dataset): 77 | """ 78 | Args: 79 | name: dataset name, should be 'SiamCAR_model_general', 'CVPR13', 'OTB50' 80 | dataset_root: dataset root 81 | load_img: wether to load all imgs 82 | """ 83 | 84 | def __init__(self, name, dataset_root, load_img=False): 85 | super(OTBDataset, self).__init__(name, dataset_root) 86 | 87 | with open(os.path.join(dataset_root, name + '.json'), 'r') as f: 88 | meta_data = json.load(f) 89 | 90 | pbar = tqdm(meta_data.keys(), desc='loading ' + name, ncols=100) 91 | self.videos = {} 92 | for video in pbar: 93 | pbar.set_postfix_str(video) 94 | self.videos[video] = OTBVideo(video, 95 | dataset_root, 96 | meta_data[video]['video_dir'], 97 | meta_data[video]['init_rect'], 98 | meta_data[video]['img_names'], 99 | meta_data[video]['gt_rect'], 100 | meta_data[video]['attr'], 101 | load_img) 102 | 103 | attr = [] 104 | for x in self.videos.values(): 105 | attr += x.attr 106 | attr = set(attr) 107 | self.attr = {} 108 | self.attr['ALL'] = list(self.videos.keys()) 109 | for x in attr: 110 | self.attr[x] = [] 111 | for k, v in self.videos.items(): 112 | for attr_ in v.attr: 113 | self.attr[attr_].append(k) 114 | -------------------------------------------------------------------------------- /toolkit/datasets/uav.py: -------------------------------------------------------------------------------- 1 | import os 2 | import json 3 | 4 | from tqdm import tqdm 5 | from glob import glob 6 | 7 | from .dataset import Dataset 8 | from .video import Video 9 | 10 | class UAVVideo(Video): 11 | """ 12 | Args: 13 | name: video name 14 | root: dataset root 15 | video_dir: video directory 16 | init_rect: init rectangle 17 | img_names: image names 18 | gt_rect: groundtruth rectangle 19 | attr: attribute of video 20 | """ 21 | def __init__(self, name, root, video_dir, init_rect, img_names, 22 | gt_rect, attr, load_img=False): 23 | super(UAVVideo, self).__init__(name, root, video_dir, 24 | init_rect, img_names, gt_rect, attr, load_img) 25 | 26 | 27 | class UAVDataset(Dataset): 28 | """ 29 | Args: 30 | name: dataset name, should be 'UAV123', 'UAV20L' 31 | dataset_root: dataset root 32 | load_img: wether to load all imgs 33 | """ 34 | def __init__(self, name, dataset_root, load_img=False): 35 | super(UAVDataset, self).__init__(name, dataset_root) 36 | with open(os.path.join(dataset_root, name+'.json'), 'r') as f: 37 | meta_data = json.load(f) 38 | 39 | # load videos 40 | pbar = tqdm(meta_data.keys(), desc='loading '+name, ncols=100) 41 | self.videos = {} 42 | for video in pbar: 43 | pbar.set_postfix_str(video) 44 | self.videos[video] = UAVVideo(video, 45 | dataset_root, 46 | meta_data[video]['video_dir'], 47 | meta_data[video]['init_rect'], 48 | meta_data[video]['img_names'], 49 | meta_data[video]['gt_rect'], 50 | meta_data[video]['attr']) 51 | 52 | # set attr 53 | attr = [] 54 | for x in self.videos.values(): 55 | attr += x.attr 56 | attr = set(attr) 57 | self.attr = {} 58 | self.attr['ALL'] = list(self.videos.keys()) 59 | for x in attr: 60 | self.attr[x] = [] 61 | for k, v in self.videos.items(): 62 | for attr_ in v.attr: 63 | self.attr[attr_].append(k) 64 | 65 | -------------------------------------------------------------------------------- /toolkit/evaluation/__init__.py: -------------------------------------------------------------------------------- 1 | from .ope_benchmark import OPEBenchmark 2 | -------------------------------------------------------------------------------- /toolkit/evaluation/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/toolkit/evaluation/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /toolkit/evaluation/__pycache__/__init__.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/toolkit/evaluation/__pycache__/__init__.cpython-39.pyc -------------------------------------------------------------------------------- /toolkit/evaluation/__pycache__/ope_benchmark.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/toolkit/evaluation/__pycache__/ope_benchmark.cpython-37.pyc -------------------------------------------------------------------------------- /toolkit/evaluation/__pycache__/ope_benchmark.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/toolkit/evaluation/__pycache__/ope_benchmark.cpython-39.pyc -------------------------------------------------------------------------------- /toolkit/utils/__pycache__/statistics.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/toolkit/utils/__pycache__/statistics.cpython-37.pyc -------------------------------------------------------------------------------- /toolkit/utils/__pycache__/statistics.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YZCU/PHTrack/8e8abdedd399e9729f92ca63ec15c908bfa177a8/toolkit/utils/__pycache__/statistics.cpython-39.pyc -------------------------------------------------------------------------------- /toolkit/utils/statistics.py: -------------------------------------------------------------------------------- 1 | """ 2 | @author fangyi.zhang@vipl.ict.ac.cn 3 | """ 4 | import numpy as np 5 | 6 | def overlap_ratio(rect1, rect2): 7 | '''Compute overlap ratio between two rects 8 | Args 9 | rect:2d array of N x [x,y,w,h] 10 | Return: 11 | iou 12 | ''' 13 | # if rect1.ndim==1: 14 | # rect1 = rect1[np.newaxis, :] 15 | # if rect2.ndim==1: 16 | # rect2 = rect2[np.newaxis, :] 17 | left = np.maximum(rect1[:,0], rect2[:,0]) 18 | right = np.minimum(rect1[:,0]+rect1[:,2], rect2[:,0]+rect2[:,2]) 19 | top = np.maximum(rect1[:,1], rect2[:,1]) 20 | bottom = np.minimum(rect1[:,1]+rect1[:,3], rect2[:,1]+rect2[:,3]) 21 | 22 | intersect = np.maximum(0,right - left) * np.maximum(0,bottom - top) 23 | union = rect1[:,2]*rect1[:,3] + rect2[:,2]*rect2[:,3] - intersect 24 | iou = intersect / union 25 | iou = np.maximum(np.minimum(1, iou), 0) 26 | return iou 27 | 28 | def success_overlap(gt_bb, result_bb, n_frame): 29 | thresholds_overlap = np.arange(0, 1.05, 0.05) 30 | success = np.zeros(len(thresholds_overlap)) 31 | iou = np.ones(len(gt_bb)) * (-1) 32 | # mask = np.sum(gt_bb > 0, axis=1) == 4 #TODO check all dataset 33 | mask = np.sum(gt_bb[:, 2:] > 0, axis=1) == 2 34 | iou[mask] = overlap_ratio(gt_bb[mask], result_bb[mask]) 35 | for i in range(len(thresholds_overlap)): 36 | success[i] = np.sum(iou > thresholds_overlap[i]) / float(n_frame) 37 | return success 38 | 39 | def success_error(gt_center, result_center, thresholds, n_frame): 40 | # n_frame = len(gt_center) 41 | success = np.zeros(len(thresholds)) 42 | dist = np.ones(len(gt_center)) * (-1) 43 | mask = np.sum(gt_center > 0, axis=1) == 2 44 | dist[mask] = np.sqrt(np.sum( 45 | np.power(gt_center[mask] - result_center[mask], 2), axis=1)) 46 | for i in range(len(thresholds)): 47 | success[i] = np.sum(dist <= thresholds[i]) / float(n_frame) 48 | return success 49 | 50 | 51 | -------------------------------------------------------------------------------- /toolkit/visualization/__init__.py: -------------------------------------------------------------------------------- 1 | from .draw_success_precision import draw_success_precision 2 | -------------------------------------------------------------------------------- /toolkit/visualization/draw_success_precision.py: -------------------------------------------------------------------------------- 1 | import matplotlib.pyplot as plt 2 | import numpy as np 3 | 4 | from .draw_utils import COLOR, LINE_STYLE 5 | 6 | 7 | def draw_success_precision(success_ret, name, videos, attr, precision_ret=None, 8 | norm_precision_ret=None, bold_name=None, axis=[0, 1]): 9 | fig, ax = plt.subplots() 10 | ax.grid(b=True) 11 | ax.set_aspect(1) 12 | plt.xlabel('Overlap threshold') 13 | plt.ylabel('Success rate') 14 | if attr == 'ALL': 15 | plt.title(r'\textbf{Success plots of OPE on %s}' % (name)) 16 | else: 17 | plt.title(r'\textbf{Success plots of OPE - %s}' % (attr)) 18 | plt.axis([0, 1] + axis) 19 | success = {} 20 | thresholds = np.arange(0, 1.05, 0.05) 21 | for tracker_name in success_ret.keys(): 22 | value = [v for k, v in success_ret[tracker_name].items() if k in videos] 23 | success[tracker_name] = np.mean(value) 24 | for idx, (tracker_name, auc) in \ 25 | enumerate(sorted(success.items(), key=lambda x: x[1], reverse=True)): 26 | if tracker_name == bold_name: 27 | label = r"\textbf{[%.3f] %s}" % (auc, tracker_name) 28 | else: 29 | label = "[%.3f] " % (auc) + tracker_name 30 | value = [v for k, v in success_ret[tracker_name].items() if k in videos] 31 | plt.plot(thresholds, np.mean(value, axis=0), 32 | color=COLOR[idx], linestyle=LINE_STYLE[idx], label=label, linewidth=2) 33 | ax.legend(loc='lower left', labelspacing=0.2) 34 | ax.autoscale(enable=True, axis='both', tight=True) 35 | xmin, xmax, ymin, ymax = plt.axis() 36 | ax.autoscale(enable=False) 37 | ymax += 0.03 38 | plt.axis([xmin, xmax, ymin, ymax]) 39 | plt.xticks(np.arange(xmin, xmax + 0.01, 0.1)) 40 | plt.yticks(np.arange(ymin, ymax, 0.1)) 41 | ax.set_aspect((xmax - xmin) / (ymax - ymin)) 42 | plt.show() 43 | 44 | if precision_ret: 45 | 46 | fig, ax = plt.subplots() 47 | ax.grid(b=True) 48 | ax.set_aspect(50) 49 | plt.xlabel('Location error threshold') 50 | plt.ylabel('Precision') 51 | if attr == 'ALL': 52 | plt.title(r'\textbf{Precision plots of OPE on %s}' % (name)) 53 | else: 54 | plt.title(r'\textbf{Precision plots of OPE - %s}' % (attr)) 55 | plt.axis([0, 50] + axis) 56 | precision = {} 57 | thresholds = np.arange(0, 51, 1) 58 | for tracker_name in precision_ret.keys(): 59 | value = [v for k, v in precision_ret[tracker_name].items() if k in videos] 60 | precision[tracker_name] = np.mean(value, axis=0)[20] 61 | for idx, (tracker_name, pre) in \ 62 | enumerate(sorted(precision.items(), key=lambda x: x[1], reverse=True)): 63 | if tracker_name == bold_name: 64 | label = r"\textbf{[%.3f] %s}" % (pre, tracker_name) 65 | else: 66 | label = "[%.3f] " % (pre) + tracker_name 67 | value = [v for k, v in precision_ret[tracker_name].items() if k in videos] 68 | plt.plot(thresholds, np.mean(value, axis=0), 69 | color=COLOR[idx], linestyle=LINE_STYLE[idx], label=label, linewidth=2) 70 | ax.legend(loc='lower right', labelspacing=0.2) 71 | ax.autoscale(enable=True, axis='both', tight=True) 72 | xmin, xmax, ymin, ymax = plt.axis() 73 | ax.autoscale(enable=False) 74 | ymax += 0.03 75 | plt.axis([xmin, xmax, ymin, ymax]) 76 | plt.xticks(np.arange(xmin, xmax + 0.01, 5)) 77 | plt.yticks(np.arange(ymin, ymax, 0.1)) 78 | ax.set_aspect((xmax - xmin) / (ymax - ymin)) 79 | plt.show() 80 | 81 | if norm_precision_ret: 82 | fig, ax = plt.subplots() 83 | ax.grid(b=True) 84 | plt.xlabel('Location error threshold') 85 | plt.ylabel('Precision') 86 | if attr == 'ALL': 87 | plt.title(r'\textbf{Normalized Precision plots of OPE on %s}' % (name)) 88 | else: 89 | plt.title(r'\textbf{Normalized Precision plots of OPE - %s}' % (attr)) 90 | norm_precision = {} 91 | thresholds = np.arange(0, 51, 1) / 100 92 | for tracker_name in precision_ret.keys(): 93 | value = [v for k, v in norm_precision_ret[tracker_name].items() if k in videos] 94 | norm_precision[tracker_name] = np.mean(value, axis=0)[20] 95 | for idx, (tracker_name, pre) in \ 96 | enumerate(sorted(norm_precision.items(), key=lambda x: x[1], reverse=True)): 97 | if tracker_name == bold_name: 98 | label = r"\textbf{[%.3f] %s}" % (pre, tracker_name) 99 | else: 100 | label = "[%.3f] " % (pre) + tracker_name 101 | value = [v for k, v in norm_precision_ret[tracker_name].items() if k in videos] 102 | plt.plot(thresholds, np.mean(value, axis=0), 103 | color=COLOR[idx], linestyle=LINE_STYLE[idx], label=label, linewidth=2) 104 | ax.legend(loc='lower right', labelspacing=0.2) 105 | ax.autoscale(enable=True, axis='both', tight=True) 106 | xmin, xmax, ymin, ymax = plt.axis() 107 | ax.autoscale(enable=False) 108 | ymax += 0.03 109 | plt.axis([xmin, xmax, ymin, ymax]) 110 | plt.xticks(np.arange(xmin, xmax + 0.01, 0.05)) 111 | plt.yticks(np.arange(ymin, ymax, 0.1)) 112 | ax.set_aspect((xmax - xmin) / (ymax - ymin)) 113 | plt.show() 114 | -------------------------------------------------------------------------------- /toolkit/visualization/draw_utils.py: -------------------------------------------------------------------------------- 1 | 2 | COLOR = ((1, 0, 0), 3 | (0, 1, 0), 4 | (1, 0, 1), 5 | (1, 1, 0), 6 | (0 , 162/255, 232/255), 7 | (0.5, 0.5, 0.5), 8 | (0, 0, 1), 9 | (0, 1, 1), 10 | (136/255, 0 , 21/255), 11 | (255/255, 127/255, 39/255), 12 | (0, 0, 0)) 13 | 14 | LINE_STYLE = ['-', '--', ':', '-', '--', ':', '-', '--', ':', '-'] 15 | 16 | MARKER_STYLE = ['o', 'v', '<', '*', 'D', 'x', '.', 'x', '<', '.'] 17 | -------------------------------------------------------------------------------- /tools/eval.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | from __future__ import division 3 | from __future__ import print_function 4 | from __future__ import unicode_literals 5 | import os 6 | import argparse 7 | from glob import glob 8 | from tqdm import tqdm 9 | from multiprocessing import Pool 10 | from toolkit.datasets import OTBDataset, UAVDataset, LaSOTDataset 11 | from toolkit.evaluation import OPEBenchmark 12 | import sys 13 | 14 | sys.path.append('../') 15 | 16 | parser = argparse.ArgumentParser(description='tracking evaluation') 17 | parser.add_argument('--dataset', '-d', type=str, default='OTB100', help='dataset name') 18 | parser.add_argument('--show_video_level', '-s', dest='show_video_level', action='store_true') 19 | parser.add_argument('--num', '-n', default=1, type=int, help='number of thread to eval') 20 | 21 | parser.add_argument('--tracker_path', '-p', type=str, default='./results', help='tracker result path') 22 | 23 | parser.add_argument('--tracker_prefix', '-t', default='checkpoint', type=str, help='tracker name') 24 | 25 | parser.set_defaults(show_video_level=True) 26 | args = parser.parse_args() 27 | 28 | 29 | def main(): 30 | tracker_dir = os.path.join(args.tracker_path, args.dataset) 31 | trackers = glob(os.path.join(args.tracker_path, args.dataset, args.tracker_prefix + '*')) 32 | 33 | trackers = [x.split('\\')[-1] for x in trackers] 34 | assert len(trackers) > 0 35 | args.num = min(args.num, len(trackers)) 36 | 37 | root = r'G:\0hsi_train_test_data\hsi_test\OTB100' 38 | 39 | dataset = OTBDataset(args.dataset, root) 40 | dataset.set_tracker(tracker_dir, trackers) 41 | benchmark = OPEBenchmark(dataset) 42 | success_ret = {} 43 | with Pool(processes=args.num) as pool: 44 | for ret in tqdm(pool.imap_unordered(benchmark.eval_success, trackers), desc='eval success', total=len(trackers), 45 | ncols=100): success_ret.update(ret) 46 | precision_ret = {} 47 | with Pool(processes=args.num) as pool: 48 | for ret in tqdm(pool.imap_unordered(benchmark.eval_precision, trackers), desc='eval precision', 49 | total=len(trackers), ncols=100): 50 | precision_ret.update(ret) 51 | benchmark.show_result(success_ret, precision_ret, show_video_level=args.show_video_level) 52 | 53 | 54 | if __name__ == '__main__': 55 | main() 56 | -------------------------------------------------------------------------------- /tools/test.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | from __future__ import division 3 | from __future__ import print_function 4 | from __future__ import unicode_literals 5 | import argparse 6 | import os 7 | import cv2 8 | import torch 9 | import numpy as np 10 | from pysot.core.config import cfg 11 | from pysot.tracker.phtrack_tracker import phtrackTracker 12 | from pysot.utils.bbox import get_axis_aligned_bbox 13 | from pysot.utils.model_load import load_pretrain 14 | from pysot.models.model_builder import ModelBuilder 15 | from toolkit.datasets import DatasetFactory 16 | import math 17 | import logging 18 | from pysot.utils.log_helper import init_log 19 | import matplotlib.pyplot as plt 20 | import matplotlib 21 | import sys 22 | 23 | sys.path.append('../') 24 | logger = logging.getLogger('global') 25 | init_log('global', logging.INFO) 26 | imageFilter = '*.png*' 27 | 28 | parser = argparse.ArgumentParser(description='phtrack tracking') 29 | parser.add_argument('--dataset', type=str, default='OTB100', help='datasets') 30 | 31 | parser.add_argument('--video', default='', type=str, help='test one special video') 32 | 33 | parser.add_argument('--snapshot', type=str, default='snapshot/checkpoint_e16.pth', help='snapshot of models to eval') 34 | 35 | parser.add_argument('--config', type=str, default='../experiments/phtrack/config.yaml', help='config file') 36 | 37 | parser.add_argument('--vis', action='store_true', default=False, help='whether visualzie result') 38 | 39 | args = parser.parse_args() 40 | torch.set_num_threads(1) 41 | os.environ['CUDA_VISIBLE_DEVICES'] = '1' 42 | 43 | 44 | def main(): 45 | cfg.merge_from_file(args.config) 46 | 47 | params = getattr(cfg.HP_SEARCH, args.dataset) 48 | hp = {'lr': params[0], 'penalty_k': params[1], 'window_lr': params[2], 'context_amount': params[3]} 49 | 50 | dataset_root = r'G:\0hsi_train_test_data\hsi_test\OTB100' 51 | 52 | model = ModelBuilder() 53 | 54 | model = load_pretrain(model, args.snapshot).cuda().eval() 55 | 56 | tracker = phtrackTracker(model, cfg.TRACK) 57 | 58 | dataset = DatasetFactory.create_dataset(name=args.dataset, dataset_root=dataset_root, load_img=False) 59 | 60 | model_name = args.snapshot.split('.')[-2].split('/')[-1] + '_lr' + str(hp['lr']) + '_pk' + str( 61 | hp['penalty_k']) + '_wlr' + str(hp['window_lr']) + '_ca' + str(hp['context_amount']) 62 | 63 | for v_idx, video in enumerate(dataset): 64 | 65 | if args.video != '': 66 | if video.name != args.video: 67 | continue 68 | 69 | pred_bboxes = [] 70 | track_times = [] 71 | w_std = [] 72 | 73 | for idx, (img, gt_bbox) in enumerate(video): 74 | 75 | img = img / img.max() * 255 76 | img = img.astype('uint8') 77 | 78 | tic = cv2.getTickCount() 79 | 80 | if idx == 0: 81 | cx, cy, w, h = get_axis_aligned_bbox(np.array(gt_bbox)) 82 | gt_bbox_ = [cx - (w - 1) / 2, cy - (h - 1) / 2, w, h] 83 | pred_bbox = gt_bbox_ 84 | pred_bboxes.append(pred_bbox) 85 | tracker.init(img, gt_bbox_, hp) 86 | 87 | 88 | else: 89 | 90 | outputs = tracker.track(img, hp) 91 | 92 | pred_bbox = outputs['bbox'] 93 | pred_bboxes.append(pred_bbox) 94 | 95 | w_std.append(outputs['w_std'].item()) 96 | 97 | track_times.append((cv2.getTickCount() - tic) / cv2.getTickFrequency()) 98 | 99 | if idx == 0: 100 | cv2.destroyAllWindows() 101 | if args.vis and idx > 0: 102 | 103 | bs_order = outputs['bs_order'].cpu() 104 | img = img[:, :, bs_order] 105 | 106 | img_copy = img.copy() 107 | if not any(map(math.isnan, gt_bbox)): 108 | gt_bbox = list(map(int, gt_bbox)) 109 | pred_bbox = list(map(int, pred_bbox)) 110 | 111 | cv2.rectangle(img_copy, (gt_bbox[0], gt_bbox[1]), 112 | (gt_bbox[0] + gt_bbox[2], gt_bbox[1] + gt_bbox[3]), (0, 255, 0), 1) 113 | 114 | cv2.rectangle(img_copy, (pred_bbox[0], pred_bbox[1]), 115 | (pred_bbox[0] + pred_bbox[2], pred_bbox[1] + pred_bbox[3]), (0, 255, 255), 1) 116 | 117 | cv2.putText(img_copy, str(idx), (40, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 255), 1) 118 | cv2.imshow(video.name, img_copy) 119 | cv2.waitKey(1) 120 | 121 | model_path = os.path.join('results', args.dataset, model_name) 122 | if not os.path.isdir(model_path): 123 | os.makedirs(model_path) 124 | fps_path = os.path.join('results', args.dataset, 'fps') 125 | if not os.path.isdir(fps_path): 126 | os.makedirs(fps_path) 127 | result_path = os.path.join(model_path, '{}.txt'.format(video.name)) 128 | result_fps_path = os.path.join(fps_path, '{}.txt'.format(video.name)) 129 | 130 | with open(result_path, 'w') as f: 131 | for x in pred_bboxes: 132 | f.write(','.join([str(i) for i in x]) + '\n') 133 | 134 | with open(result_fps_path, 'w') as f: 135 | for x in track_times: 136 | f.write(str(x) + '\n') 137 | fps = len(track_times) / sum(track_times) 138 | print('({:3d}) Video: {:12s} Time: {:5.1f}s Speed: {:3.1f}fps'.format(v_idx + 1, video.name, sum(track_times), 139 | fps)) 140 | 141 | 142 | if __name__ == '__main__': 143 | main() 144 | -------------------------------------------------------------------------------- /tracking_results/README.txt: -------------------------------------------------------------------------------- 1 | ---------------- Note ---------------- 2 | ***Training Stage*** 3 | Training set: hotc20 training set 4 | GPU: 2x NVIDIA GeForce RTX 3090 5 | CPU: Intel(R)Xeon(R) Silver 4210 CPU @ 2.20GHz 6 | 7 | ***Test Stage*** 8 | Test Sets: hotc20test, hotc23val_nir, hotc23val_rednir, hotc23val_vis, hotc24val_nir, hotc24val_rednir, hotc24val_vis, mssot, msvt 9 | GPU: NVIDIA GeForce RTX 3090 for hotc20test, NVIDIA GeForce RTX 4060 for others 10 | CPU: Intel(R)Xeon(R) Silver 4210 CPU @ 2.20GHz for hotc20test, 12th Gen Intel (R) Core (TM) i7-12700F for others 11 | 12 | - These results have been evaluated using a single model trained on the hotc2020 training set. 13 | - For the different kinds of hyperspectral data, we only use the first 16 bands in a uniform fashion. 14 | - Tracking performance is expected to be further improved by using corresponding training sets for training. 15 | 16 | - The mssot dataset is from 'SFA-guided mosaic transformer for tracking small objects in snapshot spectral imaging'. 17 | - The msvt dataset is from 'Histograms of oriented mosaic gradients for snapshot spectral image description'. 18 | - The other datasets are from 'https://www.hsitracking.com/'. 19 | -------------------------------------------------------------------------------- /tracking_results/hotc23val_nir/car64.txt: -------------------------------------------------------------------------------- 1 | 44.5,168.5,30.0,20.0 2 | 46.30875415763832,168.625790975594,30.12120389278019,20.327988784830964 3 | 46.99646609661764,168.81139454574816,30.340000184989776,20.75389172960675 4 | 49.71266472439123,168.5774729694755,30.560420085944205,21.221734882152 5 | 51.18090851202609,168.30789695206073,30.898712959885785,21.760886916981555 6 | 51.863900739808045,168.0903811969128,31.19836244223729,22.19591842727743 7 | 53.79215328508338,167.91767536460478,31.564918814038133,22.541330091893478 8 | 54.385112412706526,168.18812907059146,32.09087953379493,22.85636216742163 9 | 57.18681335526129,167.99115426289077,32.57185867272511,23.25031178282301 10 | 58.71986205539919,167.7792955024358,33.03806919631895,23.67402930373301 11 | 59.35892031575922,167.57373764004504,33.55440112164223,24.085145028514493 12 | 61.87352382574942,167.39505302093912,33.99676215458949,24.442514266726338 13 | 64.40465287389405,167.24775748907462,34.48216713074222,24.737105330455353 14 | 65.08741016534921,167.03398662713596,34.99047398212413,25.164647054332647 15 | 67.71107545006274,166.8348541599916,35.45372664445865,25.562911988621345 16 | 70.39519959562453,166.65631624295324,35.878136016115434,25.919987822698097 17 | 71.62872844599184,166.51581404395694,36.34461531989787,26.200992220690686 18 | 74.36134366686618,166.8995431792156,36.817177367687655,26.423166031763106 19 | 76.08894717266526,166.61894076790395,37.364116264311434,26.984370854386455 20 | 78.34628856408169,166.33564966108653,37.94040311129633,27.550953068021283 21 | 79.5745807947458,166.04152420544577,38.592980094126894,28.13920397930278 22 | 82.91075381083968,166.43821582131324,39.31336792303857,28.40192558486782 23 | 84.6377575775162,166.21110401209052,40.145258410864976,28.856149203313237 24 | 87.42337300112652,166.02440554247588,41.12432684748576,29.229546142542524 25 | 90.8493932723369,166.4128778375815,42.06233569569831,29.565465750993184 26 | 92.60302240101004,166.1932176230203,43.0860971748214,30.00478618011556 27 | 94.92263206282621,166.54457632531785,44.22520133101428,30.457733471485515 28 | 97.93643110927108,166.27614176904996,45.28091117396527,30.994602584021305 29 | 99.8360085609877,165.99581788137118,46.30400366118641,31.55525035937889 30 | 103.06038380331594,165.70364807723624,47.23807861202612,32.13958996764875 31 | 106.8543765979795,166.20269078616414,48.43104250010543,32.39592590370815 32 | 110.14270452493636,166.70080477073546,49.51531261210876,32.67651892888498 33 | 113.36915663519537,166.57542903192655,50.850167823453546,32.92727040650285 34 | 116.21603837251868,167.0207608361261,51.76828027816868,33.358981983976065 35 | 120.3978710824408,166.70995820714316,52.80921526585056,33.98058724194198 36 | 123.97942028908477,166.43752487039401,53.86433109911759,34.52545391544027 37 | 127.59556632014173,166.70129469334992,55.000919401355944,35.39272766358717 38 | 131.12849737672653,166.33591693851758,56.49453484607511,36.123483173251856 39 | 135.4474507859228,166.04504213894705,58.086733931336866,36.70523277239289 40 | 141.08433348017263,166.44260669268863,60.270497854177236,37.4053846995031 41 | 144.91694456694663,166.06550548422817,61.845396666200806,38.15958711642399 42 | 149.66883593978648,166.51198266959094,63.3770240587624,38.843119908304345 43 | 155.35751509829038,166.88167335409452,64.88849618618198,39.714842344850595 44 | 159.28990094231318,167.32933565093086,66.91533384014154,40.46811930817874 45 | 164.5241285973318,166.8042142104208,68.28974789376016,41.518362189198854 46 | 170.86720016568577,167.23750744352688,69.44602438761238,42.38207817680672 47 | 178.1686543518047,168.87873847843906,70.7040281236408,42.62426324215264 48 | 184.42576324322368,168.3053898792465,72.4725012002485,43.770960440537735 49 | 188.65218435014756,167.7794950914219,75.00781201251716,44.82275001618696 50 | 195.91924595416938,167.17376356110185,77.45925365394861,46.03421307682703 51 | 201.48441292865155,166.37860101528983,79.94152599518952,47.624538168451046 52 | 208.14768441657142,165.66476682302226,82.68645332327078,49.052206552986206 53 | 214.86927215742605,164.99442677747456,85.83835026788745,50.39288664408159 54 | 222.07568581490952,164.25539688488777,88.58113011239418,51.870946429255156 55 | 230.3596990838378,163.54684821545982,91.90959414927573,53.288043768111116 56 | 240.16318371504124,164.02530230321648,95.14981935019847,54.61585503893076 57 | 249.98447588483168,164.65451430512664,99.06584709517139,55.713292243565846 58 | 260.5469831256336,165.07782874769853,102.27220864816144,57.29980096188141 59 | 271.4071651632132,165.69365187836257,105.6335886194621,58.57632910519939 60 | 283.063635191663,166.3486530802042,108.12266510631112,59.84652835589097 61 | 291.7571298593541,165.83573378112553,111.84855698712218,60.87236695404837 62 | 307.3308472283999,166.32183132704048,113.24793748031519,62.61240646482548 63 | 301.0839520624584,163.81713596509948,109.16378100443558,64.85880605408039 64 | 315.5649165971703,161.37165002854712,104.86473868672607,67.00945717699462 65 | 330.88268528219925,160.30088534051558,101.34922559995924,69.1509865530577 66 | 344.7568345053622,160.65580916155108,97.85252871843807,71.13576130707608 67 | 371.1746401195029,161.2907912781693,98.50214404913453,72.54005840178851 68 | 388.45072838958754,161.7212315519207,99.14642641369534,74.3865977700342 69 | -------------------------------------------------------------------------------- /tracking_results/hotc24val_nir/car47.txt: -------------------------------------------------------------------------------- 1 | 42.5,159.5,38.0,34.0 2 | 41.87518694520941,158.7878133282153,38.249626109581186,34.42437334356943 3 | 44.654974964880154,158.53882741062287,38.456224778368345,34.92234517875424 4 | 45.58422684595587,158.2551494368279,38.926681349563154,35.4897011263442 5 | 45.86891169547903,158.00927519794433,39.538288437468566,35.98144960411135 6 | 47.40069919808331,157.8076936222833,40.07013638857511,36.38461275543341 7 | 50.24331053251586,157.6677094171125,40.45139817012213,36.66458116577503 8 | 50.556381584759585,157.46450138304365,41.04903313720304,37.070997233912685 9 | 51.52580692028489,157.3033737528126,41.58954833469124,37.39325249437481 10 | 54.439041604324544,157.04332091730893,42.029772774595806,37.91335816538216 11 | 54.72176694320362,156.75531533556477,42.73292661315082,38.48936932887045 12 | 56.92347920502147,156.46687607698914,43.48506592684875,39.06624784602172 13 | 57.7720543766877,156.28586232632514,44.40783329619926,39.42827534734969 14 | 61.97075515122924,156.12875843667894,45.322097640284774,39.742483126642156 15 | 61.473491032457986,155.90456514333272,46.31662587782728,40.190869713334564 16 | 63.273445575863335,155.69747618332693,46.83383870921694,40.605047633346125 17 | 64.93987694143541,155.50502545864185,47.662394382050564,40.9899490827163 18 | 68.10648364305321,155.2126402048233,48.360619031096,41.57471959035344 19 | 68.51171434899452,154.95110231108674,48.97679234197511,42.09779537782654 20 | 71.838764140546,154.73500740849028,49.54621477955925,42.52998518301945 21 | 74.43612727376195,154.41417984977736,50.19378687238148,43.1716403004453 22 | 75.46059592743504,155.00659537079304,51.10695455826952,43.467861755031066 23 | 79.71051913073767,154.82863238161778,51.60756804265241,43.823787733381536 24 | 80.10719446217036,154.65603824585887,52.327855875996576,44.16897600489939 25 | 85.09431026888942,154.4534888549741,53.066735494612985,44.57407478666893 26 | 85.37835353786699,154.18812946083588,54.04715749129049,45.10479357494533 27 | 88.74180313947832,154.62556443053077,55.1820775325159,45.80228748444516 28 | 90.64471889303101,154.24963154286164,56.18022129882692,46.55415325978343 29 | 95.05779128744808,153.88334021561013,57.12834487809991,47.286735914286425 30 | 95.26460599499637,153.6143202889564,58.37038958211827,47.8247757675939 31 | 99.75624484735536,153.38185307281435,59.48929618261484,48.289710199878 32 | 100.87843768988162,152.96947886291633,60.66213332810749,49.114458619674025 33 | 104.53629559059783,152.62256130055846,62.047525085440896,49.8082937443898 34 | 107.536616732435,152.25269845674228,63.13881790941474,50.54801943202213 35 | 109.49644343839319,152.00035977995884,64.62498880304486,51.05269678558904 36 | 115.13979025291181,151.67246819950213,66.1703939239945,51.70847994650248 37 | 116.36728583435936,151.13129832046207,67.45088872372274,52.79081970458262 38 | 122.49360707550353,150.83895014269208,68.53482148957781,53.375516060122536 39 | 123.81225475730399,150.3091490533973,69.76056987138773,54.43511823871212 40 | 129.80150539570508,149.81291186609243,71.55658251563236,55.42759261332186 41 | 132.01514638794015,149.14629860278137,73.16453275948501,56.76081913994396 42 | 136.38298665096553,148.54691648344317,74.7207952126122,57.95958337862039 43 | 141.51524599805566,148.09963992996788,77.06846438119217,58.854136485570976 44 | 143.78094936645147,147.46493289454457,78.9956544788719,60.12355055641758 45 | 149.69520494753527,146.98332213231694,80.38739480507796,61.086772080872834 46 | 154.41449097159608,146.37793942834685,82.15189847664695,62.29753748881305 47 | 157.7606344867194,145.7155346778417,84.6102398245497,63.62234698982331 48 | 164.8768763172943,145.04123954843143,86.80840826239158,64.97093724864386 49 | 167.34880557265814,145.59602177447192,89.07416216149588,66.26457693317353 50 | 173.4987854977057,145.10710076552888,91.53000287769584,67.24241895105962 51 | 176.25439243925,145.86339101875902,93.55805874826675,68.24292836248588 52 | 185.59272716993738,145.4129850125829,95.36686793753086,69.14374037483813 53 | 192.81007836819094,146.20607578860768,96.5517745580332,70.16082699229017 54 | 203.03855092285076,145.60229276852982,97.20064717850458,71.36839303244582 55 | 210.71641934999445,144.8333799800551,97.85366412094697,72.9062186093953 56 | 215.36894362594163,144.0726404438949,99.36268740381746,74.42769768171567 57 | 222.17919824471585,143.28491511503105,102.25271296484313,76.00314833944338 58 | 229.50297462559405,142.30627200038234,104.53762510871798,77.96043456874082 59 | 238.06305403829566,141.40264557301066,107.64332708943617,79.76768742348419 60 | 246.2189756190939,140.6106768556929,112.09948454547023,81.35162485811968 61 | 253.80851707421687,141.29346314010763,115.2881236005819,83.04733928351652 62 | 290.81067470424455,141.83065403412192,113.46076615308978,85.11108609603417 63 | 304.02894417551863,142.4644188461134,112.17797632241833,86.98777511103576 64 | 318.8793563884965,143.07703442695464,110.87514188609683,88.91787617042378 65 | 331.6303415559837,143.80460072079313,110.70758356819431,90.62954508488073 66 | 346.56334058218334,142.69659445995586,109.57063128659281,92.84555760655529 67 | 369.60720172764894,142.9396484111465,108.42931905479307,95.56990756554055 68 | 382.8301081724603,145.01862142182569,107.87713430780468,97.88536857984082 69 | 393.41185915539046,143.78394888915724,106.30560959064962,100.3547136451777 70 | 394.7612050708873,142.46863282134177,103.60691775965603,102.98534578080867 71 | 367.95532719980577,134.00858572181835,108.02699561064665,103.50821401613135 72 | -------------------------------------------------------------------------------- /tracking_results/mssot/airplane-2.txt: -------------------------------------------------------------------------------- 1 | 167.5,136.3,4.6,3.6 2 | 166.41532669566905,135.28028243851045,4.599989616718417,3.600006685695958 3 | 164.01165594769344,135.7999906438107,4.599976464588593,3.600018307112983 4 | 163.75181233084243,135.28026819051888,4.599949732369407,3.6000352818541557 5 | 161.93282188779838,135.9948690592173,4.599936617953247,3.6000454732268192 6 | 160.89341115633772,136.4496051364304,4.599904932147241,3.600071571368885 7 | 159.39924355028066,137.42406153062146,4.599890152667806,3.600082690547743 8 | 157.58025621360807,137.94376849481213,4.599874815809318,3.6000944793674248 9 | 157.06055262828673,138.3985108489229,4.59985661711926,3.600106969311984 10 | 158.48976750817764,139.43793138454365,4.5998449477883225,3.600115418398371 11 | 159.20438745405912,139.8277076256906,4.599813643494779,3.600131256542361 12 | 158.68468647947267,139.6977698960364,4.599792953183939,3.600151055979822 13 | 158.03505276744278,141.06200832010316,4.59978202641851,3.600158744579347 14 | 157.06060576305936,141.38682093303623,4.599759148204747,3.600172481040073 15 | 155.9562321337403,142.3612679095034,4.599736109522763,3.600193496329371 16 | 154.52703316480952,143.01090129575832,4.599725672959657,3.600203257648935 17 | 152.8379792777936,143.46564283281614,4.5997144877588525,3.600213749480536 18 | 152.18835029530726,144.6999494611393,4.599695936827026,3.600225873052833 19 | 151.34382662449767,144.57001800567346,4.599684946374977,3.60023365597354 20 | 149.84966367449903,145.9992184003134,4.59967784153616,3.600238349580343 21 | 149.6547840812488,146.25906853189136,4.5996545603457415,3.600248043345654 22 | 148.2905532226789,147.16855563863885,4.599643211125517,3.6002558740906516 23 | 146.79639424947416,147.7532239361031,4.599634590003339,3.6002644577615 24 | 145.9518750617718,148.0780380934561,4.599618719621653,3.600272391434876 25 | 145.36721013582167,149.11744922025076,4.599604358237474,3.60028429479575 26 | 144.26283655094585,149.63715167156923,4.599590687838484,3.600296258112033 27 | 143.1584670139384,150.93641545766354,4.599569175413946,3.6003105523227648 28 | 143.48328716359867,150.4816689050632,4.59956385410479,3.6003146883075154 29 | 142.8986203130007,149.89699447713366,4.599554723947006,3.600320712812799 30 | 142.4438809757747,147.55830557082854,4.599544824711316,3.60032871788632 31 | 140.36505609392816,144.3101283721391,4.599533228008268,3.6003372396463007 32 | 138.6110493236057,143.40063520294007,4.599521057144544,3.6003472831880434 33 | 137.57164436275863,144.1152241450656,4.599501299399777,3.6003648035512557 34 | 136.33734603173556,144.6349266781259,4.59948805545423,3.6003744346902877 35 | 134.84319163253912,145.8692291469226,4.599480669841324,3.6003785186669166 36 | 134.19356653355297,146.0641137917139,4.599463432103042,3.600389459797503 37 | 133.1541665750415,146.71373599868787,4.5994368392050475,3.600411614550099 38 | 132.17972752643797,147.16847226334986,4.5994157934650675,3.6004253519347436 39 | 130.6855796737513,148.3378066983682,4.5994017714549145,3.6004336598503586 40 | 128.9965439160867,149.31224784314074,4.599386115640714,3.600447815195713 41 | 128.0870633948681,149.8319493664237,4.599377277964428,3.600456128694655 42 | 126.78780202398174,150.28668956970913,4.599371622782118,3.600460661058019 43 | 125.22869054840926,151.32609610627773,4.599360809583601,3.600470097483129 44 | 123.66957650564825,151.84579972901489,4.599355424583362,3.6004740088495812 45 | 122.5002485600262,152.30053811342887,4.599336555009189,3.6004818692286755 46 | 121.00610496813836,153.40490648728505,4.599320833760709,3.600490746968922 47 | 120.42144211011303,153.92460685228411,4.59931150442502,3.600498946203143 48 | 118.53752337529167,154.31437876757207,4.599291884505132,3.6005117548470587 49 | 117.36820017084321,155.35377963405597,4.599270047295644,3.6005262406404848 50 | 115.93901979451782,156.26325744453425,4.599260690313314,3.6005334167232 51 | 115.3543613382434,156.7179938524139,4.599244617425177,3.6005418118592676 52 | 113.79525619170634,156.78295356414012,4.599236266530581,3.600548165238872 53 | 113.21059625542497,157.43257663652207,4.599224370435457,3.6005595412059037 54 | 111.71645317823396,158.92671998094727,4.599218162298861,3.600565214874137 55 | 110.74202275920854,159.3814526983724,4.599192719527977,3.6005800444072897 56 | 109.50774275485394,160.42085075524037,4.59916628143336,3.6005935700851768 57 | 108.4033809414617,161.20039982432246,4.599157833494208,3.6006004258435027 58 | 107.16909498306696,161.7200964180895,4.599147185774194,3.6006104233660245 59 | 106.71436256884138,162.1748310341914,4.599134230818818,3.6006189745687607 60 | 105.4151158576385,163.08430388030084,4.59912089634548,3.60062801216527 61 | 103.98594540571288,163.66896176842474,4.599105636447207,3.6006397574513693 62 | 103.53121131015982,165.1630987979499,4.599097167541076,3.6006461527269105 63 | 102.42685967580847,165.42294274326517,4.599071844997434,3.6006591070955647 64 | 101.25754335547397,166.46233656864572,4.599053895353883,3.600671981056757 65 | 100.41303804149082,167.30684347643717,4.599039955417368,3.6006827333766975 66 | 99.76341871254931,167.8265387825047,4.599029334971762,3.6006915439044582 67 | 99.04883790861244,168.34623384515004,4.59901695147081,3.6007006850681473 68 | 98.3342589609079,169.71044134850231,4.599001309900348,3.600707885324535 69 | 96.25547028884124,169.7753965595023,4.598986857643026,3.60072220696178 70 | 95.08615511426586,170.29508967685607,4.598971611983581,3.600734014392135 71 | -------------------------------------------------------------------------------- /tracking_results/mssot/boat-4.txt: -------------------------------------------------------------------------------- 1 | 118.5,88.5,5.0,6.0 2 | 117.38955606770718,88.69763050499962,4.999832026778583,6.000231376065982 3 | 113.98815256822594,89.39523805799737,4.999579888627882,6.0005155802475265 4 | 113.37765707091887,90.00572183937301,4.9995067553983485,6.00061214533995 5 | 113.37771140586347,90.09286006240454,4.99939808550916,6.000773743786172 6 | 114.68607120027411,90.00554501831543,4.9992603373255635,6.0009650425885575 7 | 114.0755955871292,90.70322939120014,4.999134901385893,6.001112482224249 8 | 115.38392179244363,90.09264802772044,4.999079125572961,6.001196779602884 9 | 115.99450166227766,89.4820527264471,4.99900063877739,6.00130612927709 10 | 115.38399182923646,90.17976868017546,4.998936087418463,6.00139904175329 11 | 116.69233219722724,89.39473400132297,4.998870307298957,6.00149942594104 12 | 116.0818244765253,89.65633851898673,4.9987953346875384,6.001614853762936 13 | 116.69240648924111,90.44127697497099,4.998725748184319,6.001716506130926 14 | 116.25634599786483,90.26676804606008,4.998634174931781,6.0018493415507015 15 | 117.56470881238015,89.65614756328578,4.998554848830939,6.001988699065372 16 | 116.8669573634471,90.26666183656141,4.9985060443277884,6.002067892087224 17 | 117.47755982862637,89.91770697265933,4.998411914159545,6.002200019782628 18 | 118.08818276709508,90.70263543801394,4.998280498980821,6.002347397048906 19 | 117.7393327315087,90.52813828134965,4.998200261053404,6.002451555827378 20 | 117.82658584538024,90.00474907820585,4.998139424885589,6.002557612663333 21 | 118.08828703714906,89.65581039203927,4.998075193067483,6.002650782703767 22 | 118.43723715659728,90.35351598850552,4.9979607710389535,6.002811223507113 23 | 118.96063645530398,90.35345690937426,4.997844697552256,6.002929381769638 24 | 118.35014251568715,90.35337940633674,4.997703319275456,6.003084387844664 25 | 119.04798834255467,90.35331094536247,4.997588845129827,6.003221309793233 26 | 119.2224647290658,89.82992513623145,4.997530900731231,6.003308442184305 27 | 119.65866249147706,90.4403910716319,4.9973745072285185,6.00351135523119 28 | 118.96095396467868,90.26585383230142,4.9972040646981,6.0036889598603285 29 | 119.1355021409662,90.26576831108167,4.997004564814021,6.00386000229984 30 | 119.74611477679592,90.17849994809804,4.996914184170132,6.003948886693442 31 | 119.48447859079587,89.9167810223327,4.996843295241427,6.004043477295347 32 | 120.5312478845329,90.61447487676197,4.996681560258351,6.004240336764097 33 | 119.74634567755159,90.61436492826026,4.9964494670551,6.004460233767537 34 | 120.09534700590022,90.26534245585195,4.996239390767402,6.004712598174559 35 | 120.35711952731016,90.17803013306285,4.996040302058471,6.004888592382444 36 | 120.70610257238484,90.35241415530531,4.995866811615526,6.005016847750717 37 | 120.18282067711799,90.35234160289149,4.995746664677065,6.005161952578355 38 | 120.96788304850209,90.26505537896557,4.995650541121816,6.00528677607322 39 | 120.96799304969001,90.0904468765063,4.995430538745992,6.005607778714398 40 | 121.14252261698812,89.5669813500133,4.995270227953836,6.00584236028819 41 | 121.49150394445182,90.09023127759805,4.995109374229495,6.006045206923273 42 | 121.84049063991965,89.74122902622798,4.994939931055264,6.006245761901954 43 | 121.23002082276851,90.52614208326371,4.994720126812386,6.00648178310289 44 | 121.75351232954918,90.52600114750196,4.994445766396556,6.006763654626389 45 | 121.05591837559824,90.78755663027529,4.994022782446702,6.007006773524124 46 | 121.66668726713411,91.04906689968578,4.993622844501396,6.007331025471607 47 | 121.49238822450073,90.17669113224488,4.9933273296193255,6.007614559609252 48 | 122.27754107321175,90.08928254368173,4.993039241305905,6.007985335723469 49 | 122.62648193482302,89.47866030113042,4.992947427626423,6.008097479125709 50 | 121.92878664865106,90.00190048969176,4.99275618509201,6.008303463161774 51 | 122.27776210189899,89.47848297191517,4.992596549667666,6.008451592107683 52 | 122.9756348389028,90.35063735949805,4.992431266240979,6.008618055168075 53 | 122.36516658457678,90.35055735329135,4.992235815479704,6.008778067581502 54 | 123.06316111785534,90.4376264714549,4.991820598766079,6.00908656248481 55 | 123.06325998641714,90.4375047017718,4.991622861642505,6.0093301018510275 56 | 123.58667799336902,90.17574422623034,4.991458899936764,6.009515026834921 57 | 122.97621728499868,89.91397893714294,4.991261474101699,6.009708958191552 58 | 123.58685697710855,90.61167215379271,4.9910995523238615,6.009885339111357 59 | 122.97634265459509,90.43718008905991,4.991009983867612,6.009978550438881 60 | 123.67418499532435,90.34990368620527,4.990888908557822,6.010085905379597 61 | 122.97647184130817,90.52427929775126,4.990754016553471,6.010224982296749 62 | 123.58708614286775,91.22200761007521,4.990641234194421,6.0103292956604335 63 | 123.41267066936643,91.13475149935785,4.990582373191654,6.010396613092479 64 | 124.80826471134452,90.0880483770978,4.990514171651748,6.010462945800354 65 | 123.41275381793398,91.13466989914367,4.9904173314684295,6.010558871961936 66 | 122.36611146280593,90.52408182740102,4.990364084387924,6.0106212070009075 67 | 119.7496661972747,90.4366634075343,4.989906646928612,6.011013114450283 68 | 118.00537262591823,90.26207468521649,4.9896221327807035,6.011303393399825 69 | 115.9993695635424,90.26197162264424,4.989428544380397,6.011509518544319 70 | 113.90619868836819,90.00020730667103,4.989125818667475,6.011707590983099 71 | -------------------------------------------------------------------------------- /tracking_results/mssot/triple-2.txt: -------------------------------------------------------------------------------- 1 | 155.7,128.7,6.4,12.6 2 | 155.64971739962132,128.33921200489715,6.393452469466695,12.619205079775524 3 | 156.84185762044183,128.4830306724047,6.391567148591109,12.62936713485606 4 | 156.84395495653249,128.48293646645098,6.387372476409804,12.629555546763507 5 | 157.88933497458035,128.47580507165264,6.381539838930879,12.643818336360207 6 | 158.48675039713848,128.6195634098299,6.378534024903254,12.654257917777855 7 | 159.53283294227455,128.76307012757846,6.372777266365478,12.665302815385639 8 | 160.43078900026427,128.0103385578139,6.365593941928569,12.680158628629352 9 | 161.0328304793741,128.00743947955124,6.354375171285174,12.685956785154627 10 | 161.03274587746816,127.85729369160231,6.354544375097073,12.688141926834653 11 | 162.07949799800306,127.8512504365335,6.348031833385088,12.700228436972246 12 | 162.97733484789225,127.99467440038792,6.341599263896217,12.711587364311665 13 | 163.1288499906595,128.14470368598128,6.336831602041535,12.709791416804697 14 | 164.32322407562827,128.29459511114723,6.333307688691043,12.708161598546203 15 | 165.36824983817382,128.29559039500157,6.329729080145237,12.706171030837531 16 | 166.11428928522483,127.99973574064705,6.327529198349696,12.701928734623996 17 | 166.25625430804385,127.55708177385492,6.3414739601752075,12.693612245817532 18 | 167.29838080697468,128.30205023360085,6.343185147287272,12.69364974416401 19 | 168.34272130621537,128.15797210536863,6.3406808423803955,12.683780758689242 20 | 168.4945989527089,128.01085069053414,6.334761360635176,12.680187777116325 21 | 169.53942923779582,127.25888006517235,6.328858176217175,12.695730895157164 22 | 169.84240809010066,127.40130078433543,6.318513296091823,12.708695869073145 23 | 169.84382468238073,127.54018718425266,6.3156801115317345,12.728740706662348 24 | 170.74065727744093,127.68216002279729,6.310400488165204,12.742859290698732 25 | 171.93146634032087,126.93604913877569,6.3142276795637935,12.74417773551793 26 | 171.92735629957457,127.22484544571648,6.32244776105634,12.763118861722251 27 | 172.82214517752607,127.36199307941152,6.325009196192419,12.787513459505373 28 | 174.01832823225843,127.35693901738222,6.325400552731918,12.797621583563979 29 | 174.01226128225983,127.0530108759465,6.337534452729132,12.806976414082357 30 | 174.15863531251185,126.59835492923902,6.344386857794713,12.817486910788459 31 | 174.90888680932028,125.84201115336083,6.343259575099388,12.830798751623274 32 | 175.06366057427246,125.98411691923178,6.333764043510564,12.846639218196849 33 | 175.9696156096082,125.97775539241363,6.3225748508786195,12.85936227183316 34 | 175.97245687959614,125.96916834092319,6.316892310902742,12.876536374814032 35 | 177.02822420369353,125.96057512720702,6.307225212513636,12.893722802246378 36 | 177.03274520947028,125.95605483036638,6.298183200960129,12.90276339592765 37 | 178.0885322643232,125.95519356274856,6.2888969022419285,12.904485931163286 38 | 178.39205645710877,125.80071746861611,6.282228409097895,12.913248173214582 39 | 179.44546987477054,125.48759071831216,6.276819578916272,12.939096529496231 40 | 180.34736348413912,125.77137142435684,6.275966550829069,12.972513180956849 41 | 180.34648689735664,124.8604770696535,6.277719724394033,12.98850228419663 42 | 180.95443511706682,125.00284114312433,6.266754830624875,13.005007023667764 43 | 180.96022454398405,125.14851215625058,6.255175976790379,13.014949155315941 44 | 180.96548563462963,125.29261344287146,6.244653795499252,13.027974465189773 45 | 181.1216879361464,125.28546855017842,6.233484609003214,13.04226425057583 46 | 182.18183484858787,125.1304221529852,6.2219416126425,13.051106926601951 47 | 182.18723860161288,124.97105603809672,6.211134106592523,13.068661191493723 48 | 182.4939055086537,124.35940600061215,6.200293918140481,13.086974015203634 49 | 183.55327074021716,125.25017311172579,6.190846183578727,13.113396417460827 50 | 184.31142312366842,124.9392703903421,6.182286250527283,13.132103926687758 51 | -------------------------------------------------------------------------------- /tracking_results/msvt/airplane10.txt: -------------------------------------------------------------------------------- 1 | 296.9,108.7,26.4,13.0 2 | 293.9613568417242,109.70832804832702,26.345510337124356,13.06570389048798 3 | 291.8202636041781,110.30279424441062,26.310000305302232,13.110399071724892 4 | 290.91853268026114,110.57920978496284,26.2622570282485,13.174636365582941 5 | 290.6600779562942,110.86207775703924,26.161684787425344,13.226382110187267 6 | 289.18270892941985,111.15415688103516,26.031947336735982,13.259118963083045 7 | 288.3426575577298,111.12338206568371,25.865415659817554,13.320668593785943 8 | 287.805097859002,111.10247478577034,25.71223964475502,13.362483153612697 9 | 287.56341437998407,111.42970678641501,25.583003744441395,13.32062201067288 10 | 287.64782972736634,111.42634202603132,25.414173049676858,13.327351531440248 11 | 289.55036704816257,112.03953545305833,25.254547106808253,13.316114243627522 12 | 289.6280083694064,112.06007898602486,25.099264464320505,13.275027177694447 13 | 290.3314197169033,112.05934443208166,24.896435675930363,13.276496285580869 14 | 290.70230600707725,113.29939988790301,24.753673379283356,13.192426508741635 15 | 290.5040628026164,113.3164881110394,24.55472141789076,13.158250062468854 16 | 290.596274285101,113.32178106920595,24.37029845292144,13.147664146135751 17 | 289.2121408002013,113.33943654676486,24.193723236042977,13.112353191017954 18 | 288.36945397781784,114.26659116344133,24.121895281846967,13.01524555662791 19 | 286.4238567715593,116.32418997218059,23.93214130617145,12.980996327341924 20 | 285.6449379949948,118.0842458101151,23.751238077817433,12.938366214439068 21 | 281.70410294489767,122.14184739965454,23.56674472440334,12.889326488968647 22 | 282.0860891764389,124.44741491687624,23.37533679307675,12.858707708572654 23 | 279.89408296229516,126.20516280058499,23.20584780017076,12.758338007050273 24 | 279.67505444117785,126.52256592176863,23.078966828167918,12.68846977892035 25 | 278.0698021974414,129.08068128484027,22.918387841709347,12.628864263674506 26 | 277.83357923264083,129.40115654898585,22.832402902499442,12.546344604194308 27 | 277.90295674069597,129.4349407825898,22.693647886389158,12.47877613698644 28 | 277.9845099419061,131.66209003642905,22.5305414839689,12.444507723857194 29 | 279.9598041896842,131.69794154716632,22.426347951041958,12.372804702382659 30 | 281.4106861115391,133.64535325565123,22.25808787578783,12.304886561250857 31 | 283.35367144733556,133.67651296779775,22.173305521000188,12.242567136957799 32 | 285.57869402326156,133.71171694766713,22.04880530029029,12.17215917721904 33 | 285.6532976043313,133.74676776011077,21.89959813815069,12.102057552331768 34 | 286.79004008337876,133.7659066154069,21.762917544955194,12.063779841739496 35 | 288.46268721280813,133.79149694937504,21.606663771262873,12.012599173803183 36 | 290.36663524844425,134.09187543610776,21.496859767792305,11.9401410671666 37 | 292.27782561575475,136.2247307415194,21.352406724777076,11.877776389607048 38 | 293.88838013282685,136.51433317696765,21.2644632166598,11.820765773048393 39 | 294.72152845774207,136.8006360224333,21.15788059828253,11.768064759268109 40 | 296.2896107644571,137.61932074028667,21.12618289665858,11.682928779464461 41 | 299.700188384664,137.8910610133167,21.006230017855376,11.65492533814368 42 | 301.80664914552455,137.91707920933865,20.898975868059246,11.602888946099782 43 | 305.91435523335457,138.19338266078591,20.85502486154595,11.560998366276925 44 | 309.513152378497,138.4704273441211,20.788219157399254,11.516251041473533 45 | 309.7843737184416,129.11043643742298,20.753354489621664,11.455846406741168 46 | 311.54924079196496,129.14084946140514,20.76576763372965,11.395020358776858 47 | 313.8247126215634,129.41077277735795,20.761269594508477,11.360334351312904 48 | 315.86707518448804,129.4345929708646,20.712521974445178,11.312693964299607 49 | 317.1249652140383,129.45319336063645,20.711501785459593,11.275493184755945 50 | 318.14309865389566,129.71717126878272,20.684421521021935,11.249834022282617 51 | 318.92036842197,130.4826071904969,20.63423798665324,11.223318180634317 52 | 319.1564250376177,130.51020850533067,20.662373549076413,11.168115550966794 53 | 319.42322018409914,130.53518390645797,20.628499965919758,11.118164748712156 54 | 319.64300300959326,130.31676648339888,20.6872865419274,11.056647367834435 55 | 320.393469396922,130.58464317008873,20.680849116289483,11.019059110794634 56 | 320.15955656678034,130.6020417988742,20.651254038858212,10.984261853223659 57 | 320.3746904670971,130.61372569802165,20.71736662080464,10.96089405492877 58 | 320.3464193222987,131.1266525906519,20.773908910401428,10.928957128605356 59 | 320.59633643655064,131.1330904548881,20.771320221068414,10.916081400132944 60 | 321.0606902107127,132.63447226864957,20.83658157129598,10.89522446826485 61 | 321.518480321588,133.38835384163454,20.916184656132767,10.880236282176044 62 | 321.75466725688887,133.64857183346354,20.94232322891294,10.858312741900036 63 | 321.73318672442923,133.64998949900527,20.985284293832283,10.855477410816558 64 | 321.70894219002275,133.65976622881598,21.033773362645256,10.83592395119511 65 | 321.69005203860326,133.67805310068164,21.071553665484167,10.79935020746381 66 | 322.3945018790046,133.92662392031417,21.160889330745643,10.801620350220107 67 | 329.8771830274767,132.18375868865297,21.21873625844028,10.781935327793448 68 | 334.1228669256442,130.17885653902704,21.249259322280853,10.781438045786235 69 | 336.08576312920076,126.17344686758071,21.337311865335057,10.764567488344245 70 | 337.80260659075327,126.18421097905625,21.422801893317054,10.74303926539317 71 | 341.0372883109628,123.1689012786623,21.500611755713404,10.73011407896672 72 | 340.2511038424827,123.16831832278332,21.559320616070217,10.731279990724687 73 | 337.9542734373831,121.41885288517813,21.60401334348846,10.692124579327729 74 | 334.875787367726,120.9277336025709,21.695966531243457,10.66352665261565 75 | -------------------------------------------------------------------------------- /tracking_results/msvt/airplane11.txt: -------------------------------------------------------------------------------- 1 | 307.1,69.9,24.0,9.8 2 | 307.11734097753447,69.3463252052101,24.014842366666148,9.907349589579798 3 | 307.8917354628131,69.28917417458526,24.04675131692819,10.02165165082952 4 | 301.7965765518775,71.61581613246939,24.06071269816518,10.133028950961599 5 | 299.9357165321715,71.83331395241794,24.061247348282357,10.229631223820897 6 | 302.10596469897155,71.7896453434123,23.987369183247967,10.31696844183216 7 | 303.475139414106,71.74744137996578,23.918034129560183,10.401376368725224 8 | 305.36760304194337,71.71309907497982,23.873133577116374,10.470060978697125 9 | 306.4529734457231,71.6870713282075,23.841799741469238,10.52211647224179 10 | 308.0755216921822,71.6561079904422,23.808599720706606,10.584043147772382 11 | 310.51877498460215,71.6369893179984,23.745434583232132,10.622280492659979 12 | 312.4375794383035,71.34992626211859,23.657574156148698,10.66072825008828 13 | 314.60380324953684,70.79100449633151,23.60569190546104,10.708430438717668 14 | 316.77825663790725,69.7060008370131,23.538005207962538,10.737827717733325 15 | 318.6512879741559,69.69176870608732,23.534692101687284,10.766291979584867 16 | 320.56666019174446,69.67205370016175,23.44987065573992,10.805721991436002 17 | 322.22914035389636,69.39590630386866,23.332401270459137,10.823434960851673 18 | 324.1528811315828,69.38181899153962,23.217100728719448,10.851609585509744 19 | 325.54273883310117,69.37421649927944,23.097236464534642,10.866814570030089 20 | 325.85824866737846,69.36402889467422,22.99669215150302,10.887189779240547 21 | 329.1110478290257,68.28653374407888,22.843345250153977,10.924762939782717 22 | 330.2373659410295,68.27888076238308,22.701734399796983,10.940068903174298 23 | 332.141076200787,68.02002926178571,22.575885965005487,10.931833035122835 24 | 333.24246245157553,68.2603809501713,22.46887519643149,10.975070091602458 25 | 333.0376764780735,68.25916018323527,22.35532841524825,10.977511625474499 26 | 331.790102957686,68.24760018180562,22.24304307507717,11.000631628333787 27 | 331.6006184344366,68.23337751929292,22.10177930275406,11.029076953359205 28 | 328.5310404914533,69.01281234938483,22.017225017034527,11.026134836096894 29 | 326.7315938980986,69.0341032462453,21.994724449510347,10.983553042375974 30 | 326.5241585081669,69.03261098101541,21.893327297572164,10.986537572835733 31 | 325.5432703783444,69.03286287054829,21.795817296448156,10.986033793769979 32 | 325.3504364758078,69.03141506659755,21.668113747728878,10.988929401671477 33 | 325.1447437533612,69.02847096772004,21.56796608890485,10.994817599426487 34 | 323.9373939679633,69.01666868545192,21.4318974494253,11.018422163962729 35 | 322.7146895504575,69.01434647909672,21.334561299495586,11.023066576673127 36 | 322.75834961281987,68.76491143256456,21.247241174770775,11.01474892189826 37 | 320.8032894601331,68.75913865316278,21.11136389980617,11.026294480701816 38 | 317.31041950764467,68.76096253396972,21.042008787951108,11.022646719087932 39 | 315.30903966166034,68.76808626900971,21.022019496805644,11.00839924900794 40 | 313.3127310107381,68.7743037150061,20.996232066612276,10.995964357015163 41 | 312.80863099772705,68.77774876904631,21.001026245142782,10.989074248934752 42 | 311.61285011914896,68.52179493470281,20.88431402109084,10.999327121380134 43 | 311.3809811280345,67.0248960678138,20.847951336060042,10.992520851599448 44 | 313.4358571730075,67.01982649789582,20.73374610384579,11.002659991435399 45 | 312.2023681796014,64.79146758912647,20.71110821487878,10.978069232571722 46 | 312.9686876348624,66.5263242953936,20.66995608002351,10.988491629926683 47 | 315.75117273198526,65.27769803202932,20.569028861632738,11.002088258539375 48 | 317.77819489581935,65.28467072049399,20.478717010880864,10.98814288161003 49 | 319.2949061356612,65.29647798113103,20.40859765417047,10.96452836033594 50 | 320.07920735539227,65.5450904488996,20.31729832270853,10.95973779413223 51 | 321.33410384144025,65.55398500392089,20.26247731433229,10.941948684089642 52 | 321.61448837036994,65.07788747665042,20.19158087153445,10.914398508507444 53 | 322.8761509739374,65.09255100280015,20.109973425630308,10.885071456207996 54 | 323.1115516796074,65.10920907354235,20.125796551650637,10.851755314723578 55 | 323.58403225611994,65.12994379673553,20.153407056844085,10.810285868337214 56 | 325.5674783323408,64.8930915392079,20.074365580069117,10.798009048934155 57 | 327.02493067756023,64.42171155165695,20.067029161261875,10.77157960015878 58 | 328.00444241894303,64.434901083185,20.044125443266214,10.745200537102692 59 | 329.2268231492858,64.44671131525388,20.01553684200412,10.721580072964933 60 | 330.6996460712092,64.23296572584339,19.964304584760196,10.666668987352129 61 | 332.4100778951182,63.291688832341535,19.90829604746027,10.62644842548838 62 | 333.6482921462427,63.288490241935456,19.827704304410734,10.632845606300538 63 | 333.9325510245545,63.28725882923164,19.737266710323958,10.635308431708172 64 | 335.4143967790266,63.06004635418826,19.63424447398696,10.612955169693716 65 | 336.1712608643992,63.29619416587273,19.54509929391975,10.615520543217384 66 | 336.93719841607873,63.29885219166399,19.433961393694737,10.61020449163486 67 | 336.9992040502306,63.52935706225751,19.30995012539092,10.621028331813127 68 | 337.53234028248,63.995911610520125,19.184023877971136,10.62826545236686 69 | 337.82483575132596,63.9906723887396,19.067454050545216,10.638743895927911 70 | 339.0542664895023,64.22810316732641,18.942907214166354,10.63074526674907 71 | -------------------------------------------------------------------------------- /tracking_results/msvt/airplane2.txt: -------------------------------------------------------------------------------- 1 | 167.5,136.3,4.6,3.6 2 | 166.41532669566905,135.28028243851045,4.599989616718417,3.600006685695958 3 | 164.01165594769344,135.7999906438107,4.599976464588593,3.600018307112983 4 | 163.75181233084243,135.28026819051888,4.599949732369407,3.6000352818541557 5 | 161.93282188779838,135.9948690592173,4.599936617953247,3.6000454732268192 6 | 160.89341115633772,136.4496051364304,4.599904932147241,3.600071571368885 7 | 159.39924355028066,137.42406153062146,4.599890152667806,3.600082690547743 8 | 157.58025621360807,137.94376849481213,4.599874815809318,3.6000944793674248 9 | 157.06055262828673,138.3985108489229,4.59985661711926,3.600106969311984 10 | 158.48976750817764,139.43793138454365,4.5998449477883225,3.600115418398371 11 | 159.20438745405912,139.8277076256906,4.599813643494779,3.600131256542361 12 | 158.68468647947267,139.6977698960364,4.599792953183939,3.600151055979822 13 | 158.03505276744278,141.06200832010316,4.59978202641851,3.600158744579347 14 | 157.06060576305936,141.38682093303623,4.599759148204747,3.600172481040073 15 | 155.9562321337403,142.3612679095034,4.599736109522763,3.600193496329371 16 | 154.52703316480952,143.01090129575832,4.599725672959657,3.600203257648935 17 | 152.8379792777936,143.46564283281614,4.5997144877588525,3.600213749480536 18 | 152.18835029530726,144.6999494611393,4.599695936827026,3.600225873052833 19 | 151.34382662449767,144.57001800567346,4.599684946374977,3.60023365597354 20 | 149.84966367449903,145.9992184003134,4.59967784153616,3.600238349580343 21 | 149.6547840812488,146.25906853189136,4.5996545603457415,3.600248043345654 22 | 148.2905532226789,147.16855563863885,4.599643211125517,3.6002558740906516 23 | 146.79639424947416,147.7532239361031,4.599634590003339,3.6002644577615 24 | 145.9518750617718,148.0780380934561,4.599618719621653,3.600272391434876 25 | 145.36721013582167,149.11744922025076,4.599604358237474,3.60028429479575 26 | 144.26283655094585,149.63715167156923,4.599590687838484,3.600296258112033 27 | 143.1584670139384,150.93641545766354,4.599569175413946,3.6003105523227648 28 | 143.48328716359867,150.4816689050632,4.59956385410479,3.6003146883075154 29 | 142.8986203130007,149.89699447713366,4.599554723947006,3.600320712812799 30 | 142.4438809757747,147.55830557082854,4.599544824711316,3.60032871788632 31 | 140.36505609392816,144.3101283721391,4.599533228008268,3.6003372396463007 32 | 138.6110493236057,143.40063520294007,4.599521057144544,3.6003472831880434 33 | 137.57164436275863,144.1152241450656,4.599501299399777,3.6003648035512557 34 | 136.33734603173556,144.6349266781259,4.59948805545423,3.6003744346902877 35 | 134.84319163253912,145.8692291469226,4.599480669841324,3.6003785186669166 36 | 134.19356653355297,146.0641137917139,4.599463432103042,3.600389459797503 37 | 133.1541665750415,146.71373599868787,4.5994368392050475,3.600411614550099 38 | 132.17972752643797,147.16847226334986,4.5994157934650675,3.6004253519347436 39 | 130.6855796737513,148.3378066983682,4.5994017714549145,3.6004336598503586 40 | 128.9965439160867,149.31224784314074,4.599386115640714,3.600447815195713 41 | 128.0870633948681,149.8319493664237,4.599377277964428,3.600456128694655 42 | 126.78780202398174,150.28668956970913,4.599371622782118,3.600460661058019 43 | 125.22869054840926,151.32609610627773,4.599360809583601,3.600470097483129 44 | 123.66957650564825,151.84579972901489,4.599355424583362,3.6004740088495812 45 | 122.5002485600262,152.30053811342887,4.599336555009189,3.6004818692286755 46 | 121.00610496813836,153.40490648728505,4.599320833760709,3.600490746968922 47 | 120.42144211011303,153.92460685228411,4.59931150442502,3.600498946203143 48 | 118.53752337529167,154.31437876757207,4.599291884505132,3.6005117548470587 49 | 117.36820017084321,155.35377963405597,4.599270047295644,3.6005262406404848 50 | 115.93901979451782,156.26325744453425,4.599260690313314,3.6005334167232 51 | 115.3543613382434,156.7179938524139,4.599244617425177,3.6005418118592676 52 | 113.79525619170634,156.78295356414012,4.599236266530581,3.600548165238872 53 | 113.21059625542497,157.43257663652207,4.599224370435457,3.6005595412059037 54 | 111.71645317823396,158.92671998094727,4.599218162298861,3.600565214874137 55 | 110.74202275920854,159.3814526983724,4.599192719527977,3.6005800444072897 56 | 109.50774275485394,160.42085075524037,4.59916628143336,3.6005935700851768 57 | 108.4033809414617,161.20039982432246,4.599157833494208,3.6006004258435027 58 | 107.16909498306696,161.7200964180895,4.599147185774194,3.6006104233660245 59 | 106.71436256884138,162.1748310341914,4.599134230818818,3.6006189745687607 60 | 105.4151158576385,163.08430388030084,4.59912089634548,3.60062801216527 61 | 103.98594540571288,163.66896176842474,4.599105636447207,3.6006397574513693 62 | 103.53121131015982,165.1630987979499,4.599097167541076,3.6006461527269105 63 | 102.42685967580847,165.42294274326517,4.599071844997434,3.6006591070955647 64 | 101.25754335547397,166.46233656864572,4.599053895353883,3.600671981056757 65 | 100.41303804149082,167.30684347643717,4.599039955417368,3.6006827333766975 66 | 99.76341871254931,167.8265387825047,4.599029334971762,3.6006915439044582 67 | 99.04883790861244,168.34623384515004,4.59901695147081,3.6007006850681473 68 | 98.3342589609079,169.71044134850231,4.599001309900348,3.600707885324535 69 | 96.25547028884124,169.7753965595023,4.598986857643026,3.60072220696178 70 | 95.08615511426586,170.29508967685607,4.598971611983581,3.600734014392135 71 | -------------------------------------------------------------------------------- /tracking_results/msvt/airplane3.txt: -------------------------------------------------------------------------------- 1 | 256.1,76.9,30.0,10.6 2 | 257.82255473295396,76.10087124530209,29.937732462094257,10.572137233966977 3 | 259.72940248361584,76.09630031674476,29.872318979409258,10.58127909108164 4 | 260.71939921167234,76.40179181178581,29.764137605197273,10.594233461633198 5 | 263.2295044909249,77.6395398890323,29.724834897238395,10.609191232413332 6 | 266.0726646410351,77.61624721626758,29.639388466893877,10.655776577942797 7 | 267.3220540750689,79.15857003680077,29.628351265338722,10.680808020016991 8 | 269.8503183229089,79.13586441156372,29.549679168325625,10.726219270491102 9 | 272.36967899561677,79.15955418067423,29.48633979411139,10.678839732270069 10 | 274.9245552968201,79.17841671529736,29.337754009674192,10.64111466302382 11 | 275.5865957091475,79.19258712810169,29.248300418738335,10.612773837415153 12 | 277.4857070157824,78.90268879363947,29.143114194082262,10.577064441570649 13 | 275.7132112445886,78.8911432812646,29.008082386223116,10.600155466320395 14 | 276.99900421936076,79.17389018774035,28.883723073695986,10.64646831262316 15 | 278.58154604005773,79.16080592189553,28.772893765645176,10.672636844312823 16 | 280.47760813305126,79.160355731425,28.63910997505825,10.673537225253867 17 | 280.5242513402624,79.46689683894847,28.54582356063587,10.668259754639909 18 | 279.0665640617883,79.74813237482272,28.42940057324472,10.7121481917593 19 | 277.91723032936943,81.57069014555134,28.306189455695215,10.699850523883041 20 | 278.5977244253228,81.27572207796001,28.152127880455712,10.686323350732073 21 | 278.9881991853438,81.27629625480952,27.97216604769083,10.685174997033059 22 | 281.4587144169508,81.27357727640558,27.818016423091947,10.69061295384095 23 | 282.7066665777594,81.26410522841925,27.707010203590134,10.709557049813586 24 | 285.17084921089287,80.9813915209072,27.53830273498518,10.680027240129933 25 | 287.3019193701353,80.70036378046426,27.420009416444913,10.650104578166577 26 | 288.8299362409353,80.11448567819068,27.312590353089867,10.642414911415798 27 | 291.25961734347777,80.11573732822828,27.15743735688125,10.639911611340594 28 | 293.4000621130239,80.12403201632773,26.97665669365886,10.623322235141668 29 | 295.5174087200634,79.53546513802769,26.821613943134153,10.634841573583397 30 | 295.87968833369877,79.51721477504059,26.677817847541874,10.671342299557596 31 | 296.8131651263238,79.78373659263,26.54885409347377,10.717628608106066 32 | 296.6111635711948,79.76748227849863,26.374571272991453,10.750137236368792 33 | 297.2495291479143,81.49783866715532,26.250507109148202,10.747425427842455 34 | 299.6289218437071,80.34743464856594,26.087557096583424,10.75031577551087 35 | 299.72078967891116,80.34435570082583,25.903821426175274,10.756473670991086 36 | 300.0926480979916,81.77062289503577,25.72969727046707,10.751902694835348 37 | 299.61548544906844,83.75131225551989,25.55007539521361,10.75933907971643 38 | 299.9968669900072,83.74779287672368,25.351799719744147,10.766377837308843 39 | 302.8831241243097,83.76901110662995,25.196489237500717,10.72394137749633 40 | 307.712271466332,87.67834467123711,25.03606147049587,10.727047003491245 41 | 312.79423815952106,89.0661262247443,24.887532600257117,10.733540706515592 42 | 319.2453914952851,92.66925024226144,24.735449467506115,10.733940758616148 43 | 324.5674965502699,94.60452538545468,24.581945582930405,10.728387502637917 44 | 329.32011215256756,95.15173465375017,24.423312744499228,10.733568773830966 45 | 333.21129337029333,96.80230601946016,24.306955736411,10.717856939852439 46 | 337.3817177158541,96.80869767349216,24.14997174857099,10.705073631788448 47 | 340.97964004078256,96.8131642629881,24.013999028284374,10.696140452796596 48 | 343.2120836402103,96.8192928912408,23.876457697920696,10.683883196291154 49 | 345.98206304981125,96.30446961823334,23.72336914308464,10.636155689432927 50 | 349.5271573414952,97.93246930251337,23.595986679767645,10.593759145511752 51 | 351.9998180502555,95.83188654122398,23.447527488904452,10.53104713328381 52 | 356.052685167916,95.0497101028413,23.28730772795509,10.506297115174842 53 | 358.2370899361005,95.57627483852792,23.13382354260122,10.5069989815554 54 | 360.1680495194893,95.29820688305847,22.944649470944697,10.538457021762762 55 | 361.04559232744117,95.27942622471345,22.75693584764974,10.5760183384528 56 | 366.1825369377154,95.29713564261209,22.890294442729832,10.54059950265552 57 | -------------------------------------------------------------------------------- /tracking_results/msvt/bicycle1.txt: -------------------------------------------------------------------------------- 1 | 352.3,185.9,16.6,30.6 2 | 334.47070496314285,184.10725722050935,16.426901557223047,30.962186291971253 3 | 325.6529561446106,177.14396854615157,16.218455999337426,31.505806244474158 4 | 322.7478433494343,168.89175019180547,16.04507033530007,31.555312003594086 5 | 317.97290567188907,166.54312075853198,15.901180582539098,31.77852543574808 6 | 315.07029850219453,166.21802684197183,15.734620431470606,32.42871326886836 7 | 309.1616123330061,163.00338993981225,15.501423435637637,32.832702406082596 8 | 303.2519887016556,157.1766034583867,15.2403037906425,33.1609313929686 9 | 297.704078425256,151.43286262947314,15.007326526947702,33.31961523430179 10 | 286.4891402063672,152.9005908165897,14.83310964583973,33.398037969253416 11 | 277.9148778180243,158.06800421634583,14.696276844023554,33.584733174046654 12 | 272.7522176860093,154.1241393120222,14.495778739809358,33.20217712193064 13 | 269.8553929260147,150.1627503005348,14.347885135360286,32.95533334880288 14 | 264.4070888788097,147.6678526944016,14.197605736367992,32.78991439748153 15 | 261.222340855642,145.15221152898977,13.984747067465673,32.701587505342594 16 | 258.0423165082976,142.80301361793786,13.80811402954254,32.31589753541483 17 | 253.81571682326188,140.84510145288542,13.651028506286607,31.926579418855997 18 | 248.56025562533253,142.65733749684324,13.526284617951863,31.84732942567149 19 | 243.30270564310345,141.57535752305887,13.456383222649386,31.89428910128813 20 | 238.0613748876385,138.20915109686553,13.362451597845235,31.5756398631854 21 | 232.82740692525996,135.87924094190674,13.348632302531653,31.343974403736702 22 | 227.31143174377746,137.3168925758556,13.258070387864045,31.2492992052471 23 | 222.88438452360774,138.75546719270235,13.11405274937653,31.140799841961886 24 | 217.8030705578351,136.45972109952973,12.95648887974567,30.916202521091627 25 | 214.8238709431505,135.21330504148764,12.777544048979818,30.681326166004705 26 | 209.80657098233283,135.28830825639514,12.682508001095803,30.53131973618971 27 | 205.19953914691578,136.37120785461562,12.496612447687495,30.379797516372072 28 | 202.94056221743188,138.77873770836396,12.353299324502524,30.226004791028153 29 | 200.33129458389809,138.89898158400487,12.2831022377939,29.98551703974633 30 | 195.7208762248502,138.95415083303791,12.315254818100442,29.875178541680274 31 | 190.83150345890112,137.39331814584534,12.264448441036128,29.720326613077937 32 | 185.97429024169824,134.82625159389846,12.196777839942122,29.63734129803848 33 | 184.10048412635928,134.88336842831814,12.046063760080452,29.523107629199078 34 | 184.1518700879999,137.22920146230368,11.943291836799219,29.348965416723715 35 | 182.2966783288196,136.02729775845063,11.80776106134132,29.188829961884142 36 | 182.3439665208123,134.44906234907208,11.713184677355885,29.164165109757423 37 | 181.14639957661643,132.6604403925093,11.571631196825166,28.936377969499397 38 | 180.56398603034495,130.91252937381074,11.47981881882186,28.662281595257568 39 | 178.42476865821104,132.21819863180906,11.399439930267803,28.541693726587717 40 | 176.29396050940244,134.74510815730312,11.324613907609217,28.443808755914723 41 | 174.1781621595104,134.52360505463835,11.239133906161888,28.270089718211253 42 | 174.2173382964143,132.79624534904337,11.160781632354091,28.048816660925272 43 | 173.9661144172768,133.23866152853984,11.055186526959709,27.77202716560179 44 | 173.40682837664042,133.35866290443184,10.969510168831093,27.532024413817812 45 | 172.5566846426528,131.06644993839203,10.87850385032375,27.33966691527726 46 | 172.30567841707267,129.96090463743235,10.787848254709367,27.180085330098006 47 | 170.285307046933,127.7001303054596,10.707547479512398,26.991869976356337 48 | 170.03949823189922,127.82467595190992,10.614621984621404,26.742778683455658 49 | 169.80372839338492,127.6476029122993,10.506907072558963,26.517670173585877 50 | 168.99788435877375,128.01664426903622,10.396449700138586,26.353635940659615 51 | 168.76054511237717,130.36242247777272,10.301448430092188,26.219517625903148 52 | 167.11274966942267,129.32549599393067,10.200901157602866,26.02927848798841 53 | 164.8678664914493,127.47602406010463,10.199054958542957,25.79806137000965 54 | 162.92421660253882,127.84354840420303,10.179921920589392,25.621074512637787 55 | 160.727240882622,125.71708343240961,10.132694460775266,25.43282555657688 56 | 158.51840869209119,126.38641451881853,10.137847572991067,25.197291200970486 57 | 154.3746742989938,128.13070499539108,10.201815753798686,24.998110489980213 58 | 150.24364869163412,126.86311543874062,10.266621482670425,24.8008744413319 59 | 150.21106822037063,130.77672895339927,10.33178242519736,24.60044057178618 60 | 147.99224412925778,132.49169363347585,10.425322946682956,24.42859195718806 61 | 142.5066190172821,133.6448935542927,10.553109576033496,24.290884834474536 62 | -------------------------------------------------------------------------------- /tracking_results/msvt/boat.txt: -------------------------------------------------------------------------------- 1 | 51.1,121.1,12.0,8.0 2 | 55.82198857783486,120.59307162229707,11.981189702055296,8.013856755405842 3 | 62.149163846935465,120.58720982617442,11.961265954292655,8.025580347651164 4 | 65.63172699555534,121.68711067474543,11.942736923028336,8.036059598774044 5 | 69.42845919235934,123.89070707670807,11.924833355173762,8.047943943204915 6 | 73.0681648741829,123.88679681076611,11.903650270713865,8.055764475088841 7 | 81.5917722041774,122.780364313056,11.88717470986971,8.060941068768079 8 | 82.70599464105337,122.77726912264414,11.865271324201146,8.06713144959179 9 | 86.8119818759816,122.77524937211926,11.843055772785691,8.071170950641557 10 | 90.59896433113278,122.77103343120899,11.822382374667578,8.079602832462099 11 | 92.81118502197829,122.76903029121907,11.801596893376177,8.083609112441923 12 | 95.3359290117548,122.45047282094573,11.780870088701352,8.092128906128831 13 | 97.85879620167059,121.65980347020879,11.761125122510878,8.102845915839872 14 | 102.73582185098793,121.49779607456323,11.741151722265881,8.112858194279703 15 | 103.68739179631879,121.33595091194654,11.721203670925773,8.122683212959497 16 | 104.63842141062665,121.0172912012087,11.701495704857273,8.132552213586083 17 | 107.15644322550384,120.54128431161169,11.68288163952756,8.143797949450486 18 | 109.20491049475295,121.00895878271076,11.661354834879104,8.148927715063808 19 | 110.62500515058598,120.84887890157744,11.6404172425227,8.155837286296089 20 | 115.48789477858168,121.15932304417186,11.619062091959298,8.161040878876786 21 | 118.00069796903921,120.21744238510574,11.5983651329583,8.167961163791226 22 | 122.69977073714745,120.36980698196876,11.57840518098226,8.175838156206545 23 | 126.45766003929936,120.83103621291116,11.561007521140887,8.190677312379577 24 | 130.05994979293408,121.13804420896392,11.541937187765786,8.201488204960507 25 | 133.65725288666772,120.51140084098371,11.530271594973073,8.205567880977503 26 | 136.4750926993144,120.81635137293608,11.514036099012168,8.220049498109681 27 | 139.13789694853887,121.12387568950001,11.49554864571409,8.229368046764279 28 | 147.57080343552883,120.34006681283753,11.480741498226704,8.236707482821414 29 | 147.26728744237914,120.49132677284405,11.463871390692827,8.246138609725005 30 | 149.9252099078261,120.64282641109693,11.449467279773028,8.254988793217716 31 | 152.27399507995315,120.79765225995843,11.428534428733474,8.257112928375719 32 | 154.77638434105805,120.95089949347326,11.407610305856185,8.26210936130431 33 | 156.4991941887743,119.86030410641148,11.385779770809423,8.264525215182385 34 | 158.9958062899134,120.95504280307836,11.36790827337111,8.251764630216039 35 | 160.55760366424866,118.62287839609345,11.349063066596717,8.258969131341566 36 | 161.18877079773014,115.05361333515866,11.327951777810423,8.260467128695286 37 | 163.05957912215084,114.12446196648963,11.306423546095084,8.258725657470343 38 | 167.09497952883765,115.20582855100695,11.286496150891223,8.263535331789127 39 | 171.9011313295906,114.89468626676825,11.266315591529033,8.266973252386265 40 | 175.77357389896818,114.73515306151214,11.250706137599474,8.27686863550545 41 | 179.79989233327302,114.73863439596458,11.234548039008859,8.269905966600557 42 | 180.73545242123592,114.73569045764845,11.215824351805999,8.275793843232847 43 | 181.978626864912,114.58214779598453,11.197819557151295,8.2743361549735 44 | 184.1456935190427,114.57836162699172,11.179087583520568,8.281908492959118 45 | 190.00908715124388,114.42195986030274,11.159367576914725,8.286631309026637 46 | 195.25212157662952,114.26507217969633,11.140409569536441,8.292550468963174 47 | 202.3366738822424,115.3423026295333,11.123803131227062,8.291730595602614 48 | 206.33905273354222,115.19091960565926,11.111307279733177,8.287101956769693 49 | 210.1874922650852,115.04031062429478,11.092593935488875,8.281193290745001 50 | 212.49495577078193,114.88653609455301,11.078797629439268,8.28200030320563 51 | 214.3428663878519,114.737172131992,11.061499600823115,8.274184627867319 52 | 214.3499825352012,114.58079742146644,11.047267306124551,8.280784770815924 53 | 214.3576098886041,114.27084649152985,11.032012599318755,8.288607562582698 54 | 214.21145831088688,114.88344426553012,11.018381608895277,8.287148598013804 55 | 210.7047408616501,114.88592893617563,11.000698834692413,8.282179256722774 56 | 205.82836524354985,114.7350573375774,10.982335421843906,8.278575121136448 57 | 201.4106632751793,114.58678793556031,10.972568350122605,8.270108028327085 58 | 198.97508753253865,114.44083207905105,10.968256515501603,8.257303283851712 59 | 197.91053347821142,114.29651380504838,10.96628879027758,8.24150042701728 60 | 195.3283499133986,114.75194078231907,10.960123665865284,8.243093340835555 61 | 190.77033750719414,113.84093802519122,10.953733466689505,8.240615852774313 62 | 186.6762313948529,113.68719235747541,10.93552374751763,8.244165634729853 63 | 181.06235275374814,113.07731471592254,10.925631035326353,8.249039837359849 64 | 175.298808184358,112.92552282925958,10.914076975702631,8.248975105464611 65 | 174.39675964020816,113.23046630189596,10.897354701585202,8.246027947664222 66 | 174.55712149746878,115.20395520563208,10.879795390211132,8.24018738110581 67 | 174.86593188797747,115.96149667479513,10.867771449638939,8.239096543892684 68 | 175.32888829784397,116.26273165614344,10.849645570051532,8.24181787462646 69 | 175.33704312284615,117.47041539259439,10.83333592004713,8.245344285366889 70 | 175.3453082832098,118.07838724267461,10.816805599319892,8.238076265858016 71 | 176.25860606688022,120.49013464515824,10.80098124099756,8.243304684940123 72 | -------------------------------------------------------------------------------- /tracking_results/msvt/boat3.txt: -------------------------------------------------------------------------------- 1 | 118.5,88.5,5.0,6.0 2 | 117.38955606770718,88.69763050499962,4.999832026778583,6.000231376065982 3 | 113.98815256822594,89.39523805799737,4.999579888627882,6.0005155802475265 4 | 113.37765707091887,90.00572183937301,4.9995067553983485,6.00061214533995 5 | 113.37771140586347,90.09286006240454,4.99939808550916,6.000773743786172 6 | 114.68607120027411,90.00554501831543,4.9992603373255635,6.0009650425885575 7 | 114.0755955871292,90.70322939120014,4.999134901385893,6.001112482224249 8 | 115.38392179244363,90.09264802772044,4.999079125572961,6.001196779602884 9 | 115.99450166227766,89.4820527264471,4.99900063877739,6.00130612927709 10 | 115.38399182923646,90.17976868017546,4.998936087418463,6.00139904175329 11 | 116.69233219722724,89.39473400132297,4.998870307298957,6.00149942594104 12 | 116.0818244765253,89.65633851898673,4.9987953346875384,6.001614853762936 13 | 116.69240648924111,90.44127697497099,4.998725748184319,6.001716506130926 14 | 116.25634599786483,90.26676804606008,4.998634174931781,6.0018493415507015 15 | 117.56470881238015,89.65614756328578,4.998554848830939,6.001988699065372 16 | 116.8669573634471,90.26666183656141,4.9985060443277884,6.002067892087224 17 | 117.47755982862637,89.91770697265933,4.998411914159545,6.002200019782628 18 | 118.08818276709508,90.70263543801394,4.998280498980821,6.002347397048906 19 | 117.7393327315087,90.52813828134965,4.998200261053404,6.002451555827378 20 | 117.82658584538024,90.00474907820585,4.998139424885589,6.002557612663333 21 | 118.08828703714906,89.65581039203927,4.998075193067483,6.002650782703767 22 | 118.43723715659728,90.35351598850552,4.9979607710389535,6.002811223507113 23 | 118.96063645530398,90.35345690937426,4.997844697552256,6.002929381769638 24 | 118.35014251568715,90.35337940633674,4.997703319275456,6.003084387844664 25 | 119.04798834255467,90.35331094536247,4.997588845129827,6.003221309793233 26 | 119.2224647290658,89.82992513623145,4.997530900731231,6.003308442184305 27 | 119.65866249147706,90.4403910716319,4.9973745072285185,6.00351135523119 28 | 118.96095396467868,90.26585383230142,4.9972040646981,6.0036889598603285 29 | 119.1355021409662,90.26576831108167,4.997004564814021,6.00386000229984 30 | 119.74611477679592,90.17849994809804,4.996914184170132,6.003948886693442 31 | 119.48447859079587,89.9167810223327,4.996843295241427,6.004043477295347 32 | 120.5312478845329,90.61447487676197,4.996681560258351,6.004240336764097 33 | 119.74634567755159,90.61436492826026,4.9964494670551,6.004460233767537 34 | 120.09534700590022,90.26534245585195,4.996239390767402,6.004712598174559 35 | 120.35711952731016,90.17803013306285,4.996040302058471,6.004888592382444 36 | 120.70610257238484,90.35241415530531,4.995866811615526,6.005016847750717 37 | 120.18282067711799,90.35234160289149,4.995746664677065,6.005161952578355 38 | 120.96788304850209,90.26505537896557,4.995650541121816,6.00528677607322 39 | 120.96799304969001,90.0904468765063,4.995430538745992,6.005607778714398 40 | 121.14252261698812,89.5669813500133,4.995270227953836,6.00584236028819 41 | 121.49150394445182,90.09023127759805,4.995109374229495,6.006045206923273 42 | 121.84049063991965,89.74122902622798,4.994939931055264,6.006245761901954 43 | 121.23002082276851,90.52614208326371,4.994720126812386,6.00648178310289 44 | 121.75351232954918,90.52600114750196,4.994445766396556,6.006763654626389 45 | 121.05591837559824,90.78755663027529,4.994022782446702,6.007006773524124 46 | 121.66668726713411,91.04906689968578,4.993622844501396,6.007331025471607 47 | 121.49238822450073,90.17669113224488,4.9933273296193255,6.007614559609252 48 | 122.27754107321175,90.08928254368173,4.993039241305905,6.007985335723469 49 | 122.62648193482302,89.47866030113042,4.992947427626423,6.008097479125709 50 | 121.92878664865106,90.00190048969176,4.99275618509201,6.008303463161774 51 | 122.27776210189899,89.47848297191517,4.992596549667666,6.008451592107683 52 | 122.9756348389028,90.35063735949805,4.992431266240979,6.008618055168075 53 | 122.36516658457678,90.35055735329135,4.992235815479704,6.008778067581502 54 | 123.06316111785534,90.4376264714549,4.991820598766079,6.00908656248481 55 | 123.06325998641714,90.4375047017718,4.991622861642505,6.0093301018510275 56 | 123.58667799336902,90.17574422623034,4.991458899936764,6.009515026834921 57 | 122.97621728499868,89.91397893714294,4.991261474101699,6.009708958191552 58 | 123.58685697710855,90.61167215379271,4.9910995523238615,6.009885339111357 59 | 122.97634265459509,90.43718008905991,4.991009983867612,6.009978550438881 60 | 123.67418499532435,90.34990368620527,4.990888908557822,6.010085905379597 61 | 122.97647184130817,90.52427929775126,4.990754016553471,6.010224982296749 62 | 123.58708614286775,91.22200761007521,4.990641234194421,6.0103292956604335 63 | 123.41267066936643,91.13475149935785,4.990582373191654,6.010396613092479 64 | 124.80826471134452,90.0880483770978,4.990514171651748,6.010462945800354 65 | 123.41275381793398,91.13466989914367,4.9904173314684295,6.010558871961936 66 | 122.36611146280593,90.52408182740102,4.990364084387924,6.0106212070009075 67 | 119.7496661972747,90.4366634075343,4.989906646928612,6.011013114450283 68 | 118.00537262591823,90.26207468521649,4.9896221327807035,6.011303393399825 69 | 115.9993695635424,90.26197162264424,4.989428544380397,6.011509518544319 70 | 113.90619868836819,90.00020730667103,4.989125818667475,6.011707590983099 71 | -------------------------------------------------------------------------------- /tracking_results/msvt/car.txt: -------------------------------------------------------------------------------- 1 | 244.7,32.5,29.4,34.0 2 | 246.0392624900227,35.420792140450615,29.74451744209257,34.19873995784021 3 | 246.34719138110123,38.23872171030305,30.143089820620993,34.64946178224834 4 | 249.29037804292878,41.15487902990753,30.42415085969158,34.98458150576505 5 | 249.11131407079546,45.14708351907511,30.782278803958185,35.30159747819118 6 | 249.4544419858877,42.281051077711254,31.144435724870107,35.791598605436974 7 | 253.04101348920034,44.127418213432904,31.404686533198166,36.346517942538426 8 | 252.807192840839,44.916996479601664,31.87232782992085,36.91692044617069 9 | 253.06727503561265,47.37264325470381,32.443402362327845,37.461821505737944 10 | 257.37595706774476,43.71652397993614,32.69782104400392,38.12022299581806 11 | 257.5841168100049,47.96030099382901,33.40485721040336,38.61951417539041 12 | 257.3954522216695,51.653580088862014,33.782186387074276,39.231005217421455 13 | 257.11759012526943,56.022430039192166,34.337910579874354,39.759050707694215 14 | 252.6453438647303,60.363609404306345,35.054312514299234,40.48022407649834 15 | 248.07168534564354,64.72919152714178,35.813704396892554,41.335260008633355 16 | 244.02389960924245,69.80394140591817,36.56592448789151,42.20078732378545 17 | 243.69347567303026,74.32441426102369,37.22677236031588,43.15629400703169 18 | 242.59529594929717,78.29391761632354,38.14798421466149,44.14332044827598 19 | 237.25826225125795,81.04415651009924,38.378530108928935,45.17004359935645 20 | 237.01851156179598,83.2372006096914,38.858031487852884,46.08464663769469 21 | 236.72376732674905,83.33156311446405,39.447519957946746,47.24310184441367 22 | 236.34215979199263,88.30389150856462,40.21073502745959,48.296514037766954 23 | 236.8597000562482,87.05884844060472,40.5791766405969,49.38307803203834 24 | 237.14060776407644,89.2577905542266,41.443739938571966,50.690708659320805 25 | 238.3698710564878,94.4885920234955,41.90667369402592,51.91494708188989 26 | 238.80915709140302,97.672142803056,42.515341120093424,52.98404300225879 27 | 240.50803914610412,99.37862601651726,43.65872492211099,54.11222448675608 28 | 240.2003468582703,97.96667270432073,44.27410949777862,55.38629773380264 29 | 239.82386994207062,94.71968633430433,45.027063330177995,57.14150235742501 30 | 237.6716932275365,90.69332781172025,46.09338119445132,58.718148273003365 31 | 235.7316119558014,85.75080492978233,46.65192872124788,60.299156495195135 32 | 230.22693150156672,85.73861970718934,47.49525556375018,62.01786595137565 33 | 229.68290132611094,84.83369430596369,48.58331591466175,63.82771675382698 34 | 228.1792364215052,84.90625842218502,49.81027306620561,65.46296117905186 35 | 224.88461683398705,78.49368995231681,50.92243119797179,67.33393603224795 36 | 221.5547282818955,77.43867087567298,51.96395732599612,69.44397418553562 37 | 215.24829266177693,73.47024751274009,53.04296700814488,71.61389013235723 38 | 213.5742380139686,66.43917179084363,54.41768168209704,73.83567384616317 39 | 211.90964182213668,72.43275037796361,55.71672777048869,76.05954073882825 40 | 210.19666740352508,78.50092661090538,57.0569998876483,78.52292531338978 41 | 209.47041505642207,82.68110968140911,58.50950458185436,80.89031158804896 42 | 202.08372315311033,81.40723685933278,60.048049410762836,83.43805723220161 43 | 200.33945481255094,77.56218961167252,61.26634364819802,86.58766684015504 44 | 193.75935218366877,75.9208069053729,62.7337844932576,89.87043225275427 45 | 192.93329658459507,75.78117459280986,64.385895691405,92.56269651261212 46 | 188.38436236579875,75.3606551439515,66.0392460755939,95.88524142813007 47 | 186.192978160504,84.95555935304401,67.86238840917797,99.73206770299396 48 | 175.86376266242414,80.69966713586749,69.9810708710449,102.94678112754907 49 | 175.15363186011837,69.1090186958084,71.4013324756564,106.9987628106392 50 | 172.7646300715682,68.68147089215896,73.36131559615492,110.67187887453996 51 | 171.63579291312723,77.10893966655917,75.61898991303684,114.16269441663671 52 | 170.41018672409496,75.50253265452874,78.07020229110138,117.37550844069759 53 | 171.98048044621976,67.92429829280739,81.10368101382326,120.18384483019744 54 | 180.1407448974204,66.19826742517682,83.86548881504436,123.63590656545858 55 | 188.24682932067964,67.7753591056478,87.32708435144482,127.03964466548962 56 | 203.30440332550427,71.3891070649291,91.09656741037124,129.97753806749967 57 | 224.0522548442313,81.34743883366531,95.0482703391533,131.0366003605978 58 | 259.8188854272953,80.44819538313592,98.64607803340074,129.25741731592439 59 | 285.7031642944845,67.12632639893405,101.02309869673027,127.02351347221723 60 | 296.23722537633637,84.51045765059207,101.64030706130225,124.78324676131476 61 | 306.43438894731383,98.94106445529619,102.7837516804243,121.04943353982965 62 | 310.7056466079628,98.21889100799594,101.34167524336758,118.9435609923095 63 | 268.90949134252565,101.6435450856053,104.57052423725972,115.58831638217697 64 | 285.9877569353658,113.91717567944417,108.84500053099437,112.00342291054376 65 | 301.85705516713267,114.24354219507472,108.65737232482508,107.84502673957547 66 | -------------------------------------------------------------------------------- /tracking_results/msvt/car4.txt: -------------------------------------------------------------------------------- 1 | 162.7,94.1,24.4,23.2 2 | 159.90731332764045,91.41480850322645,24.45210893343765,23.03711858226569 3 | 158.00344254422896,91.47365865158557,24.491038473469473,22.919418285547472 4 | 157.62920599489792,88.89263477505939,24.487018982985802,22.814017914579125 5 | 157.62286291870922,88.1670816148654,24.49970513536319,22.763640558211083 6 | 156.5081968667644,86.34921698786975,24.47863358652231,22.64869705765158 7 | 153.8984515389164,84.5129846799057,24.46239575454096,22.58135561095303 8 | 153.53875280925396,83.80979150151565,24.435166860751522,22.494489261504462 9 | 151.3278570132817,81.27343585245353,24.38812629289283,22.353563039858262 10 | 151.0000495503241,80.93470142269388,24.301935873694134,22.28922655426367 11 | 148.80548983296902,78.4154515064816,24.254541140892798,22.151793191258186 12 | 148.8503175224751,77.71828536494334,24.164885761880615,22.07318789441159 13 | 148.1544808465173,75.93030676986467,24.088960917713766,21.980149594362743 14 | 146.71481533275352,75.59185304514389,24.043838951516566,21.925943795373108 15 | 145.28241950804207,73.07960290443565,23.990492685182026,21.84370272421402 16 | 145.314290712116,73.11268178378002,23.926750277034156,21.777544965525273 17 | 143.88917870038063,72.7560141563511,23.875721066202296,21.765566911807458 18 | 144.2854277718568,72.80576792975961,23.80754289983414,21.66605936499046 19 | 144.34231538286102,73.21792081585717,23.69376767782569,21.563405298977177 20 | 144.3938813646658,75.08123846809724,23.590635714216145,21.42785605747528 21 | 144.78893932105717,75.15554455529445,23.514941107189966,21.279243883080866 22 | 144.4778321889198,75.20024577514819,23.426309718380118,21.18984144337339 23 | 144.52087923318777,75.23583445859731,23.340215629844188,21.118664076475152 24 | 144.22803080760525,75.29115847423206,23.22038834311813,21.008016045205625 25 | 144.26019351892302,75.32662527988859,23.156062920482583,20.93708243389259 26 | 144.31899125576206,75.71251860538501,23.03846744680454,20.865012954758942 27 | 144.38680194013696,76.79117635543165,22.902846078054697,20.797840602206186 28 | 144.4024035680397,76.82883490609936,22.871642822249278,20.72252350087076 29 | 144.44611934197928,77.1913043683546,22.784211274370065,20.689392124370425 30 | 144.4879092220778,78.25709908402517,22.700631514173036,20.627513226451583 31 | 144.53501148742163,78.63996599989105,22.606426983485402,20.54937730858247 32 | 143.20602007221208,78.6685174142581,22.52495217789962,20.492274479848376 33 | 143.24320135445265,79.06785427418218,22.450589613418465,20.376269294603453 34 | 143.29613498038327,79.43450259224208,22.344722361557224,20.322610657407548 35 | 142.98860521900605,79.48976150348635,22.28266714421271,20.21209283491902 36 | 141.34790415891885,79.54965212409137,22.19224208925384,20.09231159370899 37 | 141.3906905642644,79.27364765514304,22.106669278562773,19.973298550561605 38 | 141.4086418692558,78.63592353667208,22.070766668579953,19.913213148358057 39 | 140.76808753675226,77.3402235741727,22.019399747639312,19.839661901461376 40 | 138.80908396605773,77.38221926392998,21.95190867091474,19.755670521946787 41 | 139.16638656077532,77.41014050132463,21.899144362103698,19.699828047157496 42 | 139.18799385449418,77.44286552819784,21.85592977466598,19.634377993411086 43 | 139.54800996563094,78.12895678552796,21.794283014180465,19.578966402326767 44 | 140.24208442724816,80.46157393328517,21.719189939659167,19.50942757730839 45 | 140.57694369299148,80.47704461901094,21.70370379501748,19.47848620585684 46 | 140.89412297793393,80.52554041629634,21.722837108427367,19.38149461128607 47 | 141.2310015955143,82.83869208463202,21.70131018407683,19.3208034502858 48 | 142.22071213083746,83.20560650953932,21.67463666386625,19.237890450616437 49 | 143.54951543661076,85.54245793343291,21.61368049871477,19.10832588402075 50 | 144.8644489187546,87.82362293054045,21.568296285101404,19.06884070348566 51 | 147.45518665174535,90.75870170986099,21.545014898600847,19.001651484260687 52 | 148.74634199244957,94.00507515685916,21.536011370397627,18.942172473277267 53 | 150.37065871356552,96.62281814392406,21.498511186034555,18.844499711737537 54 | 150.71374061530656,98.90461052763999,21.45241191450535,18.76136666797636 55 | 153.59542321224947,103.72743715979055,21.43106815381957,18.68574912567523 56 | 155.8174914996266,108.21233260998396,21.44206753922276,18.62623014560333 57 | 155.8162170853986,110.78650384519638,21.444616367678798,18.563153466504367 58 | 157.07945691930775,113.36252539369477,21.456850927226206,18.488538824239026 59 | 157.73064027604514,115.94084618494352,21.421809907068518,18.401200015009913 60 | 159.95971721430232,118.52192377223179,21.3855804755771,18.292672777602448 61 | 159.9755169256125,120.43172214073296,21.353981052956723,18.249369351464146 62 | 159.6713653027352,120.15084381701705,21.334095560224554,18.182937260409204 63 | 157.80823544820694,118.00217759954396,21.29953672114535,18.09264805586365 64 | 157.83548037312084,116.16424307503843,21.24504687131753,18.01970442077534 65 | 157.53077815949175,116.19145866555941,21.231679630939748,17.96527323973336 66 | 155.35604158909393,114.98089639126052,21.22938405187018,17.899672805551003 67 | 154.1260805898683,113.14521462473752,21.20697932507,17.84754625071985 68 | 153.521407607385,112.85980208146036,21.177550164582364,17.798983774547064 69 | 153.22641238412473,110.73275510617559,21.149398684987247,17.7260842423071 70 | 151.08832416458958,110.77798192651171,21.10992778944779,17.63563060163485 71 | 151.08576106645089,110.82352259171216,21.11505398572518,17.544549271233976 72 | 151.10241335645293,110.86034614914237,21.081749405721126,17.47090215637353 73 | 153.2602049920385,114.55963403437389,21.045438275618498,17.408221484885168 74 | 153.581080779301,117.35018541226148,21.013428475163852,17.314794695743405 75 | 153.6166848324283,119.50105792627497,20.942220368909243,17.267127519101265 76 | -------------------------------------------------------------------------------- /tracking_results/msvt/double1.txt: -------------------------------------------------------------------------------- 1 | 136.5,135.9,13.4,32.8 2 | 135.4958141631404,136.5409358141318,13.69107733749866,32.67001138039791 3 | 132.83512988819086,137.00401140756497,13.968216960911802,32.46446432588674 4 | 132.6135075875105,137.372624535763,14.41146156227253,32.4497793074745 5 | 132.10044577788295,137.74469233015412,14.707394823351947,32.43583407686795 6 | 131.94798888814174,140.78063679508065,15.012308602834345,32.24568510234273 7 | 131.83559527900647,140.90722398122267,15.237095821104884,31.992510730058736 8 | 129.93716077963316,142.4439745373942,15.343845596520685,31.871104996380275 9 | 129.83436002829472,141.70515058692447,15.549447099197533,31.872539890437576 10 | 129.78883003839323,141.7204103070018,15.640507079000557,31.842020450282895 11 | 129.31359523912843,141.81495653747928,15.848112485741789,31.652927989327942 12 | 129.6289885069546,144.08671303176087,15.961017760609447,31.57156586388453 13 | 129.29877885313556,144.12004802459143,15.876983404108644,31.504895878223383 14 | 128.89127717298683,144.17552974860524,15.949980540067818,31.393932430195765 15 | 128.15023574533038,144.17166597635384,15.94879484825148,31.401659974698575 16 | 128.50623800722568,145.66628653433685,15.978518320358315,31.37933084232231 17 | 128.48750294702447,145.69320000087038,16.015988440760744,31.325503909255232 18 | 128.49727878546514,145.7008729250506,15.99643676387937,31.3101580608948 19 | 128.55227021152308,145.794057915284,15.88645391176353,31.123788080428 20 | 127.46658762557897,145.8241925176424,15.848219498181768,31.0635188757112 21 | 127.10041881500061,145.48542193502115,15.845579923608387,31.006082845223577 22 | 127.09923293164167,145.95727030988283,15.847951690326283,30.79646734138472 23 | 127.13106647728155,146.06565053074044,15.784284599046524,30.57970689966945 24 | 124.69087360395386,146.87845923113935,15.577743455622121,30.40749718175158 25 | 124.36378610675408,146.16601450860878,15.511348072891288,30.39124587255189 26 | 124.37282070679778,147.63985773355319,15.49327887280388,30.320267754690544 27 | 123.29316222191784,148.08252538320116,15.499157579411653,30.152745209778647 28 | 123.24264568492977,148.10087332158264,15.60019065338778,30.116049333015695 29 | 121.47629189117417,148.06965489784884,15.549684287737572,30.178486180483272 30 | 121.44051483366913,148.1003358901897,15.621238402747645,30.117124195801498 31 | 121.37610914398357,149.16108996825278,15.750049782118758,30.146686401965248 32 | 120.94800225696098,149.55119215338132,15.886571006572158,30.086174581299964 33 | 121.63603829538502,150.99840166433097,15.952811368308014,30.076380436568655 34 | 121.62736209729526,150.65410930764935,15.970163764487523,30.04280975959687 35 | 122.44451427409156,153.22934851263133,15.779772533337258,29.946027278181 36 | 122.47645327761141,153.17752400627208,15.71589452629755,30.04967629089952 37 | 122.49416749468413,153.23625204926532,15.680466092152113,29.932220204913065 38 | 122.52099393066206,153.7101465313987,15.62681322019625,29.69973873826678 39 | 122.60724946749266,153.6873069400409,15.454302146535055,29.745417920982312 40 | 122.31759824136996,153.6912248845985,15.324982607802012,29.737582031867117 41 | 122.26792997499835,153.76858774589968,15.424319140545247,29.582856309264816 42 | 122.24283455127836,153.81761209364294,15.47450998798522,29.4848076137783 43 | 122.96987595677568,153.7775838936259,15.430641701389872,29.564864013812382 44 | 124.37938658330961,153.4690248558444,15.433762303555387,29.476446625566986 45 | 124.06544649747052,153.12775714726033,15.35736424873383,29.4547038162354 46 | 124.07149371560736,153.17844060409377,15.345269812460154,29.353336902568522 47 | 123.30756668022488,152.7324297879071,15.471282176981628,29.5444376818201 48 | 123.29391057948419,152.64936686158123,15.498594378462986,29.710563534471877 49 | 122.87581876334325,152.23780938116303,15.625905664660568,29.824806149223924 50 | 122.82501971844374,154.4110832256552,15.727503754459576,29.754879377563114 51 | 122.82480443612981,155.1196976192128,15.72793431908743,29.764629458741965 52 | 122.49477571608395,155.16605510364977,15.674350153938692,29.671914489868 53 | 122.52389220638345,155.18483147015954,15.616117173339683,29.634361756848502 54 | 122.54563910778623,155.23356139724834,15.572623370534119,29.53690190267086 55 | 122.58381934634633,155.34666784120614,15.496262893413919,29.310689014755262 56 | 122.67959283468447,156.13925508816354,15.30471591673765,29.131313497037965 57 | 123.09139974444616,158.73763294780062,15.178027908898342,28.813038459552338 58 | 123.12678194791926,158.84320733850788,15.107263501952175,28.60188967813781 59 | 123.20606865718999,159.55030683117758,14.948690083410696,28.559001189989427 60 | 123.25506976284427,158.94579449602477,14.850687872102116,28.40347300291685 61 | 123.34354829858133,158.70300463082253,14.67373080062803,28.2107790688376 62 | 123.42623973213999,159.18416331608745,14.508347933510688,27.920814357686602 63 | 122.14678008933772,159.2969492069938,14.406508446895733,27.695242575873912 64 | 122.45223723062988,158.9819227456881,14.45567609111263,27.665213571684077 65 | 122.8263325502402,159.33835940894977,14.367973481523142,27.612828274791926 66 | 122.85858043165096,159.31094394187136,14.303477718701602,27.667659208948738 67 | -------------------------------------------------------------------------------- /tracking_results/msvt/double2.txt: -------------------------------------------------------------------------------- 1 | 129.5,110.7,13.6,21.0 2 | 132.17026609183662,111.02859355566656,13.813165274953304,20.981237253323524 3 | 134.88795969483155,111.05871075299063,13.872132928661063,20.921002858675365 4 | 138.13029510844265,109.68804538415122,13.981592712103755,20.914779175243808 5 | 140.32561895134907,109.18183973206,14.000936528616478,20.824692603844863 6 | 142.5482793656217,109.24181152711708,13.957258003855916,20.704749013730694 7 | 144.76132328498161,108.17897291061333,13.912403156925777,20.639809750843376 8 | 146.98673411241288,107.38543347377342,13.828928783884626,20.589133393840186 9 | 147.85049392769085,101.42936161072417,13.732670071552896,20.53869705296116 10 | 150.07816651477492,97.36697646717215,13.608350705243737,20.542793950329667 11 | 152.28807338465646,95.20654999804891,13.503409331312081,20.548774522744708 12 | 154.4623791573256,93.03898613326959,13.45632332861582,20.582376709661276 13 | 158.25973072651811,89.26263310894956,13.385354001543956,20.611348946988286 14 | 160.44106609545423,85.49167928491327,13.315934599843702,20.640066756759722 15 | 162.62267044867903,83.05159997039829,13.240118725313527,20.696908449880354 16 | 164.78387793838078,78.50075231026707,13.201765111380446,20.694973368518205 17 | 166.95311071462956,71.00751197251957,13.141961423069498,20.70613751935998 18 | 167.25161717947208,61.41874457005024,13.078942399282743,20.659891711959634 19 | 168.8483733455259,56.385289233330596,13.078833152128427,20.614359283046774 20 | 168.8694568193191,50.29574894673507,13.036666204542056,20.56790879284719 21 | 171.00439868945062,47.41315259157405,13.007847487061253,20.50163709684358 22 | 172.83446132823337,46.120608466289426,13.048252746048385,20.44348924987525 23 | 174.92207063904968,46.13401753379841,13.100633397114306,20.416671114857277 24 | 177.02808064522802,46.18124489587653,13.1200248578334,20.322216390701048 25 | 178.60729564011044,46.20905091372939,13.128544267395531,20.266604354995323 26 | 180.73445294572946,46.255247341635155,13.091246695299956,20.174211499183794 27 | 182.60887061925334,46.29118146280325,13.018132096279594,20.1023432568476 28 | 183.420974213815,46.29856266950124,12.9622872731897,20.087580843451637 29 | 185.54090232786794,47.34606134858528,12.895435585657948,20.079085755570638 30 | 187.6477636405396,46.0137483029728,12.84469580157527,20.141847571007652 31 | 189.50345987236736,45.9852061331923,12.776571849247837,20.198931910568657 32 | 191.6147797660487,45.70786036244012,12.71537846434644,20.23344265176536 33 | 193.72610613831594,45.67946096045506,12.6500799868682,20.290241455735483 34 | 195.0353699592478,45.666418322042304,12.628667548668515,20.316326732560995 35 | 197.11698820727167,45.40164897849563,12.621065190035434,20.326411152477505 36 | 198.9379321755514,45.362563988385375,12.615521066036216,20.404581132698016 37 | 198.96545036233238,48.24178311233795,12.560484692474247,20.37231534004468 38 | 199.75864570405255,48.73873023383299,12.53152742830224,20.416710043233508 39 | 199.74608375964797,48.758410157029566,12.556651317111413,20.37735019684035 40 | 201.54473700151271,48.781944227631975,12.593432638821909,20.330282055635532 41 | 203.36694915449195,47.24471855885591,12.58249046375995,20.290320138133527 42 | 205.21784099317415,47.26648137098036,12.50868132960665,20.246794513884616 43 | 206.26712725447504,46.52512130856931,12.475623408334519,20.18037868770946 44 | 208.04945152644126,45.77579136805527,12.514712307985475,20.134579664344653 45 | 208.2972994628287,45.81072883212294,12.53380715928316,20.064704736209322 46 | 210.36540713234547,44.50619333180716,12.510075576681771,20.103473389070814 47 | 212.19160532969602,43.96216695151094,12.457385570977875,20.163038609949787 48 | 212.96068622473362,43.93750802103603,12.46197415370734,20.212356470899596 49 | 214.7374953934715,43.648358681566094,12.513846896933977,20.275584995453414 50 | 217.04569145655086,44.413063429948096,12.549549766627905,20.296873830640294 51 | 218.8540957601706,44.41893263374322,12.55750779411529,20.28513542305005 52 | 220.67730190183568,44.43807484013223,12.53556691505698,20.246851010272024 53 | 222.73261559643623,45.47025817126327,12.5596127741291,20.24982097214656 54 | 223.99837526110582,45.49057787903465,12.614520472950012,20.2091815566038 55 | 226.0556384118621,45.50953185612355,12.640801542194223,20.171273602425998 56 | 227.8750184949758,45.26103855054471,12.624354423262826,20.150786921112818 57 | 229.7077024125882,45.005136941777174,12.577194270972157,20.145703326800177 58 | 231.7874106249475,45.03861332580666,12.54588901767122,20.07875055874121 59 | 232.0327199806261,44.53080041310707,12.569746492508006,20.06542401175249 60 | 234.08658755364186,45.0503361059191,12.579436316585365,20.055708868655678 61 | 234.34503844532824,44.552936574886246,12.577229748841669,20.021117499463326 62 | 236.14588623086743,44.5376911322851,12.574489024794712,20.051608384665624 63 | 237.47065943980942,44.540515338037075,12.497692064788389,20.045959973161676 64 | 237.72606664746445,43.24282427798576,12.500045665489353,20.075502013209196 65 | 239.56607933328178,43.7412813259901,12.415590548573249,20.10589370426295 66 | 239.61210415184058,43.23946019825631,12.323540911455677,20.08417013417798 67 | 239.89663329797557,43.21538050446171,12.265280954958056,20.132329521767172 68 | 240.93342818266186,43.47382348597678,12.23383471294418,20.12597944057672 69 | 241.46302440362973,43.23962151540372,12.194457177370742,20.084475928541707 70 | 241.22584502780845,43.7576103254206,12.160199861380026,20.065730443774548 71 | 243.01041938318284,45.79705317391635,12.14532549407179,20.04887256785798 72 | 243.24188776258612,47.58013065635133,12.1896366361656,20.033452909290325 73 | 244.74581802913983,47.85056516325167,12.228380437116828,20.00035128449941 74 | 244.19537040228127,49.42882773217957,12.313423507793747,19.89138269576416 75 | 244.14842859869202,50.25829732126955,12.407307114972243,19.75561975450304 76 | -------------------------------------------------------------------------------- /tracking_results/msvt/electriccar.txt: -------------------------------------------------------------------------------- 1 | 253.7,77.69999999999999,40.0,54.8 2 | 249.19833654784128,75.84051698881579,40.50163849595697,54.51829065902422 3 | 249.8554611788198,87.68978254201505,40.691693821598236,53.38432836659958 4 | 249.2384160616624,103.52804417270359,40.435767813707464,52.998146191540656 5 | 248.75281303940454,98.70901377386818,39.927104600253074,52.277122183420836 6 | 245.2685060233456,95.6370458109497,39.59363189695783,51.11897137384469 7 | 244.80250855086737,90.59713161002315,39.08851606198421,51.139024316186834 8 | 239.32691087051367,90.31819532055171,38.6066960698161,51.696896895129726 9 | 235.01751145859555,88.9462424033625,38.64687361124619,51.581262302039406 10 | 235.14086997738843,94.119626709618,38.400156573660425,51.235094692760185 11 | 235.37271708323786,94.04366706657292,37.93646236196158,51.38701397885034 12 | 229.7182212762201,99.49445306911086,37.93376326844427,50.3831713428832 13 | 224.97210036679712,105.71210320404056,37.6364134378866,49.13597581519943 14 | 224.5004846360175,102.62348392030935,37.2051980119444,48.44097994515472 15 | 222.6772667818613,106.52089484825372,36.78163221062329,47.42949393865515 16 | 220.2883544823419,107.29075795152738,36.222909182899485,47.223904638798516 17 | 217.24715135640233,108.01459655932771,35.69631162003805,47.09802818614593 18 | 216.81710731744317,108.28883687118524,35.24519093603517,47.86075632435208 19 | 212.34695342156022,110.88847004553473,34.97713925720641,47.92340967313575 20 | 211.6235227822673,109.56051750748495,35.11199013514229,47.955293947935274 21 | 209.91871290806384,110.1308785973059,34.577426684975,48.12929950115143 22 | 208.73867220558185,111.05416239264012,34.32041959708283,47.59127615691105 23 | 206.44690361432532,110.76835739915168,33.719709090840226,46.86682422169899 24 | 206.59232644053034,111.04257198093029,33.42886343843021,46.318395058141775 25 | 205.97482026301807,116.0438477161893,33.4020416146709,45.14868283911061 26 | 204.6099225833172,117.64024837134404,33.644876493524585,44.44284200934923 27 | 203.8332779497197,118.27984130179374,33.96151945390919,44.4003024552602 28 | 202.67768346377017,117.64129496222336,33.79031204196215,44.43619694247791 29 | 200.98469503202847,117.07230703632848,33.45948011472597,44.3352365306945 30 | 200.4799819064489,113.10100627290684,33.23696462214705,43.65424585137125 31 | 199.9213527626851,112.34478614101556,33.13640992429313,42.73106014439077 32 | 200.2337672130978,107.91617587274361,32.511581023467755,43.17463445936457 33 | 199.78387639431998,107.70029167718523,32.212855818666974,43.60640285048132 34 | 195.7424067435202,105.84996483661334,31.894340168487965,43.70643298086287 35 | 195.88517753158658,106.03023203949112,31.608798592355228,43.34589857510731 36 | 195.90384652707158,111.07421813926996,31.571460601385247,42.747825625631485 37 | 194.72439944010574,108.09403340878465,31.5774374491248,41.649443108025785 38 | 191.29324314338055,110.2183217725978,31.481573657573513,40.87995457290034 39 | 191.28244104014726,110.55151381233796,31.503177864040097,40.213570493420036 40 | 191.49922278998136,110.09986388355529,31.06961436437188,39.98050543771858 41 | 191.04983112949742,106.8380528531595,30.84273157522781,39.7501308378383 42 | 191.15468399701868,106.88116190842244,30.633025840185265,39.66391272731241 43 | 191.1331147988896,110.3659416992632,30.676164236443384,39.37611344668182 44 | 191.16763900956317,109.49549499756566,30.60711581509625,38.89720898664352 45 | 190.70865829564755,108.97712990872728,30.423697191355856,38.83255911274865 46 | 189.7251950172327,109.80175464048958,30.195865252479987,38.28068889707686 47 | 189.28047024221695,113.90602663968166,30.000182629433738,37.668070110236705 48 | 187.72206284195133,114.29223328882345,29.899591264124663,36.8956568119531 49 | 185.75055659339057,114.0969049219358,29.607096327118732,36.22743668719655 50 | 185.27825869723856,115.29554893894948,29.50793463289266,35.91766362622927 51 | 184.90090050008735,115.47224713233138,29.22531110508227,35.56426723946551 52 | 185.0065746034325,114.59960103159878,29.013962898391927,35.25504164056578 53 | 184.7822870824582,115.16346832205213,28.443515006316005,35.146329993683636 54 | 183.4502007600154,114.56599925051121,28.083551150710644,35.33322263660185 55 | 183.0332769953858,114.02737546783568,27.912339600792485,35.405411122775526 56 | 183.08981161193714,114.05083397974661,27.799270367689832,35.35849409895365 57 | 182.72203329231735,114.47093422440682,27.53402808398593,35.51909253257672 58 | 182.82559885067602,117.73574302633749,27.326896967268567,35.981981179499854 59 | 182.31923703282388,117.94968808492723,27.336967891112664,35.55409106232038 60 | 182.4475815831753,118.05276666438888,27.08027879040982,35.34793390339708 61 | 182.4971202511973,118.71849789277118,26.981201454365827,35.00531731090166 62 | 182.51102922867057,118.45913685703745,26.953383499419246,34.54209499262773 63 | 182.4649516800723,118.24213582942187,27.045538596615835,34.001747380421584 64 | 181.92559037853053,118.97137086530158,27.156744800751884,33.51079370760963 65 | 180.05962167153965,118.6520934802352,27.04173440960944,33.187611526461325 66 | 179.3790769052317,122.11478538310483,27.447967857656916,32.94622031270088 67 | 175.75333674499362,124.6949171850632,27.995406319414762,32.5745580364401 68 | 175.6524834114142,124.19451441379891,28.197112986573615,32.614551313857184 69 | 175.79925117894163,121.66567753661394,27.90357745151872,32.84873278677206 70 | 175.927267839335,121.60420764835183,27.64754413073201,32.971672563296295 71 | 176.09469123667998,123.10766921374999,27.31269733604204,32.84881975421958 72 | 176.23599203309217,123.32581457130796,27.030095743217668,32.412529039103646 73 | 175.83867474245142,122.96598114447247,26.882089419847503,32.189554988122964 74 | -------------------------------------------------------------------------------- /tracking_results/msvt/man.txt: -------------------------------------------------------------------------------- 1 | 199.5,55.3,74.8,96.4 2 | 198.98225310120318,54.695818215979834,74.83549379759361,96.60836356804033 3 | 200.3951782000533,55.90006799106394,74.72574083056938,96.91596124854804 4 | 201.7970469821125,55.82711947770786,74.64103814992893,97.0618582752602 5 | 201.68640277235565,55.84793111895155,74.86232656944263,97.02023499277283 6 | 201.69110171423947,56.032479687145766,74.85292868567501,96.6511378563844 7 | 200.23675497186696,55.81078785300106,75.0445798737413,97.09452152467381 8 | 182.33768732012732,25.546725024262365,75.39148904132944,97.62826449064313 9 | 174.08664310645736,22.740017670883255,75.44798870776411,97.75981627709963 10 | 172.72703283994804,22.770150888803457,75.42332434475405,97.69954984125923 11 | 170.12804221713418,22.696230044411763,75.13620182133408,97.84739153004261 12 | 168.88233845154127,21.297281190648164,74.88749430605387,97.90517419110378 13 | 168.8645276695772,21.43283634740598,74.92311586998206,97.63406387758815 14 | 167.61851406278902,21.439649335412945,74.6818112444861,97.62043790157422 15 | 166.2922995820996,21.366845101745163,74.60508185830501,97.76604636890978 16 | 163.64973434196082,21.30292668950615,74.4299368468532,97.89388319338781 17 | 162.22310810547273,21.32694109664066,74.55396467090367,97.84585437911879 18 | 160.8318197048695,21.29317653143673,74.60601632014573,97.91338350952665 19 | 159.45653728000383,19.840491930367413,74.62416169935892,98.08633324114713 20 | 158.07678189256035,19.83392134433224,74.64829478130845,98.09947441321748 21 | 156.76661683138656,19.742679709389954,74.53264832820022,98.28195768310205 22 | 154.1422306035704,19.610988933895563,74.30765963893467,98.54533923409083 23 | 152.82007150161246,19.539417542505817,74.21475180245935,98.68848201687032 24 | 151.5338342989532,19.521170754809376,74.04933098978498,98.7249755922632 25 | 150.25494113932075,19.47021436593745,73.87138620259205,98.82688837000705 26 | 147.55566777089138,19.300631453931338,73.80120560687686,99.16605419401928 27 | 140.57721644115992,17.76694977018974,74.06605145542822,99.49500619932016 28 | 136.60114620392457,16.30035897840058,73.77471532674042,99.6803622485123 29 | 135.43776522048745,16.49804586681531,73.35561480685257,99.28498847168284 30 | 135.53216745629584,15.268236657812658,73.16681033523584,99.01172312582479 31 | 143.2571804772748,15.413479341700892,74.07025290151476,98.72123775804832 32 | 153.8129336324508,15.464824858126107,74.84689343822345,98.61854672519789 33 | 165.83560749772093,19.501879917726896,75.52656116753315,98.78610842594628 34 | 175.4869658770654,19.24806838578027,75.55066478302471,99.29373148983953 35 | 183.85762044164227,19.29061613407508,75.4244300373949,99.20863599324991 36 | 192.18279558083066,19.39451072196377,75.36884882136742,99.00084681747254 37 | 202.8462999742994,20.866803941204992,76.13532422682289,98.8179459030392 38 | 213.9358288437606,22.43330723768232,76.12796246167252,98.45640130680606 39 | 233.36189865166926,24.234631434397016,75.99663771843201,97.61952540427501 40 | 244.55934318848054,27.06817638348683,75.60752113438929,97.45387862849034 41 | 243.42121363185998,27.424038151968162,75.14199174584226,96.74215509152768 42 | 182.11304795314157,16.658825426553484,75.21497377133346,96.48709621667781 43 | 150.53107656664469,13.82609311820503,75.8085693631848,96.71166107849277 44 | 126.42993481865773,9.453465502210044,74.80536255834164,97.25600126034657 45 | 99.0880084768912,4.347067616729419,74.97765349990377,96.56648468291364 46 | 81.34202446358483,2.856699118326418,75.1384388472615,96.82943839670003 47 | 70.46364331108293,2.5814542466596464,75.09942096780351,97.37992814003357 48 | 78.23764949767705,2.7040432202518403,75.94528925622242,97.13475019284918 49 | 99.98915937475789,9.474932877472959,76.32074234956373,97.3049936432516 50 | 129.09723963917764,19.119272194463065,75.87937093839926,97.27457804849641 51 | 131.97578381832022,23.129339538556394,75.60924450399463,97.48488624613054 52 | 142.9253911047563,24.57832536616435,75.64838690407743,97.32920921253401 53 | 154.08337558472527,26.049535344933247,75.25671465996251,97.12732634447408 54 | 162.4228417297337,27.484007075496237,74.9637993963958,96.9893857210898 55 | 162.51637250252094,27.24596337855794,74.77673785082138,97.4654731149664 56 | 164.15254801970332,27.260478248650983,74.23271958580321,97.43644337478031 57 | 173.98948587925526,26.03107113691314,73.59147426592864,97.1763103983661 58 | 174.2614420739903,23.46180609406175,73.04756187645853,96.906036737457 59 | 174.39433943306173,23.614244274950146,72.78176715831569,96.60116037568021 60 | 173.0609281837638,25.03085514003368,72.76635172602542,96.45017657639926 61 | 163.31889827774654,25.070034459898167,73.4927596663108,96.37181793667028 62 | 152.21597147645173,26.444662727416066,74.17534694556744,96.31296969205111 63 | 141.26698987925818,26.098040724547445,74.4675919967606,97.00621369778835 64 | 140.0561076546685,7.870242521169168,74.17317010580119,98.15138768274143 65 | 140.1728921100996,-7.588238886828172,73.93960119493897,93.59188029892059 66 | 152.03639978888307,-5.5617751416241745,71.4517183310985,94.8487359319442 67 | -------------------------------------------------------------------------------- /tracking_results/msvt/triple1.txt: -------------------------------------------------------------------------------- 1 | 155.7,128.7,6.4,12.6 2 | 155.64971739962132,128.33921200489715,6.393452469466695,12.619205079775524 3 | 156.84185762044183,128.4830306724047,6.391567148591109,12.62936713485606 4 | 156.84395495653249,128.48293646645098,6.387372476409804,12.629555546763507 5 | 157.88933497458035,128.47580507165264,6.381539838930879,12.643818336360207 6 | 158.48675039713848,128.6195634098299,6.378534024903254,12.654257917777855 7 | 159.53283294227455,128.76307012757846,6.372777266365478,12.665302815385639 8 | 160.43078900026427,128.0103385578139,6.365593941928569,12.680158628629352 9 | 161.0328304793741,128.00743947955124,6.354375171285174,12.685956785154627 10 | 161.03274587746816,127.85729369160231,6.354544375097073,12.688141926834653 11 | 162.07949799800306,127.8512504365335,6.348031833385088,12.700228436972246 12 | 162.97733484789225,127.99467440038792,6.341599263896217,12.711587364311665 13 | 163.1288499906595,128.14470368598128,6.336831602041535,12.709791416804697 14 | 164.32322407562827,128.29459511114723,6.333307688691043,12.708161598546203 15 | 165.36824983817382,128.29559039500157,6.329729080145237,12.706171030837531 16 | 166.11428928522483,127.99973574064705,6.327529198349696,12.701928734623996 17 | 166.25625430804385,127.55708177385492,6.3414739601752075,12.693612245817532 18 | 167.29838080697468,128.30205023360085,6.343185147287272,12.69364974416401 19 | 168.34272130621537,128.15797210536863,6.3406808423803955,12.683780758689242 20 | 168.4945989527089,128.01085069053414,6.334761360635176,12.680187777116325 21 | 169.53942923779582,127.25888006517235,6.328858176217175,12.695730895157164 22 | 169.84240809010066,127.40130078433543,6.318513296091823,12.708695869073145 23 | 169.84382468238073,127.54018718425266,6.3156801115317345,12.728740706662348 24 | 170.74065727744093,127.68216002279729,6.310400488165204,12.742859290698732 25 | 171.93146634032087,126.93604913877569,6.3142276795637935,12.74417773551793 26 | 171.92735629957457,127.22484544571648,6.32244776105634,12.763118861722251 27 | 172.82214517752607,127.36199307941152,6.325009196192419,12.787513459505373 28 | 174.01832823225843,127.35693901738222,6.325400552731918,12.797621583563979 29 | 174.01226128225983,127.0530108759465,6.337534452729132,12.806976414082357 30 | 174.15863531251185,126.59835492923902,6.344386857794713,12.817486910788459 31 | 174.90888680932028,125.84201115336083,6.343259575099388,12.830798751623274 32 | 175.06366057427246,125.98411691923178,6.333764043510564,12.846639218196849 33 | 175.9696156096082,125.97775539241363,6.3225748508786195,12.85936227183316 34 | 175.97245687959614,125.96916834092319,6.316892310902742,12.876536374814032 35 | 177.02822420369353,125.96057512720702,6.307225212513636,12.893722802246378 36 | 177.03274520947028,125.95605483036638,6.298183200960129,12.90276339592765 37 | 178.0885322643232,125.95519356274856,6.2888969022419285,12.904485931163286 38 | 178.39205645710877,125.80071746861611,6.282228409097895,12.913248173214582 39 | 179.44546987477054,125.48759071831216,6.276819578916272,12.939096529496231 40 | 180.34736348413912,125.77137142435684,6.275966550829069,12.972513180956849 41 | 180.34648689735664,124.8604770696535,6.277719724394033,12.98850228419663 42 | 180.95443511706682,125.00284114312433,6.266754830624875,13.005007023667764 43 | 180.96022454398405,125.14851215625058,6.255175976790379,13.014949155315941 44 | 180.96548563462963,125.29261344287146,6.244653795499252,13.027974465189773 45 | 181.1216879361464,125.28546855017842,6.233484609003214,13.04226425057583 46 | 182.18183484858787,125.1304221529852,6.2219416126425,13.051106926601951 47 | 182.18723860161288,124.97105603809672,6.211134106592523,13.068661191493723 48 | 182.4939055086537,124.35940600061215,6.200293918140481,13.086974015203634 49 | 183.55327074021716,125.25017311172579,6.190846183578727,13.113396417460827 50 | 184.31142312366842,124.9392703903421,6.182286250527283,13.132103926687758 51 | --------------------------------------------------------------------------------