vismatch 1.1.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- vismatch/TEMPLATE.py +101 -0
- vismatch/__init__.py +475 -0
- vismatch/assets/example_pairs/false_positive/chartres.jpg +0 -0
- vismatch/assets/example_pairs/false_positive/notre_dame.jpg +0 -0
- vismatch/assets/example_pairs/fresco/fsm.jpg +0 -0
- vismatch/assets/example_pairs/fresco/sist_chapel.jpg +0 -0
- vismatch/assets/example_pairs/indoor/gcs_close.jpg +0 -0
- vismatch/assets/example_pairs/indoor/gcs_far.jpg +0 -0
- vismatch/assets/example_pairs/outdoor/montmartre_close.jpg +0 -0
- vismatch/assets/example_pairs/outdoor/montmartre_far.jpg +0 -0
- vismatch/assets/example_pairs/sat2iss/photo_from_iss.jpg +0 -0
- vismatch/assets/example_pairs/sat2iss/satellite_img.jpg +0 -0
- vismatch/assets/example_pairs/sphereglue/barbershop-00000000.jpg +0 -0
- vismatch/assets/example_pairs/sphereglue/barbershop-00000001.jpg +0 -0
- vismatch/assets/example_pairs/thermal/thermal.jpg +0 -0
- vismatch/assets/example_pairs/thermal/visible.jpg +0 -0
- vismatch/assets/example_test/original.jpg +0 -0
- vismatch/assets/example_test/warped.jpg +0 -0
- vismatch/base_matcher.py +242 -0
- vismatch/im_models/__init__.py +0 -0
- vismatch/im_models/aff_steerers.py +143 -0
- vismatch/im_models/aspanformer.py +74 -0
- vismatch/im_models/dedode.py +150 -0
- vismatch/im_models/duster.py +104 -0
- vismatch/im_models/edm.py +64 -0
- vismatch/im_models/efficient_loftr.py +60 -0
- vismatch/im_models/gim.py +187 -0
- vismatch/im_models/handcrafted.py +81 -0
- vismatch/im_models/keypt2subpx.py +154 -0
- vismatch/im_models/kornia.py +72 -0
- vismatch/im_models/liftfeat.py +44 -0
- vismatch/im_models/lightglue.py +75 -0
- vismatch/im_models/lisrd.py +98 -0
- vismatch/im_models/loftr.py +23 -0
- vismatch/im_models/master.py +107 -0
- vismatch/im_models/matchanything.py +221 -0
- vismatch/im_models/matchformer.py +61 -0
- vismatch/im_models/matching_toolbox.py +238 -0
- vismatch/im_models/minima.py +164 -0
- vismatch/im_models/omniglue.py +91 -0
- vismatch/im_models/rdd.py +250 -0
- vismatch/im_models/ripe.py +55 -0
- vismatch/im_models/roma.py +92 -0
- vismatch/im_models/romav2.py +62 -0
- vismatch/im_models/se2loftr.py +71 -0
- vismatch/im_models/silk.py +405 -0
- vismatch/im_models/sphereglue.py +97 -0
- vismatch/im_models/steerers.py +140 -0
- vismatch/im_models/topicfm.py +93 -0
- vismatch/im_models/ufm.py +57 -0
- vismatch/im_models/xfeat.py +78 -0
- vismatch/im_models/xfeat_steerers.py +151 -0
- vismatch/im_models/xoftr.py +71 -0
- vismatch/third_party/DeDoDe/DeDoDe/__init__.py +2 -0
- vismatch/third_party/DeDoDe/DeDoDe/benchmarks/__init__.py +4 -0
- vismatch/third_party/DeDoDe/DeDoDe/benchmarks/mega_pose_est.py +114 -0
- vismatch/third_party/DeDoDe/DeDoDe/benchmarks/mega_pose_est_mnn.py +119 -0
- vismatch/third_party/DeDoDe/DeDoDe/benchmarks/nll_benchmark.py +57 -0
- vismatch/third_party/DeDoDe/DeDoDe/benchmarks/num_inliers.py +76 -0
- vismatch/third_party/DeDoDe/DeDoDe/checkpoint.py +59 -0
- vismatch/third_party/DeDoDe/DeDoDe/datasets/__init__.py +0 -0
- vismatch/third_party/DeDoDe/DeDoDe/datasets/megadepth.py +269 -0
- vismatch/third_party/DeDoDe/DeDoDe/decoder.py +90 -0
- vismatch/third_party/DeDoDe/DeDoDe/descriptors/__init__.py +0 -0
- vismatch/third_party/DeDoDe/DeDoDe/descriptors/dedode_descriptor.py +50 -0
- vismatch/third_party/DeDoDe/DeDoDe/descriptors/descriptor_loss.py +68 -0
- vismatch/third_party/DeDoDe/DeDoDe/detectors/__init__.py +0 -0
- vismatch/third_party/DeDoDe/DeDoDe/detectors/dedode_detector.py +76 -0
- vismatch/third_party/DeDoDe/DeDoDe/detectors/keypoint_loss.py +185 -0
- vismatch/third_party/DeDoDe/DeDoDe/encoder.py +87 -0
- vismatch/third_party/DeDoDe/DeDoDe/matchers/__init__.py +0 -0
- vismatch/third_party/DeDoDe/DeDoDe/matchers/dual_softmax_matcher.py +38 -0
- vismatch/third_party/DeDoDe/DeDoDe/model_zoo/__init__.py +3 -0
- vismatch/third_party/DeDoDe/DeDoDe/model_zoo/dedode_models.py +249 -0
- vismatch/third_party/DeDoDe/DeDoDe/train.py +76 -0
- vismatch/third_party/DeDoDe/DeDoDe/transformer/__init__.py +8 -0
- vismatch/third_party/DeDoDe/DeDoDe/transformer/dinov2.py +359 -0
- vismatch/third_party/DeDoDe/DeDoDe/transformer/layers/__init__.py +12 -0
- vismatch/third_party/DeDoDe/DeDoDe/transformer/layers/attention.py +81 -0
- vismatch/third_party/DeDoDe/DeDoDe/transformer/layers/block.py +252 -0
- vismatch/third_party/DeDoDe/DeDoDe/transformer/layers/dino_head.py +59 -0
- vismatch/third_party/DeDoDe/DeDoDe/transformer/layers/drop_path.py +35 -0
- vismatch/third_party/DeDoDe/DeDoDe/transformer/layers/layer_scale.py +28 -0
- vismatch/third_party/DeDoDe/DeDoDe/transformer/layers/mlp.py +41 -0
- vismatch/third_party/DeDoDe/DeDoDe/transformer/layers/patch_embed.py +89 -0
- vismatch/third_party/DeDoDe/DeDoDe/transformer/layers/swiglu_ffn.py +63 -0
- vismatch/third_party/DeDoDe/DeDoDe/utils.py +717 -0
- vismatch/third_party/DeDoDe/data_prep/prep_keypoints.py +103 -0
- vismatch/third_party/DeDoDe/demo/demo_kpts.py +24 -0
- vismatch/third_party/DeDoDe/demo/demo_match.py +46 -0
- vismatch/third_party/DeDoDe/demo/demo_match_dedode_G.py +45 -0
- vismatch/third_party/DeDoDe/demo/demo_scoremap.py +23 -0
- vismatch/third_party/DeDoDe/experiments/dedode_descriptor-B.py +135 -0
- vismatch/third_party/DeDoDe/experiments/dedode_descriptor-G.py +145 -0
- vismatch/third_party/DeDoDe/experiments/dedode_detector.py +126 -0
- vismatch/third_party/DeDoDe/experiments/eval/eval_dedode_descriptor-B.py +38 -0
- vismatch/third_party/DeDoDe/experiments/eval/eval_dedode_descriptor-G.py +38 -0
- vismatch/third_party/DeDoDe/setup.py +11 -0
- vismatch/third_party/EDM/configs/data/__init__.py +0 -0
- vismatch/third_party/EDM/configs/data/base.py +37 -0
- vismatch/third_party/EDM/configs/data/megadepth_test_1500.py +23 -0
- vismatch/third_party/EDM/configs/data/megadepth_trainval_832.py +32 -0
- vismatch/third_party/EDM/configs/data/scannet_test_1500.py +24 -0
- vismatch/third_party/EDM/configs/data/scannet_trainval.py +31 -0
- vismatch/third_party/EDM/configs/edm/indoor/edm_base.py +15 -0
- vismatch/third_party/EDM/configs/edm/outdoor/edm_base.py +17 -0
- vismatch/third_party/EDM/deploy/export_onnx.py +69 -0
- vismatch/third_party/EDM/deploy/run_onnx.py +138 -0
- vismatch/third_party/EDM/runtime_single_pair.py +73 -0
- vismatch/third_party/EDM/src/__init__.py +0 -0
- vismatch/third_party/EDM/src/config/default.py +184 -0
- vismatch/third_party/EDM/src/datasets/megadepth.py +164 -0
- vismatch/third_party/EDM/src/datasets/sampler.py +95 -0
- vismatch/third_party/EDM/src/datasets/scannet.py +147 -0
- vismatch/third_party/EDM/src/edm/__init__.py +2 -0
- vismatch/third_party/EDM/src/edm/backbone/resnet.py +116 -0
- vismatch/third_party/EDM/src/edm/edm.py +204 -0
- vismatch/third_party/EDM/src/edm/head/coarse_matching.py +158 -0
- vismatch/third_party/EDM/src/edm/head/fine_matching.py +383 -0
- vismatch/third_party/EDM/src/edm/neck/__init__.py +1 -0
- vismatch/third_party/EDM/src/edm/neck/loftr_module/__init__.py +1 -0
- vismatch/third_party/EDM/src/edm/neck/loftr_module/transformer.py +418 -0
- vismatch/third_party/EDM/src/edm/neck/neck.py +156 -0
- vismatch/third_party/EDM/src/edm/utils/geometry.py +58 -0
- vismatch/third_party/EDM/src/edm/utils/supervision.py +255 -0
- vismatch/third_party/EDM/src/lightning/data.py +450 -0
- vismatch/third_party/EDM/src/lightning/lightning_edm.py +379 -0
- vismatch/third_party/EDM/src/losses/edm_loss.py +206 -0
- vismatch/third_party/EDM/src/optimizers/__init__.py +57 -0
- vismatch/third_party/EDM/src/utils/augment.py +65 -0
- vismatch/third_party/EDM/src/utils/comm.py +271 -0
- vismatch/third_party/EDM/src/utils/dataloader.py +24 -0
- vismatch/third_party/EDM/src/utils/dataset.py +192 -0
- vismatch/third_party/EDM/src/utils/metrics.py +299 -0
- vismatch/third_party/EDM/src/utils/misc.py +113 -0
- vismatch/third_party/EDM/src/utils/plotting.py +186 -0
- vismatch/third_party/EDM/src/utils/profiler.py +40 -0
- vismatch/third_party/EDM/src/utils/warppers.py +428 -0
- vismatch/third_party/EDM/src/utils/warppers_utils.py +172 -0
- vismatch/third_party/EDM/test.py +132 -0
- vismatch/third_party/EDM/train.py +156 -0
- vismatch/third_party/EfficientLoFTR/configs/data/__init__.py +0 -0
- vismatch/third_party/EfficientLoFTR/configs/data/base.py +35 -0
- vismatch/third_party/EfficientLoFTR/configs/data/megadepth_test_1500.py +13 -0
- vismatch/third_party/EfficientLoFTR/configs/data/megadepth_trainval_832.py +24 -0
- vismatch/third_party/EfficientLoFTR/configs/data/scannet_test_1500.py +16 -0
- vismatch/third_party/EfficientLoFTR/configs/loftr/eloftr_full.py +36 -0
- vismatch/third_party/EfficientLoFTR/configs/loftr/eloftr_optimized.py +37 -0
- vismatch/third_party/EfficientLoFTR/src/__init__.py +0 -0
- vismatch/third_party/EfficientLoFTR/src/config/default.py +182 -0
- vismatch/third_party/EfficientLoFTR/src/datasets/megadepth.py +133 -0
- vismatch/third_party/EfficientLoFTR/src/datasets/sampler.py +77 -0
- vismatch/third_party/EfficientLoFTR/src/datasets/scannet.py +129 -0
- vismatch/third_party/EfficientLoFTR/src/lightning/data.py +357 -0
- vismatch/third_party/EfficientLoFTR/src/lightning/lightning_loftr.py +272 -0
- vismatch/third_party/EfficientLoFTR/src/loftr/__init__.py +4 -0
- vismatch/third_party/EfficientLoFTR/src/loftr/backbone/__init__.py +11 -0
- vismatch/third_party/EfficientLoFTR/src/loftr/backbone/backbone.py +37 -0
- vismatch/third_party/EfficientLoFTR/src/loftr/backbone/repvgg.py +224 -0
- vismatch/third_party/EfficientLoFTR/src/loftr/loftr.py +124 -0
- vismatch/third_party/EfficientLoFTR/src/loftr/loftr_module/__init__.py +2 -0
- vismatch/third_party/EfficientLoFTR/src/loftr/loftr_module/fine_preprocess.py +112 -0
- vismatch/third_party/EfficientLoFTR/src/loftr/loftr_module/linear_attention.py +103 -0
- vismatch/third_party/EfficientLoFTR/src/loftr/loftr_module/transformer.py +164 -0
- vismatch/third_party/EfficientLoFTR/src/loftr/utils/coarse_matching.py +241 -0
- vismatch/third_party/EfficientLoFTR/src/loftr/utils/fine_matching.py +156 -0
- vismatch/third_party/EfficientLoFTR/src/loftr/utils/full_config.py +50 -0
- vismatch/third_party/EfficientLoFTR/src/loftr/utils/geometry.py +54 -0
- vismatch/third_party/EfficientLoFTR/src/loftr/utils/opt_config.py +50 -0
- vismatch/third_party/EfficientLoFTR/src/loftr/utils/position_encoding.py +50 -0
- vismatch/third_party/EfficientLoFTR/src/loftr/utils/supervision.py +275 -0
- vismatch/third_party/EfficientLoFTR/src/losses/loftr_loss.py +229 -0
- vismatch/third_party/EfficientLoFTR/src/optimizers/__init__.py +42 -0
- vismatch/third_party/EfficientLoFTR/src/utils/augment.py +55 -0
- vismatch/third_party/EfficientLoFTR/src/utils/comm.py +265 -0
- vismatch/third_party/EfficientLoFTR/src/utils/dataloader.py +23 -0
- vismatch/third_party/EfficientLoFTR/src/utils/dataset.py +186 -0
- vismatch/third_party/EfficientLoFTR/src/utils/metrics.py +264 -0
- vismatch/third_party/EfficientLoFTR/src/utils/misc.py +106 -0
- vismatch/third_party/EfficientLoFTR/src/utils/plotting.py +154 -0
- vismatch/third_party/EfficientLoFTR/src/utils/profiler.py +39 -0
- vismatch/third_party/EfficientLoFTR/src/utils/warppers.py +426 -0
- vismatch/third_party/EfficientLoFTR/src/utils/warppers_utils.py +171 -0
- vismatch/third_party/EfficientLoFTR/test.py +143 -0
- vismatch/third_party/EfficientLoFTR/train.py +154 -0
- vismatch/third_party/LISRD/lisrd/__init__.py +0 -0
- vismatch/third_party/LISRD/lisrd/datasets/__init__.py +7 -0
- vismatch/third_party/LISRD/lisrd/datasets/base_dataset.py +38 -0
- vismatch/third_party/LISRD/lisrd/datasets/coco.py +148 -0
- vismatch/third_party/LISRD/lisrd/datasets/flashes.py +170 -0
- vismatch/third_party/LISRD/lisrd/datasets/hpatches.py +135 -0
- vismatch/third_party/LISRD/lisrd/datasets/mixed_dataset.py +53 -0
- vismatch/third_party/LISRD/lisrd/datasets/rdnim.py +117 -0
- vismatch/third_party/LISRD/lisrd/datasets/utils/data_augmentation.py +168 -0
- vismatch/third_party/LISRD/lisrd/datasets/utils/data_reader.py +48 -0
- vismatch/third_party/LISRD/lisrd/datasets/utils/homographies.py +215 -0
- vismatch/third_party/LISRD/lisrd/datasets/vidit.py +152 -0
- vismatch/third_party/LISRD/lisrd/evaluation/__init__.py +0 -0
- vismatch/third_party/LISRD/lisrd/evaluation/descriptor_evaluation.py +142 -0
- vismatch/third_party/LISRD/lisrd/experiment.py +129 -0
- vismatch/third_party/LISRD/lisrd/export_features.py +148 -0
- vismatch/third_party/LISRD/lisrd/models/__init__.py +7 -0
- vismatch/third_party/LISRD/lisrd/models/backbones/__init__.py +0 -0
- vismatch/third_party/LISRD/lisrd/models/backbones/net_vlad.py +62 -0
- vismatch/third_party/LISRD/lisrd/models/backbones/vgg.py +46 -0
- vismatch/third_party/LISRD/lisrd/models/base_model.py +336 -0
- vismatch/third_party/LISRD/lisrd/models/keypoint_detectors.py +34 -0
- vismatch/third_party/LISRD/lisrd/models/lisrd.py +328 -0
- vismatch/third_party/LISRD/lisrd/models/lisrd_sift.py +289 -0
- vismatch/third_party/LISRD/lisrd/third_party/super_point_magic_leap/demo_superpoint.py +734 -0
- vismatch/third_party/LISRD/lisrd/utils/geometry_utils.py +123 -0
- vismatch/third_party/LISRD/lisrd/utils/losses.py +191 -0
- vismatch/third_party/LISRD/lisrd/utils/metrics.py +66 -0
- vismatch/third_party/LISRD/lisrd/utils/pytorch_utils.py +14 -0
- vismatch/third_party/LISRD/lisrd/utils/stdout_capturing.py +81 -0
- vismatch/third_party/LISRD/notebooks/utils.py +103 -0
- vismatch/third_party/LISRD/setup.py +4 -0
- vismatch/third_party/LiftFeat/dataset/__init__.py +0 -0
- vismatch/third_party/LiftFeat/dataset/coco_augmentor.py +298 -0
- vismatch/third_party/LiftFeat/dataset/coco_wrapper.py +175 -0
- vismatch/third_party/LiftFeat/dataset/dataset_utils.py +183 -0
- vismatch/third_party/LiftFeat/dataset/megadepth.py +177 -0
- vismatch/third_party/LiftFeat/dataset/megadepth_wrapper.py +167 -0
- vismatch/third_party/LiftFeat/demo.py +116 -0
- vismatch/third_party/LiftFeat/evaluation/HPatch_evaluation.py +182 -0
- vismatch/third_party/LiftFeat/evaluation/MegaDepth1500_evaluation.py +105 -0
- vismatch/third_party/LiftFeat/evaluation/eval_utils.py +127 -0
- vismatch/third_party/LiftFeat/loss/loss.py +291 -0
- vismatch/third_party/LiftFeat/models/interpolator.py +34 -0
- vismatch/third_party/LiftFeat/models/liftfeat_wrapper.py +172 -0
- vismatch/third_party/LiftFeat/models/model.py +419 -0
- vismatch/third_party/LiftFeat/tools/demo_match_video.py +145 -0
- vismatch/third_party/LiftFeat/tools/demo_vo.py +163 -0
- vismatch/third_party/LiftFeat/train.py +369 -0
- vismatch/third_party/LiftFeat/utils/VisualOdometry.py +339 -0
- vismatch/third_party/LiftFeat/utils/__init__.py +0 -0
- vismatch/third_party/LiftFeat/utils/alike_wrapper.py +45 -0
- vismatch/third_party/LiftFeat/utils/config.py +16 -0
- vismatch/third_party/LiftFeat/utils/depth_anything_wrapper.py +150 -0
- vismatch/third_party/LiftFeat/utils/featurebooster.py +247 -0
- vismatch/third_party/LiftFeat/utils/post_process.py +21 -0
- vismatch/third_party/LightGlue/benchmark.py +255 -0
- vismatch/third_party/LightGlue/lightglue/__init__.py +7 -0
- vismatch/third_party/LightGlue/lightglue/aliked.py +760 -0
- vismatch/third_party/LightGlue/lightglue/disk.py +55 -0
- vismatch/third_party/LightGlue/lightglue/dog_hardnet.py +41 -0
- vismatch/third_party/LightGlue/lightglue/lightglue.py +662 -0
- vismatch/third_party/LightGlue/lightglue/sift.py +216 -0
- vismatch/third_party/LightGlue/lightglue/superpoint.py +227 -0
- vismatch/third_party/LightGlue/lightglue/utils.py +165 -0
- vismatch/third_party/LightGlue/lightglue/viz2d.py +203 -0
- vismatch/third_party/MINIMA/demo.py +201 -0
- vismatch/third_party/MINIMA/src/__init__.py +0 -0
- vismatch/third_party/MINIMA/src/config/default.py +203 -0
- vismatch/third_party/MINIMA/src/config/default_for_megadepth_dense.py +203 -0
- vismatch/third_party/MINIMA/src/config/default_for_megadepth_sparse.py +203 -0
- vismatch/third_party/MINIMA/src/utils/__init__.py +0 -0
- vismatch/third_party/MINIMA/src/utils/culculate_auc.py +28 -0
- vismatch/third_party/MINIMA/src/utils/data_io.py +156 -0
- vismatch/third_party/MINIMA/src/utils/data_io_loftr.py +152 -0
- vismatch/third_party/MINIMA/src/utils/data_io_roma.py +186 -0
- vismatch/third_party/MINIMA/src/utils/data_io_sp_lg.py +158 -0
- vismatch/third_party/MINIMA/src/utils/load_model.py +164 -0
- vismatch/third_party/MINIMA/src/utils/metrics.py +214 -0
- vismatch/third_party/MINIMA/src/utils/misc.py +101 -0
- vismatch/third_party/MINIMA/src/utils/plotting.py +291 -0
- vismatch/third_party/MINIMA/src/utils/sample_h.py +142 -0
- vismatch/third_party/MINIMA/test_relative_homo_depth.py +683 -0
- vismatch/third_party/MINIMA/test_relative_homo_event.py +722 -0
- vismatch/third_party/MINIMA/test_relative_homo_mmim.py +669 -0
- vismatch/third_party/MINIMA/test_relative_pose_infrared.py +500 -0
- vismatch/third_party/MINIMA/test_relative_pose_mega_1500.py +487 -0
- vismatch/third_party/MINIMA/test_relative_pose_mega_1500_syn.py +516 -0
- vismatch/third_party/MINIMA/third_party/LightGlue/benchmark.py +255 -0
- vismatch/third_party/MINIMA/third_party/LightGlue/lightglue/__init__.py +7 -0
- vismatch/third_party/MINIMA/third_party/LightGlue/lightglue/aliked.py +758 -0
- vismatch/third_party/MINIMA/third_party/LightGlue/lightglue/disk.py +55 -0
- vismatch/third_party/MINIMA/third_party/LightGlue/lightglue/dog_hardnet.py +41 -0
- vismatch/third_party/MINIMA/third_party/LightGlue/lightglue/lightglue.py +655 -0
- vismatch/third_party/MINIMA/third_party/LightGlue/lightglue/sift.py +216 -0
- vismatch/third_party/MINIMA/third_party/LightGlue/lightglue/superpoint.py +227 -0
- vismatch/third_party/MINIMA/third_party/LightGlue/lightglue/utils.py +165 -0
- vismatch/third_party/MINIMA/third_party/LightGlue/lightglue/viz2d.py +184 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/configs/data/__init__.py +0 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/configs/data/base.py +35 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/configs/data/megadepth_test_1500.py +11 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/configs/data/megadepth_trainval_640.py +22 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/configs/data/megadepth_trainval_840.py +22 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/configs/data/scannet_test_1500.py +11 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/configs/data/scannet_trainval.py +17 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/configs/loftr/indoor/buggy_pos_enc/loftr_ds.py +6 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/configs/loftr/indoor/buggy_pos_enc/loftr_ds_dense.py +8 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/configs/loftr/indoor/buggy_pos_enc/loftr_ot.py +6 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/configs/loftr/indoor/buggy_pos_enc/loftr_ot_dense.py +8 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/configs/loftr/indoor/loftr_ds.py +5 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/configs/loftr/indoor/loftr_ds_dense.py +7 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/configs/loftr/indoor/loftr_ot.py +5 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/configs/loftr/indoor/loftr_ot_dense.py +7 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/configs/loftr/indoor/scannet/loftr_ds_eval.py +16 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/configs/loftr/indoor/scannet/loftr_ds_eval_new.py +18 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/configs/loftr/outdoor/buggy_pos_enc/loftr_ds.py +16 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/configs/loftr/outdoor/buggy_pos_enc/loftr_ds_dense.py +17 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/configs/loftr/outdoor/buggy_pos_enc/loftr_ot.py +16 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/configs/loftr/outdoor/buggy_pos_enc/loftr_ot_dense.py +17 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/configs/loftr/outdoor/loftr_ds.py +15 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/configs/loftr/outdoor/loftr_ds_dense.py +16 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/configs/loftr/outdoor/loftr_ot.py +15 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/configs/loftr/outdoor/loftr_ot_dense.py +16 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/demo/demo_loftr.py +240 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/src/__init__.py +0 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/src/config/default.py +171 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/src/datasets/megadepth.py +127 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/src/datasets/sampler.py +77 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/src/datasets/scannet.py +114 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/src/lightning/data.py +320 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/src/lightning/lightning_loftr.py +249 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/src/loftr/__init__.py +2 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/src/loftr/backbone/__init__.py +11 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/src/loftr/backbone/resnet_fpn.py +199 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/src/loftr/loftr.py +81 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/src/loftr/loftr_module/__init__.py +2 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/src/loftr/loftr_module/fine_preprocess.py +59 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/src/loftr/loftr_module/linear_attention.py +81 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/src/loftr/loftr_module/transformer.py +101 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/src/loftr/utils/coarse_matching.py +261 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/src/loftr/utils/cvpr_ds_config.py +50 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/src/loftr/utils/fine_matching.py +74 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/src/loftr/utils/geometry.py +54 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/src/loftr/utils/position_encoding.py +42 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/src/loftr/utils/supervision.py +151 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/src/losses/loftr_loss.py +192 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/src/optimizers/__init__.py +42 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/src/utils/augment.py +55 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/src/utils/comm.py +265 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/src/utils/dataloader.py +23 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/src/utils/dataset.py +185 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/src/utils/metrics.py +193 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/src/utils/misc.py +101 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/src/utils/plotting.py +154 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/src/utils/profiler.py +39 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/test.py +68 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/third_party/SuperGluePretrainedNetwork/demo_superglue.py +259 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/third_party/SuperGluePretrainedNetwork/match_pairs.py +425 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/third_party/SuperGluePretrainedNetwork/models/__init__.py +0 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/third_party/SuperGluePretrainedNetwork/models/matching.py +84 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/third_party/SuperGluePretrainedNetwork/models/superglue.py +283 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/third_party/SuperGluePretrainedNetwork/models/superpoint.py +202 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/third_party/SuperGluePretrainedNetwork/models/utils.py +555 -0
- vismatch/third_party/MINIMA/third_party/LoFTR/train.py +123 -0
- vismatch/third_party/MINIMA/third_party/RoMa/demo/demo_3D_effect.py +47 -0
- vismatch/third_party/MINIMA/third_party/RoMa/demo/demo_fundamental.py +34 -0
- vismatch/third_party/MINIMA/third_party/RoMa/demo/demo_match.py +50 -0
- vismatch/third_party/MINIMA/third_party/RoMa/demo/demo_match_opencv_sift.py +43 -0
- vismatch/third_party/MINIMA/third_party/RoMa/demo/demo_match_tiny.py +77 -0
- vismatch/third_party/MINIMA/third_party/RoMa/experiments/eval_roma_outdoor.py +57 -0
- vismatch/third_party/MINIMA/third_party/RoMa/experiments/eval_tiny_roma_v1_outdoor.py +84 -0
- vismatch/third_party/MINIMA/third_party/RoMa/experiments/roma_indoor.py +320 -0
- vismatch/third_party/MINIMA/third_party/RoMa/experiments/train_roma_outdoor.py +307 -0
- vismatch/third_party/MINIMA/third_party/RoMa/experiments/train_tiny_roma_v1_outdoor.py +498 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/__init__.py +8 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/benchmarks/__init__.py +6 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/benchmarks/hpatches_sequences_homog_benchmark.py +113 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/benchmarks/megadepth_dense_benchmark.py +106 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/benchmarks/megadepth_pose_estimation_benchmark.py +118 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/benchmarks/megadepth_pose_estimation_benchmark_poselib.py +119 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/benchmarks/scannet_benchmark.py +143 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/checkpointing/__init__.py +1 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/checkpointing/checkpoint.py +60 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/datasets/__init__.py +2 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/datasets/megadepth.py +232 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/datasets/scannet.py +160 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/losses/__init__.py +1 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/losses/robust_loss.py +161 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/losses/robust_loss_tiny_roma.py +160 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/models/__init__.py +1 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/models/encoders.py +122 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/models/matcher.py +766 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/models/model_zoo/__init__.py +73 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/models/model_zoo/roma_models.py +170 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/models/tiny.py +304 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/models/transformer/__init__.py +48 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/models/transformer/dinov2.py +359 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/models/transformer/layers/__init__.py +12 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/models/transformer/layers/attention.py +81 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/models/transformer/layers/block.py +252 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/models/transformer/layers/dino_head.py +59 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/models/transformer/layers/drop_path.py +35 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/models/transformer/layers/layer_scale.py +28 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/models/transformer/layers/mlp.py +41 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/models/transformer/layers/patch_embed.py +89 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/models/transformer/layers/swiglu_ffn.py +63 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/train/__init__.py +1 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/train/train.py +102 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/utils/__init__.py +16 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/utils/kde.py +13 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/utils/local_correlation.py +48 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/utils/transforms.py +118 -0
- vismatch/third_party/MINIMA/third_party/RoMa/romatch/utils/utils.py +662 -0
- vismatch/third_party/MINIMA/third_party/RoMa/setup.py +9 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/configs/data/__init__.py +0 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/configs/data/base.py +35 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/configs/data/megadepth_trainval_840.py +22 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/configs/data/megadepth_vistir_trainval_640.py +23 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/configs/data/pretrain.py +8 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/configs/xoftr/outdoor/visible_thermal.py +17 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/configs/xoftr/pretrain/pretrain.py +12 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/pretrain.py +125 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/__init__.py +0 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/config/default.py +203 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/datasets/megadepth.py +143 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/datasets/pretrain_dataset.py +156 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/datasets/sampler.py +77 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/datasets/scannet.py +114 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/datasets/vistir.py +109 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/lightning/data.py +346 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/lightning/data_pretrain.py +125 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/lightning/lightning_xoftr.py +334 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/lightning/lightning_xoftr_pretrain.py +171 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/losses/xoftr_loss.py +170 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/losses/xoftr_loss_pretrain.py +37 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/optimizers/__init__.py +42 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/utils/augment.py +113 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/utils/comm.py +265 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/utils/data_io.py +144 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/utils/dataloader.py +23 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/utils/dataset.py +279 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/utils/metrics.py +211 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/utils/misc.py +101 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/utils/plotting.py +227 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/utils/pretrain_utils.py +83 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/utils/profiler.py +39 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/xoftr/__init__.py +2 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/xoftr/backbone/__init__.py +1 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/xoftr/backbone/resnet.py +95 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/xoftr/utils/geometry.py +107 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/xoftr/utils/position_encoding.py +36 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/xoftr/utils/supervision.py +290 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/xoftr/xoftr.py +94 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/xoftr/xoftr_module/__init__.py +4 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/xoftr/xoftr_module/coarse_matching.py +305 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/xoftr/xoftr_module/fine_matching.py +170 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/xoftr/xoftr_module/fine_process.py +321 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/xoftr/xoftr_module/linear_attention.py +81 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/xoftr/xoftr_module/transformer.py +101 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/src/xoftr/xoftr_pretrain.py +209 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/test.py +68 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/test_relative_pose.py +330 -0
- vismatch/third_party/MINIMA/third_party/XoFTR/train.py +126 -0
- vismatch/third_party/MatchAnything/app.py +27 -0
- vismatch/third_party/MatchAnything/imcui/__init__.py +0 -0
- vismatch/third_party/MatchAnything/imcui/api/__init__.py +47 -0
- vismatch/third_party/MatchAnything/imcui/api/client.py +232 -0
- vismatch/third_party/MatchAnything/imcui/api/core.py +308 -0
- vismatch/third_party/MatchAnything/imcui/api/server.py +170 -0
- vismatch/third_party/MatchAnything/imcui/hloc/__init__.py +65 -0
- vismatch/third_party/MatchAnything/imcui/hloc/colmap_from_nvm.py +216 -0
- vismatch/third_party/MatchAnything/imcui/hloc/extract_features.py +607 -0
- vismatch/third_party/MatchAnything/imcui/hloc/extractors/__init__.py +0 -0
- vismatch/third_party/MatchAnything/imcui/hloc/extractors/alike.py +61 -0
- vismatch/third_party/MatchAnything/imcui/hloc/extractors/aliked.py +32 -0
- vismatch/third_party/MatchAnything/imcui/hloc/extractors/cosplace.py +44 -0
- vismatch/third_party/MatchAnything/imcui/hloc/extractors/d2net.py +60 -0
- vismatch/third_party/MatchAnything/imcui/hloc/extractors/darkfeat.py +44 -0
- vismatch/third_party/MatchAnything/imcui/hloc/extractors/dedode.py +86 -0
- vismatch/third_party/MatchAnything/imcui/hloc/extractors/dir.py +78 -0
- vismatch/third_party/MatchAnything/imcui/hloc/extractors/disk.py +35 -0
- vismatch/third_party/MatchAnything/imcui/hloc/extractors/dog.py +135 -0
- vismatch/third_party/MatchAnything/imcui/hloc/extractors/eigenplaces.py +57 -0
- vismatch/third_party/MatchAnything/imcui/hloc/extractors/example.py +56 -0
- vismatch/third_party/MatchAnything/imcui/hloc/extractors/fire.py +72 -0
- vismatch/third_party/MatchAnything/imcui/hloc/extractors/fire_local.py +84 -0
- vismatch/third_party/MatchAnything/imcui/hloc/extractors/lanet.py +63 -0
- vismatch/third_party/MatchAnything/imcui/hloc/extractors/netvlad.py +146 -0
- vismatch/third_party/MatchAnything/imcui/hloc/extractors/openibl.py +26 -0
- vismatch/third_party/MatchAnything/imcui/hloc/extractors/r2d2.py +73 -0
- vismatch/third_party/MatchAnything/imcui/hloc/extractors/rekd.py +60 -0
- vismatch/third_party/MatchAnything/imcui/hloc/extractors/rord.py +59 -0
- vismatch/third_party/MatchAnything/imcui/hloc/extractors/sfd2.py +44 -0
- vismatch/third_party/MatchAnything/imcui/hloc/extractors/sift.py +216 -0
- vismatch/third_party/MatchAnything/imcui/hloc/extractors/superpoint.py +51 -0
- vismatch/third_party/MatchAnything/imcui/hloc/extractors/xfeat.py +33 -0
- vismatch/third_party/MatchAnything/imcui/hloc/localize_inloc.py +179 -0
- vismatch/third_party/MatchAnything/imcui/hloc/localize_sfm.py +243 -0
- vismatch/third_party/MatchAnything/imcui/hloc/match_dense.py +1158 -0
- vismatch/third_party/MatchAnything/imcui/hloc/match_features.py +459 -0
- vismatch/third_party/MatchAnything/imcui/hloc/matchers/__init__.py +3 -0
- vismatch/third_party/MatchAnything/imcui/hloc/matchers/adalam.py +68 -0
- vismatch/third_party/MatchAnything/imcui/hloc/matchers/aspanformer.py +66 -0
- vismatch/third_party/MatchAnything/imcui/hloc/matchers/cotr.py +77 -0
- vismatch/third_party/MatchAnything/imcui/hloc/matchers/dkm.py +53 -0
- vismatch/third_party/MatchAnything/imcui/hloc/matchers/dual_softmax.py +71 -0
- vismatch/third_party/MatchAnything/imcui/hloc/matchers/duster.py +109 -0
- vismatch/third_party/MatchAnything/imcui/hloc/matchers/eloftr.py +97 -0
- vismatch/third_party/MatchAnything/imcui/hloc/matchers/gim.py +200 -0
- vismatch/third_party/MatchAnything/imcui/hloc/matchers/gluestick.py +99 -0
- vismatch/third_party/MatchAnything/imcui/hloc/matchers/imp.py +50 -0
- vismatch/third_party/MatchAnything/imcui/hloc/matchers/lightglue.py +67 -0
- vismatch/third_party/MatchAnything/imcui/hloc/matchers/loftr.py +58 -0
- vismatch/third_party/MatchAnything/imcui/hloc/matchers/mast3r.py +96 -0
- vismatch/third_party/MatchAnything/imcui/hloc/matchers/matchanything.py +191 -0
- vismatch/third_party/MatchAnything/imcui/hloc/matchers/mickey.py +50 -0
- vismatch/third_party/MatchAnything/imcui/hloc/matchers/nearest_neighbor.py +66 -0
- vismatch/third_party/MatchAnything/imcui/hloc/matchers/omniglue.py +80 -0
- vismatch/third_party/MatchAnything/imcui/hloc/matchers/roma.py +80 -0
- vismatch/third_party/MatchAnything/imcui/hloc/matchers/sgmnet.py +106 -0
- vismatch/third_party/MatchAnything/imcui/hloc/matchers/sold2.py +144 -0
- vismatch/third_party/MatchAnything/imcui/hloc/matchers/superglue.py +33 -0
- vismatch/third_party/MatchAnything/imcui/hloc/matchers/topicfm.py +60 -0
- vismatch/third_party/MatchAnything/imcui/hloc/matchers/xfeat_dense.py +54 -0
- vismatch/third_party/MatchAnything/imcui/hloc/matchers/xfeat_lightglue.py +48 -0
- vismatch/third_party/MatchAnything/imcui/hloc/matchers/xoftr.py +90 -0
- vismatch/third_party/MatchAnything/imcui/hloc/pairs_from_covisibility.py +60 -0
- vismatch/third_party/MatchAnything/imcui/hloc/pairs_from_exhaustive.py +64 -0
- vismatch/third_party/MatchAnything/imcui/hloc/pairs_from_poses.py +68 -0
- vismatch/third_party/MatchAnything/imcui/hloc/pairs_from_retrieval.py +133 -0
- vismatch/third_party/MatchAnything/imcui/hloc/pipelines/4Seasons/__init__.py +0 -0
- vismatch/third_party/MatchAnything/imcui/hloc/pipelines/4Seasons/localize.py +89 -0
- vismatch/third_party/MatchAnything/imcui/hloc/pipelines/4Seasons/prepare_reference.py +51 -0
- vismatch/third_party/MatchAnything/imcui/hloc/pipelines/4Seasons/utils.py +231 -0
- vismatch/third_party/MatchAnything/imcui/hloc/pipelines/7Scenes/__init__.py +0 -0
- vismatch/third_party/MatchAnything/imcui/hloc/pipelines/7Scenes/create_gt_sfm.py +134 -0
- vismatch/third_party/MatchAnything/imcui/hloc/pipelines/7Scenes/pipeline.py +139 -0
- vismatch/third_party/MatchAnything/imcui/hloc/pipelines/7Scenes/utils.py +34 -0
- vismatch/third_party/MatchAnything/imcui/hloc/pipelines/Aachen/__init__.py +0 -0
- vismatch/third_party/MatchAnything/imcui/hloc/pipelines/Aachen/pipeline.py +109 -0
- vismatch/third_party/MatchAnything/imcui/hloc/pipelines/Aachen_v1_1/__init__.py +0 -0
- vismatch/third_party/MatchAnything/imcui/hloc/pipelines/Aachen_v1_1/pipeline.py +104 -0
- vismatch/third_party/MatchAnything/imcui/hloc/pipelines/Aachen_v1_1/pipeline_loftr.py +104 -0
- vismatch/third_party/MatchAnything/imcui/hloc/pipelines/CMU/__init__.py +0 -0
- vismatch/third_party/MatchAnything/imcui/hloc/pipelines/CMU/pipeline.py +133 -0
- vismatch/third_party/MatchAnything/imcui/hloc/pipelines/Cambridge/__init__.py +0 -0
- vismatch/third_party/MatchAnything/imcui/hloc/pipelines/Cambridge/pipeline.py +140 -0
- vismatch/third_party/MatchAnything/imcui/hloc/pipelines/Cambridge/utils.py +145 -0
- vismatch/third_party/MatchAnything/imcui/hloc/pipelines/RobotCar/__init__.py +0 -0
- vismatch/third_party/MatchAnything/imcui/hloc/pipelines/RobotCar/colmap_from_nvm.py +176 -0
- vismatch/third_party/MatchAnything/imcui/hloc/pipelines/RobotCar/pipeline.py +143 -0
- vismatch/third_party/MatchAnything/imcui/hloc/pipelines/__init__.py +0 -0
- vismatch/third_party/MatchAnything/imcui/hloc/reconstruction.py +194 -0
- vismatch/third_party/MatchAnything/imcui/hloc/triangulation.py +311 -0
- vismatch/third_party/MatchAnything/imcui/hloc/utils/__init__.py +12 -0
- vismatch/third_party/MatchAnything/imcui/hloc/utils/base_model.py +56 -0
- vismatch/third_party/MatchAnything/imcui/hloc/utils/database.py +412 -0
- vismatch/third_party/MatchAnything/imcui/hloc/utils/geometry.py +16 -0
- vismatch/third_party/MatchAnything/imcui/hloc/utils/io.py +77 -0
- vismatch/third_party/MatchAnything/imcui/hloc/utils/parsers.py +59 -0
- vismatch/third_party/MatchAnything/imcui/hloc/utils/read_write_model.py +588 -0
- vismatch/third_party/MatchAnything/imcui/hloc/utils/viz.py +146 -0
- vismatch/third_party/MatchAnything/imcui/hloc/utils/viz_3d.py +203 -0
- vismatch/third_party/MatchAnything/imcui/hloc/visualization.py +178 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/configs/models/eloftr_model.py +128 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/configs/models/roma_model.py +27 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/notebooks/notebooks_utils/__init__.py +1 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/notebooks/notebooks_utils/plotting.py +344 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/__init__.py +0 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/config/default.py +344 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/datasets/common_data_pair.py +214 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/lightning/lightning_loftr.py +343 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/loftr/__init__.py +1 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/loftr/backbone/__init__.py +61 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/loftr/backbone/repvgg.py +319 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/loftr/backbone/resnet_fpn.py +1094 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/loftr/backbone/s2dnet.py +131 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/loftr/loftr.py +273 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/loftr/loftr_module/__init__.py +2 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/loftr/loftr_module/fine_preprocess.py +350 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/loftr/loftr_module/linear_attention.py +217 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/loftr/loftr_module/transformer.py +1768 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/loftr/loftr_module/transformer_utils.py +76 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/loftr/utils/coarse_matching.py +266 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/loftr/utils/fine_matching.py +493 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/loftr/utils/geometry.py +298 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/loftr/utils/position_encoding.py +131 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/loftr/utils/supervision.py +475 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/optimizers/__init__.py +50 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/utils/__init__.py +0 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/utils/augment.py +55 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/utils/colmap/__init__.py +0 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/utils/colmap/database.py +417 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/utils/colmap/eval_helper.py +232 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/utils/colmap/read_write_model.py +509 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/utils/colmap.py +530 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/utils/comm.py +265 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/utils/dataloader.py +23 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/utils/dataset.py +518 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/utils/easydict.py +148 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/utils/geometry.py +366 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/utils/homography_utils.py +366 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/utils/metrics.py +445 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/utils/misc.py +101 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/utils/plotting.py +248 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/utils/profiler.py +39 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/utils/ray_utils.py +134 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/utils/sample_homo.py +58 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/src/utils/utils.py +600 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/demo/demo_3D_effect.py +46 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/demo/demo_fundamental.py +32 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/demo/demo_fundamental_model_warpper.py +34 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/demo/demo_match.py +50 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/demo/demo_match_opencv_sift.py +43 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/demo_single_pair.py +329 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/experiments/roma_indoor.py +320 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/experiments/roma_outdoor.py +327 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/notebooks/notebooks_utils/__init__.py +1 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/notebooks/notebooks_utils/plotting.py +331 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/__init__.py +8 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/benchmarks/__init__.py +4 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/benchmarks/hpatches_sequences_homog_benchmark.py +113 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/benchmarks/megadepth_dense_benchmark.py +106 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/benchmarks/megadepth_pose_estimation_benchmark.py +140 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/benchmarks/scannet_benchmark.py +143 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/checkpointing/__init__.py +1 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/checkpointing/checkpoint.py +60 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/datasets/__init__.py +2 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/datasets/megadepth.py +230 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/datasets/scannet.py +160 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/losses/__init__.py +1 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/losses/robust_loss.py +157 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/matchanything_roma_model.py +104 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/__init__.py +1 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/croco/blocks.py +241 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/croco/criterion.py +37 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/croco/croco.py +253 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/croco/croco_downstream.py +122 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/croco/curope/__init__.py +4 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/croco/curope/curope2d.py +40 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/croco/curope/setup.py +34 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/croco/dpt_block.py +450 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/croco/head_downstream.py +58 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/croco/masking.py +25 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/croco/pos_embed.py +159 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/__init__.py +2 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/cloud_opt/__init__.py +29 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/cloud_opt/base_opt.py +375 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/cloud_opt/commons.py +90 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/cloud_opt/init_im_poses.py +312 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/cloud_opt/optimizer.py +230 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/cloud_opt/pair_viewer.py +125 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/datasets/__init__.py +42 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/datasets/base/__init__.py +2 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/datasets/base/base_stereo_view_dataset.py +220 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/datasets/base/batched_sampler.py +74 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/datasets/base/easy_dataset.py +157 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/datasets/co3d.py +146 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/datasets/utils/__init__.py +2 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/datasets/utils/cropping.py +119 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/datasets/utils/transforms.py +11 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/heads/__init__.py +19 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/heads/dpt_head.py +114 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/heads/linear_head.py +41 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/heads/postprocess.py +58 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/image_pairs.py +83 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/inference.py +165 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/losses.py +297 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/model.py +167 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/optim_factory.py +14 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/patch_embed.py +70 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/post_process.py +60 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/utils/__init__.py +2 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/utils/device.py +76 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/utils/geometry.py +361 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/utils/image.py +104 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/utils/misc.py +121 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/utils/path_to_croco.py +19 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/dust3r/viz.py +320 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/encoders.py +137 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/matcher.py +937 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/model_zoo/__init__.py +53 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/model_zoo/roma_models.py +162 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/transformer/__init__.py +47 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/transformer/dinov2.py +359 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/transformer/layers/__init__.py +12 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/transformer/layers/attention.py +81 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/transformer/layers/block.py +252 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/transformer/layers/dino_head.py +59 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/transformer/layers/drop_path.py +35 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/transformer/layers/layer_scale.py +28 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/transformer/layers/mlp.py +41 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/transformer/layers/patch_embed.py +89 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/models/transformer/layers/swiglu_ffn.py +63 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/roma_adpat_model.py +32 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/train/__init__.py +1 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/train/train.py +102 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/utils/__init__.py +18 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/utils/kde.py +8 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/utils/local_correlation.py +44 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/utils/transforms.py +118 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/roma/utils/utils.py +661 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/third_party/ROMA/setup.py +9 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/tools/__init__.py +0 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/tools/evaluate_datasets.py +239 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/tools/tools_utils/data_io.py +94 -0
- vismatch/third_party/MatchAnything/imcui/third_party/MatchAnything/tools/tools_utils/plot.py +77 -0
- vismatch/third_party/MatchAnything/imcui/ui/__init__.py +5 -0
- vismatch/third_party/MatchAnything/imcui/ui/app_class.py +824 -0
- vismatch/third_party/MatchAnything/imcui/ui/sfm.py +164 -0
- vismatch/third_party/MatchAnything/imcui/ui/utils.py +1085 -0
- vismatch/third_party/MatchAnything/imcui/ui/viz.py +511 -0
- vismatch/third_party/MatchAnything/tests/test_basic.py +111 -0
- vismatch/third_party/MatchFormer/config/data/__init__.py +0 -0
- vismatch/third_party/MatchFormer/config/data/base.py +35 -0
- vismatch/third_party/MatchFormer/config/data/megadepth_test_1500.py +11 -0
- vismatch/third_party/MatchFormer/config/data/scannet_test_1500.py +11 -0
- vismatch/third_party/MatchFormer/config/defaultmf.py +88 -0
- vismatch/third_party/MatchFormer/model/backbone/__init__.py +17 -0
- vismatch/third_party/MatchFormer/model/backbone/coarse_matching.py +228 -0
- vismatch/third_party/MatchFormer/model/backbone/fine_matching.py +74 -0
- vismatch/third_party/MatchFormer/model/backbone/fine_preprocess.py +59 -0
- vismatch/third_party/MatchFormer/model/backbone/match_LA_large.py +254 -0
- vismatch/third_party/MatchFormer/model/backbone/match_LA_lite.py +254 -0
- vismatch/third_party/MatchFormer/model/backbone/match_SEA_large.py +291 -0
- vismatch/third_party/MatchFormer/model/backbone/match_SEA_lite.py +291 -0
- vismatch/third_party/MatchFormer/model/data.py +320 -0
- vismatch/third_party/MatchFormer/model/datasets/dataset.py +231 -0
- vismatch/third_party/MatchFormer/model/datasets/megadepth.py +126 -0
- vismatch/third_party/MatchFormer/model/datasets/sampler.py +77 -0
- vismatch/third_party/MatchFormer/model/datasets/scannet.py +113 -0
- vismatch/third_party/MatchFormer/model/lightning_loftr.py +102 -0
- vismatch/third_party/MatchFormer/model/matchformer.py +54 -0
- vismatch/third_party/MatchFormer/model/utils/augment.py +55 -0
- vismatch/third_party/MatchFormer/model/utils/comm.py +265 -0
- vismatch/third_party/MatchFormer/model/utils/dataloader.py +23 -0
- vismatch/third_party/MatchFormer/model/utils/metrics.py +193 -0
- vismatch/third_party/MatchFormer/model/utils/misc.py +101 -0
- vismatch/third_party/MatchFormer/model/utils/profiler.py +39 -0
- vismatch/third_party/MatchFormer/test.py +55 -0
- vismatch/third_party/RIPE/app.py +272 -0
- vismatch/third_party/RIPE/demo.py +51 -0
- vismatch/third_party/RIPE/ripe/__init__.py +1 -0
- vismatch/third_party/RIPE/ripe/benchmarks/imw_2020.py +320 -0
- vismatch/third_party/RIPE/ripe/data/__init__.py +0 -0
- vismatch/third_party/RIPE/ripe/data/data_transforms.py +204 -0
- vismatch/third_party/RIPE/ripe/data/datasets/__init__.py +0 -0
- vismatch/third_party/RIPE/ripe/data/datasets/acdc.py +154 -0
- vismatch/third_party/RIPE/ripe/data/datasets/dataset_combinator.py +88 -0
- vismatch/third_party/RIPE/ripe/data/datasets/disk_imw.py +160 -0
- vismatch/third_party/RIPE/ripe/data/datasets/disk_megadepth.py +157 -0
- vismatch/third_party/RIPE/ripe/data/datasets/tokyo247.py +134 -0
- vismatch/third_party/RIPE/ripe/data/datasets/tokyo_query_v3.py +78 -0
- vismatch/third_party/RIPE/ripe/losses/__init__.py +0 -0
- vismatch/third_party/RIPE/ripe/losses/contrastive_loss.py +88 -0
- vismatch/third_party/RIPE/ripe/matcher/__init__.py +0 -0
- vismatch/third_party/RIPE/ripe/matcher/concurrent_matcher.py +97 -0
- vismatch/third_party/RIPE/ripe/matcher/pose_estimator_poselib.py +31 -0
- vismatch/third_party/RIPE/ripe/model_zoo/__init__.py +1 -0
- vismatch/third_party/RIPE/ripe/model_zoo/vgg_hyper.py +39 -0
- vismatch/third_party/RIPE/ripe/models/__init__.py +0 -0
- vismatch/third_party/RIPE/ripe/models/backbones/__init__.py +0 -0
- vismatch/third_party/RIPE/ripe/models/backbones/backbone_base.py +61 -0
- vismatch/third_party/RIPE/ripe/models/backbones/vgg.py +99 -0
- vismatch/third_party/RIPE/ripe/models/backbones/vgg_utils.py +143 -0
- vismatch/third_party/RIPE/ripe/models/ripe.py +303 -0
- vismatch/third_party/RIPE/ripe/models/upsampler/hypercolumn_features.py +54 -0
- vismatch/third_party/RIPE/ripe/models/upsampler/interpolate_sparse2d.py +37 -0
- vismatch/third_party/RIPE/ripe/scheduler/__init__.py +0 -0
- vismatch/third_party/RIPE/ripe/scheduler/constant.py +6 -0
- vismatch/third_party/RIPE/ripe/scheduler/expDecay.py +26 -0
- vismatch/third_party/RIPE/ripe/scheduler/linearLR.py +37 -0
- vismatch/third_party/RIPE/ripe/scheduler/linear_with_plateaus.py +44 -0
- vismatch/third_party/RIPE/ripe/train.py +410 -0
- vismatch/third_party/RIPE/ripe/utils/__init__.py +2 -0
- vismatch/third_party/RIPE/ripe/utils/image_utils.py +62 -0
- vismatch/third_party/RIPE/ripe/utils/pose_error.py +62 -0
- vismatch/third_party/RIPE/ripe/utils/pylogger.py +32 -0
- vismatch/third_party/RIPE/ripe/utils/utils.py +192 -0
- vismatch/third_party/RIPE/ripe/utils/wandb_utils.py +16 -0
- vismatch/third_party/RoMa/demo/demo_3D_effect.py +47 -0
- vismatch/third_party/RoMa/demo/demo_fundamental.py +34 -0
- vismatch/third_party/RoMa/demo/demo_match.py +50 -0
- vismatch/third_party/RoMa/demo/demo_match_opencv_sift.py +43 -0
- vismatch/third_party/RoMa/demo/demo_match_tiny.py +77 -0
- vismatch/third_party/RoMa/experiments/eval_roma_outdoor.py +57 -0
- vismatch/third_party/RoMa/experiments/eval_tiny_roma_v1_outdoor.py +84 -0
- vismatch/third_party/RoMa/experiments/roma_indoor.py +320 -0
- vismatch/third_party/RoMa/experiments/train_roma_outdoor.py +307 -0
- vismatch/third_party/RoMa/experiments/train_tiny_roma_v1_outdoor.py +498 -0
- vismatch/third_party/RoMa/romatch/__init__.py +8 -0
- vismatch/third_party/RoMa/romatch/benchmarks/__init__.py +6 -0
- vismatch/third_party/RoMa/romatch/benchmarks/hpatches_sequences_homog_benchmark.py +113 -0
- vismatch/third_party/RoMa/romatch/benchmarks/megadepth_dense_benchmark.py +106 -0
- vismatch/third_party/RoMa/romatch/benchmarks/megadepth_pose_estimation_benchmark.py +118 -0
- vismatch/third_party/RoMa/romatch/benchmarks/megadepth_pose_estimation_benchmark_poselib.py +119 -0
- vismatch/third_party/RoMa/romatch/benchmarks/scannet_benchmark.py +143 -0
- vismatch/third_party/RoMa/romatch/checkpointing/__init__.py +1 -0
- vismatch/third_party/RoMa/romatch/checkpointing/checkpoint.py +60 -0
- vismatch/third_party/RoMa/romatch/datasets/__init__.py +2 -0
- vismatch/third_party/RoMa/romatch/datasets/megadepth.py +232 -0
- vismatch/third_party/RoMa/romatch/datasets/scannet.py +160 -0
- vismatch/third_party/RoMa/romatch/losses/__init__.py +1 -0
- vismatch/third_party/RoMa/romatch/losses/robust_loss.py +161 -0
- vismatch/third_party/RoMa/romatch/losses/robust_loss_tiny_roma.py +160 -0
- vismatch/third_party/RoMa/romatch/models/__init__.py +1 -0
- vismatch/third_party/RoMa/romatch/models/encoders.py +122 -0
- vismatch/third_party/RoMa/romatch/models/matcher.py +748 -0
- vismatch/third_party/RoMa/romatch/models/model_zoo/__init__.py +73 -0
- vismatch/third_party/RoMa/romatch/models/model_zoo/roma_models.py +170 -0
- vismatch/third_party/RoMa/romatch/models/tiny.py +304 -0
- vismatch/third_party/RoMa/romatch/models/transformer/__init__.py +48 -0
- vismatch/third_party/RoMa/romatch/models/transformer/dinov2.py +359 -0
- vismatch/third_party/RoMa/romatch/models/transformer/layers/__init__.py +12 -0
- vismatch/third_party/RoMa/romatch/models/transformer/layers/attention.py +81 -0
- vismatch/third_party/RoMa/romatch/models/transformer/layers/block.py +252 -0
- vismatch/third_party/RoMa/romatch/models/transformer/layers/dino_head.py +59 -0
- vismatch/third_party/RoMa/romatch/models/transformer/layers/drop_path.py +35 -0
- vismatch/third_party/RoMa/romatch/models/transformer/layers/layer_scale.py +28 -0
- vismatch/third_party/RoMa/romatch/models/transformer/layers/mlp.py +41 -0
- vismatch/third_party/RoMa/romatch/models/transformer/layers/patch_embed.py +89 -0
- vismatch/third_party/RoMa/romatch/models/transformer/layers/swiglu_ffn.py +63 -0
- vismatch/third_party/RoMa/romatch/train/__init__.py +1 -0
- vismatch/third_party/RoMa/romatch/train/train.py +102 -0
- vismatch/third_party/RoMa/romatch/utils/__init__.py +16 -0
- vismatch/third_party/RoMa/romatch/utils/kde.py +13 -0
- vismatch/third_party/RoMa/romatch/utils/local_correlation.py +48 -0
- vismatch/third_party/RoMa/romatch/utils/transforms.py +118 -0
- vismatch/third_party/RoMa/romatch/utils/utils.py +654 -0
- vismatch/third_party/RoMa/setup.py +9 -0
- vismatch/third_party/RoMaV2/demo/demo_covariance.py +52 -0
- vismatch/third_party/RoMaV2/demo/demo_match.py +55 -0
- vismatch/third_party/RoMaV2/src/romav2/__init__.py +8 -0
- vismatch/third_party/RoMaV2/src/romav2/benchmarks/__init__.py +4 -0
- vismatch/third_party/RoMaV2/src/romav2/benchmarks/mega1500.py +115 -0
- vismatch/third_party/RoMaV2/src/romav2/benchmarks/satast.py +463 -0
- vismatch/third_party/RoMaV2/src/romav2/benchmarks/scannet1500.py +125 -0
- vismatch/third_party/RoMaV2/src/romav2/benchmarks/wxbs.py +104 -0
- vismatch/third_party/RoMaV2/src/romav2/device.py +9 -0
- vismatch/third_party/RoMaV2/src/romav2/dpt.py +516 -0
- vismatch/third_party/RoMaV2/src/romav2/features.py +190 -0
- vismatch/third_party/RoMaV2/src/romav2/geometry.py +261 -0
- vismatch/third_party/RoMaV2/src/romav2/io.py +24 -0
- vismatch/third_party/RoMaV2/src/romav2/local_correlation.py +152 -0
- vismatch/third_party/RoMaV2/src/romav2/logging.py +97 -0
- vismatch/third_party/RoMaV2/src/romav2/matcher.py +207 -0
- vismatch/third_party/RoMaV2/src/romav2/normalizers.py +17 -0
- vismatch/third_party/RoMaV2/src/romav2/refiner.py +277 -0
- vismatch/third_party/RoMaV2/src/romav2/romav2.py +533 -0
- vismatch/third_party/RoMaV2/src/romav2/types.py +75 -0
- vismatch/third_party/RoMaV2/src/romav2/vis.py +36 -0
- vismatch/third_party/RoMaV2/src/romav2/vit/__init__.py +304 -0
- vismatch/third_party/RoMaV2/src/romav2/vit/attention.py +181 -0
- vismatch/third_party/RoMaV2/src/romav2/vit/block.py +293 -0
- vismatch/third_party/RoMaV2/src/romav2/vit/ffn_layers.py +83 -0
- vismatch/third_party/RoMaV2/src/romav2/vit/layer_scale.py +29 -0
- vismatch/third_party/RoMaV2/src/romav2/vit/patch_embed.py +94 -0
- vismatch/third_party/RoMaV2/src/romav2/vit/rms_norm.py +24 -0
- vismatch/third_party/RoMaV2/src/romav2/vit/rope.py +133 -0
- vismatch/third_party/RoMaV2/src/romav2/vit/rope_mixed.py +111 -0
- vismatch/third_party/RoMaV2/src/romav2/vit/utils.py +48 -0
- vismatch/third_party/RoMaV2/tests/test_bidirectional.py +93 -0
- vismatch/third_party/RoMaV2/tests/test_fps.py +49 -0
- vismatch/third_party/RoMaV2/tests/test_mega1500.py +22 -0
- vismatch/third_party/RoMaV2/tests/test_scannet1500.py +21 -0
- vismatch/third_party/RoMaV2/tests/test_smoke.py +15 -0
- vismatch/third_party/Se2_LoFTR/configs/data/__init__.py +0 -0
- vismatch/third_party/Se2_LoFTR/configs/data/base.py +35 -0
- vismatch/third_party/Se2_LoFTR/configs/data/megadepth_test_1500.py +11 -0
- vismatch/third_party/Se2_LoFTR/configs/data/megadepth_trainval_640.py +22 -0
- vismatch/third_party/Se2_LoFTR/configs/data/megadepth_trainval_840.py +22 -0
- vismatch/third_party/Se2_LoFTR/configs/data/scannet_test_1500.py +11 -0
- vismatch/third_party/Se2_LoFTR/configs/data/scannet_trainval.py +17 -0
- vismatch/third_party/Se2_LoFTR/configs/loftr/indoor/buggy_pos_enc/loftr_ds.py +6 -0
- vismatch/third_party/Se2_LoFTR/configs/loftr/indoor/buggy_pos_enc/loftr_ds_dense.py +8 -0
- vismatch/third_party/Se2_LoFTR/configs/loftr/indoor/buggy_pos_enc/loftr_ot.py +6 -0
- vismatch/third_party/Se2_LoFTR/configs/loftr/indoor/buggy_pos_enc/loftr_ot_dense.py +8 -0
- vismatch/third_party/Se2_LoFTR/configs/loftr/indoor/loftr_ds.py +5 -0
- vismatch/third_party/Se2_LoFTR/configs/loftr/indoor/loftr_ds_dense.py +7 -0
- vismatch/third_party/Se2_LoFTR/configs/loftr/indoor/loftr_ot.py +5 -0
- vismatch/third_party/Se2_LoFTR/configs/loftr/indoor/loftr_ot_dense.py +7 -0
- vismatch/third_party/Se2_LoFTR/configs/loftr/indoor/scannet/loftr_ds_eval.py +16 -0
- vismatch/third_party/Se2_LoFTR/configs/loftr/indoor/scannet/loftr_ds_eval_new.py +18 -0
- vismatch/third_party/Se2_LoFTR/configs/loftr/outdoor/buggy_pos_enc/loftr_ds.py +16 -0
- vismatch/third_party/Se2_LoFTR/configs/loftr/outdoor/buggy_pos_enc/loftr_ds_dense.py +17 -0
- vismatch/third_party/Se2_LoFTR/configs/loftr/outdoor/buggy_pos_enc/loftr_ot.py +16 -0
- vismatch/third_party/Se2_LoFTR/configs/loftr/outdoor/buggy_pos_enc/loftr_ot_dense.py +17 -0
- vismatch/third_party/Se2_LoFTR/configs/loftr/outdoor/loftr_ds.py +17 -0
- vismatch/third_party/Se2_LoFTR/configs/loftr/outdoor/loftr_ds_dense.py +17 -0
- vismatch/third_party/Se2_LoFTR/configs/loftr/outdoor/loftr_ds_e2.py +20 -0
- vismatch/third_party/Se2_LoFTR/configs/loftr/outdoor/loftr_ds_e2_dense.py +23 -0
- vismatch/third_party/Se2_LoFTR/configs/loftr/outdoor/loftr_ds_e2_dense_8rot.py +23 -0
- vismatch/third_party/Se2_LoFTR/configs/loftr/outdoor/loftr_ds_e2_dense_big.py +22 -0
- vismatch/third_party/Se2_LoFTR/configs/loftr/outdoor/loftr_ot.py +17 -0
- vismatch/third_party/Se2_LoFTR/configs/loftr/outdoor/loftr_ot_dense.py +18 -0
- vismatch/third_party/Se2_LoFTR/demo/demo_loftr.py +240 -0
- vismatch/third_party/Se2_LoFTR/src/__init__.py +0 -0
- vismatch/third_party/Se2_LoFTR/src/config/default.py +173 -0
- vismatch/third_party/Se2_LoFTR/src/datasets/megadepth.py +127 -0
- vismatch/third_party/Se2_LoFTR/src/datasets/sampler.py +77 -0
- vismatch/third_party/Se2_LoFTR/src/datasets/scannet.py +114 -0
- vismatch/third_party/Se2_LoFTR/src/lightning/data.py +320 -0
- vismatch/third_party/Se2_LoFTR/src/lightning/lightning_loftr.py +249 -0
- vismatch/third_party/Se2_LoFTR/src/loftr/__init__.py +2 -0
- vismatch/third_party/Se2_LoFTR/src/loftr/backbone/__init__.py +17 -0
- vismatch/third_party/Se2_LoFTR/src/loftr/backbone/resnet_e2.py +170 -0
- vismatch/third_party/Se2_LoFTR/src/loftr/backbone/resnet_fpn.py +199 -0
- vismatch/third_party/Se2_LoFTR/src/loftr/loftr.py +81 -0
- vismatch/third_party/Se2_LoFTR/src/loftr/loftr_module/__init__.py +2 -0
- vismatch/third_party/Se2_LoFTR/src/loftr/loftr_module/fine_preprocess.py +59 -0
- vismatch/third_party/Se2_LoFTR/src/loftr/loftr_module/linear_attention.py +81 -0
- vismatch/third_party/Se2_LoFTR/src/loftr/loftr_module/transformer.py +101 -0
- vismatch/third_party/Se2_LoFTR/src/loftr/utils/coarse_matching.py +261 -0
- vismatch/third_party/Se2_LoFTR/src/loftr/utils/cvpr_ds_config.py +50 -0
- vismatch/third_party/Se2_LoFTR/src/loftr/utils/fine_matching.py +74 -0
- vismatch/third_party/Se2_LoFTR/src/loftr/utils/geometry.py +54 -0
- vismatch/third_party/Se2_LoFTR/src/loftr/utils/position_encoding.py +42 -0
- vismatch/third_party/Se2_LoFTR/src/loftr/utils/supervision.py +151 -0
- vismatch/third_party/Se2_LoFTR/src/losses/loftr_loss.py +192 -0
- vismatch/third_party/Se2_LoFTR/src/optimizers/__init__.py +42 -0
- vismatch/third_party/Se2_LoFTR/src/utils/augment.py +55 -0
- vismatch/third_party/Se2_LoFTR/src/utils/comm.py +265 -0
- vismatch/third_party/Se2_LoFTR/src/utils/dataloader.py +23 -0
- vismatch/third_party/Se2_LoFTR/src/utils/dataset.py +185 -0
- vismatch/third_party/Se2_LoFTR/src/utils/metrics.py +193 -0
- vismatch/third_party/Se2_LoFTR/src/utils/misc.py +104 -0
- vismatch/third_party/Se2_LoFTR/src/utils/plotting.py +154 -0
- vismatch/third_party/Se2_LoFTR/src/utils/profiler.py +39 -0
- vismatch/third_party/Se2_LoFTR/test.py +68 -0
- vismatch/third_party/Se2_LoFTR/train.py +123 -0
- vismatch/third_party/SphereGlue/demo_SphereGlue.py +141 -0
- vismatch/third_party/SphereGlue/model/sphereglue.py +230 -0
- vismatch/third_party/SphereGlue/utils/Utils.py +191 -0
- vismatch/third_party/SphereGlue/utils/demo_mydataset.py +119 -0
- vismatch/third_party/Steerers/rotation_steerers/matchers/dual_softmax_matcher.py +44 -0
- vismatch/third_party/Steerers/rotation_steerers/matchers/max_matches.py +205 -0
- vismatch/third_party/Steerers/rotation_steerers/matchers/max_similarity.py +115 -0
- vismatch/third_party/Steerers/rotation_steerers/steerers.py +37 -0
- vismatch/third_party/Steerers/setup.py +14 -0
- vismatch/third_party/TopicFM/configs/megadepth_test.py +17 -0
- vismatch/third_party/TopicFM/configs/megadepth_test_topicfmfast.py +17 -0
- vismatch/third_party/TopicFM/configs/megadepth_test_topicfmplus.py +20 -0
- vismatch/third_party/TopicFM/configs/megadepth_train.py +36 -0
- vismatch/third_party/TopicFM/configs/megadepth_train_topicfmfast.py +34 -0
- vismatch/third_party/TopicFM/configs/megadepth_train_topicfmplus.py +37 -0
- vismatch/third_party/TopicFM/configs/scannet_test.py +15 -0
- vismatch/third_party/TopicFM/configs/scannet_test_topicfmfast.py +15 -0
- vismatch/third_party/TopicFM/configs/scannet_test_topicfmplus.py +19 -0
- vismatch/third_party/TopicFM/src/__init__.py +11 -0
- vismatch/third_party/TopicFM/src/config/default.py +174 -0
- vismatch/third_party/TopicFM/src/datasets/aachen.py +29 -0
- vismatch/third_party/TopicFM/src/datasets/custom_dataloader.py +126 -0
- vismatch/third_party/TopicFM/src/datasets/inloc.py +29 -0
- vismatch/third_party/TopicFM/src/datasets/megadepth.py +170 -0
- vismatch/third_party/TopicFM/src/datasets/sampler.py +77 -0
- vismatch/third_party/TopicFM/src/datasets/scannet.py +115 -0
- vismatch/third_party/TopicFM/src/lightning_trainer/data.py +292 -0
- vismatch/third_party/TopicFM/src/lightning_trainer/trainer.py +244 -0
- vismatch/third_party/TopicFM/src/losses/loss.py +228 -0
- vismatch/third_party/TopicFM/src/models/__init__.py +1 -0
- vismatch/third_party/TopicFM/src/models/backbone/__init__.py +12 -0
- vismatch/third_party/TopicFM/src/models/backbone/convnext.py +165 -0
- vismatch/third_party/TopicFM/src/models/backbone/fpn.py +114 -0
- vismatch/third_party/TopicFM/src/models/modules/__init__.py +2 -0
- vismatch/third_party/TopicFM/src/models/modules/encoder.py +266 -0
- vismatch/third_party/TopicFM/src/models/modules/fine_preprocess.py +59 -0
- vismatch/third_party/TopicFM/src/models/modules/linear_attention.py +84 -0
- vismatch/third_party/TopicFM/src/models/topic_fm.py +100 -0
- vismatch/third_party/TopicFM/src/models/utils/coarse_matching.py +213 -0
- vismatch/third_party/TopicFM/src/models/utils/fine_matching.py +172 -0
- vismatch/third_party/TopicFM/src/models/utils/geometry.py +54 -0
- vismatch/third_party/TopicFM/src/models/utils/supervision.py +167 -0
- vismatch/third_party/TopicFM/src/optimizers/__init__.py +42 -0
- vismatch/third_party/TopicFM/src/utils/augment.py +55 -0
- vismatch/third_party/TopicFM/src/utils/comm.py +265 -0
- vismatch/third_party/TopicFM/src/utils/dataloader.py +23 -0
- vismatch/third_party/TopicFM/src/utils/dataset.py +206 -0
- vismatch/third_party/TopicFM/src/utils/metrics.py +193 -0
- vismatch/third_party/TopicFM/src/utils/misc.py +101 -0
- vismatch/third_party/TopicFM/src/utils/plotting.py +313 -0
- vismatch/third_party/TopicFM/src/utils/profiler.py +39 -0
- vismatch/third_party/TopicFM/test.py +70 -0
- vismatch/third_party/TopicFM/third_party/__init__.py +0 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/configs/aspan/indoor/aspan_test.py +7 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/configs/aspan/indoor/aspan_train.py +8 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/configs/aspan/outdoor/aspan_test.py +18 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/configs/aspan/outdoor/aspan_train.py +17 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/configs/data/__init__.py +0 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/configs/data/base.py +35 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/configs/data/megadepth_test_1500.py +13 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/configs/data/megadepth_trainval_832.py +22 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/configs/data/scannet_test_1500.py +11 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/configs/data/scannet_trainval.py +17 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/demo/demo.py +63 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/demo/demo_utils.py +44 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/ASpanFormer/__init__.py +2 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/ASpanFormer/aspan_module/__init__.py +3 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/ASpanFormer/aspan_module/attention.py +198 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/ASpanFormer/aspan_module/fine_preprocess.py +59 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/ASpanFormer/aspan_module/loftr.py +112 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/ASpanFormer/aspan_module/transformer.py +244 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/ASpanFormer/aspanformer.py +133 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/ASpanFormer/backbone/__init__.py +11 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/ASpanFormer/backbone/resnet_fpn.py +199 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/ASpanFormer/utils/coarse_matching.py +331 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/ASpanFormer/utils/cvpr_ds_config.py +50 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/ASpanFormer/utils/fine_matching.py +74 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/ASpanFormer/utils/geometry.py +54 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/ASpanFormer/utils/position_encoding.py +61 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/ASpanFormer/utils/supervision.py +151 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/__init__.py +0 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/config/default.py +180 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/datasets/__init__.py +3 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/datasets/megadepth.py +127 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/datasets/sampler.py +77 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/datasets/scannet.py +113 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/lightning/data.py +326 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/lightning/lightning_aspanformer.py +276 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/losses/aspan_loss.py +231 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/optimizers/__init__.py +42 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/utils/augment.py +55 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/utils/comm.py +265 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/utils/dataloader.py +23 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/utils/dataset.py +222 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/utils/metrics.py +260 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/utils/misc.py +139 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/utils/plotting.py +219 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/src/utils/profiler.py +39 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/test.py +69 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/tools/SensorData.py +125 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/tools/extract.py +47 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/tools/preprocess_scene.py +242 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/tools/reader.py +39 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/tools/undistort_mega.py +69 -0
- vismatch/third_party/TopicFM/third_party/aspanformer/train.py +134 -0
- vismatch/third_party/TopicFM/third_party/loftr/configs/data/__init__.py +0 -0
- vismatch/third_party/TopicFM/third_party/loftr/configs/data/base.py +35 -0
- vismatch/third_party/TopicFM/third_party/loftr/configs/data/megadepth_test_1500.py +11 -0
- vismatch/third_party/TopicFM/third_party/loftr/configs/data/megadepth_trainval_640.py +22 -0
- vismatch/third_party/TopicFM/third_party/loftr/configs/data/megadepth_trainval_840.py +22 -0
- vismatch/third_party/TopicFM/third_party/loftr/configs/data/scannet_test_1500.py +11 -0
- vismatch/third_party/TopicFM/third_party/loftr/configs/data/scannet_trainval.py +17 -0
- vismatch/third_party/TopicFM/third_party/loftr/configs/loftr/indoor/buggy_pos_enc/loftr_ds.py +6 -0
- vismatch/third_party/TopicFM/third_party/loftr/configs/loftr/indoor/buggy_pos_enc/loftr_ds_dense.py +8 -0
- vismatch/third_party/TopicFM/third_party/loftr/configs/loftr/indoor/buggy_pos_enc/loftr_ot.py +6 -0
- vismatch/third_party/TopicFM/third_party/loftr/configs/loftr/indoor/buggy_pos_enc/loftr_ot_dense.py +8 -0
- vismatch/third_party/TopicFM/third_party/loftr/configs/loftr/indoor/loftr_ds.py +5 -0
- vismatch/third_party/TopicFM/third_party/loftr/configs/loftr/indoor/loftr_ds_dense.py +7 -0
- vismatch/third_party/TopicFM/third_party/loftr/configs/loftr/indoor/loftr_ot.py +5 -0
- vismatch/third_party/TopicFM/third_party/loftr/configs/loftr/indoor/loftr_ot_dense.py +7 -0
- vismatch/third_party/TopicFM/third_party/loftr/configs/loftr/indoor/scannet/loftr_ds_eval.py +16 -0
- vismatch/third_party/TopicFM/third_party/loftr/configs/loftr/indoor/scannet/loftr_ds_eval_new.py +18 -0
- vismatch/third_party/TopicFM/third_party/loftr/configs/loftr/outdoor/buggy_pos_enc/loftr_ds.py +16 -0
- vismatch/third_party/TopicFM/third_party/loftr/configs/loftr/outdoor/buggy_pos_enc/loftr_ds_dense.py +17 -0
- vismatch/third_party/TopicFM/third_party/loftr/configs/loftr/outdoor/buggy_pos_enc/loftr_ot.py +16 -0
- vismatch/third_party/TopicFM/third_party/loftr/configs/loftr/outdoor/buggy_pos_enc/loftr_ot_dense.py +17 -0
- vismatch/third_party/TopicFM/third_party/loftr/configs/loftr/outdoor/loftr_ds.py +15 -0
- vismatch/third_party/TopicFM/third_party/loftr/configs/loftr/outdoor/loftr_ds_dense.py +16 -0
- vismatch/third_party/TopicFM/third_party/loftr/configs/loftr/outdoor/loftr_ot.py +15 -0
- vismatch/third_party/TopicFM/third_party/loftr/configs/loftr/outdoor/loftr_ot_dense.py +16 -0
- vismatch/third_party/TopicFM/third_party/loftr/demo/demo_loftr.py +240 -0
- vismatch/third_party/TopicFM/third_party/loftr/src/__init__.py +0 -0
- vismatch/third_party/TopicFM/third_party/loftr/src/config/default.py +171 -0
- vismatch/third_party/TopicFM/third_party/loftr/src/datasets/megadepth.py +127 -0
- vismatch/third_party/TopicFM/third_party/loftr/src/datasets/sampler.py +77 -0
- vismatch/third_party/TopicFM/third_party/loftr/src/datasets/scannet.py +114 -0
- vismatch/third_party/TopicFM/third_party/loftr/src/lightning/data.py +320 -0
- vismatch/third_party/TopicFM/third_party/loftr/src/lightning/lightning_loftr.py +249 -0
- vismatch/third_party/TopicFM/third_party/loftr/src/loftr/__init__.py +2 -0
- vismatch/third_party/TopicFM/third_party/loftr/src/loftr/backbone/__init__.py +11 -0
- vismatch/third_party/TopicFM/third_party/loftr/src/loftr/backbone/resnet_fpn.py +199 -0
- vismatch/third_party/TopicFM/third_party/loftr/src/loftr/loftr.py +81 -0
- vismatch/third_party/TopicFM/third_party/loftr/src/loftr/loftr_module/__init__.py +2 -0
- vismatch/third_party/TopicFM/third_party/loftr/src/loftr/loftr_module/fine_preprocess.py +59 -0
- vismatch/third_party/TopicFM/third_party/loftr/src/loftr/loftr_module/linear_attention.py +81 -0
- vismatch/third_party/TopicFM/third_party/loftr/src/loftr/loftr_module/transformer.py +101 -0
- vismatch/third_party/TopicFM/third_party/loftr/src/loftr/utils/coarse_matching.py +261 -0
- vismatch/third_party/TopicFM/third_party/loftr/src/loftr/utils/cvpr_ds_config.py +50 -0
- vismatch/third_party/TopicFM/third_party/loftr/src/loftr/utils/fine_matching.py +74 -0
- vismatch/third_party/TopicFM/third_party/loftr/src/loftr/utils/geometry.py +54 -0
- vismatch/third_party/TopicFM/third_party/loftr/src/loftr/utils/position_encoding.py +42 -0
- vismatch/third_party/TopicFM/third_party/loftr/src/loftr/utils/supervision.py +151 -0
- vismatch/third_party/TopicFM/third_party/loftr/src/losses/loftr_loss.py +192 -0
- vismatch/third_party/TopicFM/third_party/loftr/src/optimizers/__init__.py +42 -0
- vismatch/third_party/TopicFM/third_party/loftr/src/utils/augment.py +55 -0
- vismatch/third_party/TopicFM/third_party/loftr/src/utils/comm.py +265 -0
- vismatch/third_party/TopicFM/third_party/loftr/src/utils/dataloader.py +23 -0
- vismatch/third_party/TopicFM/third_party/loftr/src/utils/dataset.py +185 -0
- vismatch/third_party/TopicFM/third_party/loftr/src/utils/metrics.py +193 -0
- vismatch/third_party/TopicFM/third_party/loftr/src/utils/misc.py +101 -0
- vismatch/third_party/TopicFM/third_party/loftr/src/utils/plotting.py +154 -0
- vismatch/third_party/TopicFM/third_party/loftr/src/utils/profiler.py +39 -0
- vismatch/third_party/TopicFM/third_party/loftr/test.py +68 -0
- vismatch/third_party/TopicFM/third_party/loftr/third_party/SuperGluePretrainedNetwork/demo_superglue.py +259 -0
- vismatch/third_party/TopicFM/third_party/loftr/third_party/SuperGluePretrainedNetwork/match_pairs.py +425 -0
- vismatch/third_party/TopicFM/third_party/loftr/third_party/SuperGluePretrainedNetwork/models/__init__.py +0 -0
- vismatch/third_party/TopicFM/third_party/loftr/third_party/SuperGluePretrainedNetwork/models/matching.py +84 -0
- vismatch/third_party/TopicFM/third_party/loftr/third_party/SuperGluePretrainedNetwork/models/superglue.py +283 -0
- vismatch/third_party/TopicFM/third_party/loftr/third_party/SuperGluePretrainedNetwork/models/superpoint.py +202 -0
- vismatch/third_party/TopicFM/third_party/loftr/third_party/SuperGluePretrainedNetwork/models/utils.py +555 -0
- vismatch/third_party/TopicFM/third_party/loftr/train.py +123 -0
- vismatch/third_party/TopicFM/third_party/matchformer/config/data/__init__.py +0 -0
- vismatch/third_party/TopicFM/third_party/matchformer/config/data/base.py +35 -0
- vismatch/third_party/TopicFM/third_party/matchformer/config/data/megadepth_test_1500.py +11 -0
- vismatch/third_party/TopicFM/third_party/matchformer/config/data/scannet_test_1500.py +11 -0
- vismatch/third_party/TopicFM/third_party/matchformer/config/defaultmf.py +88 -0
- vismatch/third_party/TopicFM/third_party/matchformer/model/backbone/__init__.py +17 -0
- vismatch/third_party/TopicFM/third_party/matchformer/model/backbone/coarse_matching.py +228 -0
- vismatch/third_party/TopicFM/third_party/matchformer/model/backbone/fine_matching.py +74 -0
- vismatch/third_party/TopicFM/third_party/matchformer/model/backbone/fine_preprocess.py +59 -0
- vismatch/third_party/TopicFM/third_party/matchformer/model/backbone/match_LA_large.py +254 -0
- vismatch/third_party/TopicFM/third_party/matchformer/model/backbone/match_LA_lite.py +254 -0
- vismatch/third_party/TopicFM/third_party/matchformer/model/backbone/match_SEA_large.py +291 -0
- vismatch/third_party/TopicFM/third_party/matchformer/model/backbone/match_SEA_lite.py +291 -0
- vismatch/third_party/TopicFM/third_party/matchformer/model/data.py +320 -0
- vismatch/third_party/TopicFM/third_party/matchformer/model/datasets/dataset.py +231 -0
- vismatch/third_party/TopicFM/third_party/matchformer/model/datasets/megadepth.py +126 -0
- vismatch/third_party/TopicFM/third_party/matchformer/model/datasets/sampler.py +77 -0
- vismatch/third_party/TopicFM/third_party/matchformer/model/datasets/scannet.py +113 -0
- vismatch/third_party/TopicFM/third_party/matchformer/model/lightning_loftr.py +102 -0
- vismatch/third_party/TopicFM/third_party/matchformer/model/matchformer.py +54 -0
- vismatch/third_party/TopicFM/third_party/matchformer/model/utils/augment.py +55 -0
- vismatch/third_party/TopicFM/third_party/matchformer/model/utils/comm.py +265 -0
- vismatch/third_party/TopicFM/third_party/matchformer/model/utils/dataloader.py +23 -0
- vismatch/third_party/TopicFM/third_party/matchformer/model/utils/metrics.py +193 -0
- vismatch/third_party/TopicFM/third_party/matchformer/model/utils/misc.py +101 -0
- vismatch/third_party/TopicFM/third_party/matchformer/model/utils/profiler.py +39 -0
- vismatch/third_party/TopicFM/third_party/matchformer/test.py +55 -0
- vismatch/third_party/TopicFM/train.py +123 -0
- vismatch/third_party/TopicFM/visualization.py +123 -0
- vismatch/third_party/TopicFM/viz/__init__.py +1 -0
- vismatch/third_party/TopicFM/viz/configs/__init__.py +0 -0
- vismatch/third_party/TopicFM/viz/methods/__init__.py +0 -0
- vismatch/third_party/TopicFM/viz/methods/base.py +70 -0
- vismatch/third_party/TopicFM/viz/methods/topicfmv2.py +208 -0
- vismatch/third_party/UFM/UniCeption/examples/models/cosmos/autoencoding.py +48 -0
- vismatch/third_party/UFM/UniCeption/examples/models/dust3r/convert_dust3r_weights_to_uniception.py +331 -0
- vismatch/third_party/UFM/UniCeption/examples/models/dust3r/dust3r.py +261 -0
- vismatch/third_party/UFM/UniCeption/examples/models/dust3r/profile_dust3r.py +47 -0
- vismatch/third_party/UFM/UniCeption/scripts/check_dependencies.py +48 -0
- vismatch/third_party/UFM/UniCeption/scripts/download_checkpoints.py +50 -0
- vismatch/third_party/UFM/UniCeption/scripts/install_croco_rope.py +61 -0
- vismatch/third_party/UFM/UniCeption/scripts/prepare_offline_install.py +398 -0
- vismatch/third_party/UFM/UniCeption/scripts/validate_installation.py +212 -0
- vismatch/third_party/UFM/UniCeption/setup.py +185 -0
- vismatch/third_party/UFM/UniCeption/tests/models/encoders/conftest.py +26 -0
- vismatch/third_party/UFM/UniCeption/tests/models/encoders/test_encoders.py +202 -0
- vismatch/third_party/UFM/UniCeption/tests/models/encoders/viz_image_encoders.py +294 -0
- vismatch/third_party/UFM/UniCeption/tests/models/info_sharing/viz_mulit_view_cross_attn_transformers.py +337 -0
- vismatch/third_party/UFM/UniCeption/uniception/__init__.py +0 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/__init__.py +0 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/encoders/__init__.py +225 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/encoders/base.py +157 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/encoders/cosmos.py +137 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/encoders/croco.py +457 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/encoders/dense_rep_encoder.py +344 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/encoders/dinov2.py +333 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/encoders/global_rep_encoder.py +115 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/encoders/image_normalizations.py +35 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/encoders/list.py +10 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/encoders/patch_embedder.py +235 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/encoders/radio.py +367 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/encoders/utils.py +86 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/factory/__init__.py +3 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/factory/dust3r.py +332 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/info_sharing/__init__.py +39 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/info_sharing/alternating_attention_transformer.py +973 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/info_sharing/base.py +116 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/info_sharing/cross_attention_transformer.py +612 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/info_sharing/diff_cross_attention_transformer.py +588 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/info_sharing/global_attention_transformer.py +1154 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/libs/__init__.py +0 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/libs/cosmos_tokenizer/__init__.py +14 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/libs/cosmos_tokenizer/image_cli.py +175 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/libs/cosmos_tokenizer/image_lib.py +123 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/libs/cosmos_tokenizer/modules/__init__.py +60 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/libs/cosmos_tokenizer/modules/distributions.py +41 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/libs/cosmos_tokenizer/modules/layers2d.py +326 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/libs/cosmos_tokenizer/modules/layers3d.py +965 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/libs/cosmos_tokenizer/modules/patching.py +310 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/libs/cosmos_tokenizer/modules/quantizers.py +510 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/libs/cosmos_tokenizer/modules/utils.py +115 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/libs/cosmos_tokenizer/networks/__init__.py +39 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/libs/cosmos_tokenizer/networks/configs.py +146 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/libs/cosmos_tokenizer/networks/continuous_image.py +86 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/libs/cosmos_tokenizer/networks/continuous_video.py +98 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/libs/cosmos_tokenizer/networks/discrete_image.py +113 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/libs/cosmos_tokenizer/networks/discrete_video.py +115 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/libs/cosmos_tokenizer/utils.py +402 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/libs/cosmos_tokenizer/video_cli.py +195 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/libs/cosmos_tokenizer/video_lib.py +145 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/libs/croco/__init__.py +0 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/libs/croco/blocks.py +249 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/libs/croco/curope/__init__.py +4 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/libs/croco/curope/curope2d.py +39 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/libs/croco/curope/setup.py +33 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/libs/croco/dpt_block.py +530 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/libs/croco/patch_embed.py +127 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/libs/croco/pos_embed.py +155 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/prediction_heads/__init__.py +18 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/prediction_heads/adaptors.py +1765 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/prediction_heads/base.py +210 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/prediction_heads/cosmos.py +211 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/prediction_heads/dpt.py +676 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/prediction_heads/global_head.py +142 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/prediction_heads/linear.py +95 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/prediction_heads/mlp_feature.py +114 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/prediction_heads/mlp_head.py +114 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/prediction_heads/moge_conv.py +342 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/prediction_heads/pose_head.py +181 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/utils/__init__.py +0 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/utils/config.py +34 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/utils/intermediate_feature_return.py +85 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/utils/positional_encoding.py +23 -0
- vismatch/third_party/UFM/UniCeption/uniception/models/utils/transformer_blocks.py +1072 -0
- vismatch/third_party/UFM/UniCeption/uniception/utils/__init__.py +0 -0
- vismatch/third_party/UFM/UniCeption/uniception/utils/profile.py +13 -0
- vismatch/third_party/UFM/UniCeption/uniception/utils/viz.py +99 -0
- vismatch/third_party/UFM/example_inference.py +138 -0
- vismatch/third_party/UFM/gradio_demo.py +238 -0
- vismatch/third_party/UFM/setup.py +86 -0
- vismatch/third_party/UFM/uniflowmatch/__init__.py +16 -0
- vismatch/third_party/UFM/uniflowmatch/cli.py +217 -0
- vismatch/third_party/UFM/uniflowmatch/models/__init__.py +25 -0
- vismatch/third_party/UFM/uniflowmatch/models/base.py +334 -0
- vismatch/third_party/UFM/uniflowmatch/models/ufm.py +1323 -0
- vismatch/third_party/UFM/uniflowmatch/models/unet_encoder.py +90 -0
- vismatch/third_party/UFM/uniflowmatch/models/utils.py +16 -0
- vismatch/third_party/UFM/uniflowmatch/utils/__init__.py +63 -0
- vismatch/third_party/UFM/uniflowmatch/utils/flow_resizing.py +1091 -0
- vismatch/third_party/UFM/uniflowmatch/utils/geometry.py +612 -0
- vismatch/third_party/UFM/uniflowmatch/utils/viz.py +97 -0
- vismatch/third_party/XoFTR/configs/data/__init__.py +0 -0
- vismatch/third_party/XoFTR/configs/data/base.py +35 -0
- vismatch/third_party/XoFTR/configs/data/megadepth_trainval_840.py +22 -0
- vismatch/third_party/XoFTR/configs/data/megadepth_vistir_trainval_640.py +23 -0
- vismatch/third_party/XoFTR/configs/data/pretrain.py +8 -0
- vismatch/third_party/XoFTR/configs/xoftr/outdoor/visible_thermal.py +17 -0
- vismatch/third_party/XoFTR/configs/xoftr/pretrain/pretrain.py +12 -0
- vismatch/third_party/XoFTR/pretrain.py +125 -0
- vismatch/third_party/XoFTR/src/__init__.py +0 -0
- vismatch/third_party/XoFTR/src/config/default.py +203 -0
- vismatch/third_party/XoFTR/src/datasets/megadepth.py +143 -0
- vismatch/third_party/XoFTR/src/datasets/pretrain_dataset.py +156 -0
- vismatch/third_party/XoFTR/src/datasets/sampler.py +77 -0
- vismatch/third_party/XoFTR/src/datasets/scannet.py +114 -0
- vismatch/third_party/XoFTR/src/datasets/vistir.py +109 -0
- vismatch/third_party/XoFTR/src/lightning/data.py +346 -0
- vismatch/third_party/XoFTR/src/lightning/data_pretrain.py +125 -0
- vismatch/third_party/XoFTR/src/lightning/lightning_xoftr.py +334 -0
- vismatch/third_party/XoFTR/src/lightning/lightning_xoftr_pretrain.py +171 -0
- vismatch/third_party/XoFTR/src/losses/xoftr_loss.py +170 -0
- vismatch/third_party/XoFTR/src/losses/xoftr_loss_pretrain.py +37 -0
- vismatch/third_party/XoFTR/src/optimizers/__init__.py +42 -0
- vismatch/third_party/XoFTR/src/utils/augment.py +113 -0
- vismatch/third_party/XoFTR/src/utils/comm.py +265 -0
- vismatch/third_party/XoFTR/src/utils/data_io.py +144 -0
- vismatch/third_party/XoFTR/src/utils/dataloader.py +23 -0
- vismatch/third_party/XoFTR/src/utils/dataset.py +279 -0
- vismatch/third_party/XoFTR/src/utils/metrics.py +211 -0
- vismatch/third_party/XoFTR/src/utils/misc.py +101 -0
- vismatch/third_party/XoFTR/src/utils/plotting.py +227 -0
- vismatch/third_party/XoFTR/src/utils/pretrain_utils.py +83 -0
- vismatch/third_party/XoFTR/src/utils/profiler.py +39 -0
- vismatch/third_party/XoFTR/src/xoftr/__init__.py +2 -0
- vismatch/third_party/XoFTR/src/xoftr/backbone/__init__.py +1 -0
- vismatch/third_party/XoFTR/src/xoftr/backbone/resnet.py +95 -0
- vismatch/third_party/XoFTR/src/xoftr/utils/geometry.py +107 -0
- vismatch/third_party/XoFTR/src/xoftr/utils/position_encoding.py +36 -0
- vismatch/third_party/XoFTR/src/xoftr/utils/supervision.py +290 -0
- vismatch/third_party/XoFTR/src/xoftr/xoftr.py +94 -0
- vismatch/third_party/XoFTR/src/xoftr/xoftr_module/__init__.py +4 -0
- vismatch/third_party/XoFTR/src/xoftr/xoftr_module/coarse_matching.py +305 -0
- vismatch/third_party/XoFTR/src/xoftr/xoftr_module/fine_matching.py +170 -0
- vismatch/third_party/XoFTR/src/xoftr/xoftr_module/fine_process.py +321 -0
- vismatch/third_party/XoFTR/src/xoftr/xoftr_module/linear_attention.py +81 -0
- vismatch/third_party/XoFTR/src/xoftr/xoftr_module/transformer.py +101 -0
- vismatch/third_party/XoFTR/src/xoftr/xoftr_pretrain.py +209 -0
- vismatch/third_party/XoFTR/test.py +68 -0
- vismatch/third_party/XoFTR/test_relative_pose.py +330 -0
- vismatch/third_party/XoFTR/train.py +126 -0
- vismatch/third_party/accelerated_features/hubconf.py +15 -0
- vismatch/third_party/accelerated_features/minimal_example.py +49 -0
- vismatch/third_party/accelerated_features/modules/__init__.py +4 -0
- vismatch/third_party/accelerated_features/modules/dataset/__init__.py +5 -0
- vismatch/third_party/accelerated_features/modules/dataset/augmentation.py +314 -0
- vismatch/third_party/accelerated_features/modules/dataset/megadepth/__init__.py +7 -0
- vismatch/third_party/accelerated_features/modules/dataset/megadepth/megadepth.py +174 -0
- vismatch/third_party/accelerated_features/modules/dataset/megadepth/megadepth_warper.py +170 -0
- vismatch/third_party/accelerated_features/modules/dataset/megadepth/utils.py +160 -0
- vismatch/third_party/accelerated_features/modules/interpolator.py +33 -0
- vismatch/third_party/accelerated_features/modules/lighterglue.py +56 -0
- vismatch/third_party/accelerated_features/modules/model.py +154 -0
- vismatch/third_party/accelerated_features/modules/training/__init__.py +4 -0
- vismatch/third_party/accelerated_features/modules/training/losses.py +224 -0
- vismatch/third_party/accelerated_features/modules/training/train.py +311 -0
- vismatch/third_party/accelerated_features/modules/training/utils.py +200 -0
- vismatch/third_party/accelerated_features/modules/xfeat.py +402 -0
- vismatch/third_party/accelerated_features/realtime_demo.py +295 -0
- vismatch/third_party/accelerated_features/third_party/ALIKE/alike.py +143 -0
- vismatch/third_party/accelerated_features/third_party/ALIKE/alnet.py +164 -0
- vismatch/third_party/accelerated_features/third_party/ALIKE/demo.py +167 -0
- vismatch/third_party/accelerated_features/third_party/ALIKE/hseq/eval.py +162 -0
- vismatch/third_party/accelerated_features/third_party/ALIKE/hseq/extract.py +159 -0
- vismatch/third_party/accelerated_features/third_party/ALIKE/soft_detect.py +194 -0
- vismatch/third_party/accelerated_features/third_party/__init__.py +4 -0
- vismatch/third_party/accelerated_features/third_party/alike_wrapper.py +110 -0
- vismatch/third_party/affine-steerers/affine_steerers/__init__.py +7 -0
- vismatch/third_party/affine-steerers/affine_steerers/benchmarks/__init__.py +5 -0
- vismatch/third_party/affine-steerers/affine_steerers/benchmarks/hpatches.py +92 -0
- vismatch/third_party/affine-steerers/affine_steerers/benchmarks/hpatches_oracle_steer.py +108 -0
- vismatch/third_party/affine-steerers/affine_steerers/benchmarks/mega_pose_est.py +116 -0
- vismatch/third_party/affine-steerers/affine_steerers/benchmarks/mega_pose_est_mnn.py +162 -0
- vismatch/third_party/affine-steerers/affine_steerers/benchmarks/nll_benchmark.py +57 -0
- vismatch/third_party/affine-steerers/affine_steerers/benchmarks/num_inliers.py +76 -0
- vismatch/third_party/affine-steerers/affine_steerers/checkpoint.py +82 -0
- vismatch/third_party/affine-steerers/affine_steerers/datasets/__init__.py +0 -0
- vismatch/third_party/affine-steerers/affine_steerers/datasets/homog.py +284 -0
- vismatch/third_party/affine-steerers/affine_steerers/datasets/megadepth.py +408 -0
- vismatch/third_party/affine-steerers/affine_steerers/decoder.py +90 -0
- vismatch/third_party/affine-steerers/affine_steerers/descriptors/__init__.py +0 -0
- vismatch/third_party/affine-steerers/affine_steerers/descriptors/dedode_descriptor.py +77 -0
- vismatch/third_party/affine-steerers/affine_steerers/descriptors/descriptor_loss.py +358 -0
- vismatch/third_party/affine-steerers/affine_steerers/detectors/__init__.py +0 -0
- vismatch/third_party/affine-steerers/affine_steerers/detectors/dedode_detector.py +75 -0
- vismatch/third_party/affine-steerers/affine_steerers/detectors/keypoint_loss.py +215 -0
- vismatch/third_party/affine-steerers/affine_steerers/encoder.py +87 -0
- vismatch/third_party/affine-steerers/affine_steerers/matchers/__init__.py +0 -0
- vismatch/third_party/affine-steerers/affine_steerers/matchers/dual_softmax_matcher.py +816 -0
- vismatch/third_party/affine-steerers/affine_steerers/model_zoo/__init__.py +3 -0
- vismatch/third_party/affine-steerers/affine_steerers/model_zoo/dedode_models.py +298 -0
- vismatch/third_party/affine-steerers/affine_steerers/steerers.py +732 -0
- vismatch/third_party/affine-steerers/affine_steerers/train.py +90 -0
- vismatch/third_party/affine-steerers/affine_steerers/transformer/__init__.py +8 -0
- vismatch/third_party/affine-steerers/affine_steerers/transformer/dinov2.py +359 -0
- vismatch/third_party/affine-steerers/affine_steerers/transformer/layers/__init__.py +12 -0
- vismatch/third_party/affine-steerers/affine_steerers/transformer/layers/attention.py +81 -0
- vismatch/third_party/affine-steerers/affine_steerers/transformer/layers/block.py +252 -0
- vismatch/third_party/affine-steerers/affine_steerers/transformer/layers/dino_head.py +59 -0
- vismatch/third_party/affine-steerers/affine_steerers/transformer/layers/drop_path.py +35 -0
- vismatch/third_party/affine-steerers/affine_steerers/transformer/layers/layer_scale.py +28 -0
- vismatch/third_party/affine-steerers/affine_steerers/transformer/layers/mlp.py +41 -0
- vismatch/third_party/affine-steerers/affine_steerers/transformer/layers/patch_embed.py +89 -0
- vismatch/third_party/affine-steerers/affine_steerers/transformer/layers/swiglu_ffn.py +63 -0
- vismatch/third_party/affine-steerers/affine_steerers/utils.py +1422 -0
- vismatch/third_party/affine-steerers/experiments/aff_equi_B.py +182 -0
- vismatch/third_party/affine-steerers/experiments/aff_equi_G.py +193 -0
- vismatch/third_party/affine-steerers/experiments/aff_steer_B.py +213 -0
- vismatch/third_party/affine-steerers/experiments/aff_steer_G.py +223 -0
- vismatch/third_party/affine-steerers/experiments/aff_steer_pretrain_B.py +187 -0
- vismatch/third_party/affine-steerers/experiments/aff_steer_pretrain_G.py +198 -0
- vismatch/third_party/affine-steerers/setup.py +15 -0
- vismatch/third_party/aspanformer/configs/aspan/indoor/aspan_test.py +7 -0
- vismatch/third_party/aspanformer/configs/aspan/indoor/aspan_train.py +8 -0
- vismatch/third_party/aspanformer/configs/aspan/outdoor/aspan_test.py +19 -0
- vismatch/third_party/aspanformer/configs/aspan/outdoor/aspan_train.py +17 -0
- vismatch/third_party/aspanformer/configs/data/__init__.py +0 -0
- vismatch/third_party/aspanformer/configs/data/base.py +35 -0
- vismatch/third_party/aspanformer/configs/data/megadepth_test_1500.py +13 -0
- vismatch/third_party/aspanformer/configs/data/megadepth_trainval_832.py +22 -0
- vismatch/third_party/aspanformer/configs/data/scannet_test_1500.py +11 -0
- vismatch/third_party/aspanformer/configs/data/scannet_trainval.py +17 -0
- vismatch/third_party/aspanformer/demo/demo.py +63 -0
- vismatch/third_party/aspanformer/demo/demo_utils.py +44 -0
- vismatch/third_party/aspanformer/src/ASpanFormer/__init__.py +2 -0
- vismatch/third_party/aspanformer/src/ASpanFormer/aspan_module/__init__.py +3 -0
- vismatch/third_party/aspanformer/src/ASpanFormer/aspan_module/attention.py +198 -0
- vismatch/third_party/aspanformer/src/ASpanFormer/aspan_module/fine_preprocess.py +59 -0
- vismatch/third_party/aspanformer/src/ASpanFormer/aspan_module/loftr.py +112 -0
- vismatch/third_party/aspanformer/src/ASpanFormer/aspan_module/transformer.py +244 -0
- vismatch/third_party/aspanformer/src/ASpanFormer/aspanformer.py +152 -0
- vismatch/third_party/aspanformer/src/ASpanFormer/backbone/__init__.py +11 -0
- vismatch/third_party/aspanformer/src/ASpanFormer/backbone/resnet_fpn.py +199 -0
- vismatch/third_party/aspanformer/src/ASpanFormer/utils/coarse_matching.py +331 -0
- vismatch/third_party/aspanformer/src/ASpanFormer/utils/cvpr_ds_config.py +50 -0
- vismatch/third_party/aspanformer/src/ASpanFormer/utils/fine_matching.py +74 -0
- vismatch/third_party/aspanformer/src/ASpanFormer/utils/geometry.py +54 -0
- vismatch/third_party/aspanformer/src/ASpanFormer/utils/position_encoding.py +61 -0
- vismatch/third_party/aspanformer/src/ASpanFormer/utils/supervision.py +151 -0
- vismatch/third_party/aspanformer/src/__init__.py +0 -0
- vismatch/third_party/aspanformer/src/config/default.py +180 -0
- vismatch/third_party/aspanformer/src/datasets/__init__.py +3 -0
- vismatch/third_party/aspanformer/src/datasets/megadepth.py +127 -0
- vismatch/third_party/aspanformer/src/datasets/sampler.py +77 -0
- vismatch/third_party/aspanformer/src/datasets/scannet.py +113 -0
- vismatch/third_party/aspanformer/src/lightning/data.py +326 -0
- vismatch/third_party/aspanformer/src/lightning/lightning_aspanformer.py +276 -0
- vismatch/third_party/aspanformer/src/losses/aspan_loss.py +231 -0
- vismatch/third_party/aspanformer/src/optimizers/__init__.py +42 -0
- vismatch/third_party/aspanformer/src/utils/augment.py +55 -0
- vismatch/third_party/aspanformer/src/utils/comm.py +265 -0
- vismatch/third_party/aspanformer/src/utils/dataloader.py +23 -0
- vismatch/third_party/aspanformer/src/utils/dataset.py +222 -0
- vismatch/third_party/aspanformer/src/utils/metrics.py +260 -0
- vismatch/third_party/aspanformer/src/utils/misc.py +139 -0
- vismatch/third_party/aspanformer/src/utils/plotting.py +219 -0
- vismatch/third_party/aspanformer/src/utils/profiler.py +39 -0
- vismatch/third_party/aspanformer/test.py +69 -0
- vismatch/third_party/aspanformer/tools/SensorData.py +125 -0
- vismatch/third_party/aspanformer/tools/extract.py +47 -0
- vismatch/third_party/aspanformer/tools/preprocess_scene.py +242 -0
- vismatch/third_party/aspanformer/tools/reader.py +39 -0
- vismatch/third_party/aspanformer/tools/undistort_mega.py +69 -0
- vismatch/third_party/aspanformer/train.py +134 -0
- vismatch/third_party/duster/croco/datasets/__init__.py +0 -0
- vismatch/third_party/duster/croco/datasets/crops/extract_crops_from_images.py +159 -0
- vismatch/third_party/duster/croco/datasets/habitat_sim/__init__.py +0 -0
- vismatch/third_party/duster/croco/datasets/habitat_sim/generate_from_metadata.py +92 -0
- vismatch/third_party/duster/croco/datasets/habitat_sim/generate_from_metadata_files.py +27 -0
- vismatch/third_party/duster/croco/datasets/habitat_sim/generate_multiview_images.py +177 -0
- vismatch/third_party/duster/croco/datasets/habitat_sim/multiview_habitat_sim_generator.py +390 -0
- vismatch/third_party/duster/croco/datasets/habitat_sim/pack_metadata_files.py +69 -0
- vismatch/third_party/duster/croco/datasets/habitat_sim/paths.py +129 -0
- vismatch/third_party/duster/croco/datasets/pairs_dataset.py +109 -0
- vismatch/third_party/duster/croco/datasets/transforms.py +95 -0
- vismatch/third_party/duster/croco/demo.py +55 -0
- vismatch/third_party/duster/croco/models/blocks.py +241 -0
- vismatch/third_party/duster/croco/models/criterion.py +37 -0
- vismatch/third_party/duster/croco/models/croco.py +249 -0
- vismatch/third_party/duster/croco/models/croco_downstream.py +122 -0
- vismatch/third_party/duster/croco/models/curope/__init__.py +4 -0
- vismatch/third_party/duster/croco/models/curope/curope2d.py +40 -0
- vismatch/third_party/duster/croco/models/curope/setup.py +34 -0
- vismatch/third_party/duster/croco/models/dpt_block.py +450 -0
- vismatch/third_party/duster/croco/models/head_downstream.py +58 -0
- vismatch/third_party/duster/croco/models/masking.py +25 -0
- vismatch/third_party/duster/croco/models/pos_embed.py +157 -0
- vismatch/third_party/duster/croco/pretrain.py +254 -0
- vismatch/third_party/duster/croco/stereoflow/augmentor.py +290 -0
- vismatch/third_party/duster/croco/stereoflow/criterion.py +251 -0
- vismatch/third_party/duster/croco/stereoflow/datasets_flow.py +630 -0
- vismatch/third_party/duster/croco/stereoflow/datasets_stereo.py +674 -0
- vismatch/third_party/duster/croco/stereoflow/engine.py +280 -0
- vismatch/third_party/duster/croco/stereoflow/test.py +216 -0
- vismatch/third_party/duster/croco/stereoflow/train.py +253 -0
- vismatch/third_party/duster/croco/utils/misc.py +463 -0
- vismatch/third_party/duster/datasets_preprocess/habitat/find_scenes.py +78 -0
- vismatch/third_party/duster/datasets_preprocess/habitat/habitat_renderer/__init__.py +2 -0
- vismatch/third_party/duster/datasets_preprocess/habitat/habitat_renderer/habitat_sim_envmaps_renderer.py +170 -0
- vismatch/third_party/duster/datasets_preprocess/habitat/habitat_renderer/multiview_crop_generator.py +93 -0
- vismatch/third_party/duster/datasets_preprocess/habitat/habitat_renderer/projections.py +151 -0
- vismatch/third_party/duster/datasets_preprocess/habitat/habitat_renderer/projections_conversions.py +45 -0
- vismatch/third_party/duster/datasets_preprocess/habitat/preprocess_habitat.py +121 -0
- vismatch/third_party/duster/datasets_preprocess/path_to_root.py +13 -0
- vismatch/third_party/duster/datasets_preprocess/preprocess_arkitscenes.py +355 -0
- vismatch/third_party/duster/datasets_preprocess/preprocess_blendedMVS.py +149 -0
- vismatch/third_party/duster/datasets_preprocess/preprocess_co3d.py +295 -0
- vismatch/third_party/duster/datasets_preprocess/preprocess_megadepth.py +198 -0
- vismatch/third_party/duster/datasets_preprocess/preprocess_scannetpp.py +400 -0
- vismatch/third_party/duster/datasets_preprocess/preprocess_staticthings3d.py +130 -0
- vismatch/third_party/duster/datasets_preprocess/preprocess_waymo.py +257 -0
- vismatch/third_party/duster/datasets_preprocess/preprocess_wildrgbd.py +209 -0
- vismatch/third_party/duster/demo.py +45 -0
- vismatch/third_party/duster/dust3r/__init__.py +2 -0
- vismatch/third_party/duster/dust3r/cloud_opt/__init__.py +33 -0
- vismatch/third_party/duster/dust3r/cloud_opt/base_opt.py +405 -0
- vismatch/third_party/duster/dust3r/cloud_opt/commons.py +90 -0
- vismatch/third_party/duster/dust3r/cloud_opt/init_im_poses.py +316 -0
- vismatch/third_party/duster/dust3r/cloud_opt/modular_optimizer.py +145 -0
- vismatch/third_party/duster/dust3r/cloud_opt/optimizer.py +248 -0
- vismatch/third_party/duster/dust3r/cloud_opt/pair_viewer.py +127 -0
- vismatch/third_party/duster/dust3r/datasets/__init__.py +50 -0
- vismatch/third_party/duster/dust3r/datasets/arkitscenes.py +102 -0
- vismatch/third_party/duster/dust3r/datasets/base/__init__.py +2 -0
- vismatch/third_party/duster/dust3r/datasets/base/base_stereo_view_dataset.py +220 -0
- vismatch/third_party/duster/dust3r/datasets/base/batched_sampler.py +74 -0
- vismatch/third_party/duster/dust3r/datasets/base/easy_dataset.py +157 -0
- vismatch/third_party/duster/dust3r/datasets/blendedmvs.py +104 -0
- vismatch/third_party/duster/dust3r/datasets/co3d.py +165 -0
- vismatch/third_party/duster/dust3r/datasets/habitat.py +107 -0
- vismatch/third_party/duster/dust3r/datasets/megadepth.py +123 -0
- vismatch/third_party/duster/dust3r/datasets/scannetpp.py +96 -0
- vismatch/third_party/duster/dust3r/datasets/staticthings3d.py +96 -0
- vismatch/third_party/duster/dust3r/datasets/utils/__init__.py +2 -0
- vismatch/third_party/duster/dust3r/datasets/utils/cropping.py +124 -0
- vismatch/third_party/duster/dust3r/datasets/utils/transforms.py +11 -0
- vismatch/third_party/duster/dust3r/datasets/waymo.py +93 -0
- vismatch/third_party/duster/dust3r/datasets/wildrgbd.py +67 -0
- vismatch/third_party/duster/dust3r/demo.py +287 -0
- vismatch/third_party/duster/dust3r/heads/__init__.py +19 -0
- vismatch/third_party/duster/dust3r/heads/dpt_head.py +115 -0
- vismatch/third_party/duster/dust3r/heads/linear_head.py +41 -0
- vismatch/third_party/duster/dust3r/heads/postprocess.py +58 -0
- vismatch/third_party/duster/dust3r/image_pairs.py +104 -0
- vismatch/third_party/duster/dust3r/inference.py +150 -0
- vismatch/third_party/duster/dust3r/losses.py +299 -0
- vismatch/third_party/duster/dust3r/model.py +211 -0
- vismatch/third_party/duster/dust3r/optim_factory.py +14 -0
- vismatch/third_party/duster/dust3r/patch_embed.py +70 -0
- vismatch/third_party/duster/dust3r/post_process.py +60 -0
- vismatch/third_party/duster/dust3r/training.py +377 -0
- vismatch/third_party/duster/dust3r/utils/__init__.py +2 -0
- vismatch/third_party/duster/dust3r/utils/device.py +76 -0
- vismatch/third_party/duster/dust3r/utils/geometry.py +366 -0
- vismatch/third_party/duster/dust3r/utils/image.py +128 -0
- vismatch/third_party/duster/dust3r/utils/misc.py +121 -0
- vismatch/third_party/duster/dust3r/utils/parallel.py +79 -0
- vismatch/third_party/duster/dust3r/utils/path_to_croco.py +19 -0
- vismatch/third_party/duster/dust3r/viz.py +381 -0
- vismatch/third_party/duster/dust3r_visloc/__init__.py +2 -0
- vismatch/third_party/duster/dust3r_visloc/datasets/__init__.py +6 -0
- vismatch/third_party/duster/dust3r_visloc/datasets/aachen_day_night.py +24 -0
- vismatch/third_party/duster/dust3r_visloc/datasets/base_colmap.py +282 -0
- vismatch/third_party/duster/dust3r_visloc/datasets/base_dataset.py +19 -0
- vismatch/third_party/duster/dust3r_visloc/datasets/cambridge_landmarks.py +19 -0
- vismatch/third_party/duster/dust3r_visloc/datasets/inloc.py +167 -0
- vismatch/third_party/duster/dust3r_visloc/datasets/sevenscenes.py +123 -0
- vismatch/third_party/duster/dust3r_visloc/datasets/utils.py +118 -0
- vismatch/third_party/duster/dust3r_visloc/evaluation.py +65 -0
- vismatch/third_party/duster/dust3r_visloc/localization.py +140 -0
- vismatch/third_party/duster/train.py +13 -0
- vismatch/third_party/duster/visloc.py +193 -0
- vismatch/third_party/gim/demo.py +479 -0
- vismatch/third_party/gim/dkm/__init__.py +4 -0
- vismatch/third_party/gim/dkm/benchmarks/__init__.py +4 -0
- vismatch/third_party/gim/dkm/benchmarks/hpatches_sequences_homog_benchmark.py +114 -0
- vismatch/third_party/gim/dkm/benchmarks/megadepth1500_benchmark.py +124 -0
- vismatch/third_party/gim/dkm/benchmarks/megadepth_dense_benchmark.py +86 -0
- vismatch/third_party/gim/dkm/benchmarks/scannet_benchmark.py +143 -0
- vismatch/third_party/gim/dkm/checkpointing/__init__.py +1 -0
- vismatch/third_party/gim/dkm/checkpointing/checkpoint.py +31 -0
- vismatch/third_party/gim/dkm/datasets/__init__.py +1 -0
- vismatch/third_party/gim/dkm/datasets/megadepth.py +177 -0
- vismatch/third_party/gim/dkm/datasets/scannet.py +151 -0
- vismatch/third_party/gim/dkm/losses/__init__.py +1 -0
- vismatch/third_party/gim/dkm/losses/depth_match_regression_loss.py +128 -0
- vismatch/third_party/gim/dkm/models/__init__.py +4 -0
- vismatch/third_party/gim/dkm/models/dkm.py +745 -0
- vismatch/third_party/gim/dkm/models/encoders.py +148 -0
- vismatch/third_party/gim/dkm/models/model_zoo/DKMv3.py +148 -0
- vismatch/third_party/gim/dkm/models/model_zoo/__init__.py +39 -0
- vismatch/third_party/gim/dkm/train/__init__.py +1 -0
- vismatch/third_party/gim/dkm/train/train.py +67 -0
- vismatch/third_party/gim/dkm/utils/__init__.py +13 -0
- vismatch/third_party/gim/dkm/utils/kde.py +26 -0
- vismatch/third_party/gim/dkm/utils/local_correlation.py +40 -0
- vismatch/third_party/gim/dkm/utils/transforms.py +104 -0
- vismatch/third_party/gim/dkm/utils/utils.py +341 -0
- vismatch/third_party/gim/gluefactory/__init__.py +17 -0
- vismatch/third_party/gim/gluefactory/datasets/__init__.py +25 -0
- vismatch/third_party/gim/gluefactory/datasets/augmentations.py +244 -0
- vismatch/third_party/gim/gluefactory/datasets/base_dataset.py +206 -0
- vismatch/third_party/gim/gluefactory/datasets/eth3d.py +254 -0
- vismatch/third_party/gim/gluefactory/datasets/homographies.py +311 -0
- vismatch/third_party/gim/gluefactory/datasets/hpatches.py +145 -0
- vismatch/third_party/gim/gluefactory/datasets/image_folder.py +59 -0
- vismatch/third_party/gim/gluefactory/datasets/image_pairs.py +100 -0
- vismatch/third_party/gim/gluefactory/datasets/megadepth.py +514 -0
- vismatch/third_party/gim/gluefactory/datasets/utils.py +131 -0
- vismatch/third_party/gim/gluefactory/eval/__init__.py +20 -0
- vismatch/third_party/gim/gluefactory/eval/eth3d.py +202 -0
- vismatch/third_party/gim/gluefactory/eval/eval_pipeline.py +109 -0
- vismatch/third_party/gim/gluefactory/eval/hpatches.py +203 -0
- vismatch/third_party/gim/gluefactory/eval/inspect.py +61 -0
- vismatch/third_party/gim/gluefactory/eval/io.py +109 -0
- vismatch/third_party/gim/gluefactory/eval/megadepth1500.py +189 -0
- vismatch/third_party/gim/gluefactory/eval/utils.py +272 -0
- vismatch/third_party/gim/gluefactory/geometry/depth.py +88 -0
- vismatch/third_party/gim/gluefactory/geometry/epipolar.py +155 -0
- vismatch/third_party/gim/gluefactory/geometry/gt_generation.py +558 -0
- vismatch/third_party/gim/gluefactory/geometry/homography.py +342 -0
- vismatch/third_party/gim/gluefactory/geometry/utils.py +167 -0
- vismatch/third_party/gim/gluefactory/geometry/wrappers.py +425 -0
- vismatch/third_party/gim/gluefactory/models/__init__.py +30 -0
- vismatch/third_party/gim/gluefactory/models/backbones/__init__.py +0 -0
- vismatch/third_party/gim/gluefactory/models/backbones/dinov2.py +30 -0
- vismatch/third_party/gim/gluefactory/models/base_model.py +157 -0
- vismatch/third_party/gim/gluefactory/models/cache_loader.py +139 -0
- vismatch/third_party/gim/gluefactory/models/extractors/__init__.py +0 -0
- vismatch/third_party/gim/gluefactory/models/extractors/aliked.py +786 -0
- vismatch/third_party/gim/gluefactory/models/extractors/disk_kornia.py +108 -0
- vismatch/third_party/gim/gluefactory/models/extractors/grid_extractor.py +60 -0
- vismatch/third_party/gim/gluefactory/models/extractors/keynet_affnet_hardnet.py +74 -0
- vismatch/third_party/gim/gluefactory/models/extractors/mixed.py +76 -0
- vismatch/third_party/gim/gluefactory/models/extractors/sift.py +234 -0
- vismatch/third_party/gim/gluefactory/models/extractors/sift_kornia.py +46 -0
- vismatch/third_party/gim/gluefactory/models/extractors/superpoint_open.py +210 -0
- vismatch/third_party/gim/gluefactory/models/lines/__init__.py +0 -0
- vismatch/third_party/gim/gluefactory/models/lines/deeplsd.py +106 -0
- vismatch/third_party/gim/gluefactory/models/lines/lsd.py +88 -0
- vismatch/third_party/gim/gluefactory/models/lines/wireframe.py +312 -0
- vismatch/third_party/gim/gluefactory/models/matchers/__init__.py +0 -0
- vismatch/third_party/gim/gluefactory/models/matchers/adalam.py +0 -0
- vismatch/third_party/gim/gluefactory/models/matchers/depth_matcher.py +82 -0
- vismatch/third_party/gim/gluefactory/models/matchers/gluestick.py +776 -0
- vismatch/third_party/gim/gluefactory/models/matchers/homography_matcher.py +66 -0
- vismatch/third_party/gim/gluefactory/models/matchers/kornia_loftr.py +66 -0
- vismatch/third_party/gim/gluefactory/models/matchers/lightglue.py +632 -0
- vismatch/third_party/gim/gluefactory/models/matchers/lightglue_pretrained.py +36 -0
- vismatch/third_party/gim/gluefactory/models/matchers/nearest_neighbor_matcher.py +97 -0
- vismatch/third_party/gim/gluefactory/models/triplet_pipeline.py +99 -0
- vismatch/third_party/gim/gluefactory/models/two_view_pipeline.py +114 -0
- vismatch/third_party/gim/gluefactory/models/utils/__init__.py +0 -0
- vismatch/third_party/gim/gluefactory/models/utils/losses.py +73 -0
- vismatch/third_party/gim/gluefactory/models/utils/metrics.py +50 -0
- vismatch/third_party/gim/gluefactory/models/utils/misc.py +70 -0
- vismatch/third_party/gim/gluefactory/robust_estimators/__init__.py +15 -0
- vismatch/third_party/gim/gluefactory/robust_estimators/base_estimator.py +33 -0
- vismatch/third_party/gim/gluefactory/robust_estimators/homography/__init__.py +0 -0
- vismatch/third_party/gim/gluefactory/robust_estimators/homography/homography_est.py +74 -0
- vismatch/third_party/gim/gluefactory/robust_estimators/homography/opencv.py +53 -0
- vismatch/third_party/gim/gluefactory/robust_estimators/homography/poselib.py +40 -0
- vismatch/third_party/gim/gluefactory/robust_estimators/relative_pose/__init__.py +0 -0
- vismatch/third_party/gim/gluefactory/robust_estimators/relative_pose/opencv.py +64 -0
- vismatch/third_party/gim/gluefactory/robust_estimators/relative_pose/poselib.py +44 -0
- vismatch/third_party/gim/gluefactory/robust_estimators/relative_pose/pycolmap.py +52 -0
- vismatch/third_party/gim/gluefactory/scripts/__init__.py +0 -0
- vismatch/third_party/gim/gluefactory/scripts/export_local_features.py +127 -0
- vismatch/third_party/gim/gluefactory/scripts/export_megadepth.py +173 -0
- vismatch/third_party/gim/gluefactory/settings.py +6 -0
- vismatch/third_party/gim/gluefactory/superpoint.py +361 -0
- vismatch/third_party/gim/gluefactory/train.py +691 -0
- vismatch/third_party/gim/gluefactory/utils/__init__.py +0 -0
- vismatch/third_party/gim/gluefactory/utils/benchmark.py +33 -0
- vismatch/third_party/gim/gluefactory/utils/experiments.py +134 -0
- vismatch/third_party/gim/gluefactory/utils/export_predictions.py +81 -0
- vismatch/third_party/gim/gluefactory/utils/image.py +130 -0
- vismatch/third_party/gim/gluefactory/utils/misc.py +44 -0
- vismatch/third_party/gim/gluefactory/utils/patches.py +50 -0
- vismatch/third_party/gim/gluefactory/utils/stdout_capturing.py +134 -0
- vismatch/third_party/gim/gluefactory/utils/tensor.py +48 -0
- vismatch/third_party/gim/gluefactory/utils/tools.py +269 -0
- vismatch/third_party/gim/gluefactory/visualization/global_frame.py +289 -0
- vismatch/third_party/gim/gluefactory/visualization/tools.py +465 -0
- vismatch/third_party/gim/gluefactory/visualization/two_view_frame.py +158 -0
- vismatch/third_party/gim/gluefactory/visualization/visualize_batch.py +57 -0
- vismatch/third_party/gim/gluefactory/visualization/viz2d.py +486 -0
- vismatch/third_party/imatch-toolbox/configs/d2net.yml +26 -0
- vismatch/third_party/imatch-toolbox/configs/dogaffnethardnet.yml +10 -0
- vismatch/third_party/imatch-toolbox/configs/ncnet.yml +7 -0
- vismatch/third_party/imatch-toolbox/configs/patch2pix.yml +56 -0
- vismatch/third_party/imatch-toolbox/configs/patch2pix_superglue.yml +58 -0
- vismatch/third_party/imatch-toolbox/configs/r2d2.yml +31 -0
- vismatch/third_party/imatch-toolbox/configs/sift.yml +27 -0
- vismatch/third_party/imatch-toolbox/configs/superglue.yml +69 -0
- vismatch/third_party/imatch-toolbox/configs/superpoint.yml +21 -0
- vismatch/third_party/imatch-toolbox/environment.yml +14 -0
- vismatch/third_party/imatch-toolbox/immatch/__init__.py +8 -0
- vismatch/third_party/imatch-toolbox/immatch/eval_aachen.py +88 -0
- vismatch/third_party/imatch-toolbox/immatch/eval_hpatches.py +117 -0
- vismatch/third_party/imatch-toolbox/immatch/eval_inloc.py +45 -0
- vismatch/third_party/imatch-toolbox/immatch/eval_relapose.py +231 -0
- vismatch/third_party/imatch-toolbox/immatch/eval_robotcar.py +83 -0
- vismatch/third_party/imatch-toolbox/immatch/modules/__init__.py +0 -0
- vismatch/third_party/imatch-toolbox/immatch/modules/base.py +89 -0
- vismatch/third_party/imatch-toolbox/immatch/modules/d2net.py +69 -0
- vismatch/third_party/imatch-toolbox/immatch/modules/dogaffnethardnet.py +94 -0
- vismatch/third_party/imatch-toolbox/immatch/modules/nn_matching.py +31 -0
- vismatch/third_party/imatch-toolbox/immatch/modules/patch2pix.py +126 -0
- vismatch/third_party/imatch-toolbox/immatch/modules/r2d2.py +64 -0
- vismatch/third_party/imatch-toolbox/immatch/modules/sift.py +67 -0
- vismatch/third_party/imatch-toolbox/immatch/modules/superglue.py +62 -0
- vismatch/third_party/imatch-toolbox/immatch/modules/superpoint.py +56 -0
- vismatch/third_party/imatch-toolbox/immatch/utils/__init__.py +13 -0
- vismatch/third_party/imatch-toolbox/immatch/utils/colmap/data_parsing.py +257 -0
- vismatch/third_party/imatch-toolbox/immatch/utils/colmap/database.py +362 -0
- vismatch/third_party/imatch-toolbox/immatch/utils/colmap/read_write_model.py +506 -0
- vismatch/third_party/imatch-toolbox/immatch/utils/data_io.py +111 -0
- vismatch/third_party/imatch-toolbox/immatch/utils/hpatches_helper.py +242 -0
- vismatch/third_party/imatch-toolbox/immatch/utils/localize_sfm_helper.py +403 -0
- vismatch/third_party/imatch-toolbox/immatch/utils/metrics.py +90 -0
- vismatch/third_party/imatch-toolbox/immatch/utils/model_helper.py +27 -0
- vismatch/third_party/imatch-toolbox/setup.py +36 -0
- vismatch/third_party/imatch-toolbox/third_party/d2net/extract_features.py +156 -0
- vismatch/third_party/imatch-toolbox/third_party/d2net/extract_kapture.py +248 -0
- vismatch/third_party/imatch-toolbox/third_party/d2net/lib/dataset.py +239 -0
- vismatch/third_party/imatch-toolbox/third_party/d2net/lib/exceptions.py +6 -0
- vismatch/third_party/imatch-toolbox/third_party/d2net/lib/loss.py +340 -0
- vismatch/third_party/imatch-toolbox/third_party/d2net/lib/model.py +121 -0
- vismatch/third_party/imatch-toolbox/third_party/d2net/lib/model_test.py +187 -0
- vismatch/third_party/imatch-toolbox/third_party/d2net/lib/pyramid.py +129 -0
- vismatch/third_party/imatch-toolbox/third_party/d2net/lib/utils.py +167 -0
- vismatch/third_party/imatch-toolbox/third_party/d2net/megadepth_utils/preprocess_scene.py +242 -0
- vismatch/third_party/imatch-toolbox/third_party/d2net/megadepth_utils/undistort_reconstructions.py +69 -0
- vismatch/third_party/imatch-toolbox/third_party/d2net/train.py +279 -0
- vismatch/third_party/imatch-toolbox/third_party/patch2pix/data_pairs/precompute_immatch_val_ovs.py +20 -0
- vismatch/third_party/imatch-toolbox/third_party/patch2pix/environment.yml +21 -0
- vismatch/third_party/imatch-toolbox/third_party/patch2pix/networks/modules.py +167 -0
- vismatch/third_party/imatch-toolbox/third_party/patch2pix/networks/ncn/conv4d.py +91 -0
- vismatch/third_party/imatch-toolbox/third_party/patch2pix/networks/ncn/extract_ncmatches.py +158 -0
- vismatch/third_party/imatch-toolbox/third_party/patch2pix/networks/ncn/model.py +333 -0
- vismatch/third_party/imatch-toolbox/third_party/patch2pix/networks/patch2pix.py +403 -0
- vismatch/third_party/imatch-toolbox/third_party/patch2pix/networks/resnet.py +191 -0
- vismatch/third_party/imatch-toolbox/third_party/patch2pix/networks/utils.py +111 -0
- vismatch/third_party/imatch-toolbox/third_party/patch2pix/train_patch2pix.py +374 -0
- vismatch/third_party/imatch-toolbox/third_party/patch2pix/utils/colmap/data_loading.py +169 -0
- vismatch/third_party/imatch-toolbox/third_party/patch2pix/utils/colmap/read_database.py +175 -0
- vismatch/third_party/imatch-toolbox/third_party/patch2pix/utils/colmap/read_write_model.py +483 -0
- vismatch/third_party/imatch-toolbox/third_party/patch2pix/utils/common/plotting.py +393 -0
- vismatch/third_party/imatch-toolbox/third_party/patch2pix/utils/common/setup_helper.py +59 -0
- vismatch/third_party/imatch-toolbox/third_party/patch2pix/utils/common/visdom_helper.py +95 -0
- vismatch/third_party/imatch-toolbox/third_party/patch2pix/utils/datasets/__init__.py +1 -0
- vismatch/third_party/imatch-toolbox/third_party/patch2pix/utils/datasets/data_parsing.py +145 -0
- vismatch/third_party/imatch-toolbox/third_party/patch2pix/utils/datasets/dataset_megadepth.py +141 -0
- vismatch/third_party/imatch-toolbox/third_party/patch2pix/utils/datasets/preprocess.py +184 -0
- vismatch/third_party/imatch-toolbox/third_party/patch2pix/utils/eval/geometry.py +90 -0
- vismatch/third_party/imatch-toolbox/third_party/patch2pix/utils/eval/measure.py +161 -0
- vismatch/third_party/imatch-toolbox/third_party/patch2pix/utils/eval/model_helper.py +129 -0
- vismatch/third_party/imatch-toolbox/third_party/patch2pix/utils/train/eval_epoch_immatch.py +99 -0
- vismatch/third_party/imatch-toolbox/third_party/patch2pix/utils/train/helper.py +196 -0
- vismatch/third_party/imatch-toolbox/third_party/r2d2/datasets/__init__.py +33 -0
- vismatch/third_party/imatch-toolbox/third_party/r2d2/datasets/aachen.py +146 -0
- vismatch/third_party/imatch-toolbox/third_party/r2d2/datasets/dataset.py +77 -0
- vismatch/third_party/imatch-toolbox/third_party/r2d2/datasets/imgfolder.py +23 -0
- vismatch/third_party/imatch-toolbox/third_party/r2d2/datasets/pair_dataset.py +287 -0
- vismatch/third_party/imatch-toolbox/third_party/r2d2/datasets/web_images.py +64 -0
- vismatch/third_party/imatch-toolbox/third_party/r2d2/extract.py +183 -0
- vismatch/third_party/imatch-toolbox/third_party/r2d2/extract_kapture.py +194 -0
- vismatch/third_party/imatch-toolbox/third_party/r2d2/nets/ap_loss.py +67 -0
- vismatch/third_party/imatch-toolbox/third_party/r2d2/nets/losses.py +56 -0
- vismatch/third_party/imatch-toolbox/third_party/r2d2/nets/patchnet.py +134 -0
- vismatch/third_party/imatch-toolbox/third_party/r2d2/nets/reliability_loss.py +59 -0
- vismatch/third_party/imatch-toolbox/third_party/r2d2/nets/repeatability_loss.py +66 -0
- vismatch/third_party/imatch-toolbox/third_party/r2d2/nets/sampler.py +390 -0
- vismatch/third_party/imatch-toolbox/third_party/r2d2/tools/common.py +41 -0
- vismatch/third_party/imatch-toolbox/third_party/r2d2/tools/dataloader.py +367 -0
- vismatch/third_party/imatch-toolbox/third_party/r2d2/tools/trainer.py +76 -0
- vismatch/third_party/imatch-toolbox/third_party/r2d2/tools/transforms.py +513 -0
- vismatch/third_party/imatch-toolbox/third_party/r2d2/tools/transforms_tools.py +230 -0
- vismatch/third_party/imatch-toolbox/third_party/r2d2/tools/viz.py +191 -0
- vismatch/third_party/imatch-toolbox/third_party/r2d2/train.py +138 -0
- vismatch/third_party/imatch-toolbox/third_party/r2d2/viz_heatmaps.py +122 -0
- vismatch/third_party/imatch-toolbox/third_party/superglue/demo_superglue.py +259 -0
- vismatch/third_party/imatch-toolbox/third_party/superglue/match_pairs.py +425 -0
- vismatch/third_party/imatch-toolbox/third_party/superglue/models/__init__.py +0 -0
- vismatch/third_party/imatch-toolbox/third_party/superglue/models/matching.py +84 -0
- vismatch/third_party/imatch-toolbox/third_party/superglue/models/superglue.py +283 -0
- vismatch/third_party/imatch-toolbox/third_party/superglue/models/superpoint.py +202 -0
- vismatch/third_party/imatch-toolbox/third_party/superglue/models/utils.py +555 -0
- vismatch/third_party/keypt2subpx/dataprocess/aliked.py +163 -0
- vismatch/third_party/keypt2subpx/dataprocess/dedode.py +215 -0
- vismatch/third_party/keypt2subpx/dataprocess/splg.py +162 -0
- vismatch/third_party/keypt2subpx/dataprocess/spnn.py +157 -0
- vismatch/third_party/keypt2subpx/dataprocess/superpoint_densescore.py +357 -0
- vismatch/third_party/keypt2subpx/dataprocess/xfeat.py +187 -0
- vismatch/third_party/keypt2subpx/dataset.py +145 -0
- vismatch/third_party/keypt2subpx/hubconf.py +38 -0
- vismatch/third_party/keypt2subpx/logger.py +127 -0
- vismatch/third_party/keypt2subpx/model.py +183 -0
- vismatch/third_party/keypt2subpx/settings.py +108 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/__init__.py +17 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/datasets/__init__.py +25 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/datasets/augmentations.py +244 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/datasets/base_dataset.py +206 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/datasets/eth3d.py +254 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/datasets/homographies.py +311 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/datasets/hpatches.py +145 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/datasets/image_folder.py +59 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/datasets/image_pairs.py +100 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/datasets/megadepth.py +510 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/datasets/utils.py +131 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/eval/__init__.py +20 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/eval/eth3d.py +202 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/eval/eval_pipeline.py +109 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/eval/hpatches.py +203 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/eval/inspect.py +61 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/eval/io.py +109 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/eval/megadepth1500.py +189 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/eval/utils.py +272 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/geometry/__init__.py +0 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/geometry/depth.py +88 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/geometry/epipolar.py +155 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/geometry/gt_generation.py +558 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/geometry/homography.py +342 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/geometry/utils.py +167 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/geometry/wrappers.py +425 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/__init__.py +30 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/backbones/__init__.py +0 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/backbones/dinov2.py +30 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/base_model.py +157 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/cache_loader.py +139 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/extractors/__init__.py +0 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/extractors/aliked.py +786 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/extractors/disk_kornia.py +108 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/extractors/grid_extractor.py +60 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/extractors/keynet_affnet_hardnet.py +74 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/extractors/mixed.py +76 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/extractors/sift.py +234 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/extractors/sift_kornia.py +46 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/extractors/superpoint_open.py +210 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/lines/__init__.py +0 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/lines/deeplsd.py +106 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/lines/lsd.py +88 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/lines/wireframe.py +312 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/matchers/__init__.py +0 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/matchers/adalam.py +0 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/matchers/depth_matcher.py +82 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/matchers/gluestick.py +776 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/matchers/homography_matcher.py +66 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/matchers/kornia_loftr.py +66 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/matchers/lightglue.py +612 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/matchers/lightglue_pretrained.py +36 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/matchers/nearest_neighbor_matcher.py +97 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/triplet_pipeline.py +99 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/two_view_pipeline.py +114 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/utils/__init__.py +0 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/utils/losses.py +73 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/utils/metrics.py +50 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/models/utils/misc.py +70 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/robust_estimators/__init__.py +15 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/robust_estimators/base_estimator.py +33 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/robust_estimators/homography/__init__.py +0 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/robust_estimators/homography/homography_est.py +74 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/robust_estimators/homography/opencv.py +53 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/robust_estimators/homography/poselib.py +40 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/robust_estimators/relative_pose/__init__.py +0 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/robust_estimators/relative_pose/opencv.py +64 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/robust_estimators/relative_pose/poselib.py +44 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/robust_estimators/relative_pose/pycolmap.py +52 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/scripts/__init__.py +0 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/scripts/export_local_features.py +127 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/scripts/export_megadepth.py +173 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/settings.py +6 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/train.py +691 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/utils/__init__.py +0 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/utils/benchmark.py +33 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/utils/experiments.py +134 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/utils/export_predictions.py +81 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/utils/image.py +130 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/utils/misc.py +44 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/utils/patches.py +50 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/utils/stdout_capturing.py +134 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/utils/tensor.py +48 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/utils/tools.py +269 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/visualization/global_frame.py +289 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/visualization/tools.py +465 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/visualization/two_view_frame.py +158 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/visualization/visualize_batch.py +57 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory/visualization/viz2d.py +486 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory_nonfree/__init__.py +0 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory_nonfree/superglue.py +342 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/gluefactory_nonfree/superpoint.py +356 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/tests/__init__.py +0 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/tests/test_eval_utils.py +88 -0
- vismatch/third_party/keypt2subpx/submodules/glue_factory/tests/test_integration.py +132 -0
- vismatch/third_party/keypt2subpx/summarize.py +44 -0
- vismatch/third_party/keypt2subpx/test.py +225 -0
- vismatch/third_party/keypt2subpx/train.py +180 -0
- vismatch/third_party/keypt2subpx/utils.py +150 -0
- vismatch/third_party/mast3r/demo.py +51 -0
- vismatch/third_party/mast3r/demo_dust3r_ga.py +99 -0
- vismatch/third_party/mast3r/demo_glomap.py +52 -0
- vismatch/third_party/mast3r/dust3r/croco/datasets/__init__.py +0 -0
- vismatch/third_party/mast3r/dust3r/croco/datasets/crops/extract_crops_from_images.py +159 -0
- vismatch/third_party/mast3r/dust3r/croco/datasets/habitat_sim/__init__.py +0 -0
- vismatch/third_party/mast3r/dust3r/croco/datasets/habitat_sim/generate_from_metadata.py +92 -0
- vismatch/third_party/mast3r/dust3r/croco/datasets/habitat_sim/generate_from_metadata_files.py +27 -0
- vismatch/third_party/mast3r/dust3r/croco/datasets/habitat_sim/generate_multiview_images.py +177 -0
- vismatch/third_party/mast3r/dust3r/croco/datasets/habitat_sim/multiview_habitat_sim_generator.py +390 -0
- vismatch/third_party/mast3r/dust3r/croco/datasets/habitat_sim/pack_metadata_files.py +69 -0
- vismatch/third_party/mast3r/dust3r/croco/datasets/habitat_sim/paths.py +129 -0
- vismatch/third_party/mast3r/dust3r/croco/datasets/pairs_dataset.py +109 -0
- vismatch/third_party/mast3r/dust3r/croco/datasets/transforms.py +95 -0
- vismatch/third_party/mast3r/dust3r/croco/demo.py +55 -0
- vismatch/third_party/mast3r/dust3r/croco/models/blocks.py +241 -0
- vismatch/third_party/mast3r/dust3r/croco/models/criterion.py +37 -0
- vismatch/third_party/mast3r/dust3r/croco/models/croco.py +249 -0
- vismatch/third_party/mast3r/dust3r/croco/models/croco_downstream.py +122 -0
- vismatch/third_party/mast3r/dust3r/croco/models/curope/__init__.py +4 -0
- vismatch/third_party/mast3r/dust3r/croco/models/curope/curope2d.py +40 -0
- vismatch/third_party/mast3r/dust3r/croco/models/curope/setup.py +34 -0
- vismatch/third_party/mast3r/dust3r/croco/models/dpt_block.py +450 -0
- vismatch/third_party/mast3r/dust3r/croco/models/head_downstream.py +58 -0
- vismatch/third_party/mast3r/dust3r/croco/models/masking.py +25 -0
- vismatch/third_party/mast3r/dust3r/croco/models/pos_embed.py +157 -0
- vismatch/third_party/mast3r/dust3r/croco/pretrain.py +254 -0
- vismatch/third_party/mast3r/dust3r/croco/stereoflow/augmentor.py +290 -0
- vismatch/third_party/mast3r/dust3r/croco/stereoflow/criterion.py +251 -0
- vismatch/third_party/mast3r/dust3r/croco/stereoflow/datasets_flow.py +630 -0
- vismatch/third_party/mast3r/dust3r/croco/stereoflow/datasets_stereo.py +674 -0
- vismatch/third_party/mast3r/dust3r/croco/stereoflow/engine.py +280 -0
- vismatch/third_party/mast3r/dust3r/croco/stereoflow/test.py +216 -0
- vismatch/third_party/mast3r/dust3r/croco/stereoflow/train.py +253 -0
- vismatch/third_party/mast3r/dust3r/croco/utils/misc.py +463 -0
- vismatch/third_party/mast3r/dust3r/datasets_preprocess/habitat/find_scenes.py +78 -0
- vismatch/third_party/mast3r/dust3r/datasets_preprocess/habitat/habitat_renderer/__init__.py +2 -0
- vismatch/third_party/mast3r/dust3r/datasets_preprocess/habitat/habitat_renderer/habitat_sim_envmaps_renderer.py +170 -0
- vismatch/third_party/mast3r/dust3r/datasets_preprocess/habitat/habitat_renderer/multiview_crop_generator.py +93 -0
- vismatch/third_party/mast3r/dust3r/datasets_preprocess/habitat/habitat_renderer/projections.py +151 -0
- vismatch/third_party/mast3r/dust3r/datasets_preprocess/habitat/habitat_renderer/projections_conversions.py +45 -0
- vismatch/third_party/mast3r/dust3r/datasets_preprocess/habitat/preprocess_habitat.py +121 -0
- vismatch/third_party/mast3r/dust3r/datasets_preprocess/path_to_root.py +13 -0
- vismatch/third_party/mast3r/dust3r/datasets_preprocess/preprocess_arkitscenes.py +355 -0
- vismatch/third_party/mast3r/dust3r/datasets_preprocess/preprocess_blendedMVS.py +149 -0
- vismatch/third_party/mast3r/dust3r/datasets_preprocess/preprocess_co3d.py +295 -0
- vismatch/third_party/mast3r/dust3r/datasets_preprocess/preprocess_megadepth.py +198 -0
- vismatch/third_party/mast3r/dust3r/datasets_preprocess/preprocess_scannetpp.py +390 -0
- vismatch/third_party/mast3r/dust3r/datasets_preprocess/preprocess_staticthings3d.py +130 -0
- vismatch/third_party/mast3r/dust3r/datasets_preprocess/preprocess_waymo.py +257 -0
- vismatch/third_party/mast3r/dust3r/datasets_preprocess/preprocess_wildrgbd.py +209 -0
- vismatch/third_party/mast3r/dust3r/demo.py +45 -0
- vismatch/third_party/mast3r/dust3r/dust3r/__init__.py +2 -0
- vismatch/third_party/mast3r/dust3r/dust3r/cloud_opt/__init__.py +33 -0
- vismatch/third_party/mast3r/dust3r/dust3r/cloud_opt/base_opt.py +405 -0
- vismatch/third_party/mast3r/dust3r/dust3r/cloud_opt/commons.py +90 -0
- vismatch/third_party/mast3r/dust3r/dust3r/cloud_opt/init_im_poses.py +316 -0
- vismatch/third_party/mast3r/dust3r/dust3r/cloud_opt/modular_optimizer.py +145 -0
- vismatch/third_party/mast3r/dust3r/dust3r/cloud_opt/optimizer.py +248 -0
- vismatch/third_party/mast3r/dust3r/dust3r/cloud_opt/pair_viewer.py +127 -0
- vismatch/third_party/mast3r/dust3r/dust3r/datasets/__init__.py +50 -0
- vismatch/third_party/mast3r/dust3r/dust3r/datasets/arkitscenes.py +102 -0
- vismatch/third_party/mast3r/dust3r/dust3r/datasets/base/__init__.py +2 -0
- vismatch/third_party/mast3r/dust3r/dust3r/datasets/base/base_stereo_view_dataset.py +220 -0
- vismatch/third_party/mast3r/dust3r/dust3r/datasets/base/batched_sampler.py +74 -0
- vismatch/third_party/mast3r/dust3r/dust3r/datasets/base/easy_dataset.py +157 -0
- vismatch/third_party/mast3r/dust3r/dust3r/datasets/blendedmvs.py +104 -0
- vismatch/third_party/mast3r/dust3r/dust3r/datasets/co3d.py +165 -0
- vismatch/third_party/mast3r/dust3r/dust3r/datasets/habitat.py +107 -0
- vismatch/third_party/mast3r/dust3r/dust3r/datasets/megadepth.py +123 -0
- vismatch/third_party/mast3r/dust3r/dust3r/datasets/scannetpp.py +96 -0
- vismatch/third_party/mast3r/dust3r/dust3r/datasets/staticthings3d.py +96 -0
- vismatch/third_party/mast3r/dust3r/dust3r/datasets/utils/__init__.py +2 -0
- vismatch/third_party/mast3r/dust3r/dust3r/datasets/utils/cropping.py +124 -0
- vismatch/third_party/mast3r/dust3r/dust3r/datasets/utils/transforms.py +11 -0
- vismatch/third_party/mast3r/dust3r/dust3r/datasets/waymo.py +93 -0
- vismatch/third_party/mast3r/dust3r/dust3r/datasets/wildrgbd.py +67 -0
- vismatch/third_party/mast3r/dust3r/dust3r/demo.py +287 -0
- vismatch/third_party/mast3r/dust3r/dust3r/heads/__init__.py +19 -0
- vismatch/third_party/mast3r/dust3r/dust3r/heads/dpt_head.py +115 -0
- vismatch/third_party/mast3r/dust3r/dust3r/heads/linear_head.py +41 -0
- vismatch/third_party/mast3r/dust3r/dust3r/heads/postprocess.py +58 -0
- vismatch/third_party/mast3r/dust3r/dust3r/image_pairs.py +104 -0
- vismatch/third_party/mast3r/dust3r/dust3r/inference.py +150 -0
- vismatch/third_party/mast3r/dust3r/dust3r/losses.py +299 -0
- vismatch/third_party/mast3r/dust3r/dust3r/model.py +211 -0
- vismatch/third_party/mast3r/dust3r/dust3r/optim_factory.py +14 -0
- vismatch/third_party/mast3r/dust3r/dust3r/patch_embed.py +70 -0
- vismatch/third_party/mast3r/dust3r/dust3r/post_process.py +60 -0
- vismatch/third_party/mast3r/dust3r/dust3r/training.py +377 -0
- vismatch/third_party/mast3r/dust3r/dust3r/utils/__init__.py +2 -0
- vismatch/third_party/mast3r/dust3r/dust3r/utils/device.py +76 -0
- vismatch/third_party/mast3r/dust3r/dust3r/utils/geometry.py +366 -0
- vismatch/third_party/mast3r/dust3r/dust3r/utils/image.py +128 -0
- vismatch/third_party/mast3r/dust3r/dust3r/utils/misc.py +121 -0
- vismatch/third_party/mast3r/dust3r/dust3r/utils/parallel.py +79 -0
- vismatch/third_party/mast3r/dust3r/dust3r/utils/path_to_croco.py +19 -0
- vismatch/third_party/mast3r/dust3r/dust3r/viz.py +381 -0
- vismatch/third_party/mast3r/dust3r/dust3r_visloc/__init__.py +2 -0
- vismatch/third_party/mast3r/dust3r/dust3r_visloc/datasets/__init__.py +6 -0
- vismatch/third_party/mast3r/dust3r/dust3r_visloc/datasets/aachen_day_night.py +24 -0
- vismatch/third_party/mast3r/dust3r/dust3r_visloc/datasets/base_colmap.py +282 -0
- vismatch/third_party/mast3r/dust3r/dust3r_visloc/datasets/base_dataset.py +19 -0
- vismatch/third_party/mast3r/dust3r/dust3r_visloc/datasets/cambridge_landmarks.py +19 -0
- vismatch/third_party/mast3r/dust3r/dust3r_visloc/datasets/inloc.py +167 -0
- vismatch/third_party/mast3r/dust3r/dust3r_visloc/datasets/sevenscenes.py +123 -0
- vismatch/third_party/mast3r/dust3r/dust3r_visloc/datasets/utils.py +118 -0
- vismatch/third_party/mast3r/dust3r/dust3r_visloc/evaluation.py +65 -0
- vismatch/third_party/mast3r/dust3r/dust3r_visloc/localization.py +140 -0
- vismatch/third_party/mast3r/dust3r/train.py +13 -0
- vismatch/third_party/mast3r/dust3r/visloc.py +193 -0
- vismatch/third_party/mast3r/kapture_mast3r_mapping.py +127 -0
- vismatch/third_party/mast3r/make_pairs.py +105 -0
- vismatch/third_party/mast3r/mast3r/__init__.py +2 -0
- vismatch/third_party/mast3r/mast3r/catmlp_dpt_head.py +239 -0
- vismatch/third_party/mast3r/mast3r/cloud_opt/__init__.py +2 -0
- vismatch/third_party/mast3r/mast3r/cloud_opt/sparse_ga.py +1078 -0
- vismatch/third_party/mast3r/mast3r/cloud_opt/triangulation.py +80 -0
- vismatch/third_party/mast3r/mast3r/cloud_opt/tsdf_optimizer.py +273 -0
- vismatch/third_party/mast3r/mast3r/cloud_opt/utils/__init__.py +2 -0
- vismatch/third_party/mast3r/mast3r/cloud_opt/utils/losses.py +32 -0
- vismatch/third_party/mast3r/mast3r/cloud_opt/utils/schedules.py +17 -0
- vismatch/third_party/mast3r/mast3r/colmap/__init__.py +2 -0
- vismatch/third_party/mast3r/mast3r/colmap/database.py +383 -0
- vismatch/third_party/mast3r/mast3r/colmap/mapping.py +196 -0
- vismatch/third_party/mast3r/mast3r/datasets/__init__.py +62 -0
- vismatch/third_party/mast3r/mast3r/datasets/base/__init__.py +2 -0
- vismatch/third_party/mast3r/mast3r/datasets/base/mast3r_base_stereo_view_dataset.py +355 -0
- vismatch/third_party/mast3r/mast3r/datasets/utils/__init__.py +2 -0
- vismatch/third_party/mast3r/mast3r/datasets/utils/cropping.py +219 -0
- vismatch/third_party/mast3r/mast3r/demo.py +381 -0
- vismatch/third_party/mast3r/mast3r/demo_glomap.py +343 -0
- vismatch/third_party/mast3r/mast3r/fast_nn.py +223 -0
- vismatch/third_party/mast3r/mast3r/image_pairs.py +115 -0
- vismatch/third_party/mast3r/mast3r/losses.py +508 -0
- vismatch/third_party/mast3r/mast3r/model.py +213 -0
- vismatch/third_party/mast3r/mast3r/retrieval/graph.py +77 -0
- vismatch/third_party/mast3r/mast3r/retrieval/model.py +271 -0
- vismatch/third_party/mast3r/mast3r/retrieval/processor.py +129 -0
- vismatch/third_party/mast3r/mast3r/utils/__init__.py +2 -0
- vismatch/third_party/mast3r/mast3r/utils/coarse_to_fine.py +214 -0
- vismatch/third_party/mast3r/mast3r/utils/collate.py +62 -0
- vismatch/third_party/mast3r/mast3r/utils/misc.py +17 -0
- vismatch/third_party/mast3r/mast3r/utils/path_to_dust3r.py +19 -0
- vismatch/third_party/mast3r/train.py +48 -0
- vismatch/third_party/mast3r/visloc.py +538 -0
- vismatch/third_party/omniglue/__init__.py +19 -0
- vismatch/third_party/omniglue/demo.py +89 -0
- vismatch/third_party/omniglue/src/omniglue/__init__.py +17 -0
- vismatch/third_party/omniglue/src/omniglue/dino_extract.py +215 -0
- vismatch/third_party/omniglue/src/omniglue/omniglue_extract.py +159 -0
- vismatch/third_party/omniglue/src/omniglue/superpoint_extract.py +214 -0
- vismatch/third_party/omniglue/src/omniglue/utils.py +274 -0
- vismatch/third_party/omniglue/third_party/dinov2/__init__.py +0 -0
- vismatch/third_party/omniglue/third_party/dinov2/dino.py +411 -0
- vismatch/third_party/omniglue/third_party/dinov2/dino_utils.py +341 -0
- vismatch/third_party/rdd/RDD/RDD.py +262 -0
- vismatch/third_party/rdd/RDD/RDD_helper.py +181 -0
- vismatch/third_party/rdd/RDD/dataset/__init__.py +0 -0
- vismatch/third_party/rdd/RDD/dataset/megadepth/__init__.py +2 -0
- vismatch/third_party/rdd/RDD/dataset/megadepth/megadepth.py +313 -0
- vismatch/third_party/rdd/RDD/dataset/megadepth/megadepth_warper.py +75 -0
- vismatch/third_party/rdd/RDD/dataset/megadepth/utils.py +848 -0
- vismatch/third_party/rdd/RDD/matchers/__init__.py +3 -0
- vismatch/third_party/rdd/RDD/matchers/dense_matcher.py +137 -0
- vismatch/third_party/rdd/RDD/matchers/dual_softmax_matcher.py +31 -0
- vismatch/third_party/rdd/RDD/matchers/lightglue.py +667 -0
- vismatch/third_party/rdd/RDD/models/backbone.py +147 -0
- vismatch/third_party/rdd/RDD/models/deformable_transformer.py +270 -0
- vismatch/third_party/rdd/RDD/models/descriptor.py +116 -0
- vismatch/third_party/rdd/RDD/models/detector.py +141 -0
- vismatch/third_party/rdd/RDD/models/interpolator.py +33 -0
- vismatch/third_party/rdd/RDD/models/ops/functions/__init__.py +13 -0
- vismatch/third_party/rdd/RDD/models/ops/functions/ms_deform_attn_func.py +74 -0
- vismatch/third_party/rdd/RDD/models/ops/modules/__init__.py +12 -0
- vismatch/third_party/rdd/RDD/models/ops/modules/ms_deform_attn.py +125 -0
- vismatch/third_party/rdd/RDD/models/ops/setup.py +78 -0
- vismatch/third_party/rdd/RDD/models/ops/test.py +92 -0
- vismatch/third_party/rdd/RDD/models/position_encoding.py +48 -0
- vismatch/third_party/rdd/RDD/models/soft_detect.py +176 -0
- vismatch/third_party/rdd/RDD/utils/__init__.py +1 -0
- vismatch/third_party/rdd/RDD/utils/misc.py +531 -0
- vismatch/third_party/rdd/benchmarks/air_ground.py +250 -0
- vismatch/third_party/rdd/benchmarks/mega_1500.py +259 -0
- vismatch/third_party/rdd/benchmarks/mega_view.py +252 -0
- vismatch/third_party/rdd/benchmarks/scannet_1500.py +251 -0
- vismatch/third_party/rdd/benchmarks/utils.py +112 -0
- vismatch/third_party/rdd/configs/default.yaml +19 -0
- vismatch/third_party/rdd/sfm/extract_rdd.py +145 -0
- vismatch/third_party/rdd/sfm/match_rdd.py +259 -0
- vismatch/third_party/rdd/third_party/LightGlue/.github/workflows/code-quality.yml +24 -0
- vismatch/third_party/rdd/third_party/LightGlue/benchmark.py +255 -0
- vismatch/third_party/rdd/third_party/LightGlue/lightglue/__init__.py +7 -0
- vismatch/third_party/rdd/third_party/LightGlue/lightglue/aliked.py +760 -0
- vismatch/third_party/rdd/third_party/LightGlue/lightglue/disk.py +55 -0
- vismatch/third_party/rdd/third_party/LightGlue/lightglue/dog_hardnet.py +41 -0
- vismatch/third_party/rdd/third_party/LightGlue/lightglue/lightglue.py +662 -0
- vismatch/third_party/rdd/third_party/LightGlue/lightglue/sift.py +216 -0
- vismatch/third_party/rdd/third_party/LightGlue/lightglue/superpoint.py +227 -0
- vismatch/third_party/rdd/third_party/LightGlue/lightglue/utils.py +165 -0
- vismatch/third_party/rdd/third_party/LightGlue/lightglue/viz2d.py +203 -0
- vismatch/third_party/rdd/third_party/__init__.py +1 -0
- vismatch/third_party/rdd/third_party/aliked_wrapper.py +17 -0
- vismatch/third_party/rdd/training/losses/descriptor_loss.py +73 -0
- vismatch/third_party/rdd/training/losses/detector_loss.py +499 -0
- vismatch/third_party/rdd/training/train.py +473 -0
- vismatch/third_party/rdd/training/utils.py +246 -0
- vismatch/utils.py +390 -0
- vismatch/viz.py +222 -0
- vismatch-1.1.1.dist-info/METADATA +265 -0
- vismatch-1.1.1.dist-info/RECORD +2042 -0
- vismatch-1.1.1.dist-info/WHEEL +5 -0
- vismatch-1.1.1.dist-info/entry_points.txt +4 -0
- vismatch-1.1.1.dist-info/licenses/LICENSE +28 -0
- vismatch-1.1.1.dist-info/top_level.txt +4 -0
- vismatch_extract.py +103 -0
- vismatch_match.py +114 -0
- vismatch_test.py +186 -0
|
@@ -0,0 +1,1422 @@
|
|
|
1
|
+
import warnings
|
|
2
|
+
import numpy as np
|
|
3
|
+
import math
|
|
4
|
+
import cv2
|
|
5
|
+
import torch
|
|
6
|
+
from torchvision import transforms
|
|
7
|
+
from torchvision.transforms.functional import InterpolationMode
|
|
8
|
+
import torch.nn.functional as F
|
|
9
|
+
from PIL import Image
|
|
10
|
+
from einops import rearrange
|
|
11
|
+
import torch
|
|
12
|
+
from time import perf_counter
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def get_best_device(verbose = False):
|
|
16
|
+
device = torch.device('cpu')
|
|
17
|
+
if torch.cuda.is_available():
|
|
18
|
+
device = torch.device('cuda')
|
|
19
|
+
elif torch.backends.mps.is_available():
|
|
20
|
+
device = torch.device('mps')
|
|
21
|
+
else:
|
|
22
|
+
device = torch.device('cpu')
|
|
23
|
+
if verbose: print (f"Fastest device found is: {device}")
|
|
24
|
+
return device
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def recover_pose(E, kpts0, kpts1, K0, K1, mask):
|
|
28
|
+
best_num_inliers = 0
|
|
29
|
+
K0inv = np.linalg.inv(K0[:2,:2])
|
|
30
|
+
K1inv = np.linalg.inv(K1[:2,:2])
|
|
31
|
+
|
|
32
|
+
kpts0_n = (K0inv @ (kpts0-K0[None,:2,2]).T).T
|
|
33
|
+
kpts1_n = (K1inv @ (kpts1-K1[None,:2,2]).T).T
|
|
34
|
+
|
|
35
|
+
for _E in np.split(E, len(E) / 3):
|
|
36
|
+
n, R, t, _ = cv2.recoverPose(_E, kpts0_n, kpts1_n, np.eye(3), 1e9, mask=mask)
|
|
37
|
+
if n > best_num_inliers:
|
|
38
|
+
best_num_inliers = n
|
|
39
|
+
ret = (R, t, mask.ravel() > 0)
|
|
40
|
+
return ret
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
# Code taken from https://github.com/PruneTruong/DenseMatching/blob/40c29a6b5c35e86b9509e65ab0cd12553d998e5f/validation/utils_pose_estimation.py
|
|
45
|
+
# --- GEOMETRY ---
|
|
46
|
+
def estimate_pose(kpts0, kpts1, K0, K1, norm_thresh, conf=0.99999):
|
|
47
|
+
if len(kpts0) < 5:
|
|
48
|
+
return None
|
|
49
|
+
K0inv = np.linalg.inv(K0[:2,:2])
|
|
50
|
+
K1inv = np.linalg.inv(K1[:2,:2])
|
|
51
|
+
|
|
52
|
+
kpts0 = (K0inv @ (kpts0-K0[None,:2,2]).T).T
|
|
53
|
+
kpts1 = (K1inv @ (kpts1-K1[None,:2,2]).T).T
|
|
54
|
+
E, mask = cv2.findEssentialMat(
|
|
55
|
+
kpts0, kpts1, np.eye(3), threshold=norm_thresh, prob=conf
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
ret = None
|
|
59
|
+
if E is not None:
|
|
60
|
+
best_num_inliers = 0
|
|
61
|
+
|
|
62
|
+
for _E in np.split(E, len(E) / 3):
|
|
63
|
+
n, R, t, _ = cv2.recoverPose(_E, kpts0, kpts1, np.eye(3), 1e9, mask=mask)
|
|
64
|
+
if n > best_num_inliers:
|
|
65
|
+
best_num_inliers = n
|
|
66
|
+
ret = (R, t, mask.ravel() > 0)
|
|
67
|
+
return ret
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def get_grid(B,H,W, device = get_best_device()):
|
|
71
|
+
x1_n = torch.meshgrid(
|
|
72
|
+
*[
|
|
73
|
+
torch.linspace(
|
|
74
|
+
-1 + 1 / n, 1 - 1 / n, n, device=device
|
|
75
|
+
)
|
|
76
|
+
for n in (B, H, W)
|
|
77
|
+
]
|
|
78
|
+
)
|
|
79
|
+
x1_n = torch.stack((x1_n[2], x1_n[1]), dim=-1).reshape(B, H * W, 2)
|
|
80
|
+
return x1_n
|
|
81
|
+
|
|
82
|
+
@torch.no_grad()
|
|
83
|
+
def finite_diff_hessian(f: tuple(["B", "H", "W"]), device = get_best_device()):
|
|
84
|
+
dxx = torch.tensor([[0,0,0],[1,-2,1],[0,0,0]], device = device)[None,None]/2
|
|
85
|
+
dxy = torch.tensor([[1,0,-1],[0,0,0],[-1,0,1]], device = device)[None,None]/4
|
|
86
|
+
dyy = dxx.mT
|
|
87
|
+
Hxx = F.conv2d(f[:,None], dxx, padding = 1)[:,0]
|
|
88
|
+
Hxy = F.conv2d(f[:,None], dxy, padding = 1)[:,0]
|
|
89
|
+
Hyy = F.conv2d(f[:,None], dyy, padding = 1)[:,0]
|
|
90
|
+
H = torch.stack((Hxx, Hxy, Hxy, Hyy), dim = -1).reshape(*f.shape,2,2)
|
|
91
|
+
return H
|
|
92
|
+
|
|
93
|
+
def finite_diff_grad(f: tuple(["B", "H", "W"]), device = get_best_device()):
|
|
94
|
+
dx = torch.tensor([[0,0,0],[-1,0,1],[0,0,0]],device = device)[None,None]/2
|
|
95
|
+
dy = dx.mT
|
|
96
|
+
gx = F.conv2d(f[:,None], dx, padding = 1)
|
|
97
|
+
gy = F.conv2d(f[:,None], dy, padding = 1)
|
|
98
|
+
g = torch.cat((gx, gy), dim = 1)
|
|
99
|
+
return g
|
|
100
|
+
|
|
101
|
+
def fast_inv_2x2(matrix: tuple[...,2,2], eps=1e-10):
|
|
102
|
+
return (
|
|
103
|
+
1. / (torch.linalg.det(matrix)[...,None,None] + eps)
|
|
104
|
+
* torch.stack(
|
|
105
|
+
(matrix[..., 1, 1], -matrix[..., 0, 1],
|
|
106
|
+
-matrix[..., 1, 0], matrix[..., 0, 0]),
|
|
107
|
+
dim=-1,
|
|
108
|
+
).reshape(*matrix.shape)
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
def newton_step(f:tuple["B","H","W"], inds, device = get_best_device()):
|
|
112
|
+
B,H,W = f.shape
|
|
113
|
+
Hess = finite_diff_hessian(f).reshape(B,H*W,2,2)
|
|
114
|
+
Hess = torch.gather(Hess, dim = 1, index = inds[...,None].expand(B,-1,2,2))
|
|
115
|
+
grad = finite_diff_grad(f).reshape(B,H*W,2)
|
|
116
|
+
grad = torch.gather(grad, dim = 1, index = inds)
|
|
117
|
+
Hessinv = fast_inv_2x2(Hess-torch.eye(2, device = device)[None,None])
|
|
118
|
+
step = (Hessinv @ grad[...,None])
|
|
119
|
+
return step[...,0]
|
|
120
|
+
|
|
121
|
+
@torch.no_grad()
|
|
122
|
+
def sample_keypoints(scoremap, num_samples = 8192, device = get_best_device(), use_nms = True,
|
|
123
|
+
sample_topk = False, return_scoremap = False, sharpen = False, upsample = False,
|
|
124
|
+
increase_coverage = False, remove_borders = False):
|
|
125
|
+
#scoremap = scoremap**2
|
|
126
|
+
log_scoremap = (scoremap+1e-10).log()
|
|
127
|
+
if upsample:
|
|
128
|
+
log_scoremap = F.interpolate(log_scoremap[:,None], scale_factor = 3, mode = "bicubic", align_corners = False)[:,0]#.clamp(min = 0)
|
|
129
|
+
scoremap = log_scoremap.exp()
|
|
130
|
+
B,H,W = scoremap.shape
|
|
131
|
+
if increase_coverage:
|
|
132
|
+
weights = (-torch.linspace(-2, 2, steps = 51, device = device)**2).exp()[None,None]
|
|
133
|
+
# 10000 is just some number for maybe numerical stability, who knows. :), result is invariant anyway
|
|
134
|
+
local_density_x = F.conv2d((scoremap[:,None]+1e-6)*10000,weights[...,None,:], padding = (0,51//2))
|
|
135
|
+
local_density = F.conv2d(local_density_x, weights[...,None], padding = (51//2,0))[:,0]
|
|
136
|
+
scoremap = scoremap * (local_density+1e-8)**(-1/2)
|
|
137
|
+
grid = get_grid(B,H,W, device=device).reshape(B,H*W,2)
|
|
138
|
+
if sharpen:
|
|
139
|
+
laplace_operator = torch.tensor([[[[0,1,0],[1,-4,1],[0,1,0]]]], device = device)/4
|
|
140
|
+
scoremap = scoremap[:,None] - 0.5 * F.conv2d(scoremap[:,None], weight = laplace_operator, padding = 1)
|
|
141
|
+
scoremap = scoremap[:,0].clamp(min = 0)
|
|
142
|
+
if use_nms:
|
|
143
|
+
scoremap = scoremap * (scoremap == F.max_pool2d(scoremap, (3, 3), stride = 1, padding = 1))
|
|
144
|
+
if remove_borders:
|
|
145
|
+
frame = torch.zeros_like(scoremap)
|
|
146
|
+
# we hardcode 4px, could do it nicer, but whatever
|
|
147
|
+
frame[...,4:-4, 4:-4] = 1
|
|
148
|
+
scoremap = scoremap * frame
|
|
149
|
+
if sample_topk:
|
|
150
|
+
inds = torch.topk(scoremap.reshape(B,H*W), k = num_samples).indices
|
|
151
|
+
else:
|
|
152
|
+
inds = torch.multinomial(scoremap.reshape(B,H*W), num_samples = num_samples, replacement=False)
|
|
153
|
+
kps = torch.gather(grid, dim = 1, index = inds[...,None].expand(B,num_samples,2))
|
|
154
|
+
if return_scoremap:
|
|
155
|
+
return kps, torch.gather(scoremap.reshape(B,H*W), dim = 1, index = inds)
|
|
156
|
+
return kps
|
|
157
|
+
|
|
158
|
+
@torch.no_grad()
|
|
159
|
+
def jacobi_determinant(warp, certainty, R = 3, device = get_best_device(), dtype = torch.float32):
|
|
160
|
+
t = perf_counter()
|
|
161
|
+
*dims, _ = warp.shape
|
|
162
|
+
warp = warp.to(dtype)
|
|
163
|
+
certainty = certainty.to(dtype)
|
|
164
|
+
|
|
165
|
+
dtype = warp.dtype
|
|
166
|
+
match_regions = torch.zeros((*dims, 4, R, R), device = device).to(dtype)
|
|
167
|
+
match_regions[:,1:-1, 1:-1] = warp.unfold(1,R,1).unfold(2,R,1)
|
|
168
|
+
match_regions = rearrange(match_regions,"B H W D R1 R2 -> B H W (R1 R2) D") - warp[...,None,:]
|
|
169
|
+
|
|
170
|
+
match_regions_cert = torch.zeros((*dims, R, R), device = device).to(dtype)
|
|
171
|
+
match_regions_cert[:,1:-1, 1:-1] = certainty.unfold(1,R,1).unfold(2,R,1)
|
|
172
|
+
match_regions_cert = rearrange(match_regions_cert,"B H W R1 R2 -> B H W (R1 R2)")[..., None]
|
|
173
|
+
|
|
174
|
+
#print("Time for unfold", perf_counter()-t)
|
|
175
|
+
#t = perf_counter()
|
|
176
|
+
*dims, N, D = match_regions.shape
|
|
177
|
+
# standardize:
|
|
178
|
+
mu, sigma = match_regions.mean(dim=(-2,-1), keepdim = True), match_regions.std(dim=(-2,-1),keepdim=True)
|
|
179
|
+
match_regions = (match_regions-mu)/(sigma+1e-6)
|
|
180
|
+
x_a, x_b = match_regions.chunk(2,-1)
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
A = torch.zeros((*dims,2*x_a.shape[-2],4), device = device).to(dtype)
|
|
184
|
+
A[...,::2,:2] = x_a * match_regions_cert
|
|
185
|
+
A[...,1::2,2:] = x_a * match_regions_cert
|
|
186
|
+
|
|
187
|
+
a_block = A[...,::2,:2]
|
|
188
|
+
ata = a_block.mT @ a_block
|
|
189
|
+
#print("Time for ata", perf_counter()-t)
|
|
190
|
+
#t = perf_counter()
|
|
191
|
+
|
|
192
|
+
#atainv = torch.linalg.inv(ata+1e-5*torch.eye(2,device=device).to(dtype))
|
|
193
|
+
atainv = fast_inv_2x2(ata)
|
|
194
|
+
ATA_inv = torch.zeros((*dims, 4, 4), device = device, dtype = dtype)
|
|
195
|
+
ATA_inv[...,:2,:2] = atainv
|
|
196
|
+
ATA_inv[...,2:,2:] = atainv
|
|
197
|
+
atb = A.mT @ (match_regions_cert*x_b).reshape(*dims,N*2,1)
|
|
198
|
+
theta = ATA_inv @ atb
|
|
199
|
+
#print("Time for theta", perf_counter()-t)
|
|
200
|
+
#t = perf_counter()
|
|
201
|
+
|
|
202
|
+
J = theta.reshape(*dims, 2, 2)
|
|
203
|
+
abs_J_det = torch.linalg.det(J+1e-8*torch.eye(2,2,device = device).expand(*dims,2,2)).abs() # Note: This should always be positive for correct warps, but still taking abs here
|
|
204
|
+
abs_J_logdet = (abs_J_det+1e-12).log()
|
|
205
|
+
B = certainty.shape[0]
|
|
206
|
+
# Handle outliers
|
|
207
|
+
robust_abs_J_logdet = abs_J_logdet.clamp(-3, 3) # Shouldn't be more that exp(3) \approx 8 times zoom
|
|
208
|
+
#print("Time for logdet", perf_counter()-t)
|
|
209
|
+
#t = perf_counter()
|
|
210
|
+
|
|
211
|
+
return robust_abs_J_logdet
|
|
212
|
+
|
|
213
|
+
def get_gt_warp(depth1, depth2, T_1to2, K1, K2, depth_interpolation_mode = 'bilinear', relative_depth_error_threshold = 0.05, H = None, W = None):
|
|
214
|
+
|
|
215
|
+
if H is None:
|
|
216
|
+
B,H,W = depth1.shape
|
|
217
|
+
else:
|
|
218
|
+
B = depth1.shape[0]
|
|
219
|
+
with torch.no_grad():
|
|
220
|
+
x1_n = torch.meshgrid(
|
|
221
|
+
*[
|
|
222
|
+
torch.linspace(
|
|
223
|
+
-1 + 1 / n, 1 - 1 / n, n, device=depth1.device
|
|
224
|
+
)
|
|
225
|
+
for n in (B, H, W)
|
|
226
|
+
]
|
|
227
|
+
)
|
|
228
|
+
x1_n = torch.stack((x1_n[2], x1_n[1]), dim=-1).reshape(B, H * W, 2)
|
|
229
|
+
mask, x2 = warp_kpts(
|
|
230
|
+
x1_n.double(),
|
|
231
|
+
depth1.double(),
|
|
232
|
+
depth2.double(),
|
|
233
|
+
T_1to2.double(),
|
|
234
|
+
K1.double(),
|
|
235
|
+
K2.double(),
|
|
236
|
+
depth_interpolation_mode = depth_interpolation_mode,
|
|
237
|
+
relative_depth_error_threshold = relative_depth_error_threshold,
|
|
238
|
+
)
|
|
239
|
+
prob = mask.float().reshape(B, H, W)
|
|
240
|
+
x2 = x2.reshape(B, H, W, 2)
|
|
241
|
+
return torch.cat((x1_n.reshape(B,H,W,2),x2),dim=-1), prob
|
|
242
|
+
|
|
243
|
+
def unnormalize_coords(x_n,h,w):
|
|
244
|
+
x = torch.stack(
|
|
245
|
+
(w * (x_n[..., 0] + 1) / 2, h * (x_n[..., 1] + 1) / 2), dim=-1
|
|
246
|
+
) # [-1+1/h, 1-1/h] -> [0.5, h-0.5]
|
|
247
|
+
return x
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
def rotate_intrinsic(K, n):
|
|
251
|
+
base_rot = np.array([[0, 1, 0], [-1, 0, 0], [0, 0, 1]])
|
|
252
|
+
rot = np.linalg.matrix_power(base_rot, n)
|
|
253
|
+
return rot @ K
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
def rotate_pose_inplane(i_T_w, rot):
|
|
257
|
+
rotation_matrices = [
|
|
258
|
+
np.array(
|
|
259
|
+
[
|
|
260
|
+
[np.cos(r), -np.sin(r), 0.0, 0.0],
|
|
261
|
+
[np.sin(r), np.cos(r), 0.0, 0.0],
|
|
262
|
+
[0.0, 0.0, 1.0, 0.0],
|
|
263
|
+
[0.0, 0.0, 0.0, 1.0],
|
|
264
|
+
],
|
|
265
|
+
dtype=np.float32,
|
|
266
|
+
)
|
|
267
|
+
for r in [np.deg2rad(d) for d in (0, 270, 180, 90)]
|
|
268
|
+
]
|
|
269
|
+
return np.dot(rotation_matrices[rot], i_T_w)
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
def scale_intrinsics(K, scales):
|
|
273
|
+
scales = np.diag([1.0 / scales[0], 1.0 / scales[1], 1.0])
|
|
274
|
+
return np.dot(scales, K)
|
|
275
|
+
|
|
276
|
+
def angle_error_mat(R1, R2):
|
|
277
|
+
cos = (np.trace(np.dot(R1.T, R2)) - 1) / 2
|
|
278
|
+
cos = np.clip(cos, -1.0, 1.0) # numercial errors can make it out of bounds
|
|
279
|
+
return np.rad2deg(np.abs(np.arccos(cos)))
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
def angle_error_vec(v1, v2):
|
|
283
|
+
n = np.linalg.norm(v1) * np.linalg.norm(v2)
|
|
284
|
+
return np.rad2deg(np.arccos(np.clip(np.dot(v1, v2) / n, -1.0, 1.0)))
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
def compute_pose_error(T_0to1, R, t):
|
|
288
|
+
R_gt = T_0to1[:3, :3]
|
|
289
|
+
t_gt = T_0to1[:3, 3]
|
|
290
|
+
error_t = angle_error_vec(t.squeeze(), t_gt)
|
|
291
|
+
error_t = np.minimum(error_t, 180 - error_t) # ambiguity of E estimation
|
|
292
|
+
error_R = angle_error_mat(R, R_gt)
|
|
293
|
+
return error_t, error_R
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
def pose_auc(errors, thresholds):
|
|
297
|
+
sort_idx = np.argsort(errors)
|
|
298
|
+
errors = np.array(errors.copy())[sort_idx]
|
|
299
|
+
recall = (np.arange(len(errors)) + 1) / len(errors)
|
|
300
|
+
errors = np.r_[0.0, errors]
|
|
301
|
+
recall = np.r_[0.0, recall]
|
|
302
|
+
aucs = []
|
|
303
|
+
for t in thresholds:
|
|
304
|
+
last_index = np.searchsorted(errors, t)
|
|
305
|
+
r = np.r_[recall[:last_index], recall[last_index - 1]]
|
|
306
|
+
e = np.r_[errors[:last_index], t]
|
|
307
|
+
aucs.append(np.trapz(r, x=e) / t)
|
|
308
|
+
return aucs
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
# From Patch2Pix https://github.com/GrumpyZhou/patch2pix
|
|
312
|
+
def get_depth_tuple_transform_ops(resize=None, normalize=True, unscale=False):
|
|
313
|
+
ops = []
|
|
314
|
+
if resize:
|
|
315
|
+
ops.append(TupleResize(resize, mode=InterpolationMode.BILINEAR, antialias = False))
|
|
316
|
+
return TupleCompose(ops)
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
def get_tuple_transform_ops(resize=None, normalize=True, unscale=False, clahe = False):
|
|
320
|
+
ops = []
|
|
321
|
+
if resize:
|
|
322
|
+
ops.append(TupleResize(resize, antialias = True))
|
|
323
|
+
if clahe:
|
|
324
|
+
ops.append(TupleClahe())
|
|
325
|
+
if normalize:
|
|
326
|
+
ops.append(TupleToTensorScaled())
|
|
327
|
+
ops.append(
|
|
328
|
+
TupleNormalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
|
|
329
|
+
) # Imagenet mean/std
|
|
330
|
+
else:
|
|
331
|
+
if unscale:
|
|
332
|
+
ops.append(TupleToTensorUnscaled())
|
|
333
|
+
else:
|
|
334
|
+
ops.append(TupleToTensorScaled())
|
|
335
|
+
return TupleCompose(ops)
|
|
336
|
+
|
|
337
|
+
class Clahe:
|
|
338
|
+
def __init__(self, cliplimit = 2, blocksize = 8) -> None:
|
|
339
|
+
self.clahe = cv2.createCLAHE(cliplimit,(blocksize,blocksize))
|
|
340
|
+
def __call__(self, im):
|
|
341
|
+
im_hsv = cv2.cvtColor(np.array(im),cv2.COLOR_RGB2HSV)
|
|
342
|
+
im_v = self.clahe.apply(im_hsv[:,:,2])
|
|
343
|
+
im_hsv[...,2] = im_v
|
|
344
|
+
im_clahe = cv2.cvtColor(im_hsv,cv2.COLOR_HSV2RGB)
|
|
345
|
+
return Image.fromarray(im_clahe)
|
|
346
|
+
|
|
347
|
+
class TupleClahe:
|
|
348
|
+
def __init__(self, cliplimit = 8, blocksize = 8) -> None:
|
|
349
|
+
self.clahe = Clahe(cliplimit,blocksize)
|
|
350
|
+
def __call__(self, ims):
|
|
351
|
+
return [self.clahe(im) for im in ims]
|
|
352
|
+
|
|
353
|
+
class ToTensorScaled(object):
|
|
354
|
+
"""Convert a RGB PIL Image to a CHW ordered Tensor, scale the range to [0, 1]"""
|
|
355
|
+
|
|
356
|
+
def __call__(self, im):
|
|
357
|
+
if not isinstance(im, torch.Tensor):
|
|
358
|
+
im = np.array(im, dtype=np.float32).transpose((2, 0, 1))
|
|
359
|
+
im /= 255.0
|
|
360
|
+
return torch.from_numpy(im)
|
|
361
|
+
else:
|
|
362
|
+
return im
|
|
363
|
+
|
|
364
|
+
def __repr__(self):
|
|
365
|
+
return "ToTensorScaled(./255)"
|
|
366
|
+
|
|
367
|
+
|
|
368
|
+
class TupleToTensorScaled(object):
|
|
369
|
+
def __init__(self):
|
|
370
|
+
self.to_tensor = ToTensorScaled()
|
|
371
|
+
|
|
372
|
+
def __call__(self, im_tuple):
|
|
373
|
+
return [self.to_tensor(im) for im in im_tuple]
|
|
374
|
+
|
|
375
|
+
def __repr__(self):
|
|
376
|
+
return "TupleToTensorScaled(./255)"
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
class ToTensorUnscaled(object):
|
|
380
|
+
"""Convert a RGB PIL Image to a CHW ordered Tensor"""
|
|
381
|
+
|
|
382
|
+
def __call__(self, im):
|
|
383
|
+
return torch.from_numpy(np.array(im, dtype=np.float32).transpose((2, 0, 1)))
|
|
384
|
+
|
|
385
|
+
def __repr__(self):
|
|
386
|
+
return "ToTensorUnscaled()"
|
|
387
|
+
|
|
388
|
+
|
|
389
|
+
class TupleToTensorUnscaled(object):
|
|
390
|
+
"""Convert a RGB PIL Image to a CHW ordered Tensor"""
|
|
391
|
+
|
|
392
|
+
def __init__(self):
|
|
393
|
+
self.to_tensor = ToTensorUnscaled()
|
|
394
|
+
|
|
395
|
+
def __call__(self, im_tuple):
|
|
396
|
+
return [self.to_tensor(im) for im in im_tuple]
|
|
397
|
+
|
|
398
|
+
def __repr__(self):
|
|
399
|
+
return "TupleToTensorUnscaled()"
|
|
400
|
+
|
|
401
|
+
|
|
402
|
+
class TupleResize(object):
|
|
403
|
+
def __init__(self, size, mode=InterpolationMode.BICUBIC, antialias = None):
|
|
404
|
+
self.size = size
|
|
405
|
+
self.resize = transforms.Resize(size, mode, antialias = antialias)
|
|
406
|
+
|
|
407
|
+
def __call__(self, im_tuple):
|
|
408
|
+
return [self.resize(im) for im in im_tuple]
|
|
409
|
+
|
|
410
|
+
def __repr__(self):
|
|
411
|
+
return "TupleResize(size={})".format(self.size)
|
|
412
|
+
|
|
413
|
+
class Normalize:
|
|
414
|
+
def __call__(self,im):
|
|
415
|
+
mean = im.mean(dim=(1,2), keepdims=True)
|
|
416
|
+
std = im.std(dim=(1,2), keepdims=True)
|
|
417
|
+
return (im-mean)/std
|
|
418
|
+
|
|
419
|
+
|
|
420
|
+
class TupleNormalize(object):
|
|
421
|
+
def __init__(self, mean, std):
|
|
422
|
+
self.mean = mean
|
|
423
|
+
self.std = std
|
|
424
|
+
self.normalize = transforms.Normalize(mean=mean, std=std)
|
|
425
|
+
|
|
426
|
+
def __call__(self, im_tuple):
|
|
427
|
+
c,h,w = im_tuple[0].shape
|
|
428
|
+
if c > 3:
|
|
429
|
+
warnings.warn(f"Number of channels {c=} > 3, assuming first 3 are rgb")
|
|
430
|
+
return [self.normalize(im[:3]) for im in im_tuple]
|
|
431
|
+
|
|
432
|
+
def __repr__(self):
|
|
433
|
+
return "TupleNormalize(mean={}, std={})".format(self.mean, self.std)
|
|
434
|
+
|
|
435
|
+
|
|
436
|
+
class TupleCompose(object):
|
|
437
|
+
def __init__(self, transforms):
|
|
438
|
+
self.transforms = transforms
|
|
439
|
+
|
|
440
|
+
def __call__(self, im_tuple):
|
|
441
|
+
for t in self.transforms:
|
|
442
|
+
im_tuple = t(im_tuple)
|
|
443
|
+
return im_tuple
|
|
444
|
+
|
|
445
|
+
def __repr__(self):
|
|
446
|
+
format_string = self.__class__.__name__ + "("
|
|
447
|
+
for t in self.transforms:
|
|
448
|
+
format_string += "\n"
|
|
449
|
+
format_string += " {0}".format(t)
|
|
450
|
+
format_string += "\n)"
|
|
451
|
+
return format_string
|
|
452
|
+
|
|
453
|
+
|
|
454
|
+
@torch.no_grad()
|
|
455
|
+
def warp_kpts(kpts0, depth0, depth1, T_0to1, K0, K1, smooth_mask = False, return_relative_depth_error = False, depth_interpolation_mode = "bilinear", relative_depth_error_threshold = 0.05):
|
|
456
|
+
"""Warp kpts0 from I0 to I1 with depth, K and Rt
|
|
457
|
+
Also check covisibility and depth consistency.
|
|
458
|
+
Depth is consistent if relative error < 0.2 (hard-coded).
|
|
459
|
+
# https://github.com/zju3dv/LoFTR/blob/94e98b695be18acb43d5d3250f52226a8e36f839/src/loftr/utils/geometry.py adapted from here
|
|
460
|
+
Args:
|
|
461
|
+
kpts0 (torch.Tensor): [N, L, 2] - <x, y>, should be normalized in (-1,1)
|
|
462
|
+
depth0 (torch.Tensor): [N, H, W],
|
|
463
|
+
depth1 (torch.Tensor): [N, H, W],
|
|
464
|
+
T_0to1 (torch.Tensor): [N, 3, 4],
|
|
465
|
+
K0 (torch.Tensor): [N, 3, 3],
|
|
466
|
+
K1 (torch.Tensor): [N, 3, 3],
|
|
467
|
+
Returns:
|
|
468
|
+
calculable_mask (torch.Tensor): [N, L]
|
|
469
|
+
warped_keypoints0 (torch.Tensor): [N, L, 2] <x0_hat, y1_hat>
|
|
470
|
+
"""
|
|
471
|
+
(
|
|
472
|
+
n,
|
|
473
|
+
h,
|
|
474
|
+
w,
|
|
475
|
+
) = depth0.shape
|
|
476
|
+
if depth_interpolation_mode == "combined":
|
|
477
|
+
# Inspired by approach in inloc, try to fill holes from bilinear interpolation by nearest neighbour interpolation
|
|
478
|
+
if smooth_mask:
|
|
479
|
+
raise NotImplementedError("Combined bilinear and NN warp not implemented")
|
|
480
|
+
valid_bilinear, warp_bilinear = warp_kpts(kpts0, depth0, depth1, T_0to1, K0, K1,
|
|
481
|
+
smooth_mask = smooth_mask,
|
|
482
|
+
return_relative_depth_error = return_relative_depth_error,
|
|
483
|
+
depth_interpolation_mode = "bilinear",
|
|
484
|
+
relative_depth_error_threshold = relative_depth_error_threshold)
|
|
485
|
+
valid_nearest, warp_nearest = warp_kpts(kpts0, depth0, depth1, T_0to1, K0, K1,
|
|
486
|
+
smooth_mask = smooth_mask,
|
|
487
|
+
return_relative_depth_error = return_relative_depth_error,
|
|
488
|
+
depth_interpolation_mode = "nearest-exact",
|
|
489
|
+
relative_depth_error_threshold = relative_depth_error_threshold)
|
|
490
|
+
nearest_valid_bilinear_invalid = (~valid_bilinear).logical_and(valid_nearest)
|
|
491
|
+
warp = warp_bilinear.clone()
|
|
492
|
+
warp[nearest_valid_bilinear_invalid] = warp_nearest[nearest_valid_bilinear_invalid]
|
|
493
|
+
valid = valid_bilinear | valid_nearest
|
|
494
|
+
return valid, warp
|
|
495
|
+
|
|
496
|
+
|
|
497
|
+
kpts0_depth = F.grid_sample(depth0[:, None], kpts0[:, :, None], mode = depth_interpolation_mode, align_corners=False)[
|
|
498
|
+
:, 0, :, 0
|
|
499
|
+
]
|
|
500
|
+
kpts0 = torch.stack(
|
|
501
|
+
(w * (kpts0[..., 0] + 1) / 2, h * (kpts0[..., 1] + 1) / 2), dim=-1
|
|
502
|
+
) # [-1+1/h, 1-1/h] -> [0.5, h-0.5]
|
|
503
|
+
# Sample depth, get calculable_mask on depth != 0
|
|
504
|
+
nonzero_mask = kpts0_depth != 0
|
|
505
|
+
|
|
506
|
+
# Unproject
|
|
507
|
+
kpts0_h = (
|
|
508
|
+
torch.cat([kpts0, torch.ones_like(kpts0[:, :, [0]])], dim=-1)
|
|
509
|
+
* kpts0_depth[..., None]
|
|
510
|
+
) # (N, L, 3)
|
|
511
|
+
kpts0_n = K0.inverse() @ kpts0_h.transpose(2, 1) # (N, 3, L)
|
|
512
|
+
kpts0_cam = kpts0_n
|
|
513
|
+
|
|
514
|
+
# Rigid Transform
|
|
515
|
+
w_kpts0_cam = T_0to1[:, :3, :3] @ kpts0_cam + T_0to1[:, :3, [3]] # (N, 3, L)
|
|
516
|
+
w_kpts0_depth_computed = w_kpts0_cam[:, 2, :]
|
|
517
|
+
|
|
518
|
+
# Project
|
|
519
|
+
w_kpts0_h = (K1 @ w_kpts0_cam).transpose(2, 1) # (N, L, 3)
|
|
520
|
+
w_kpts0 = w_kpts0_h[:, :, :2] / (
|
|
521
|
+
w_kpts0_h[:, :, [2]] + 1e-4
|
|
522
|
+
) # (N, L, 2), +1e-4 to avoid zero depth
|
|
523
|
+
|
|
524
|
+
# Covisible Check
|
|
525
|
+
h, w = depth1.shape[1:3]
|
|
526
|
+
covisible_mask = (
|
|
527
|
+
(w_kpts0[:, :, 0] > 0)
|
|
528
|
+
* (w_kpts0[:, :, 0] < w - 1)
|
|
529
|
+
* (w_kpts0[:, :, 1] > 0)
|
|
530
|
+
* (w_kpts0[:, :, 1] < h - 1)
|
|
531
|
+
)
|
|
532
|
+
w_kpts0 = torch.stack(
|
|
533
|
+
(2 * w_kpts0[..., 0] / w - 1, 2 * w_kpts0[..., 1] / h - 1), dim=-1
|
|
534
|
+
) # from [0.5,h-0.5] -> [-1+1/h, 1-1/h]
|
|
535
|
+
# w_kpts0[~covisible_mask, :] = -5 # xd
|
|
536
|
+
|
|
537
|
+
w_kpts0_depth = F.grid_sample(
|
|
538
|
+
depth1[:, None], w_kpts0[:, :, None], mode=depth_interpolation_mode, align_corners=False
|
|
539
|
+
)[:, 0, :, 0]
|
|
540
|
+
|
|
541
|
+
relative_depth_error = (
|
|
542
|
+
(w_kpts0_depth - w_kpts0_depth_computed) / w_kpts0_depth
|
|
543
|
+
).abs()
|
|
544
|
+
if not smooth_mask:
|
|
545
|
+
consistent_mask = relative_depth_error < relative_depth_error_threshold
|
|
546
|
+
else:
|
|
547
|
+
consistent_mask = (-relative_depth_error/smooth_mask).exp()
|
|
548
|
+
valid_mask = nonzero_mask * covisible_mask * consistent_mask
|
|
549
|
+
if return_relative_depth_error:
|
|
550
|
+
return relative_depth_error, w_kpts0
|
|
551
|
+
else:
|
|
552
|
+
return valid_mask, w_kpts0
|
|
553
|
+
|
|
554
|
+
|
|
555
|
+
def lstsq_affine(aff1_A, aff1_B, weights=None):
|
|
556
|
+
"""
|
|
557
|
+
Solve aff1_A @ M.mT = aff1_B for M in least squares sense.
|
|
558
|
+
Shapes of aff1_A and aff1_B: (*, m, 2).
|
|
559
|
+
Optional weights shape: (*, m)
|
|
560
|
+
Output shape: (*, 2, 2)."""
|
|
561
|
+
if weights is None:
|
|
562
|
+
X = aff1_A.mT @ aff1_A
|
|
563
|
+
else:
|
|
564
|
+
X = (weights[..., None] * aff1_A).mT @ aff1_A
|
|
565
|
+
# invert X "in place"
|
|
566
|
+
# X[..., 0, 0], X[..., 1, 1] = X[..., 1, 1], X[..., 0, 0].clone() # hack
|
|
567
|
+
# X[..., 0, 1] = X[..., 1, 0] = -X[..., 0, 1] # note that X is symmetric
|
|
568
|
+
# X = X / X.det()[..., None, None]
|
|
569
|
+
X = fast_inv_2x2(X)
|
|
570
|
+
if weights is None:
|
|
571
|
+
M = aff1_B.mT @ aff1_A @ X
|
|
572
|
+
else:
|
|
573
|
+
M = (weights[..., None] * aff1_B).mT @ aff1_A @ X
|
|
574
|
+
# The below might be more numerically stable in rare cases?
|
|
575
|
+
# Q, R = torch.linalg.qr(aff1_A, mode='reduced')
|
|
576
|
+
# Z = Q.mT @ aff1_B
|
|
577
|
+
# inversion of upper triangular R
|
|
578
|
+
# M1 = Z[..., 1, :] / R[..., 1, 1]
|
|
579
|
+
# M0 = (Z[..., 0, :] - M1 * R[..., 0, 1]) / R[..., 0, 0]
|
|
580
|
+
# M = torch.stack([M0, M1], dim=-1)
|
|
581
|
+
return M
|
|
582
|
+
|
|
583
|
+
|
|
584
|
+
@torch.no_grad()
|
|
585
|
+
def warp_kpts_nbh(kpts0_nbh, depth0, depth1, T_0to1, K0, K1,
|
|
586
|
+
smooth_mask = False,
|
|
587
|
+
return_relative_depth_error = False,
|
|
588
|
+
depth_interpolation_mode = "bilinear",
|
|
589
|
+
relative_depth_error_threshold = 0.05,
|
|
590
|
+
nbh_relative_depth_threshold = 5.,
|
|
591
|
+
):
|
|
592
|
+
"""
|
|
593
|
+
Warp kpts0 with neighbourhood from I0 to I1 with depth, K and Rt
|
|
594
|
+
Also check covisibility and depth consistency and depthconsistency within neighbourhood.
|
|
595
|
+
# https://github.com/zju3dv/LoFTR/blob/94e98b695be18acb43d5d3250f52226a8e36f839/src/loftr/utils/geometry.py adapted from here
|
|
596
|
+
Args:
|
|
597
|
+
kpts0_nbh (torch.Tensor): [N, L, K, 2] - <x, y>, should be normalized in (-1,1), K is size of neighbourhood, first point along K is the center of the neighbourhood
|
|
598
|
+
depth0 (torch.Tensor): [N, H, W],
|
|
599
|
+
depth1 (torch.Tensor): [N, H, W],
|
|
600
|
+
T_0to1 (torch.Tensor): [N, 3, 4],
|
|
601
|
+
K0 (torch.Tensor): [N, 3, 3],
|
|
602
|
+
K1 (torch.Tensor): [N, 3, 3],
|
|
603
|
+
Returns:
|
|
604
|
+
calculable_mask_kpt (torch.Tensor): [N, L]
|
|
605
|
+
calculable_mask (torch.Tensor): [N, L, K]
|
|
606
|
+
warped_keypoints0 (torch.Tensor): [N, L, K, 2] <x0_hat, y1_hat>
|
|
607
|
+
"""
|
|
608
|
+
(
|
|
609
|
+
n,
|
|
610
|
+
h,
|
|
611
|
+
w,
|
|
612
|
+
) = depth0.shape
|
|
613
|
+
|
|
614
|
+
kpts0 = kpts0_nbh.reshape(kpts0_nbh.shape[0], -1, 2)
|
|
615
|
+
kpts0_depth = F.grid_sample(depth0[:, None], kpts0[:, :, None], mode = depth_interpolation_mode, align_corners=False)[
|
|
616
|
+
:, 0, :, 0
|
|
617
|
+
]
|
|
618
|
+
kpts0 = torch.stack(
|
|
619
|
+
(w * (kpts0[..., 0] + 1) / 2, h * (kpts0[..., 1] + 1) / 2), dim=-1
|
|
620
|
+
) # [-1+1/h, 1-1/h] -> [0.5, h-0.5]
|
|
621
|
+
# Sample depth, get calculable_mask on depth != 0
|
|
622
|
+
nonzero_mask = kpts0_depth != 0
|
|
623
|
+
|
|
624
|
+
# Unproject
|
|
625
|
+
kpts0_h = (
|
|
626
|
+
torch.cat([kpts0, torch.ones_like(kpts0[:, :, [0]])], dim=-1)
|
|
627
|
+
* kpts0_depth[..., None]
|
|
628
|
+
) # (N, L, 3)
|
|
629
|
+
kpts0_n = K0.inverse() @ kpts0_h.transpose(2, 1) # (N, 3, L)
|
|
630
|
+
kpts0_cam = kpts0_n
|
|
631
|
+
|
|
632
|
+
# Rigid Transform
|
|
633
|
+
w_kpts0_cam = T_0to1[:, :3, :3] @ kpts0_cam + T_0to1[:, :3, [3]] # (N, 3, L)
|
|
634
|
+
w_kpts0_depth_computed = w_kpts0_cam[:, 2, :]
|
|
635
|
+
|
|
636
|
+
# Project
|
|
637
|
+
w_kpts0_h = (K1 @ w_kpts0_cam).transpose(2, 1) # (N, L, 3)
|
|
638
|
+
w_kpts0 = w_kpts0_h[:, :, :2] / (
|
|
639
|
+
w_kpts0_h[:, :, [2]] + 1e-4
|
|
640
|
+
) # (N, L, 2), +1e-4 to avoid zero depth
|
|
641
|
+
|
|
642
|
+
# Covisible Check
|
|
643
|
+
h, w = depth1.shape[1:3]
|
|
644
|
+
covisible_mask = (
|
|
645
|
+
(w_kpts0[:, :, 0] > 0)
|
|
646
|
+
* (w_kpts0[:, :, 0] < w - 1)
|
|
647
|
+
* (w_kpts0[:, :, 1] > 0)
|
|
648
|
+
* (w_kpts0[:, :, 1] < h - 1)
|
|
649
|
+
)
|
|
650
|
+
w_kpts0 = torch.stack(
|
|
651
|
+
(2 * w_kpts0[..., 0] / w - 1, 2 * w_kpts0[..., 1] / h - 1), dim=-1
|
|
652
|
+
) # from [0.5,h-0.5] -> [-1+1/h, 1-1/h]
|
|
653
|
+
# w_kpts0[~covisible_mask, :] = -5 # xd
|
|
654
|
+
|
|
655
|
+
w_kpts0_depth = F.grid_sample(
|
|
656
|
+
depth1[:, None], w_kpts0[:, :, None], mode=depth_interpolation_mode, align_corners=False
|
|
657
|
+
)[:, 0, :, 0]
|
|
658
|
+
|
|
659
|
+
relative_depth_error = (
|
|
660
|
+
(w_kpts0_depth - w_kpts0_depth_computed) / w_kpts0_depth
|
|
661
|
+
).abs()
|
|
662
|
+
if not smooth_mask:
|
|
663
|
+
consistent_mask = relative_depth_error < relative_depth_error_threshold
|
|
664
|
+
else:
|
|
665
|
+
consistent_mask = (-relative_depth_error/smooth_mask).exp()
|
|
666
|
+
|
|
667
|
+
kpts0_depth = kpts0_depth.reshape(kpts0_nbh.shape[:-1])
|
|
668
|
+
nbh_depth_error = (
|
|
669
|
+
(kpts0_depth[:, :, 1:] - kpts0_depth[:, :, :1])
|
|
670
|
+
).abs()
|
|
671
|
+
nbh_depth_mask = nbh_depth_error <= nbh_relative_depth_threshold * nbh_depth_error.min(dim=-1, keepdim=True).values
|
|
672
|
+
|
|
673
|
+
valid_mask = (nonzero_mask * covisible_mask * consistent_mask).reshape(kpts0_nbh.shape[:-1])
|
|
674
|
+
valid_mask_kpts = valid_mask[:, :, 0].clone()
|
|
675
|
+
valid_mask[:, :, 1:] *= nbh_depth_mask
|
|
676
|
+
|
|
677
|
+
valid_mask[:, :, 0] *= torch.sum(valid_mask[:, :, 1:].int(), dim=-1) >= 2 # only a good neighbourhood if at least 2 neighbours are valid
|
|
678
|
+
|
|
679
|
+
if return_relative_depth_error:
|
|
680
|
+
raise NotImplementedError()
|
|
681
|
+
return relative_depth_error.reshape(kpts0_nbh.shape[:-1]), w_kpts0.reshape(kpts0_nbh.shape)
|
|
682
|
+
else:
|
|
683
|
+
return valid_mask_kpts, valid_mask, w_kpts0.reshape(kpts0_nbh.shape)
|
|
684
|
+
|
|
685
|
+
@torch.no_grad()
|
|
686
|
+
def local_affine_from_homography(
|
|
687
|
+
kpts_A,
|
|
688
|
+
H_AtoB,
|
|
689
|
+
nbh_offset=0.01,
|
|
690
|
+
default=None,
|
|
691
|
+
sing_value_cutoff=10.,
|
|
692
|
+
):
|
|
693
|
+
"""
|
|
694
|
+
Inputs:
|
|
695
|
+
kpts_A: (N, K, 2) in normalized coords
|
|
696
|
+
H_AtoB: (N, 3, 3) in normalized coords
|
|
697
|
+
Outputs:
|
|
698
|
+
affine_AtoB:, (N, K, 2, 2)
|
|
699
|
+
"""
|
|
700
|
+
shape = kpts_A.shape
|
|
701
|
+
|
|
702
|
+
sqrt_half = math.sqrt(2.) * 0.5
|
|
703
|
+
nbh = nbh_offset * torch.tensor(
|
|
704
|
+
[[0., 0],
|
|
705
|
+
[1, 0], [0, 1],
|
|
706
|
+
[-1, 0], [0, -1],
|
|
707
|
+
[sqrt_half, sqrt_half], [sqrt_half, -sqrt_half],
|
|
708
|
+
[-sqrt_half, sqrt_half], [-sqrt_half, -sqrt_half]],
|
|
709
|
+
device=kpts_A.device, dtype=kpts_A.dtype,
|
|
710
|
+
)
|
|
711
|
+
k_nbh = nbh.shape[0]
|
|
712
|
+
for _ in range(len(shape) - 1):
|
|
713
|
+
nbh = nbh.unsqueeze(0)
|
|
714
|
+
|
|
715
|
+
kpts_A_nbh = kpts_A[..., None, :] + nbh
|
|
716
|
+
|
|
717
|
+
kpts_B_nbh = homog_transform(
|
|
718
|
+
H_AtoB[:, None, None],
|
|
719
|
+
kpts_A_nbh[..., None, :],
|
|
720
|
+
)[..., 0, :]
|
|
721
|
+
|
|
722
|
+
affine_AtoB = lstsq_affine(
|
|
723
|
+
nbh[..., 1:, :],
|
|
724
|
+
kpts_B_nbh[..., 1:, :] - kpts_B_nbh[..., :1, :],
|
|
725
|
+
)
|
|
726
|
+
|
|
727
|
+
kpts_B = kpts_B_nbh[..., 0, :]
|
|
728
|
+
|
|
729
|
+
sv = torch.linalg.svdvals(affine_AtoB)
|
|
730
|
+
degen_mask = torch.logical_or(
|
|
731
|
+
torch.isnan(torch.sum(sv, dim=-1)),
|
|
732
|
+
torch.logical_or(
|
|
733
|
+
torch.min(sv, dim=-1).values < 1. / sing_value_cutoff,
|
|
734
|
+
torch.max(sv, dim=-1).values > sing_value_cutoff,
|
|
735
|
+
),
|
|
736
|
+
)
|
|
737
|
+
if default is None:
|
|
738
|
+
affine_AtoB[degen_mask] = torch.eye(2, device=kpts_A.device, dtype=kpts_A.dtype)
|
|
739
|
+
else:
|
|
740
|
+
affine_AtoB[degen_mask] = default[degen_mask]
|
|
741
|
+
|
|
742
|
+
return affine_AtoB, kpts_A, kpts_B, ~degen_mask
|
|
743
|
+
|
|
744
|
+
@torch.no_grad()
|
|
745
|
+
def local_affine(kpts_A,
|
|
746
|
+
depth_A,
|
|
747
|
+
depth_B,
|
|
748
|
+
T_AtoB,
|
|
749
|
+
K_A,
|
|
750
|
+
K_B,
|
|
751
|
+
nbh_offset=0.01,
|
|
752
|
+
default=None,
|
|
753
|
+
sing_value_cutoff=3.,
|
|
754
|
+
):
|
|
755
|
+
"""
|
|
756
|
+
Inputs:
|
|
757
|
+
kpts_A: (N, K, 2) in normalized coords
|
|
758
|
+
Outputs:
|
|
759
|
+
affine_AtoB:, (N, K, 2, 2)
|
|
760
|
+
"""
|
|
761
|
+
shape = kpts_A.shape
|
|
762
|
+
|
|
763
|
+
sqrt_half = math.sqrt(2.) * 0.5
|
|
764
|
+
nbh = nbh_offset * torch.tensor(
|
|
765
|
+
[[0., 0],
|
|
766
|
+
[1, 0], [0, 1],
|
|
767
|
+
[-1, 0], [0, -1],
|
|
768
|
+
[sqrt_half, sqrt_half], [sqrt_half, -sqrt_half],
|
|
769
|
+
[-sqrt_half, sqrt_half], [-sqrt_half, -sqrt_half]],
|
|
770
|
+
device=kpts_A.device, dtype=kpts_A.dtype,
|
|
771
|
+
)
|
|
772
|
+
k_nbh = nbh.shape[0]
|
|
773
|
+
for _ in range(len(shape) - 1):
|
|
774
|
+
nbh = nbh.unsqueeze(0)
|
|
775
|
+
|
|
776
|
+
kpts_A_nbh = kpts_A[..., None, :] + nbh
|
|
777
|
+
|
|
778
|
+
mask_AtoB_kpts, mask_AtoB, kpts_B_nbh = warp_kpts_nbh(
|
|
779
|
+
kpts_A_nbh,
|
|
780
|
+
depth_A,
|
|
781
|
+
depth_B,
|
|
782
|
+
T_AtoB,
|
|
783
|
+
K_A,
|
|
784
|
+
K_B,
|
|
785
|
+
relative_depth_error_threshold = 0.05,
|
|
786
|
+
nbh_relative_depth_threshold = 5.,
|
|
787
|
+
)
|
|
788
|
+
|
|
789
|
+
mean_A = (kpts_A * mask_AtoB_kpts[..., None]).sum(dim=1, keepdim=True) / mask_AtoB_kpts[..., None].sum(dim=1, keepdim=True).clamp(min=1)
|
|
790
|
+
kpts_B = kpts_B_nbh[..., 0, :]
|
|
791
|
+
mean_B = (kpts_B * mask_AtoB_kpts[..., None]).sum(dim=1, keepdim=True) / mask_AtoB_kpts[..., None].sum(dim=1, keepdim=True).clamp(min=1)
|
|
792
|
+
affine_AtoB_global = lstsq_affine((kpts_A - mean_A) * mask_AtoB_kpts[..., None],
|
|
793
|
+
(kpts_B - mean_B) * mask_AtoB_kpts[..., None]) # global affine as fallback
|
|
794
|
+
nan_idx = torch.nonzero(torch.isnan(torch.sum(affine_AtoB_global, dim=(-2, -1))))
|
|
795
|
+
if default is None:
|
|
796
|
+
affine_AtoB_global[nan_idx] = torch.eye(2, device=kpts_A.device, dtype=kpts_A.dtype)
|
|
797
|
+
else:
|
|
798
|
+
affine_AtoB_global[nan_idx] = default[nan_idx]
|
|
799
|
+
global_sv = torch.linalg.svdvals(affine_AtoB_global)
|
|
800
|
+
degen_global_idx = torch.nonzero(
|
|
801
|
+
torch.logical_or(
|
|
802
|
+
torch.isnan(torch.sum(global_sv, dim=-1)),
|
|
803
|
+
torch.logical_or(
|
|
804
|
+
torch.min(global_sv, dim=-1).values < 1. / sing_value_cutoff,
|
|
805
|
+
torch.max(global_sv, dim=-1).values > sing_value_cutoff,
|
|
806
|
+
),
|
|
807
|
+
)
|
|
808
|
+
)
|
|
809
|
+
if default is None:
|
|
810
|
+
affine_AtoB_global[degen_global_idx] = torch.eye(2, device=kpts_A.device, dtype=kpts_A.dtype)
|
|
811
|
+
else:
|
|
812
|
+
affine_AtoB_global[degen_global_idx] = default[degen_global_idx]
|
|
813
|
+
affine_AtoB = affine_AtoB_global.unsqueeze(1).expand(-1, shape[1], -1, -1).clone()
|
|
814
|
+
|
|
815
|
+
# mask out so that unreliable correspondences become [0, 0] -> [0, 0] which is solved by any M
|
|
816
|
+
affine_AtoB[mask_AtoB[..., 0]] = (
|
|
817
|
+
lstsq_affine(nbh[..., 1:, :] * mask_AtoB[..., 1:, None],
|
|
818
|
+
(kpts_B_nbh[..., 1:, :] - kpts_B_nbh[..., :1, :]) * mask_AtoB[..., 1:, None])
|
|
819
|
+
)[mask_AtoB[..., 0]]
|
|
820
|
+
|
|
821
|
+
nan_idx = torch.nonzero(torch.isnan(torch.sum(affine_AtoB, dim=(-2, -1))))
|
|
822
|
+
affine_AtoB[nan_idx[:, 0], nan_idx[:, 1]] = affine_AtoB_global[nan_idx[:, 0]]
|
|
823
|
+
|
|
824
|
+
local_sv = torch.linalg.svdvals(affine_AtoB)
|
|
825
|
+
degen_idx = torch.nonzero(
|
|
826
|
+
torch.logical_or(
|
|
827
|
+
torch.isnan(torch.sum(local_sv, dim=-1)),
|
|
828
|
+
torch.logical_or(
|
|
829
|
+
torch.min(local_sv, dim=-1).values < 1. / sing_value_cutoff,
|
|
830
|
+
torch.max(local_sv, dim=-1).values > sing_value_cutoff,
|
|
831
|
+
),
|
|
832
|
+
) # TODO: what are the failure cases leading to nan here?
|
|
833
|
+
)
|
|
834
|
+
affine_AtoB[degen_idx[:, 0], degen_idx[:, 1]] = affine_AtoB_global[degen_idx[:, 0]]
|
|
835
|
+
|
|
836
|
+
return affine_AtoB, kpts_A, kpts_B, mask_AtoB_kpts
|
|
837
|
+
|
|
838
|
+
|
|
839
|
+
imagenet_mean = torch.tensor([0.485, 0.456, 0.406])
|
|
840
|
+
imagenet_std = torch.tensor([0.229, 0.224, 0.225])
|
|
841
|
+
|
|
842
|
+
|
|
843
|
+
def numpy_to_pil(x: np.ndarray):
|
|
844
|
+
"""
|
|
845
|
+
Args:
|
|
846
|
+
x: Assumed to be of shape (h,w,c)
|
|
847
|
+
"""
|
|
848
|
+
if isinstance(x, torch.Tensor):
|
|
849
|
+
x = x.detach().cpu().numpy()
|
|
850
|
+
if x.max() <= 1.01:
|
|
851
|
+
x *= 255
|
|
852
|
+
x = x.astype(np.uint8)
|
|
853
|
+
return Image.fromarray(x)
|
|
854
|
+
|
|
855
|
+
def unnormalize_image_tensor(x):
|
|
856
|
+
return x * (imagenet_std[:, None, None].to(x.device)) + (imagenet_mean[:, None, None].to(x.device))
|
|
857
|
+
|
|
858
|
+
def tensor_to_pil(x, unnormalize=False, autoscale = False):
|
|
859
|
+
if unnormalize:
|
|
860
|
+
x = x * (imagenet_std[:, None, None].to(x.device)) + (imagenet_mean[:, None, None].to(x.device))
|
|
861
|
+
if autoscale:
|
|
862
|
+
if x.max() == x.min():
|
|
863
|
+
warnings.warn("x max == x min, cant autoscale")
|
|
864
|
+
else:
|
|
865
|
+
x = (x-x.min())/(x.max()-x.min())
|
|
866
|
+
|
|
867
|
+
x = x.detach().permute(1, 2, 0).cpu().numpy()
|
|
868
|
+
x = np.clip(x, 0.0, 1.0)
|
|
869
|
+
return numpy_to_pil(x)
|
|
870
|
+
|
|
871
|
+
|
|
872
|
+
def to_cuda(batch):
|
|
873
|
+
for key, value in batch.items():
|
|
874
|
+
if isinstance(value, torch.Tensor):
|
|
875
|
+
batch[key] = value.cuda()
|
|
876
|
+
return batch
|
|
877
|
+
|
|
878
|
+
|
|
879
|
+
def to_best_device(batch, device=get_best_device()):
|
|
880
|
+
for key, value in batch.items():
|
|
881
|
+
if isinstance(value, torch.Tensor):
|
|
882
|
+
batch[key] = value.to(device)
|
|
883
|
+
return batch
|
|
884
|
+
|
|
885
|
+
|
|
886
|
+
def to_cpu(batch):
|
|
887
|
+
for key, value in batch.items():
|
|
888
|
+
if isinstance(value, torch.Tensor):
|
|
889
|
+
batch[key] = value.cpu()
|
|
890
|
+
return batch
|
|
891
|
+
|
|
892
|
+
|
|
893
|
+
def get_pose(calib):
|
|
894
|
+
w, h = np.array(calib["imsize"])[0]
|
|
895
|
+
return np.array(calib["K"]), np.array(calib["R"]), np.array(calib["T"]).T, h, w
|
|
896
|
+
|
|
897
|
+
|
|
898
|
+
def compute_relative_pose(R1, t1, R2, t2):
|
|
899
|
+
rots = R2 @ (R1.T)
|
|
900
|
+
trans = -rots @ t1 + t2
|
|
901
|
+
return rots, trans
|
|
902
|
+
|
|
903
|
+
def to_pixel_coords(flow, h1, w1):
|
|
904
|
+
flow = (
|
|
905
|
+
torch.stack(
|
|
906
|
+
(
|
|
907
|
+
w1 * (flow[..., 0] + 1) / 2,
|
|
908
|
+
h1 * (flow[..., 1] + 1) / 2,
|
|
909
|
+
),
|
|
910
|
+
axis=-1,
|
|
911
|
+
)
|
|
912
|
+
)
|
|
913
|
+
return flow
|
|
914
|
+
|
|
915
|
+
def to_normalized_coords(flow, h1, w1):
|
|
916
|
+
flow = (
|
|
917
|
+
torch.stack(
|
|
918
|
+
(
|
|
919
|
+
2 * (flow[..., 0]) / w1 - 1,
|
|
920
|
+
2 * (flow[..., 1]) / h1 - 1,
|
|
921
|
+
),
|
|
922
|
+
axis=-1,
|
|
923
|
+
)
|
|
924
|
+
)
|
|
925
|
+
return flow
|
|
926
|
+
|
|
927
|
+
|
|
928
|
+
def warp_to_pixel_coords(warp, h1, w1, h2, w2):
|
|
929
|
+
warp1 = warp[..., :2]
|
|
930
|
+
warp1 = (
|
|
931
|
+
torch.stack(
|
|
932
|
+
(
|
|
933
|
+
w1 * (warp1[..., 0] + 1) / 2,
|
|
934
|
+
h1 * (warp1[..., 1] + 1) / 2,
|
|
935
|
+
),
|
|
936
|
+
axis=-1,
|
|
937
|
+
)
|
|
938
|
+
)
|
|
939
|
+
warp2 = warp[..., 2:]
|
|
940
|
+
warp2 = (
|
|
941
|
+
torch.stack(
|
|
942
|
+
(
|
|
943
|
+
w2 * (warp2[..., 0] + 1) / 2,
|
|
944
|
+
h2 * (warp2[..., 1] + 1) / 2,
|
|
945
|
+
),
|
|
946
|
+
axis=-1,
|
|
947
|
+
)
|
|
948
|
+
)
|
|
949
|
+
return torch.cat((warp1,warp2), dim=-1)
|
|
950
|
+
|
|
951
|
+
|
|
952
|
+
def get_homog_warp(Homog, H, W, device = get_best_device()):
|
|
953
|
+
grid = torch.meshgrid(torch.linspace(-1+1/H,1-1/H,H, device = device), torch.linspace(-1+1/W,1-1/W,W, device = device))
|
|
954
|
+
|
|
955
|
+
x_A = torch.stack((grid[1], grid[0]), dim = -1)[None]
|
|
956
|
+
x_A_to_B = homog_transform(Homog, x_A)
|
|
957
|
+
mask = ((x_A_to_B > -1) * (x_A_to_B < 1)).prod(dim=-1).float()
|
|
958
|
+
return torch.cat((x_A.expand(*x_A_to_B.shape), x_A_to_B),dim=-1), mask
|
|
959
|
+
|
|
960
|
+
def scalar_product_similarity(desc_A, desc_B):
|
|
961
|
+
if len(desc_A.shape) == 3:
|
|
962
|
+
return torch.einsum("b n c, b m c -> b n m", desc_A, desc_B)
|
|
963
|
+
elif len(desc_A.shape) == 4:
|
|
964
|
+
return torch.einsum("b n m c, b m c -> b n m", desc_A, desc_B)
|
|
965
|
+
return ValueError()
|
|
966
|
+
|
|
967
|
+
def inverse_distance_similarity(desc_A, desc_B, thresh=1.):
|
|
968
|
+
distances = torch.cdist(desc_A, desc_B)
|
|
969
|
+
return thresh / distances.clamp(min=thresh)
|
|
970
|
+
|
|
971
|
+
def negative_distance_similarity(desc_A, desc_B):
|
|
972
|
+
if len(desc_A.shape) == 3:
|
|
973
|
+
return -torch.cdist(desc_A, desc_B)
|
|
974
|
+
elif len(desc_A.shape) == 4:
|
|
975
|
+
return -torch.linalg.norm(desc_A - desc_B[:, None], dim=-1)
|
|
976
|
+
return ValueError()
|
|
977
|
+
|
|
978
|
+
def gauss_similarity(desc_A, desc_B, sigma=10_000.):
|
|
979
|
+
distances = torch.cdist(desc_A, desc_B)
|
|
980
|
+
return torch.exp(-0.5 * (distances / sigma)**2)
|
|
981
|
+
|
|
982
|
+
def dual_log_softmax_matcher(
|
|
983
|
+
desc_A: tuple['B','N','C'],
|
|
984
|
+
desc_B: tuple['B','M','C'],
|
|
985
|
+
inv_temperature = 1,
|
|
986
|
+
normalize = False,
|
|
987
|
+
similarity = scalar_product_similarity,
|
|
988
|
+
):
|
|
989
|
+
B, N, C = desc_A.shape
|
|
990
|
+
if normalize:
|
|
991
|
+
desc_A = desc_A/desc_A.norm(dim=-1,keepdim=True)
|
|
992
|
+
desc_B = desc_B/desc_B.norm(dim=-1,keepdim=True)
|
|
993
|
+
corr = inv_temperature * similarity(desc_A, desc_B)
|
|
994
|
+
logP = corr.log_softmax(dim = -2) + corr.log_softmax(dim= -1)
|
|
995
|
+
return logP
|
|
996
|
+
|
|
997
|
+
def dual_softmax_matcher(
|
|
998
|
+
desc_A: tuple['B','N','C'],
|
|
999
|
+
desc_B: tuple['B','M','C'],
|
|
1000
|
+
inv_temperature = 1,
|
|
1001
|
+
normalize = False,
|
|
1002
|
+
similarity = scalar_product_similarity,
|
|
1003
|
+
):
|
|
1004
|
+
if len(desc_A.shape) < 3:
|
|
1005
|
+
desc_A, desc_B = desc_A[None], desc_B[None]
|
|
1006
|
+
B, N, C = desc_A.shape
|
|
1007
|
+
if normalize:
|
|
1008
|
+
desc_A = desc_A/desc_A.norm(dim=-1,keepdim=True)
|
|
1009
|
+
desc_B = desc_B/desc_B.norm(dim=-1,keepdim=True)
|
|
1010
|
+
corr = inv_temperature * similarity(desc_A, desc_B)
|
|
1011
|
+
P = corr.softmax(dim = -2) * corr.softmax(dim= -1)
|
|
1012
|
+
return P
|
|
1013
|
+
|
|
1014
|
+
def affine_dual_softmax_matcher(
|
|
1015
|
+
desc_A: tuple['B','N','C'], desc_B: tuple['B','M','C'], steerer,
|
|
1016
|
+
inv_temperature = 1, normalize = False,
|
|
1017
|
+
similarity=scalar_product_similarity,
|
|
1018
|
+
sing_value_cutoff=3.,
|
|
1019
|
+
remove_negative_det=False,
|
|
1020
|
+
):
|
|
1021
|
+
if normalize:
|
|
1022
|
+
return NotImplementedError()
|
|
1023
|
+
if len(desc_A.shape) < 3:
|
|
1024
|
+
desc_A, desc_B = desc_A[None], desc_B[None]
|
|
1025
|
+
B, N_A, C = desc_A.shape
|
|
1026
|
+
_, N_B, _ = desc_B.shape
|
|
1027
|
+
|
|
1028
|
+
desc_list_A = steerer.split_into_orders(desc_A)
|
|
1029
|
+
desc_list_B = steerer.split_into_orders(desc_B)
|
|
1030
|
+
|
|
1031
|
+
aff1_A = desc_list_A[1].reshape(B, N_A, 1, -1, 2)
|
|
1032
|
+
aff1_B = desc_list_B[1].reshape(B, 1, N_B, -1, 2)
|
|
1033
|
+
|
|
1034
|
+
M = lstsq_affine(aff1_A, aff1_B) # B, N_A, N_B, 2, 2
|
|
1035
|
+
with torch.no_grad():
|
|
1036
|
+
det = torch.linalg.det(M)
|
|
1037
|
+
sv = torch.linalg.svdvals(M)
|
|
1038
|
+
degen_mask = (
|
|
1039
|
+
torch.isnan(det)
|
|
1040
|
+
* (sv.max(dim=-1).values > sing_value_cutoff)
|
|
1041
|
+
* (sv.min(dim=-1).values < 1. / sing_value_cutoff)
|
|
1042
|
+
)
|
|
1043
|
+
if remove_negative_det:
|
|
1044
|
+
degen_mask *= (det < 0)
|
|
1045
|
+
M[degen_mask] = torch.eye(2, device=desc_A.device, dtype=desc_A.dtype)
|
|
1046
|
+
desc_A = steerer(
|
|
1047
|
+
desc_A.reshape(B*N_A, 1, C).repeat(1, N_B, 1),
|
|
1048
|
+
M.reshape(B*N_A, N_B, 2, 2),
|
|
1049
|
+
).reshape(B, N_A, N_B, C)
|
|
1050
|
+
|
|
1051
|
+
corr = inv_temperature * similarity(desc_A, desc_B)
|
|
1052
|
+
P = corr.softmax(dim = -2) * corr.softmax(dim= -1)
|
|
1053
|
+
return P
|
|
1054
|
+
|
|
1055
|
+
def rotation_matrix_double(t):
|
|
1056
|
+
return torch.tensor([[np.cos(t), -np.sin(t)], [np.sin(t), np.cos(t)]])
|
|
1057
|
+
|
|
1058
|
+
def build_affine_double(angle_1, dilation_1, dilation_2, angle_2):
|
|
1059
|
+
return (
|
|
1060
|
+
rotation_matrix_double(angle_2 - angle_1)
|
|
1061
|
+
@ torch.diag(torch.tensor([dilation_1, dilation_2]))
|
|
1062
|
+
@ rotation_matrix_double(angle_1)
|
|
1063
|
+
)
|
|
1064
|
+
|
|
1065
|
+
def rotation_matrix(t):
|
|
1066
|
+
return torch.tensor([[math.cos(t), -math.sin(t)], [math.sin(t), math.cos(t)]])
|
|
1067
|
+
|
|
1068
|
+
def build_affine(angle_1, dilation_1, dilation_2, angle_2):
|
|
1069
|
+
return (
|
|
1070
|
+
rotation_matrix(angle_2 - angle_1)
|
|
1071
|
+
@ torch.diag(torch.tensor([dilation_1, dilation_2]))
|
|
1072
|
+
@ rotation_matrix(angle_1)
|
|
1073
|
+
)
|
|
1074
|
+
|
|
1075
|
+
def get_reference_desc(nbr_reps1):
|
|
1076
|
+
""" Return nbr_reps1 / 4 copies of the coordinate frame [[1, 0], [0, 1]]. """
|
|
1077
|
+
x = torch.zeros(nbr_reps1, 2)
|
|
1078
|
+
x[::2, 0] = 1.
|
|
1079
|
+
x[1::2, 1] = 1.
|
|
1080
|
+
return x
|
|
1081
|
+
|
|
1082
|
+
|
|
1083
|
+
def affine_dual_softmax_matcher_ref_desc(
|
|
1084
|
+
desc_A: tuple['B','N','C'], desc_B: tuple['B','M','C'],
|
|
1085
|
+
steerer, reference_desc,
|
|
1086
|
+
inv_temperature = 1, normalize = False,
|
|
1087
|
+
):
|
|
1088
|
+
""" Should not be used... """
|
|
1089
|
+
if len(desc_A.shape) < 3:
|
|
1090
|
+
desc_A, desc_B = desc_A[None], desc_B[None]
|
|
1091
|
+
B, N_A, C = desc_A.shape
|
|
1092
|
+
_, N_B, _ = desc_B.shape
|
|
1093
|
+
|
|
1094
|
+
desc_list_A = steerer.split_into_orders(desc_A)
|
|
1095
|
+
desc_list_B = steerer.split_into_orders(desc_B)
|
|
1096
|
+
|
|
1097
|
+
M_AtoRef = lstsq_affine(desc_list_A[1].reshape(B, N_A, -1, 2),
|
|
1098
|
+
reference_desc[None, None])
|
|
1099
|
+
M_BtoRef = lstsq_affine(desc_list_B[1].reshape(B, N_B, -1, 2),
|
|
1100
|
+
reference_desc[None, None])
|
|
1101
|
+
|
|
1102
|
+
desc_A = steerer(desc_A, M_AtoRef)
|
|
1103
|
+
desc_B = steerer(desc_B, M_BtoRef)
|
|
1104
|
+
|
|
1105
|
+
return dual_softmax_matcher(
|
|
1106
|
+
desc_A, desc_B,
|
|
1107
|
+
inv_temperature=inv_temperature,
|
|
1108
|
+
normalize=normalize,
|
|
1109
|
+
)
|
|
1110
|
+
|
|
1111
|
+
|
|
1112
|
+
def closest_rot_2x2(M, return_angle=False):
|
|
1113
|
+
# https://scicomp.stackexchange.com/questions/8899/robust-algorithm-for-2-times-2-svd
|
|
1114
|
+
# (assumes positive determinant of input matrix)
|
|
1115
|
+
# NOT memory efficient
|
|
1116
|
+
M00 = M[..., 0, 0]
|
|
1117
|
+
M01 = M[..., 0, 1]
|
|
1118
|
+
M10 = M[..., 1, 0]
|
|
1119
|
+
M11 = M[..., 1, 1]
|
|
1120
|
+
return closest_rot_2x2_helper(M00, M01, M10, M11, return_angle=return_angle)
|
|
1121
|
+
|
|
1122
|
+
def closest_rot_2x2_helper(M00, M01, M10, M11, return_angle=False):
|
|
1123
|
+
E = 0.5 * (M00 + M11)
|
|
1124
|
+
H = 0.5 * (M10 - M01)
|
|
1125
|
+
if return_angle:
|
|
1126
|
+
return torch.atan2(H, E)
|
|
1127
|
+
hypothenuse = torch.sqrt(H**2 + E**2)
|
|
1128
|
+
cosP = E / hypothenuse
|
|
1129
|
+
sinP = H / hypothenuse
|
|
1130
|
+
return torch.stack([
|
|
1131
|
+
torch.stack([cosP, sinP], dim=-1),
|
|
1132
|
+
torch.stack([-sinP, cosP], dim=-1),
|
|
1133
|
+
], dim=-1)
|
|
1134
|
+
|
|
1135
|
+
def closest_rot_2x2_helper_old(M00, M01, M10, M11):
|
|
1136
|
+
E = 0.5 * (M00 + M11)
|
|
1137
|
+
F = 0.5 * (M00 - M11)
|
|
1138
|
+
G = 0.5 * (M10 + M01)
|
|
1139
|
+
H = 0.5 * (M10 - M01)
|
|
1140
|
+
# Q = torch.sqrt(E**2 + H**2)
|
|
1141
|
+
# R = torch.sqrt(F**2 + G**2)
|
|
1142
|
+
# sx = Q + R
|
|
1143
|
+
# sy = Q - R
|
|
1144
|
+
a1 = torch.atan2(G, F)
|
|
1145
|
+
a2 = torch.atan2(H, E)
|
|
1146
|
+
theta = 0.5 * (a2 - a1)
|
|
1147
|
+
phi = 0.5 * (a2 + a1)
|
|
1148
|
+
cosT = torch.cos(theta)
|
|
1149
|
+
sinT = torch.sin(theta)
|
|
1150
|
+
cosP = torch.cos(phi)
|
|
1151
|
+
sinP = torch.sin(phi)
|
|
1152
|
+
U = torch.stack([
|
|
1153
|
+
torch.stack([cosT, sinT], dim=-1),
|
|
1154
|
+
torch.stack([-sinT, cosT], dim=-1),
|
|
1155
|
+
], dim=-1)
|
|
1156
|
+
Vt = torch.stack([
|
|
1157
|
+
torch.stack([cosP, sinP], dim=-1),
|
|
1158
|
+
torch.stack([-sinP, cosP], dim=-1),
|
|
1159
|
+
], dim=-1)
|
|
1160
|
+
return U @ Vt
|
|
1161
|
+
|
|
1162
|
+
|
|
1163
|
+
def procrustes_dual_log_softmax_matcher(desc_A: tuple['B','N','C'], desc_B: tuple['B','M','C'], inv_temperature = 1, normalize = False, projector_to_speed1=None, use_svd=True):
|
|
1164
|
+
if projector_to_speed1 is not None:
|
|
1165
|
+
raise NotImplementedError(
|
|
1166
|
+
"project to speed 1 dim, find rotation, use rotation for all speeds"
|
|
1167
|
+
)
|
|
1168
|
+
if len(desc_A.shape) < 3:
|
|
1169
|
+
desc_A, desc_B = desc_A[None], desc_B[None]
|
|
1170
|
+
if normalize:
|
|
1171
|
+
desc_A = desc_A/desc_A.norm(dim=-1,keepdim=True)
|
|
1172
|
+
desc_B = desc_B/desc_B.norm(dim=-1,keepdim=True)
|
|
1173
|
+
|
|
1174
|
+
B, N, C = desc_A.shape
|
|
1175
|
+
desc_A = desc_A.view(B, N, C//2, 2)
|
|
1176
|
+
BB, NB, CB = desc_B.shape
|
|
1177
|
+
desc_B = desc_B.view(BB, NB, CB//2, 2)
|
|
1178
|
+
|
|
1179
|
+
# find optimal rotation from A to B and compute correlation there
|
|
1180
|
+
corr = torch.einsum("b n c u, b m c v -> b n m u v", desc_A, desc_B)
|
|
1181
|
+
if use_svd:
|
|
1182
|
+
ATB = closest_rot_2x2(corr)
|
|
1183
|
+
else:
|
|
1184
|
+
ATB = corr / torch.linalg.norm(corr, dim=[-2, -1], keepdim=True)
|
|
1185
|
+
corr = torch.einsum("b n m u v, b n m u v -> b n m", corr, ATB) * inv_temperature
|
|
1186
|
+
logP = corr.log_softmax(dim = -2) + corr.log_softmax(dim= -1)
|
|
1187
|
+
return logP
|
|
1188
|
+
|
|
1189
|
+
|
|
1190
|
+
def procrustes_dual_softmax_matcher(desc_A: tuple['B','N','C'], desc_B: tuple['B','M','C'], inv_temperature = 1, normalize = False, projector_to_speed1=None, use_svd=True):
|
|
1191
|
+
if projector_to_speed1 is not None:
|
|
1192
|
+
raise NotImplementedError(
|
|
1193
|
+
"project to speed 1 dim, find rotation, use rotation for all speeds"
|
|
1194
|
+
)
|
|
1195
|
+
if len(desc_A.shape) < 3:
|
|
1196
|
+
desc_A, desc_B = desc_A[None], desc_B[None]
|
|
1197
|
+
if normalize:
|
|
1198
|
+
desc_A = desc_A/desc_A.norm(dim=-1,keepdim=True)
|
|
1199
|
+
desc_B = desc_B/desc_B.norm(dim=-1,keepdim=True)
|
|
1200
|
+
|
|
1201
|
+
B, N, C = desc_A.shape
|
|
1202
|
+
desc_A = desc_A.view(B, N, C//2, 2)
|
|
1203
|
+
BB, NB, CB = desc_B.shape
|
|
1204
|
+
desc_B = desc_B.view(BB, NB, CB//2, 2)
|
|
1205
|
+
|
|
1206
|
+
# find optimal rotation from A to B and compute correlation there
|
|
1207
|
+
corr = torch.einsum("b n c u, b m c v -> b n m u v", desc_A, desc_B)
|
|
1208
|
+
if use_svd:
|
|
1209
|
+
ATB = closest_rot_2x2(corr)
|
|
1210
|
+
else:
|
|
1211
|
+
ATB = corr / torch.linalg.norm(corr, dim=[-2, -1], keepdim=True)
|
|
1212
|
+
corr = torch.einsum("b n m u v, b n m u v -> b n m", corr, ATB) * inv_temperature
|
|
1213
|
+
P = corr.softmax(dim = -2) * corr.softmax(dim = -1)
|
|
1214
|
+
return P
|
|
1215
|
+
|
|
1216
|
+
def procrustes_dual_softmax_matcher_individually_aligned(desc_A: tuple['B','N','C'],
|
|
1217
|
+
desc_B: tuple['B','M','C'],
|
|
1218
|
+
inv_temperature = 1,
|
|
1219
|
+
normalize = False,
|
|
1220
|
+
reference_dir = None,
|
|
1221
|
+
projector_to_speed1 = None):
|
|
1222
|
+
if projector_to_speed1 is not None:
|
|
1223
|
+
raise NotImplementedError(
|
|
1224
|
+
"project to speed 1 dim, find rotation, use rotation for all speeds"
|
|
1225
|
+
)
|
|
1226
|
+
if len(desc_A.shape) < 3:
|
|
1227
|
+
desc_A, desc_B = desc_A[None], desc_B[None]
|
|
1228
|
+
if normalize:
|
|
1229
|
+
desc_A = desc_A/desc_A.norm(dim=-1,keepdim=True)
|
|
1230
|
+
desc_B = desc_B/desc_B.norm(dim=-1,keepdim=True)
|
|
1231
|
+
|
|
1232
|
+
B, N, C = desc_A.shape
|
|
1233
|
+
desc_A = desc_A.view(B, N, C//2, 2)
|
|
1234
|
+
BB, NB, CB = desc_B.shape
|
|
1235
|
+
desc_B = desc_B.view(BB, NB, CB//2, 2)
|
|
1236
|
+
|
|
1237
|
+
if reference_dir is None:
|
|
1238
|
+
# Let E be a descriptor with all dimension pairs equal to (1, 0),
|
|
1239
|
+
# find optimal rotation from A to E and B to E and compute correlation there
|
|
1240
|
+
ATE = closest_rot_2x2_helper(torch.sum(desc_A[..., 0], dim=-1), 0, torch.sum(desc_A[..., 1], dim=-1), 0)
|
|
1241
|
+
desc_A = desc_A @ ATE
|
|
1242
|
+
BTE = closest_rot_2x2_helper(torch.sum(desc_B[..., 0], dim=-1), 0, torch.sum(desc_B[..., 1], dim=-1), 0)
|
|
1243
|
+
desc_B = desc_B @ BTE
|
|
1244
|
+
else:
|
|
1245
|
+
# find optimal rotation from A to reference and B to reference
|
|
1246
|
+
# and compute correlation there
|
|
1247
|
+
ATE = closest_rot_2x2(desc_A.mT @ reference_dir[None, None])
|
|
1248
|
+
desc_A = desc_A @ ATE
|
|
1249
|
+
BTE = closest_rot_2x2(desc_B.mT @ reference_dir[None, None])
|
|
1250
|
+
desc_B = desc_B @ BTE
|
|
1251
|
+
|
|
1252
|
+
corr = torch.einsum("b n c u, b m c u -> b n m", desc_A, desc_B) * inv_temperature
|
|
1253
|
+
P = corr.softmax(dim = -2) * corr.softmax(dim = -1)
|
|
1254
|
+
return P
|
|
1255
|
+
|
|
1256
|
+
def procrustes_dual_log_softmax_matcher_individually_aligned(desc_A: tuple['B','N','C'],
|
|
1257
|
+
desc_B: tuple['B','M','C'],
|
|
1258
|
+
inv_temperature = 1,
|
|
1259
|
+
normalize = False,
|
|
1260
|
+
reference_dir = None,
|
|
1261
|
+
projector_to_speed1 = None):
|
|
1262
|
+
if projector_to_speed1 is not None:
|
|
1263
|
+
raise NotImplementedError(
|
|
1264
|
+
"project to speed 1 dim, find rotation, use rotation for all speeds"
|
|
1265
|
+
)
|
|
1266
|
+
if len(desc_A.shape) < 3:
|
|
1267
|
+
desc_A, desc_B = desc_A[None], desc_B[None]
|
|
1268
|
+
if normalize:
|
|
1269
|
+
desc_A = desc_A/desc_A.norm(dim=-1,keepdim=True)
|
|
1270
|
+
desc_B = desc_B/desc_B.norm(dim=-1,keepdim=True)
|
|
1271
|
+
|
|
1272
|
+
B, N, C = desc_A.shape
|
|
1273
|
+
desc_A = desc_A.view(B, N, C//2, 2)
|
|
1274
|
+
BB, NB, CB = desc_B.shape
|
|
1275
|
+
desc_B = desc_B.view(BB, NB, CB//2, 2)
|
|
1276
|
+
|
|
1277
|
+
if reference_dir is None:
|
|
1278
|
+
# Let E be a descriptor with all dimension pairs equal to (1, 0),
|
|
1279
|
+
# find optimal rotation from A to E and B to E and compute correlation there
|
|
1280
|
+
ATE = closest_rot_2x2_helper(torch.sum(desc_A[..., 0], dim=-1), 0, torch.sum(desc_A[..., 1], dim=-1), 0)
|
|
1281
|
+
desc_A = desc_A @ ATE
|
|
1282
|
+
BTE = closest_rot_2x2_helper(torch.sum(desc_B[..., 0], dim=-1), 0, torch.sum(desc_B[..., 1], dim=-1), 0)
|
|
1283
|
+
desc_B = desc_B @ BTE
|
|
1284
|
+
else:
|
|
1285
|
+
# find optimal rotation from A to reference and B to reference
|
|
1286
|
+
# and compute correlation there
|
|
1287
|
+
ATE = closest_rot_2x2(desc_A.mT @ reference_dir[None, None])
|
|
1288
|
+
desc_A = desc_A @ ATE
|
|
1289
|
+
BTE = closest_rot_2x2(desc_B.mT @ reference_dir[None, None])
|
|
1290
|
+
desc_B = desc_B @ BTE
|
|
1291
|
+
|
|
1292
|
+
corr = torch.einsum("b n c u, b m c u -> b n m", desc_A, desc_B) * inv_temperature
|
|
1293
|
+
logP = corr.log_softmax(dim = -2) + corr.log_softmax(dim= -1)
|
|
1294
|
+
return logP
|
|
1295
|
+
|
|
1296
|
+
def conditional_softmax_matcher(desc_A: tuple['B','N','C'], desc_B: tuple['B','M','C'], inv_temperature = 1, normalize = False):
|
|
1297
|
+
if len(desc_A.shape) < 3:
|
|
1298
|
+
desc_A, desc_B = desc_A[None], desc_B[None]
|
|
1299
|
+
B, N, C = desc_A.shape
|
|
1300
|
+
if normalize:
|
|
1301
|
+
desc_A = desc_A/desc_A.norm(dim=-1,keepdim=True)
|
|
1302
|
+
desc_B = desc_B/desc_B.norm(dim=-1,keepdim=True)
|
|
1303
|
+
corr = torch.einsum("b n c, b m c -> b n m", desc_A, desc_B) * inv_temperature
|
|
1304
|
+
else:
|
|
1305
|
+
corr = torch.einsum("b n c, b m c -> b n m", desc_A, desc_B) * inv_temperature
|
|
1306
|
+
P_B_cond_A = corr.softmax(dim = -1)
|
|
1307
|
+
P_A_cond_B = corr.softmax(dim = -2)
|
|
1308
|
+
|
|
1309
|
+
return P_A_cond_B, P_B_cond_A
|
|
1310
|
+
|
|
1311
|
+
|
|
1312
|
+
def affine_from_five_params(features, to_ref=False):
|
|
1313
|
+
# AffNet parametrization for affine transform
|
|
1314
|
+
# https://arxiv.org/pdf/1711.06704.pdf
|
|
1315
|
+
cos_sin = features[..., :2]
|
|
1316
|
+
cos_sin = cos_sin / cos_sin.norm(dim=-1, keepdim=True).clamp(min=1e-8)
|
|
1317
|
+
c, s = cos_sin[..., 0], cos_sin[..., 1]
|
|
1318
|
+
a11, a21, a22 = 1. + features[..., 2], features[..., 3], 1. + features[..., 4]
|
|
1319
|
+
if to_ref:
|
|
1320
|
+
a11, a21, a22 = 1. / a11, -a21 / (a11*a22), 1. / a22 # invert lower triang matrix
|
|
1321
|
+
# A^-1 @ rot.mT
|
|
1322
|
+
return torch.stack(
|
|
1323
|
+
[torch.stack([c*a11, c*a21 - s*a22], dim=-1),
|
|
1324
|
+
torch.stack([s*a11, s*a21 + c*a22], dim=-1)],
|
|
1325
|
+
dim=-1
|
|
1326
|
+
)
|
|
1327
|
+
else:
|
|
1328
|
+
# rot @ A
|
|
1329
|
+
return torch.stack(
|
|
1330
|
+
[torch.stack([c*a11 - s*a21, s*a11 + c*a21], dim=-1),
|
|
1331
|
+
torch.stack([-s*a22, c*a22], dim=-1)],
|
|
1332
|
+
dim=-1
|
|
1333
|
+
)
|
|
1334
|
+
|
|
1335
|
+
|
|
1336
|
+
def im_tensor_to_np(x):
|
|
1337
|
+
x = x.permute(1, 2, 0).detach().cpu().numpy()
|
|
1338
|
+
x = (x - x.min()) / (x.max() - x.min())
|
|
1339
|
+
return x
|
|
1340
|
+
|
|
1341
|
+
|
|
1342
|
+
def draw_img_match(img1, img2, mkpts1, mkpts2, reverse_pair=False, thickness=2):
|
|
1343
|
+
if isinstance(img1, torch.Tensor):
|
|
1344
|
+
img1 = im_tensor_to_np(img1)
|
|
1345
|
+
if isinstance(img2, torch.Tensor):
|
|
1346
|
+
img2 = im_tensor_to_np(img2)
|
|
1347
|
+
if isinstance(mkpts1, torch.Tensor):
|
|
1348
|
+
mkpts1 = mkpts1.detach().cpu().numpy()
|
|
1349
|
+
if isinstance(mkpts2, torch.Tensor):
|
|
1350
|
+
mkpts2 = mkpts2.detach().cpu().numpy()
|
|
1351
|
+
|
|
1352
|
+
if isinstance(img1, np.ndarray):
|
|
1353
|
+
img1 = np.uint8(255 * img1)
|
|
1354
|
+
else:
|
|
1355
|
+
img1 = cv2.cvtColor(cv2.imread(img1), cv2.COLOR_BGR2RGB)
|
|
1356
|
+
if isinstance(img2, np.ndarray):
|
|
1357
|
+
img2 = np.uint8(255 * img2)
|
|
1358
|
+
else:
|
|
1359
|
+
img2 = cv2.cvtColor(cv2.imread(img2), cv2.COLOR_BGR2RGB)
|
|
1360
|
+
|
|
1361
|
+
if reverse_pair:
|
|
1362
|
+
img1, img2, = img2, img1
|
|
1363
|
+
mkpts1, mkpts2 = mkpts2, mkpts1
|
|
1364
|
+
|
|
1365
|
+
img = cv2.drawMatches(
|
|
1366
|
+
img1=img1,
|
|
1367
|
+
keypoints1=[cv2.KeyPoint(x=x, y=y, size=2) for x, y in mkpts1],
|
|
1368
|
+
img2=img2,
|
|
1369
|
+
keypoints2=[cv2.KeyPoint(x=x, y=y, size=2) for x, y in mkpts2],
|
|
1370
|
+
matches1to2=[
|
|
1371
|
+
cv2.DMatch(_trainIdx=i, _queryIdx=i, _distance=-1.)
|
|
1372
|
+
for i in range(len(mkpts1))
|
|
1373
|
+
],
|
|
1374
|
+
matchesThickness=thickness,
|
|
1375
|
+
outImg=None,
|
|
1376
|
+
)
|
|
1377
|
+
plt.imshow(img)
|
|
1378
|
+
|
|
1379
|
+
def to_homogeneous(x):
|
|
1380
|
+
ones = torch.ones_like(x[...,-1:])
|
|
1381
|
+
return torch.cat((x, ones), dim = -1)
|
|
1382
|
+
|
|
1383
|
+
def from_homogeneous(xh, eps = 1e-12):
|
|
1384
|
+
return xh[...,:-1] / (xh[...,-1:]+eps)
|
|
1385
|
+
|
|
1386
|
+
def homog_transform(Homog, x):
|
|
1387
|
+
xh = to_homogeneous(x)
|
|
1388
|
+
yh = xh @ Homog.mT
|
|
1389
|
+
y = from_homogeneous(yh)
|
|
1390
|
+
return y
|
|
1391
|
+
|
|
1392
|
+
def load_default_steerer(steerer_path, checkpoint=False, prototypes=True, feat_dim=256):
|
|
1393
|
+
from affine_steerers.steerers import SteererSpread
|
|
1394
|
+
if checkpoint:
|
|
1395
|
+
sd = torch.load(steerer_path)["steerer"]
|
|
1396
|
+
else:
|
|
1397
|
+
sd = torch.load(steerer_path)
|
|
1398
|
+
|
|
1399
|
+
nbr_prototypes = 0
|
|
1400
|
+
if prototypes and "prototype_affines" in sd:
|
|
1401
|
+
nbr_prototypes = sd["prototype_affines"].shape[0]
|
|
1402
|
+
|
|
1403
|
+
steerer = SteererSpread(
|
|
1404
|
+
feat_dim=feat_dim,
|
|
1405
|
+
max_order=4,
|
|
1406
|
+
normalize=True,
|
|
1407
|
+
normalize_only_higher=False,
|
|
1408
|
+
fix_order_1_scalings=False,
|
|
1409
|
+
max_determinant_scaling=None,
|
|
1410
|
+
block_diag_rot=False,
|
|
1411
|
+
block_diag_optimal_scalings=False,
|
|
1412
|
+
learnable_determinant_scaling=True,
|
|
1413
|
+
learnable_basis=True,
|
|
1414
|
+
learnable_reference_direction=False,
|
|
1415
|
+
use_prototype_affines=prototypes and "prototype_affines" in sd,
|
|
1416
|
+
prototype_affines_init=[
|
|
1417
|
+
torch.eye(2)
|
|
1418
|
+
for i in range(nbr_prototypes)
|
|
1419
|
+
]
|
|
1420
|
+
)
|
|
1421
|
+
steerer.load_state_dict(sd)
|
|
1422
|
+
return steerer
|