Feature Extraction and Matching#
COLMAP supports multiple feature extraction and matching algorithms. This page describes how to switch between them using the command-line interface or the graphical user interface.
Feature Extractor Types#
The following feature extractor types are available:
SIFT: Scale-Invariant Feature Transform (default). The classic and most widely tested feature extractor. Produces 128-dimensional uint8 descriptors.ALIKED: A Lighter Keypoint and Descriptor Extractor. A learned feature extractor that produces floating-point descriptors. Requires ONNX support to be enabled at build time (-DONNX_ENABLED=ON).LOMA: A learned feature extractor, introduced in LoMa: Local Feature Matching Revisited, ECCV26, that uses the DeDoDe architecture. Two descriptor variants are available:LOMA_B(256-dim, frozen DINOv2 features combined with trained convolutional features) andLOMA_B128(128-dim, more lightweight). Requires ONNX support to be enabled at build time (-DONNX_ENABLED=ON).
To select a feature extractor type via the command-line:
$ colmap feature_extractor \
--database_path $DATASET_PATH/database.db \
--image_path $DATASET_PATH/images \
--FeatureExtraction.type ALIKED_N16ROT \
--AlikedExtraction.max_num_features 2048
For SIFT (the default), you can omit the type or explicitly set it:
$ colmap feature_extractor \
--database_path $DATASET_PATH/database.db \
--image_path $DATASET_PATH/images \
--FeatureExtraction.type SIFT \
--SiftExtraction.max_num_features 8192
In the GUI, open Processing > Feature extraction and select the desired
tab (SIFT, ALIKED, LoMa, etc.) before clicking Extract.
Feature Matcher Types#
The following feature matcher types are available:
SIFT_BRUTEFORCE: Brute-force matching optimized for SIFT descriptors (default). Uses L2 distance with ratio test.ALIKED_BRUTEFORCE: Brute-force matching for ALIKED descriptors. Uses cosine similarity. Requires ONNX support to be enabled at build time.SIFT_LIGHTGLUE: Neural network-based matching using the LightGlue model for SIFT descriptors. This typically produces more matches and higher inlier ratios than brute-force matching, especially for challenging image pairs with large viewpoint or illumination changes. Requires ONNX support to be enabled at build time.ALIKED_LIGHTGLUE: Neural network-based matching using the LightGlue model for ALIKED descriptors. Requires ONNX support to be enabled at build time.LOMA_BRUTEFORCE: Brute-force matching for either of the LoMa descriptors. Uses cosine similarity. Requires ONNX support to be enabled at build time.LOMA_B: Dedicated neural network matcher for the 256-dimLOMA_Bdescriptor, comparable in size to LightGlue. Requires ONNX support to be enabled at build time.LOMA_R: Same size asLOMA_B, but trained with rotation augmentation for better robustness to rotated image pairs. Also matches the 256-dimLOMA_Bdescriptor. Requires ONNX support to be enabled at build time.LOMA_L,LOMA_G: Larger dedicated matchers for the 256-dimLOMA_Bdescriptor, in increasing order of model size and matching quality. Requires ONNX support to be enabled at build time.LOMA_B128: Dedicated matcher for the lightweight 128-dimLOMA_B128descriptor. Requires ONNX support to be enabled at build time.
To select a feature matcher type via the command-line:
$ colmap exhaustive_matcher \
--database_path $DATASET_PATH/database.db \
--FeatureMatching.type ALIKED_BRUTEFORCE \
--AlikedMatching.min_cossim 0.85
For SIFT matching (the default):
$ colmap exhaustive_matcher \
--database_path $DATASET_PATH/database.db \
--FeatureMatching.type SIFT_BRUTEFORCE \
--SiftMatching.max_ratio 0.8
In the GUI, open Processing > Feature matching, select any matching tab
(Exhaustive, Sequential, etc.), and choose the matcher type from the “Type”
dropdown in the shared options section.
Compatible Extractor and Matcher Types#
The feature extractor and matcher types should be compatible:
Use
SIFTextraction withSIFT_BRUTEFORCEorSIFT_LIGHTGLUEmatching.Use
ALIKED_*extraction withALIKED_BRUTEFORCEorALIKED_LIGHTGLUEmatching.Use
LOMA_Bextraction withLOMA_BRUTEFORCE,LOMA_B,LOMA_R,LOMA_L, orLOMA_Gmatching.Use
LOMA_B128extraction withLOMA_BRUTEFORCEorLOMA_B128matching.
Mixing incompatible types (e.g., SIFT features with ALIKED matcher, or
LOMA_B128 features with the LOMA_B matcher) will result in a runtime
error. Do not mix different feature extractor types (e.g., SIFT and ALIKED)
in the same database.
ALIKED Model Variants#
ALIKED requires an ONNX model file. Several model variants are available with different trade-offs between speed and accuracy:
aliked-n16rot: Faster and trained for some viewpoint invariance. 128-dim descriptors.aliked-n32: More expensive but not explicitly trained for viewpoint invariance, 128-dim descriptors.
Specify the model path using --AlikedExtraction.*_model_path. If the path is
a URL, COLMAP will automatically download and cache the model. You can download
different ALIKED models from the release page at colmap/colmap
LoMa Model Variants#
LoMa, similar to ALIKED, uses a detect+describe+match framework. The descriptor comes in two variants:
LOMA_B: 256-dim descriptor combining frozen DINOv2 features with trained convolutional features.LOMA_B128: A more lightweight 128-dim descriptor.
Each descriptor variant has its own dedicated matcher(s) with different trade-offs between speed and accuracy:
LOMA_Bdescriptors can be matched withLOMA_B(smallest, same size as LightGlue),LOMA_R(same size asLOMA_Bbut trained with rotation augmentation),LOMA_L, orLOMA_G(progressively larger, slower, and more accurate), as well asLOMA_BRUTEFORCE.LOMA_B128descriptors can only be matched withLOMA_B128orLOMA_BRUTEFORCE. Fastest option but least accurate out of the LoMa matchers.
By default, all LoMa model weights are downloaded automatically and cached
locally the first time they are used, so no manual setup is required to get
started. To use a different model, specify its path using
--LomaExtraction.*_model_path for extraction and
--LomaMatching.*_model_path for matching. As with ALIKED, if the path is a
URL, COLMAP will automatically download and cache it. Extraction and
matching also support an opt-in use_bf16 mode
(--LomaExtraction.use_bf16 / --LomaMatching.use_bf16) for faster
inference.
Iterative Runs#
When re-running matching on an existing database, image pairs that already have
a two-view geometry are skipped, so changing --FeatureMatching.type on such
a database leaves previously matched pairs untouched. To force re-matching, first
clear the existing results with database_cleaner:
$ colmap database_cleaner \
--database_path $DATASET_PATH/database.db \
--type two_view_geometries \
--type matches
When re-extracting with a different --FeatureExtraction.type, use
--type features to additionally clear the extracted keypoints and descriptors.