Ce référentiel contient la mise en œuvre du document suivant:
"D2-Net: A Trainable CNN for Joint Detection and Description of Local Features".
M. Dusmanu, I. Rocco, T. Pajdla, M. Pollefeys, J. Sivic, A. Torii, and T. Sattler. CVPR 2019.
Document sur Arxiv, page du projet
Python 3.6+ est recommandé pour exécuter notre code. Conda peut être utilisé pour installer les packages requis:
conda install pytorch torchvision cudatoolkit=10.0 -c pytorch
conda install h5py imageio imagesize matplotlib numpy scipy tqdmLes poids de CAFFE VGG16 standard et leur homologue réglé peuvent être téléchargés en fonctionnant:
mkdir models
wget https://dusmanu.com/files/d2-net/d2_ots.pth -O models/d2_ots.pth
wget https://dusmanu.com/files/d2-net/d2_tf.pth -O models/d2_tf.pth
wget https://dusmanu.com/files/d2-net/d2_tf_no_phototourism.pth -O models/d2_tf_no_phototourism.pth Mise à jour - 23 mai 2019 Nous avons ajouté un nouvel ensemble de poids formés sur Megadepth sans les scènes de phototourisme (Sagrada_Familia - 0019, Lincoln_memorial_Statue - 0021, British_Museum - 0024, Londres_Bridge - 0025, US_CAPITOL - 0078, MOURTY_RUSHMORE - 1589). Nos résultats initiaux montrent des performances similaires. Afin d'utiliser ces poids au moment du test, vous devez ajouter --model_file models/d2_tf_no_phototourism.pth .
extract_features.py peut être utilisé pour extraire les fonctionnalités D2 pour une liste donnée d'images. Les fonctionnalités en simple nécessitent moins de 6 Go de VRAM pour les images 1200x1600. Le drapeau --multiscale peut être utilisé pour extraire les caractéristiques à plusieurs échelles - pour cela, nous recommandons au moins 12 Go de VRAM.
Le format de sortie peut être npz ou mat . Dans les deux cas, les fichiers de fonctions résument trois tableaux:
keypoints [ N x 3 ] tableau contenant les positions des points clés x, y et les échelles s . Les positions suivent le format COLMAP, l'axe X pointant vers la droite et l'axe Y vers le bas.scores [ N ] tableau contenant les activations des points clés (plus haut, c'est mieux).descriptors [ N x 512 ] Array contenant les descripteurs normalisés L2. python extract_features.py --image_list_file images.txt (--multiscale)Kapture est un format de fichiers pivot, basé sur du texte et des fichiers binaires, utilisé pour décrire SFM (structure du mouvement) et des données plus généralement acquises par le capteur.
Il est disponible sur https://github.com/naver/kapture. Il contient des outils de conversion pour les formats populaires et plusieurs ensembles de données populaires sont directement disponibles dans Kapture.
Il peut être installé avec:
pip install kaptureLes ensembles de données peuvent être téléchargés avec:
kapture_download_dataset.py update
kapture_download_dataset.py list
# e.g.: install mapping and query of Extended-CMU-Seasons_slice22
kapture_download_dataset.py install " Extended-CMU-Seasons_slice22_* "Si vous souhaitez convertir votre propre ensemble de données en Kapture, veuillez trouver quelques exemples ici.
Une fois installé, vous pouvez extraire des points clés pour votre ensemble de données Kapture avec:
python extract_kapture.py --kapture-root pathto/yourkapturedataset (--multiscale) Exécutez python extract_kapture.py --help pour plus d'informations sur les paramètres d'extraction.
Le pipeline de formation fourni ici est une implémentation Pytorch du code TensorFlow qui a été utilisé pour former le modèle disponible en téléchargement ci-dessus.
Mise à jour - 05 juin 2019 Nous avons corrigé un bogue dans le prétraitement de l'ensemble de données - le recyclage donne désormais des résultats similaires à l'implémentation d'origine TensorFlow.
Mise à jour - 07 août 2019 Nous avons publié une version mise à jour et plus précise de l'ensemble de données de formation - la formation est plus stable et beaucoup plus rapide pour des performances égales.
Pour cette partie, COLMAP doit être installé. Veuillez vous référer au site officiel pour les instructions d'installation.
Après avoir téléchargé l'intégralité de l'ensemble de données Megadepth (y compris les modèles SFM), la première étape consiste à générer les reconstructions indésirables. Cela peut être fait en appelant undistort_reconstructions.py comme suit:
python undistort_reconstructions.py --colmap_path /path/to/colmap/executable --base_path /path/to/megadepth Ensuite, preprocess_megadepth.sh peut être utilisé pour récupérer les paramètres de la caméra et calculer le chevauchement entre les images pour toutes les scènes.
bash preprocess_undistorted_megadepth.sh /path/to/megadepth /path/to/output/folderAprès avoir téléchargé et prétraité Megadepth, la formation peut être lancée immédiatement:
python train.py --use_validation --dataset_path /path/to/megadepth --scene_info_path /path/to/preprocessing/outputSi vous utilisez ce code dans votre projet, veuillez citer le document suivant:
@InProceedings { Dusmanu2019CVPR ,
author = { Dusmanu, Mihai and Rocco, Ignacio and Pajdla, Tomas and Pollefeys, Marc and Sivic, Josef and Torii, Akihiko and Sattler, Torsten } ,
title = { {D2-Net: A Trainable CNN for Joint Detection and Description of Local Features} } ,
booktitle = { Proceedings of the 2019 IEEE/CVF Conference on Computer Vision and Pattern Recognition } ,
year = { 2019 } ,
}