29개(그리고 점점 늘어나고 있는!) 이미지 매칭 모델을 빠르고 쉽게 시도할 수 있는 통합 API입니다.
이동: 설치 | 사용 | 모델 | 모델 추가/기여 | 감사의 말씀 | 인용문
다양한 장면에서 어울리는 모델을 비교해 보세요. 예를 들어, SIFT-LightGlue
및 LoFTR
일치 항목을 쌍으로 표시합니다.
(1) 실외, (2) 실내, (3) 위성 원격 감지, (4) 그림, (5) 오탐.
또한 키포인트 및 관련 설명자를 추출할 수도 있습니다.
소스에서 설치하려면(가장 쉽게 편집하려면 benchmark.py
, demo.ipynb
사용),
git clone --recursive https://github.com/gmberton/image-matching-models
cd image-matching-models
pip install .
일부 모델( omniglue
, LoFTR 제품군)에는 기본 목록에 포함되지 않는 일회성 종속성( tensorflow
, pytorch-lightning
)이 필요합니다. 이를 설치하려면 다음을 사용하십시오.
pip install .[all]
그러면 모든 모델을 실행하는 데 필요한 모든 종속성이 설치됩니다.
다음을 사용하여 패키지 디렉터리에 직접 설치할 수 있습니다.
pip install git+https://github.com/gmberton/image-matching-models.git
위와 유사하게 모든 선택적 종속성을 얻으려면 [all]
부록을 사용하십시오.
pip install " image-matching-models[all] @ git+https://github.com/gmberton/image-matching-models.git "
다음과 함께 모든 일치자를 사용할 수 있습니다.
from matching import get_matcher
from matching . viz import plot_matches
device = 'cuda' # 'cpu'
matcher = get_matcher ( 'superpoint-lg' , device = device ) # Choose any of our ~30+ matchers listed below
img_size = 512 # optional
img0 = matcher . load_image ( 'assets/example_pairs/outdoor/montmartre_close.jpg' , resize = img_size )
img1 = matcher . load_image ( 'assets/example_pairs/outdoor/montmartre_far.jpg' , resize = img_size )
result = matcher ( img0 , img1 )
num_inliers , H , inlier_kpts0 , inlier_kpts1 = result [ 'num_inliers' ], result [ 'H' ], result [ 'inlier_kpts0' ], result [ 'inlier_kpts1' ]
# result.keys() = ['num_inliers', 'H', 'all_kpts0', 'all_kpts1', 'all_desc0', 'all_desc1', 'matched_kpts0', 'matched_kpts1', 'inlier_kpts0', 'inlier_kpts1']
plot_matches ( img0 , img1 , result , save_path = 'plot_matches.png' )
./assets
내부의 예제에 대해 추론을 수행하는 독립 실행형 스크립트로 이를 실행할 수도 있습니다. 해상도( im_size
) 및 키포인트 수( n_kpts
)를 사용할 수도 있습니다. 이 작업은 노트북의 CPU에서 몇 초 정도 걸리며 위에서 본 것과 동일한 이미지를 생성합니다.
python main_matcher.py --matcher sift-lg --device cpu --out_dir output_sift-lg
여기서 sift-lg
SIFT + LightGlue
사용합니다.
스크립트는 ./output_sift-lg
아래에서 각 쌍에 대해 일치하는 키포인트가 있는 이미지를 생성합니다.
이미지에 사용하려면 다음 세 가지 옵션이 있습니다.
./assets/example_pairs
와 같이 하위 디렉터리당 두 개의 이미지가 있는 하위 디렉터리가 있는 디렉터리를 만듭니다. 그런 다음 python main_matcher.py --input path/to/dir
로 사용하십시오.assets/example_pairs_paths.txt
와 같이 공백으로 구분된 경로 쌍이 있는 파일을 만듭니다. 그런 다음 python main_matcher.py --input path/to/file.txt
로 사용하십시오. 단일 이미지에서 키포인트와 설명(사용 가능한 경우)을 추출하려면 extract()
메서드를 사용하세요.
from matching import get_matcher
device = 'cuda' # 'cpu'
matcher = get_matcher ( 'superglue' , device = device ) # Choose any of our ~30+ matchers listed below
img_size = 512 # optional
img = matcher . load_image ( 'assets/example_pairs/outdoor/montmartre_close.jpg' , resize = img_size )
result = matcher . extract ( img )
# result.keys() = ['all_kpts0', 'all_desc0']
plot_kpts ( img , result )
일치와 마찬가지로 명령줄에서 추출을 실행할 수도 있습니다.
python main_extractor.py --matcher sift-lg --device cpu --out_dir output_sift-lg --n_kpts 2048
다음 방법 중 하나를 선택할 수 있습니다( get_matcher()
에 입력).
밀도 : roma, tiny-roma, dust3r, mast3r
반밀도 : loftr, eloftr, se2loftr, aspanformer, matchformer, xfeat-star
Sparse : [sift, superpoint, disk, aliked, dedode, doghardnet, gim, xfeat]-lg, dedode, steerers, dedode-kornia, [sift, orb, doghardnet]-nn, patch2pix, superglue, r2d2, d2net, gim-dkm, xfeat, omniglue, [dedode, xfeat, aliked]-subpx
팁
두 매처를 모두 실행하고 키포인트를 연결하려면 매처 목록(예: get_matcher([xfeat, tiny-roma])
을 전달할 수 있습니다.
모든 일치자는 GPU에서 실행될 수 있으며 대부분은 GPU 또는 CPU에서 모두 실행될 수 있습니다. 일부는 CPU에서 실행될 수 없습니다.
중요한
애플리케이션에 사용하기 전에 각 모델/원본 코드베이스의 LICENSE를 확인하세요. 일부는 엄격하게 제한됩니다.
모델 | 암호 | 종이 | GPU 런타임(s/img) | CPU 런타임(s/img) |
---|---|---|---|---|
Keypt2Subpx*(ECCV '24) | 공식적인 | arxiv | 0.055 /0.164 / 0.033 / 0.291 | -- |
MASt3R (ArXiv '24) | 공식적인 | arxiv | 0.699 | -- |
효율적인 LoFTR(CVPR '24) | 공식적인 | 0.1026 | 2.117 | |
OmniGlue (CVPR '24) | 공식적인 | arxiv | 6.351 | |
xFeat(CVPR '24) | 공식적인 | arxiv | 0.027 | 0.048 |
GIM (ICLR '24) | 공식적인 | arxiv | 0.077(+LG) / 1.627(+DKMv3) | 5.321(+LG) / 20.301(+DKMv3) |
로마 / 타이니로마 (CVPR '24) | 공식적인 | arxiv | 0.453 / 0.0456 | 18.950 |
DUSt3R (CVPR '24) | 공식적인 | arxiv | 3.639 | 26.813 |
디도데(3DV '24) | 공식적인 | arxiv | 0.311(+MNN)/ 0.218(+LG) | |
조향 장치(CVPR '24) | 공식적인 | arxiv | 0.150 | |
LightGlue*(ICCV '23) | 공식적인 | arxiv | 0.417 / 0.093 / 0.184 / 0.128 | 2.828 / 8.852 / 8.100 / 8.128 |
SE2-LoFTR (CVPRW '22) | 공식적인 | arxiv | 0.133 | 2.378 |
아스판포머(ECCV '22) | 공식적인 | arxiv | 0.384 | 11.73 |
매치포머(ACCV '22) | 공식적인 | arxiv | 0.232 | 6.101 |
LoFTR(CVPR '21) | 공식 / 코르니아 | arxiv | 0.722 | 2.36 |
Patch2Pix(CVPR '21) | 공식/IMT | arxiv | 0.145 | 4.97 |
슈퍼글루(CVPR '20) | 공식/IMT | arxiv | 0.0894 | 2.178 |
R2D2(NeurIPS '19) | 공식/IMT | arxiv | 0.429 | 6.79 |
D2Net (CVPR '19) | 공식/IMT | arxiv | 0.600 | 1,324 |
SIFT-NN (IJCV '04) | OpenCV | 0.124 | 0.117 | |
ORB-NN(ICCV '11) | OpenCV | 리서치게이트 | 0.088 | 0.092 |
DoGHardNet(NeurIPS '17) | IMT / 코르니아 | arxiv | 2.697(+NN) / 0.526(+LG) | 2.438(+NN) / 4.528(+LG) |
Patch2Pix(+ Patch2PixSuperGlue), R2D2 및 D2Net의 구현은 IMT(Image Matching Toolbox)를 기반으로 합니다. LoFTR과 DeDoDe-Lightglue는 Kornia 출신입니다. 다른 모델은 위의 공식 저장소를 기반으로 합니다.
런타임 벤치마크는 이미지 크기 512x512에서 assets/example_pairs
폴더에 있는 5개 예제 쌍에 대한 5회 반복의 평균입니다. 벤치마크는 NVIDIA RTX A4000 GPU에서 benchmark.py
사용하여 수행됩니다. 결과는 백분의 일 자리에서 반올림되었습니다.
* LightGlue
모델 런타임은 SIFT, SuperPoint, Disk, ALIKED 순서로 나열됩니다.
* Keypt2Subpx
모델 런타임은 superpoint-lg, aliked-lg, xfeat, dedode 순서로 나열됩니다.
자세한 내용은 CONTRIBUTING.md를 참조하세요.
메모
이 저장소는 유용성이 최적화되어 있지만 속도가 반드시 필요합니다. 아이디어는 이 저장소를 사용하여 요구 사항에 가장 적합한 일치자를 찾은 다음 원본 코드를 사용하여 최상의 결과를 얻는 것입니다.
이 저장소에 포함된 각 작품의 저자들에게 특별한 감사를 드립니다(위의 논문 참조). 이 저장소에 포함된 Image Matching Toolbox를 개발하고 유지 관리한 @GrumpyZhou와 Kornia의 유지 관리 담당자에게도 감사드립니다.
이 저장소는 EarthMatch 논문의 일부로 작성되었습니다. 이 저장소가 도움이 된다면 EarthMatch 작업을 인용해 보세요!
@InProceedings{Berton_2024_EarthMatch,
author = {Berton, Gabriele and Goletto, Gabriele and Trivigno, Gabriele and Stoken, Alex and Caputo, Barbara and Masone, Carlo},
title = {EarthMatch: Iterative Coregistration for Fine-grained Localization of Astronaut Photography},
booktitle = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR) Workshops},
month = {June},
year = {2024},
}