Dieses Repository enthält die Implementierung des folgenden Papiers:
"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.
Papier auf Arxiv, Projektseite
Python 3.6+ wird empfohlen, um unseren Code auszuführen. Conda kann verwendet werden, um die erforderlichen Pakete zu installieren:
conda install pytorch torchvision cudatoolkit=10.0 -c pytorch
conda install h5py imageio imagesize matplotlib numpy scipy tqdmDas Off-the-Shelf Caffe VGG16- Gewicht und ihr abgestimmter Gegenstück können durch Laufen heruntergeladen werden:
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 UPDATE - 23. Mai 2019 Wir haben einen neuen Satz von Gewichten hinzugefügt, die ohne die Phototourismus -Szenen ausgebildet wurden (Sagrada_Familia - 0019, lincoln_memorial_statue - 0021, British_museum - 0024, London_bridge - 0025, use_capitol - 0078, Mount_Rusmore - 1589). Unsere ersten Ergebnisse zeigen eine ähnliche Leistung. Um diese Gewichte zur Testzeit zu verwenden, sollten Sie --model_file models/d2_tf_no_phototourism.pth hinzufügen.
extract_features.py kann verwendet werden, um D2 -Funktionen für eine bestimmte Liste von Bildern zu extrahieren. Die Singlescale -Funktionen benötigen für 1200x1600 -Bilder weniger als 6 GB VRAM. Die Flagge --multiscale kann verwendet werden, um Multiscale -Merkmale zu extrahieren. Dafür empfehlen wir mindestens 12 GB VRAM.
Das Ausgangsformat kann entweder npz oder mat sein. In beiden Fällen umfassen die Feature -Dateien drei Arrays:
keypoints [ N x 3 ] -Array mit den Positionen von Tastoint x, y und der Skalen s . Die Positionen folgen dem Colmap -Format, wobei die X -Achse nach rechts und die Y -Achse nach unten zeigt.scores [ N ] -Array, das die Aktivierungen von Tastoint -Tastaturen enthält (höher ist besser).descriptors [ N x 512 ] Array, das die L2 -normalisierten Deskriptoren enthält. python extract_features.py --image_list_file images.txt (--multiscale)Kapture ist ein Pivot-Dateiformat, das auf Text- und Binärdateien basiert und zur Beschreibung von SFM (Struktur aus Bewegung) und allgemeiner sensor erworbenen Daten verwendet wird.
Es ist unter https://github.com/naver/kapture erhältlich. Es enthält Conversion -Tools für beliebte Formate, und mehrere beliebte Datensätze sind direkt in der Kapiture erhältlich.
Es kann installiert werden mit:
pip install kaptureDatensätze können heruntergeladen werden mit:
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_* "Wenn Sie Ihren eigenen Datensatz in die Kapiture umwandeln möchten, finden Sie hier einige Beispiele.
Sobald Sie die Installation installiert haben, können Sie Tastoint für Ihren Kapture -Datensatz extrahieren mit:
python extract_kapture.py --kapture-root pathto/yourkapturedataset (--multiscale) Führen Sie python extract_kapture.py --help für weitere Informationen zu den Extraktionsparametern aus.
Die hier bereitgestellte Trainingspipeline ist eine Pytorch -Implementierung des TensorFlow -Code, mit dem das oben zum Download verfügbare Modell trainiert wurde.
UPDATE - 05. Juni 2019 Wir haben einen Fehler in der Datensatzvorverarbeitung behoben - die Umschulung liefert jetzt ähnliche Ergebnisse wie die ursprüngliche Tensorflow -Implementierung.
UPDATE - 07. August 2019 Wir haben eine aktualisierte, genauere Version des Trainingsdatensatzes veröffentlicht. Das Training ist stabiler und für die gleiche Leistung deutlich schneller.
Für diesen Teil sollte Colmap installiert werden. In der offiziellen Website finden Sie die Installationsanweisungen.
Nach dem Herunterladen des gesamten Megadepth -Datensatzes (einschließlich SFM -Modelle) ist der erste Schritt die ungelebenden Rekonstruktionen. Dies kann erfolgen, indem Sie undistort_reconstructions.py wie folgt bezeichnen:
python undistort_reconstructions.py --colmap_path /path/to/colmap/executable --base_path /path/to/megadepth Als nächstes kann preprocess_megadepth.sh verwendet werden, um die Kameraparameter abzurufen und die Überlappung zwischen Bildern für alle Szenen zu berechnen.
bash preprocess_undistorted_megadepth.sh /path/to/megadepth /path/to/output/folderNach dem Herunterladen und Vorverarbeitung von Megadepe kann das Training sofort gestartet werden:
python train.py --use_validation --dataset_path /path/to/megadepth --scene_info_path /path/to/preprocessing/outputWenn Sie diesen Code in Ihrem Projekt verwenden, zitieren Sie bitte das folgende Papier:
@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 } ,
}