# DKM: Dense Kernelized Feature Matching for Geometry Estimation
### [Project Page](https://parskatt.github.io/DKM) | [Paper](https://arxiv.org/abs/2202.00667)
> DKM: Dense Kernelized Feature Matching for Geometry Estimation
> [Johan Edstedt](https://scholar.google.com/citations?user=Ul-vMR0AAAAJ), [Ioannis Athanasiadis](https://scholar.google.com/citations?user=RCAtJgUAAAAJ), [Mårten Wadenbäck](https://scholar.google.com/citations?user=6WRQpCQAAAAJ), [Michael Felsberg](https://scholar.google.com/citations?&user=lkWfR08AAAAJ)
> CVPR 2023
## How to Use?
Our model produces a dense (for all pixels) warp and certainty.
Warp: [B,H,W,4] for all images in batch of size B, for each pixel HxW, we ouput the input and matching coordinate in the normalized grids [-1,1]x[-1,1].
Certainty: [B,H,W] a number in each pixel indicating the matchability of the pixel.
See [demo](dkm/demo/) for two demos of DKM.
See [api.md](docs/api.md) for API.
## Qualitative Results
https://user-images.githubusercontent.com/22053118/223748279-0f0c21b4-376a-440a-81f5-7f9a5d87483f.mp4
https://user-images.githubusercontent.com/22053118/223748512-1bca4a17-cffa-491d-a448-96aac1353ce9.mp4
https://user-images.githubusercontent.com/22053118/223748518-4d475d9f-a933-4581-97ed-6e9413c4caca.mp4
https://user-images.githubusercontent.com/22053118/223748522-39c20631-aa16-4954-9c27-95763b38f2ce.mp4
## Benchmark Results
### Megadepth1500
| | @5 | @10 | @20 |
|-------|-------|------|------|
| DKMv1 | 54.5 | 70.7 | 82.3 |
| DKMv2 | *56.8* | *72.3* | *83.2* |
| DKMv3 (paper) | **60.5** | **74.9** | **85.1** |
| DKMv3 (this repo) | **60.0** | **74.6** | **84.9** |
### Megadepth 8 Scenes
| | @5 | @10 | @20 |
|-------|-------|------|------|
| DKMv3 (paper) | **60.5** | **74.5** | **84.2** |
| DKMv3 (this repo) | **60.4** | **74.6** | **84.3** |
### ScanNet1500
| | @5 | @10 | @20 |
|-------|-------|------|------|
| DKMv1 | 24.8 | 44.4 | 61.9 |
| DKMv2 | *28.2* | *49.2* | *66.6* |
| DKMv3 (paper) | **29.4** | **50.7** | **68.3** |
| DKMv3 (this repo) | **29.8** | **50.8** | **68.3** |
## Navigating the Code
* Code for models can be found in [dkm/models](dkm/models/)
* Code for benchmarks can be found in [dkm/benchmarks](dkm/benchmarks/)
* Code for reproducing experiments from our paper can be found in [experiments/](experiments/)
## Install
Run ``pip install -e .``
## Demo
A demonstration of our method can be run by:
``` bash
python demo_match.py
```
This runs our model trained on mega on two images taken from Sacre Coeur.
## Benchmarks
See [Benchmarks](docs/benchmarks.md) for details.
## Training
See [Training](docs/training.md) for details.
## Reproducing Results
Given that the required benchmark or training dataset has been downloaded and unpacked, results can be reproduced by running the experiments in the experiments folder.
## Using DKM matches for estimation
We recommend using the excellent Graph-Cut RANSAC algorithm: https://github.com/danini/graph-cut-ransac
| | @5 | @10 | @20 |
|-------|-------|------|------|
| DKMv3 (RANSAC) | *60.5* | *74.9* | *85.1* |
| DKMv3 (GC-RANSAC) | **65.5** | **78.0** | **86.7** |
## Acknowledgements
We have used code and been inspired by https://github.com/PruneTruong/DenseMatching, https://github.com/zju3dv/LoFTR, and https://github.com/GrumpyZhou/patch2pix. We additionally thank the authors of ECO-TR for providing their benchmark.
## BibTeX
If you find our models useful, please consider citing our paper!
```
@inproceedings{edstedt2023dkm,
title={{DKM}: Dense Kernelized Feature Matching for Geometry Estimation},
author={Edstedt, Johan and Athanasiadis, Ioannis and Wadenbäck, Mårten and Felsberg, Michael},
booktitle={IEEE Conference on Computer Vision and Pattern Recognition},
year={2023}
}
```