Este repositorio contiene la implementación del siguiente documento:
"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.
Documento sobre ARXIV, página del proyecto
Se recomienda Python 3.6+ para ejecutar nuestro código. CondA se puede usar para instalar los paquetes requeridos:
conda install pytorch torchvision cudatoolkit=10.0 -c pytorch
conda install h5py imageio imagesize matplotlib numpy scipy tqdmLos pesos VGG16 de Caffe VGG16 estándar y su contraparte sintonizada se pueden descargar ejecutando:
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 ACTUALIZACIÓN - 23 de mayo de 2019 Hemos agregado un nuevo conjunto de pesos entrenados en Megadepth sin las escenas de fototourismo (sagrada_familia - 0019, Lincoln_memorial_statue - 0021, British_museum - 0024, Londres_bridge - 0025, US_Capitol - 0078, Mount_Rushmore - 1589). Nuestros resultados iniciales muestran un rendimiento similar. Para usar estos pesos en el tiempo de prueba, debe agregar --model_file models/d2_tf_no_phototourism.pth .
extract_features.py se puede usar para extraer características D2 para una lista dada de imágenes. Las características de escala individual requieren menos de 6 GB de VRAM para imágenes 1200x1600. El indicador --multiscale se puede usar para extraer características multiescala; para esto, recomendamos al menos 12 GB de VRAM.
El formato de salida puede ser npz o mat . En cualquier caso, los archivos de características encapsulan tres matrices:
keypoints [ N x 3 ] que contiene las posiciones de los puntos clave x, y y las escamas s . Las posiciones siguen el formato COLmap, con el eje X apuntando hacia la derecha y el eje Y al fondo.scores [ N ] que contienen las activaciones de los puntos clave (más alto es mejor).descriptors [ N x 512 ] matriz que contiene los descriptores normalizados L2. python extract_features.py --image_list_file images.txt (--multiscale)Kapture es un formato de archivo dinámico, basado en texto y archivos binarios, que se usa para describir SFM (estructura del movimiento) y los datos adquiridos en el sensor más generalmente.
Está disponible en https://github.com/naver/kapture. Contiene herramientas de conversión para formatos populares y varios conjuntos de datos populares están directamente disponibles en Kapture.
Se puede instalar con:
pip install kaptureLos conjuntos de datos se pueden descargar con:
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 desea convertir su propio conjunto de datos en Kapture, busque algunos ejemplos aquí.
Una vez instalado, puede extraer puntos clave para su conjunto de datos Kapture con:
python extract_kapture.py --kapture-root pathto/yourkapturedataset (--multiscale) Ejecute python extract_kapture.py --help para obtener más información sobre los parámetros de extracción.
La tubería de capacitación proporcionada aquí es una implementación de Pytorch del código TensorFlow que se utilizó para capacitar el modelo disponible para descargar anteriormente.
ACTUALIZACIÓN - 05 de junio de 2019 Hemos solucionado un error en el preprocesamiento del conjunto de datos, reentrenamiento ahora produce resultados similares a la implementación original de TensorFlow.
Actualización - 07 de agosto de 2019 Hemos lanzado una versión actualizada y más precisa del conjunto de datos de capacitación: la capacitación es más estable y significativamente más rápida para el mismo rendimiento.
Para esta parte, COLMAP debe instalarse. Consulte el sitio web oficial para obtener instrucciones de instalación.
Después de descargar todo el conjunto de datos Megadepth (incluidos los modelos SFM), el primer paso es generar las reconstrucciones no distorsionadas. Esto se puede hacer llamando undistort_reconstructions.py de la siguiente manera:
python undistort_reconstructions.py --colmap_path /path/to/colmap/executable --base_path /path/to/megadepth A continuación, se puede usar preprocess_megadepth.sh para recuperar los parámetros de la cámara y calcular la superposición entre imágenes para todas las escenas.
bash preprocess_undistorted_megadepth.sh /path/to/megadepth /path/to/output/folderDespués de descargar y preprocesar Megadepth, el entrenamiento se puede comenzar de inmediato:
python train.py --use_validation --dataset_path /path/to/megadepth --scene_info_path /path/to/preprocessing/outputSi usa este código en su proyecto, cite el siguiente documento:
@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 } ,
}