واجهة برمجة تطبيقات موحدة لتجربة 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) | رسمي | arxiv | 0.055 /0.164 / 0.033 / 0.291 | -- |
MSt3R (ArXiv '24) | رسمي | arxiv | 0.699 | -- |
كفاءة-LoFTR (CVPR '24) | رسمي | قوات الدفاع الشعبي | 0.1026 | 2.117 |
أومنيغلو (CVPR '24) | رسمي | arxiv | 6.351 | |
xFeat (CVPR '24) | رسمي | arxiv | 0.027 | 0.048 |
جيم (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 | |
الغراء الخفيف* (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 |
باتش2بيكس (CVPR '21) | الرسمية / آي إم تي | arxiv | 0.145 | 4.97 |
صمغ فائق (CVPR '20) | الرسمية / آي إم تي | arxiv | 0.0894 | 2.178 |
R2D2 (نيوريبس '19) | الرسمية / آي إم تي | arxiv | 0.429 | 6.79 |
D2Net (CVPR '19) | الرسمية / آي إم تي | arxiv | 0.600 | 1.324 |
سيفت-إن (IJCV '04) | OpenCV | قوات الدفاع الشعبي | 0.124 | 0.117 |
ORB-NN (ICCV '11) | OpenCV | بوابة البحث | 0.088 | 0.092 |
دوغارد نت (NeurIPS '17) | آي إم تي / كورنيا | arxiv | 2.697 (+NN) / 0.526 (+LG) | 2.438(+NN) / 4.528 (+LG) |
يعتمد تطبيقنا لـ Patch2Pix (+ Patch2PixSuperGlue)، وR2D2، وD2Net على مجموعة أدوات مطابقة الصور (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},
}