Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ModelZoo
LoFTR-pytorch
Commits
5ed5979f
Commit
5ed5979f
authored
Nov 19, 2025
by
bailuo
Browse files
readme
parents
Pipeline
#3043
failed with stages
in 0 seconds
Changes
146
Pipelines
1
Show whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
243 additions
and
0 deletions
+243
-0
configs/data/base.py
configs/data/base.py
+35
-0
configs/data/debug/.gitignore
configs/data/debug/.gitignore
+3
-0
configs/data/megadepth_test_1500.py
configs/data/megadepth_test_1500.py
+11
-0
configs/data/megadepth_trainval_640.py
configs/data/megadepth_trainval_640.py
+22
-0
configs/data/megadepth_trainval_840.py
configs/data/megadepth_trainval_840.py
+22
-0
configs/data/scannet_test_1500.py
configs/data/scannet_test_1500.py
+11
-0
configs/data/scannet_trainval.py
configs/data/scannet_trainval.py
+17
-0
configs/loftr/indoor/buggy_pos_enc/loftr_ds.py
configs/loftr/indoor/buggy_pos_enc/loftr_ds.py
+6
-0
configs/loftr/indoor/buggy_pos_enc/loftr_ds_dense.py
configs/loftr/indoor/buggy_pos_enc/loftr_ds_dense.py
+8
-0
configs/loftr/indoor/buggy_pos_enc/loftr_ot.py
configs/loftr/indoor/buggy_pos_enc/loftr_ot.py
+6
-0
configs/loftr/indoor/buggy_pos_enc/loftr_ot_dense.py
configs/loftr/indoor/buggy_pos_enc/loftr_ot_dense.py
+8
-0
configs/loftr/indoor/debug/.gitignore
configs/loftr/indoor/debug/.gitignore
+3
-0
configs/loftr/indoor/loftr_ds.py
configs/loftr/indoor/loftr_ds.py
+5
-0
configs/loftr/indoor/loftr_ds_dense.py
configs/loftr/indoor/loftr_ds_dense.py
+7
-0
configs/loftr/indoor/loftr_ot.py
configs/loftr/indoor/loftr_ot.py
+5
-0
configs/loftr/indoor/loftr_ot_dense.py
configs/loftr/indoor/loftr_ot_dense.py
+7
-0
configs/loftr/indoor/scannet/loftr_ds_eval.py
configs/loftr/indoor/scannet/loftr_ds_eval.py
+16
-0
configs/loftr/indoor/scannet/loftr_ds_eval_new.py
configs/loftr/indoor/scannet/loftr_ds_eval_new.py
+18
-0
configs/loftr/outdoor/buggy_pos_enc/loftr_ds.py
configs/loftr/outdoor/buggy_pos_enc/loftr_ds.py
+16
-0
configs/loftr/outdoor/buggy_pos_enc/loftr_ds_dense.py
configs/loftr/outdoor/buggy_pos_enc/loftr_ds_dense.py
+17
-0
No files found.
configs/data/base.py
0 → 100644
View file @
5ed5979f
"""
The data config will be the last one merged into the main config.
Setups in data configs will override all existed setups!
"""
from
yacs.config
import
CfgNode
as
CN
_CN
=
CN
()
_CN
.
DATASET
=
CN
()
_CN
.
TRAINER
=
CN
()
# training data config
_CN
.
DATASET
.
TRAIN_DATA_ROOT
=
None
_CN
.
DATASET
.
TRAIN_POSE_ROOT
=
None
_CN
.
DATASET
.
TRAIN_NPZ_ROOT
=
None
_CN
.
DATASET
.
TRAIN_LIST_PATH
=
None
_CN
.
DATASET
.
TRAIN_INTRINSIC_PATH
=
None
# validation set config
_CN
.
DATASET
.
VAL_DATA_ROOT
=
None
_CN
.
DATASET
.
VAL_POSE_ROOT
=
None
_CN
.
DATASET
.
VAL_NPZ_ROOT
=
None
_CN
.
DATASET
.
VAL_LIST_PATH
=
None
_CN
.
DATASET
.
VAL_INTRINSIC_PATH
=
None
# testing data config
_CN
.
DATASET
.
TEST_DATA_ROOT
=
None
_CN
.
DATASET
.
TEST_POSE_ROOT
=
None
_CN
.
DATASET
.
TEST_NPZ_ROOT
=
None
_CN
.
DATASET
.
TEST_LIST_PATH
=
None
_CN
.
DATASET
.
TEST_INTRINSIC_PATH
=
None
# dataset config
_CN
.
DATASET
.
MIN_OVERLAP_SCORE_TRAIN
=
0.4
_CN
.
DATASET
.
MIN_OVERLAP_SCORE_TEST
=
0.0
# for both test and val
cfg
=
_CN
configs/data/debug/.gitignore
0 → 100644
View file @
5ed5979f
*
*/
!.gitignore
configs/data/megadepth_test_1500.py
0 → 100644
View file @
5ed5979f
from
configs.data.base
import
cfg
TEST_BASE_PATH
=
"assets/megadepth_test_1500_scene_info"
cfg
.
DATASET
.
TEST_DATA_SOURCE
=
"MegaDepth"
cfg
.
DATASET
.
TEST_DATA_ROOT
=
"data/megadepth/test"
cfg
.
DATASET
.
TEST_NPZ_ROOT
=
f
"
{
TEST_BASE_PATH
}
"
cfg
.
DATASET
.
TEST_LIST_PATH
=
f
"
{
TEST_BASE_PATH
}
/megadepth_test_1500.txt"
cfg
.
DATASET
.
MGDPT_IMG_RESIZE
=
840
cfg
.
DATASET
.
MIN_OVERLAP_SCORE_TEST
=
0.0
configs/data/megadepth_trainval_640.py
0 → 100644
View file @
5ed5979f
from
configs.data.base
import
cfg
TRAIN_BASE_PATH
=
"data/megadepth/index"
cfg
.
DATASET
.
TRAINVAL_DATA_SOURCE
=
"MegaDepth"
cfg
.
DATASET
.
TRAIN_DATA_ROOT
=
"data/megadepth/train"
cfg
.
DATASET
.
TRAIN_NPZ_ROOT
=
f
"
{
TRAIN_BASE_PATH
}
/scene_info_0.1_0.7"
cfg
.
DATASET
.
TRAIN_LIST_PATH
=
f
"
{
TRAIN_BASE_PATH
}
/trainvaltest_list/train_list.txt"
cfg
.
DATASET
.
MIN_OVERLAP_SCORE_TRAIN
=
0.0
TEST_BASE_PATH
=
"data/megadepth/index"
cfg
.
DATASET
.
TEST_DATA_SOURCE
=
"MegaDepth"
cfg
.
DATASET
.
VAL_DATA_ROOT
=
cfg
.
DATASET
.
TEST_DATA_ROOT
=
"data/megadepth/test"
cfg
.
DATASET
.
VAL_NPZ_ROOT
=
cfg
.
DATASET
.
TEST_NPZ_ROOT
=
f
"
{
TEST_BASE_PATH
}
/scene_info_val_1500"
cfg
.
DATASET
.
VAL_LIST_PATH
=
cfg
.
DATASET
.
TEST_LIST_PATH
=
f
"
{
TEST_BASE_PATH
}
/trainvaltest_list/val_list.txt"
cfg
.
DATASET
.
MIN_OVERLAP_SCORE_TEST
=
0.0
# for both test and val
# 368 scenes in total for MegaDepth
# (with difficulty balanced (further split each scene to 3 sub-scenes))
cfg
.
TRAINER
.
N_SAMPLES_PER_SUBSET
=
100
cfg
.
DATASET
.
MGDPT_IMG_RESIZE
=
640
# for training on 11GB mem GPUs
configs/data/megadepth_trainval_840.py
0 → 100644
View file @
5ed5979f
from
configs.data.base
import
cfg
TRAIN_BASE_PATH
=
"data/megadepth/index"
cfg
.
DATASET
.
TRAINVAL_DATA_SOURCE
=
"MegaDepth"
cfg
.
DATASET
.
TRAIN_DATA_ROOT
=
"data/megadepth/train"
cfg
.
DATASET
.
TRAIN_NPZ_ROOT
=
f
"
{
TRAIN_BASE_PATH
}
/scene_info_0.1_0.7"
cfg
.
DATASET
.
TRAIN_LIST_PATH
=
f
"
{
TRAIN_BASE_PATH
}
/trainvaltest_list/train_list.txt"
cfg
.
DATASET
.
MIN_OVERLAP_SCORE_TRAIN
=
0.0
TEST_BASE_PATH
=
"data/megadepth/index"
cfg
.
DATASET
.
TEST_DATA_SOURCE
=
"MegaDepth"
cfg
.
DATASET
.
VAL_DATA_ROOT
=
cfg
.
DATASET
.
TEST_DATA_ROOT
=
"data/megadepth/test"
cfg
.
DATASET
.
VAL_NPZ_ROOT
=
cfg
.
DATASET
.
TEST_NPZ_ROOT
=
f
"
{
TEST_BASE_PATH
}
/scene_info_val_1500"
cfg
.
DATASET
.
VAL_LIST_PATH
=
cfg
.
DATASET
.
TEST_LIST_PATH
=
f
"
{
TEST_BASE_PATH
}
/trainvaltest_list/val_list.txt"
cfg
.
DATASET
.
MIN_OVERLAP_SCORE_TEST
=
0.0
# for both test and val
# 368 scenes in total for MegaDepth
# (with difficulty balanced (further split each scene to 3 sub-scenes))
cfg
.
TRAINER
.
N_SAMPLES_PER_SUBSET
=
100
cfg
.
DATASET
.
MGDPT_IMG_RESIZE
=
840
# for training on 32GB meme GPUs
configs/data/scannet_test_1500.py
0 → 100644
View file @
5ed5979f
from
configs.data.base
import
cfg
TEST_BASE_PATH
=
"assets/scannet_test_1500"
cfg
.
DATASET
.
TEST_DATA_SOURCE
=
"ScanNet"
cfg
.
DATASET
.
TEST_DATA_ROOT
=
"data/scannet/test"
cfg
.
DATASET
.
TEST_NPZ_ROOT
=
f
"
{
TEST_BASE_PATH
}
"
cfg
.
DATASET
.
TEST_LIST_PATH
=
f
"
{
TEST_BASE_PATH
}
/scannet_test.txt"
cfg
.
DATASET
.
TEST_INTRINSIC_PATH
=
f
"
{
TEST_BASE_PATH
}
/intrinsics.npz"
cfg
.
DATASET
.
MIN_OVERLAP_SCORE_TEST
=
0.0
configs/data/scannet_trainval.py
0 → 100644
View file @
5ed5979f
from
configs.data.base
import
cfg
TRAIN_BASE_PATH
=
"data/scannet/index"
cfg
.
DATASET
.
TRAINVAL_DATA_SOURCE
=
"ScanNet"
cfg
.
DATASET
.
TRAIN_DATA_ROOT
=
"data/scannet/train"
cfg
.
DATASET
.
TRAIN_NPZ_ROOT
=
f
"
{
TRAIN_BASE_PATH
}
/scene_data/train"
cfg
.
DATASET
.
TRAIN_LIST_PATH
=
f
"
{
TRAIN_BASE_PATH
}
/scene_data/train_list/scannet_all.txt"
cfg
.
DATASET
.
TRAIN_INTRINSIC_PATH
=
f
"
{
TRAIN_BASE_PATH
}
/intrinsics.npz"
TEST_BASE_PATH
=
"assets/scannet_test_1500"
cfg
.
DATASET
.
TEST_DATA_SOURCE
=
"ScanNet"
cfg
.
DATASET
.
VAL_DATA_ROOT
=
cfg
.
DATASET
.
TEST_DATA_ROOT
=
"data/scannet/test"
cfg
.
DATASET
.
VAL_NPZ_ROOT
=
cfg
.
DATASET
.
TEST_NPZ_ROOT
=
TEST_BASE_PATH
cfg
.
DATASET
.
VAL_LIST_PATH
=
cfg
.
DATASET
.
TEST_LIST_PATH
=
f
"
{
TEST_BASE_PATH
}
/scannet_test.txt"
cfg
.
DATASET
.
VAL_INTRINSIC_PATH
=
cfg
.
DATASET
.
TEST_INTRINSIC_PATH
=
f
"
{
TEST_BASE_PATH
}
/intrinsics.npz"
cfg
.
DATASET
.
MIN_OVERLAP_SCORE_TEST
=
0.0
# for both test and val
configs/loftr/indoor/buggy_pos_enc/loftr_ds.py
0 → 100644
View file @
5ed5979f
from
src.config.default
import
_CN
as
cfg
cfg
.
LOFTR
.
COARSE
.
TEMP_BUG_FIX
=
False
cfg
.
LOFTR
.
MATCH_COARSE
.
MATCH_TYPE
=
'dual_softmax'
cfg
.
TRAINER
.
MSLR_MILESTONES
=
[
3
,
6
,
9
,
12
,
17
,
20
,
23
,
26
,
29
]
configs/loftr/indoor/buggy_pos_enc/loftr_ds_dense.py
0 → 100644
View file @
5ed5979f
from
src.config.default
import
_CN
as
cfg
cfg
.
LOFTR
.
COARSE
.
TEMP_BUG_FIX
=
False
cfg
.
LOFTR
.
MATCH_COARSE
.
MATCH_TYPE
=
'dual_softmax'
cfg
.
LOFTR
.
MATCH_COARSE
.
SPARSE_SPVS
=
False
cfg
.
TRAINER
.
MSLR_MILESTONES
=
[
3
,
6
,
9
,
12
,
17
,
20
,
23
,
26
,
29
]
configs/loftr/indoor/buggy_pos_enc/loftr_ot.py
0 → 100644
View file @
5ed5979f
from
src.config.default
import
_CN
as
cfg
cfg
.
LOFTR
.
COARSE
.
TEMP_BUG_FIX
=
False
cfg
.
LOFTR
.
MATCH_COARSE
.
MATCH_TYPE
=
'sinkhorn'
cfg
.
TRAINER
.
MSLR_MILESTONES
=
[
3
,
6
,
9
,
12
,
17
,
20
,
23
,
26
,
29
]
configs/loftr/indoor/buggy_pos_enc/loftr_ot_dense.py
0 → 100644
View file @
5ed5979f
from
src.config.default
import
_CN
as
cfg
cfg
.
LOFTR
.
COARSE
.
TEMP_BUG_FIX
=
False
cfg
.
LOFTR
.
MATCH_COARSE
.
MATCH_TYPE
=
'sinkhorn'
cfg
.
LOFTR
.
MATCH_COARSE
.
SPARSE_SPVS
=
False
cfg
.
TRAINER
.
MSLR_MILESTONES
=
[
3
,
6
,
9
,
12
,
17
,
20
,
23
,
26
,
29
]
configs/loftr/indoor/debug/.gitignore
0 → 100644
View file @
5ed5979f
*
*/
!.gitignore
configs/loftr/indoor/loftr_ds.py
0 → 100644
View file @
5ed5979f
from
src.config.default
import
_CN
as
cfg
cfg
.
LOFTR
.
MATCH_COARSE
.
MATCH_TYPE
=
'dual_softmax'
cfg
.
TRAINER
.
MSLR_MILESTONES
=
[
3
,
6
,
9
,
12
,
17
,
20
,
23
,
26
,
29
]
configs/loftr/indoor/loftr_ds_dense.py
0 → 100644
View file @
5ed5979f
from
src.config.default
import
_CN
as
cfg
cfg
.
LOFTR
.
MATCH_COARSE
.
MATCH_TYPE
=
'dual_softmax'
cfg
.
LOFTR
.
MATCH_COARSE
.
SPARSE_SPVS
=
False
cfg
.
TRAINER
.
MSLR_MILESTONES
=
[
3
,
6
,
9
,
12
,
17
,
20
,
23
,
26
,
29
]
configs/loftr/indoor/loftr_ot.py
0 → 100644
View file @
5ed5979f
from
src.config.default
import
_CN
as
cfg
cfg
.
LOFTR
.
MATCH_COARSE
.
MATCH_TYPE
=
'sinkhorn'
cfg
.
TRAINER
.
MSLR_MILESTONES
=
[
3
,
6
,
9
,
12
,
17
,
20
,
23
,
26
,
29
]
configs/loftr/indoor/loftr_ot_dense.py
0 → 100644
View file @
5ed5979f
from
src.config.default
import
_CN
as
cfg
cfg
.
LOFTR
.
MATCH_COARSE
.
MATCH_TYPE
=
'sinkhorn'
cfg
.
LOFTR
.
MATCH_COARSE
.
SPARSE_SPVS
=
False
cfg
.
TRAINER
.
MSLR_MILESTONES
=
[
3
,
6
,
9
,
12
,
17
,
20
,
23
,
26
,
29
]
configs/loftr/indoor/scannet/loftr_ds_eval.py
0 → 100644
View file @
5ed5979f
""" A config only for reproducing the ScanNet evaluation results.
We remove border matches by default, but the originally implemented
`remove_border()` has a bug, leading to only two sides of
all borders are actually removed. However, the [bug fix](https://github.com/zju3dv/LoFTR/commit/e9146c8144dea5f3cbdd98b225f3e147a171c216)
makes the scannet evaluation results worse (auc@10=40.8 => 39.5), which should be
caused by tiny result fluctuation of few image pairs. This config set `BORDER_RM` to 0
to be consistent with the results in our paper.
"""
from
src.config.default
import
_CN
as
cfg
cfg
.
LOFTR
.
COARSE
.
TEMP_BUG_FIX
=
False
cfg
.
LOFTR
.
MATCH_COARSE
.
MATCH_TYPE
=
'dual_softmax'
cfg
.
LOFTR
.
MATCH_COARSE
.
BORDER_RM
=
0
configs/loftr/indoor/scannet/loftr_ds_eval_new.py
0 → 100644
View file @
5ed5979f
""" A config only for reproducing the ScanNet evaluation results.
We remove border matches by default, but the originally implemented
`remove_border()` has a bug, leading to only two sides of
all borders are actually removed. However, the [bug fix](https://github.com/zju3dv/LoFTR/commit/e9146c8144dea5f3cbdd98b225f3e147a171c216)
makes the scannet evaluation results worse (auc@10=40.8 => 39.5), which should be
caused by tiny result fluctuation of few image pairs. This config set `BORDER_RM` to 0
to be consistent with the results in our paper.
Update: This config is for testing the re-trained model with the pos-enc bug fixed.
"""
from
src.config.default
import
_CN
as
cfg
cfg
.
LOFTR
.
COARSE
.
TEMP_BUG_FIX
=
True
cfg
.
LOFTR
.
MATCH_COARSE
.
MATCH_TYPE
=
'dual_softmax'
cfg
.
LOFTR
.
MATCH_COARSE
.
BORDER_RM
=
0
configs/loftr/outdoor/buggy_pos_enc/loftr_ds.py
0 → 100644
View file @
5ed5979f
from
src.config.default
import
_CN
as
cfg
cfg
.
LOFTR
.
COARSE
.
TEMP_BUG_FIX
=
False
cfg
.
LOFTR
.
MATCH_COARSE
.
MATCH_TYPE
=
'dual_softmax'
cfg
.
TRAINER
.
CANONICAL_LR
=
8e-3
cfg
.
TRAINER
.
WARMUP_STEP
=
1875
# 3 epochs
cfg
.
TRAINER
.
WARMUP_RATIO
=
0.1
cfg
.
TRAINER
.
MSLR_MILESTONES
=
[
8
,
12
,
16
,
20
,
24
]
# pose estimation
cfg
.
TRAINER
.
RANSAC_PIXEL_THR
=
0.5
cfg
.
TRAINER
.
OPTIMIZER
=
"adamw"
cfg
.
TRAINER
.
ADAMW_DECAY
=
0.1
cfg
.
LOFTR
.
MATCH_COARSE
.
TRAIN_COARSE_PERCENT
=
0.3
configs/loftr/outdoor/buggy_pos_enc/loftr_ds_dense.py
0 → 100644
View file @
5ed5979f
from
src.config.default
import
_CN
as
cfg
cfg
.
LOFTR
.
COARSE
.
TEMP_BUG_FIX
=
False
cfg
.
LOFTR
.
MATCH_COARSE
.
MATCH_TYPE
=
'dual_softmax'
cfg
.
LOFTR
.
MATCH_COARSE
.
SPARSE_SPVS
=
False
cfg
.
TRAINER
.
CANONICAL_LR
=
8e-3
cfg
.
TRAINER
.
WARMUP_STEP
=
1875
# 3 epochs
cfg
.
TRAINER
.
WARMUP_RATIO
=
0.1
cfg
.
TRAINER
.
MSLR_MILESTONES
=
[
8
,
12
,
16
,
20
,
24
]
# pose estimation
cfg
.
TRAINER
.
RANSAC_PIXEL_THR
=
0.5
cfg
.
TRAINER
.
OPTIMIZER
=
"adamw"
cfg
.
TRAINER
.
ADAMW_DECAY
=
0.1
cfg
.
LOFTR
.
MATCH_COARSE
.
TRAIN_COARSE_PERCENT
=
0.3
Prev
1
2
3
4
5
6
7
8
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment