API terpadu untuk mencoba 29 model pencocokan gambar (dan terus bertambah!) dengan cepat dan mudah.
Langsung ke: Instal | Gunakan | Model | Tambahkan Model/Berkontribusi | Ucapan Terima Kasih | Mengutip
Bandingkan model yang cocok di berbagai adegan. Misalnya, kami menampilkan kecocokan SIFT-LightGlue
dan LoFTR
secara berpasangan:
(1) luar ruangan, (2) dalam ruangan, (3) penginderaan jauh satelit, (4) lukisan, dan (5) positif palsu.
Anda juga dapat mengekstrak titik kunci dan deskriptor terkait.
Jika Anda ingin menginstal dari sumber (paling mudah diedit, gunakan benchmark.py
, demo.ipynb
),
git clone --recursive https://github.com/gmberton/image-matching-models
cd image-matching-models
pip install .
Beberapa model ( omniglue
, keluarga LoFTR) memerlukan dependensi satu kali ( tensorflow
, pytorch-lightning
), yang tidak disertakan dalam daftar default. Untuk menginstalnya, gunakan
pip install .[all]
Ini akan menginstal semua dependensi yang diperlukan untuk menjalankan semua model.
Anda dapat menginstal langsung ke direktori paket Anda dengan
pip install git+https://github.com/gmberton/image-matching-models.git
Mirip dengan yang di atas, untuk mendapatkan semua dependensi opsional, gunakan tambahan [all]
:
pip install " image-matching-models[all] @ git+https://github.com/gmberton/image-matching-models.git "
Anda dapat menggunakan salah satu pencocokan dengan
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' )
Anda juga dapat menjalankan ini sebagai skrip mandiri, yang akan melakukan inferensi pada contoh di dalamnya ./assets
. Anda juga dapat resolusi ( im_size
) dan jumlah titik kunci ( n_kpts
). Ini akan memakan waktu beberapa detik pada CPU laptop, dan akan menghasilkan gambar yang sama seperti yang Anda lihat di atas.
python main_matcher.py --matcher sift-lg --device cpu --out_dir output_sift-lg
di mana sift-lg
akan menggunakan SIFT + LightGlue
.
Skrip akan menghasilkan gambar dengan titik kunci yang cocok untuk setiap pasangan, di bawah ./output_sift-lg
.
Untuk digunakan pada gambar Anda, Anda memiliki tiga opsi:
./assets/example_pairs
. Kemudian gunakan sebagai python main_matcher.py --input path/to/dir
assets/example_pairs_paths.txt
. Kemudian gunakan sebagai python main_matcher.py --input path/to/file.txt
Untuk mengekstrak titik kunci dan deskripsi (bila tersedia) dari satu gambar, gunakan metode 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 )
Seperti halnya pencocokan, Anda juga dapat menjalankan ekstraksi dari baris perintah
python main_extractor.py --matcher sift-lg --device cpu --out_dir output_sift-lg --n_kpts 2048
Anda dapat memilih salah satu metode berikut (masukan ke get_matcher()
):
Padat : roma, tiny-roma, dust3r, mast3r
Semi-padat : loftr, eloftr, se2loftr, aspanformer, matchformer, xfeat-star
Jarang : [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
Tip
Anda dapat meneruskan daftar pencocokan, yaitu get_matcher([xfeat, tiny-roma])
untuk menjalankan kedua pencocokan dan menggabungkan titik kuncinya.
Semua pencocokan dapat dijalankan pada GPU, dan sebagian besar dapat dijalankan pada GPU atau CPU. Beberapa tidak dapat berjalan pada CPU.
Penting
Periksa LISENSI setiap model/basis kode asli sebelum digunakan dalam aplikasi Anda. Beberapa sangat dibatasi.
Model | Kode | Kertas | Waktu Proses GPU (s/img) | Waktu Proses CPU (s/img) |
---|---|---|---|---|
Keypt2Subpx* (ECCV '24) | Resmi | arxiv | 0,055 /0,164 / 0,033 / 0,291 | -- |
MASt3R (ArXiv '24) | Resmi | arxiv | 0,699 | -- |
Efisien-LoFTR (CVPR '24) | Resmi | 0,1026 | 2.117 | |
OmniGlue (CVPR '24) | Resmi | arxiv | 6.351 | |
xFeat (CVPR '24) | Resmi | arxiv | 0,027 | 0,048 |
GIM (ICLR '24) | Resmi | arxiv | 0,077 (+LG) / 1,627 (+DKMv3) | 5.321 (+LG) / 20.301 (+DKMv3) |
RoMa / Tiny-RoMa (CVPR '24) | Resmi | arxiv | 0,453 / 0,0456 | 18.950 |
DUSt3R (CVPR '24) | Resmi | arxiv | 3.639 | 26.813 |
DeDoDe (3DV '24) | Resmi | arxiv | 0,311 (+MNN)/ 0,218 (+LG) | |
Pengarah (CVPR '24) | Resmi | arxiv | 0,150 | |
Lem Ringan* (ICCV '23) | Resmi | arxiv | 0,417 / 0,093 / 0,184 / 0,128 | 2.828 / 8.852 / 8.100 / 8.128 |
SE2-LoFTR (CVPRW '22) | Resmi | arxiv | 0,133 | 2.378 |
Aspanformer (ECCV '22) | Resmi | arxiv | 0,384 | 11.73 |
Pembentuk korek api (ACCV '22) | Resmi | arxiv | 0,232 | 6.101 |
LoFTR (CVPR '21) | Resmi / Kornia | arxiv | 0,722 | 2.36 |
Patch2Pix (CVPR '21) | Resmi / IMT | arxiv | 0,145 | 4.97 |
Lem Super (CVPR '20) | Resmi / IMT | arxiv | 0,0894 | 2.178 |
R2D2 (NeurIPS '19) | Resmi / IMT | arxiv | 0,429 | 6.79 |
D2Net (CVPR '19) | Resmi / IMT | arxiv | 0,600 | 1.324 |
SIFT-NN (IJCV '04) | OpenCV | 0,124 | 0,117 | |
ORB-NN (ICCV '11) | OpenCV | Gerbang Penelitian | 0,088 | 0,092 |
DoGHardNet (NeurIPS '17) | IMT / Kornia | arxiv | 2,697 (+NN) / 0,526 (+LG) | 2.438(+NN) / 4.528 (+LG) |
Implementasi Patch2Pix (+ Patch2PixSuperGlue), R2D2, dan D2Net kami didasarkan pada Image Matching Toolbox (IMT). LoFTR dan DeDoDe-Lightglue berasal dari Kornia. Model lain didasarkan pada repo resmi di atas.
Benchmark runtime adalah rata-rata 5 iterasi terhadap 5 pasang contoh di folder assets/example_pairs
pada ukuran gambar 512x512. Benchmark dilakukan menggunakan benchmark.py
pada GPU NVIDIA RTX A4000. Hasil dibulatkan ke tempat perseratus.
* Runtime model LightGlue
dicantumkan dalam urutan: SIFT, SuperPoint, Disk, ALIKED
* Runtime model Keypt2Subpx
dicantumkan dalam urutan: superpoint-lg, aliked-lg, xfeat, dedode
Lihat KONTRIBUSI.md untuk detailnya.
Catatan
Repo ini mengoptimalkan kegunaannya, tetapi tentu saja untuk kecepatan. Idenya adalah menggunakan repo ini untuk menemukan pencocokan yang paling sesuai dengan kebutuhan Anda, lalu gunakan kode asli untuk mendapatkan hasil terbaik.
Terima kasih khusus kepada penulis dari masing-masing karya yang disertakan dalam repo ini (lihat makalah mereka di atas). Terima kasih tambahan kepada @GrumpyZhou yang telah mengembangkan dan memelihara Image Matching Toolbox, yang telah kami bungkus dalam repo ini, dan pengelola Kornia.
Repo ini dibuat sebagai bagian dari makalah EarthMatch. Harap pertimbangkan untuk mengutip karya EarthMatch jika repo ini bermanfaat bagi Anda!
@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},
}