Единый API для быстрого и легкого тестирования 29 (и их количество!) моделей сопоставления изображений.
Перейти к: Установить | Использование | Модели | Добавить модель/Содействие | Благодарности | Цитировать
Сравните подходящие модели в разных сценах. Например, мы показываем совпадения 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
). Это займет несколько секунд на процессоре ноутбука и создаст те же изображения, которые вы видите выше.
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
Разреженный : [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])
чтобы запустить оба сопоставителя и объединить их ключевые точки.
Все средства сопоставления могут работать на графическом процессоре, и большинство из них могут работать как на графическом процессоре, так и на центральном процессоре. Некоторые из них не могут работать на процессоре.
Важный
Перед использованием в приложении проверьте ЛИЦЕНЗИЮ каждой модели/исходной кодовой базы. Некоторые из них строго ограничены.
Модель | Код | Бумага | Время выполнения графического процессора (s/img) | Время работы ЦП (s/img) |
---|---|---|---|---|
Keypt2Subpx* (ECCV '24) | Официальный | архив | 0,055/0,164/0,033/0,291 | -- |
MASt3R (ArXiv '24) | Официальный | архив | 0,699 | -- |
Эффективный-LoFTR (CVPR '24) | Официальный | 0,1026 | 2.117 | |
OmniGlue (CVPR '24) | Официальный | архив | 6.351 | |
xFeat (CVPR '24) | Официальный | архив | 0,027 | 0,048 |
ГИМ (ICLR '24) | Официальный | архив | 0,077 (+LG) / 1,627 (+DKMv3) | 5,321 (+LG) / 20,301 (+DKMv3) |
РоМа / Крошечный-Рома (CVPR '24) | Официальный | архив | 0,453/0,0456 | 18.950 |
DUST3R (ЦВПР '24) | Официальный | архив | 3,639 | 26,813 |
ДеДоДе (3DV '24) | Официальный | архив | 0,311 (+MNN)/ 0,218 (+LG) | |
Штурвалы (CVPR '24) | Официальный | архив | 0,150 | |
LightGlue* (ICCV '23) | Официальный | архив | 0,417/0,093/0,184/0,128 | 2,828 / 8,852 / 8,100 / 8,128 |
SE2-LoFTR (CVPRW '22) | Официальный | архив | 0,133 | 2,378 |
Аспанформер (ECCV '22) | Официальный | архив | 0,384 | 11,73 |
Формирователь матчей (ACCV '22) | Официальный | архив | 0,232 | 6.101 |
LoFTR (CVPR '21) | Официальный / Корния | архив | 0,722 | 2.36 |
Patch2Pix (CVPR '21) | Официальный / ИМТ | архив | 0,145 | 4,97 |
Суперклей (CVPR '20) | Официальный / ИМТ | архив | 0,0894 | 2.178 |
R2D2 (НейрИПС '19) | Официальный / ИМТ | архив | 0,429 | 6,79 |
D2Net (CVPR '19) | Официальный / ИМТ | архив | 0,600 | 1,324 |
СИФТ-НН (IJCV '04) | OpenCV | 0,124 | 0,117 | |
ОРБ-НН (ICCV '11) | OpenCV | ИсследованияГейт | 0,088 | 0,092 |
DoGHardNet (NeurIPS '17) | ИМТ / Корния | архив | 2,697 (+NN) / 0,526 (+LG) | 2,438(+NN) / 4,528 (+LG) |
Наша реализация Patch2Pix (+ Patch2PixSuperGlue), R2D2 и D2Net основана на Image Matching Toolbox (IMT). LoFTR и DeDoDe-Lightglue производятся компанией Kornia. Другие модели основаны на официальных репозиториях выше.
Тест времени выполнения — это среднее значение 5 итераций по 5 парам примеров в папке assets/example_pairs
при размере изображения 512x512. Бенчмарк выполняется с использованием benchmark.py
на графическом процессоре NVIDIA RTX A4000. Результаты округлены до сотых.
* Время выполнения моделей LightGlue
указано в следующем порядке: SIFT, SuperPoint, Disk, ALIKED.
* Среды выполнения модели Keypt2Subpx
перечислены в следующем порядке: superpoint-lg, aliked-lg, xfeat, dedode.
Подробности смотрите на CONTRIBUTING.md.
Примечание
Этот репозиторий оптимизирован для удобства использования, но обязательно для скорости. Идея состоит в том, чтобы использовать этот репозиторий, чтобы найти средство сопоставления, которое лучше всего соответствует вашим потребностям, а затем использовать исходный код, чтобы извлечь из него максимальную пользу.
Особая благодарность авторам соответствующих работ, включенных в этот репозиторий (см. их статьи выше). Дополнительная благодарность @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},
}