该存储库包含以下论文的实施:
"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.
arxiv上的论文,项目页面
建议使用Python 3.6+来运行我们的代码。 Conda可用于安装所需的软件包:
conda install pytorch torchvision cudatoolkit=10.0 -c pytorch
conda install h5py imageio imagesize matplotlib numpy scipy tqdm可以通过运行下载现成的CAFFE VGG16重量及其调谐对应物:
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更新 - 2019年5月23日,我们添加了一组新的重量,在没有光效率场景的情况下对Megadepth进行了训练(Sagrada_familia -0019 -0019,Lincoln_memorial_statue -0021 -0021,Blitiss_museum -0024 -0024,Lendon_bridge -0025,US_CAPITOL -us_capitol -0078,Mount_rush,Mount -Mount -Mount -158999999999.我们的初始结果显示出相似的性能。为了在测试时使用这些权重,您应该添加--model_file models/d2_tf_no_phototourism.pth 。
extract_features.py可用于提取给定图像列表的D2功能。对于1200x1600图像,单打功能需要少于6GB的VRAM。 --multiscale标志可用于提取多尺度功能 - 为此,我们建议至少12GB的VRAM。
输出格式可以是npz或mat 。无论哪种情况,功能文件都封装了三个数组:
keypoints [ N x 3 ]阵列包含Kepoints x, y和Scales s的位置。位置遵循Colmap格式, X轴指向右侧,将Y轴指向底部。scores [ N ]阵列包含关键点的激活(较高)。descriptors [ N x 512 ]包含L2归一化描述符的数组。 python extract_features.py --image_list_file images.txt (--multiscale)Kapture是一种基于文本和二进制文件的枢轴文件格式,用于描述SFM(MOTION中的结构)和更广泛的传感器获得数据。
它可在https://github.com/naver/kapture上找到。它包含用于流行格式的转换工具,而Kapture中直接可用几个流行的数据集。
它可以安装:
pip install kapture数据集可以下载:
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_* "如果您想将自己的数据集转换为Kapture,请在此处找到一些示例。
安装后,您可以使用以下方式提取Kapture数据集的关键点
python extract_kapture.py --kapture-root pathto/yourkapturedataset (--multiscale)运行python extract_kapture.py --help以获取有关提取参数的更多信息。
此处提供的培训管道是Tensorflow代码的Pytorch实现,用于训练上面可下载的模型。
更新 - 2019年6月5日,我们已修复了数据集预处理中的一个错误 - 重新处理现在与原始Tensorflow实现相似。
更新 - 2019年8月7日,我们发布了培训数据集的更新,更准确的版本 - 培训更稳定,相同性能的速度更快。
对于此部分,应安装Colmap。请参阅官方网站以获取安装说明。
在下载整个Megadepth数据集(包括SFM型号)之后,第一步是生成未介绍的重建。这可以通过调用undistort_reconstructions.py来完成:
python undistort_reconstructions.py --colmap_path /path/to/colmap/executable --base_path /path/to/megadepth接下来,可以使用preprocess_megadepth.sh来检索相机参数并计算所有场景图像之间的重叠。
bash preprocess_undistorted_megadepth.sh /path/to/megadepth /path/to/output/folder下载和预处理概述后,可以立即开始培训:
python train.py --use_validation --dataset_path /path/to/megadepth --scene_info_path /path/to/preprocessing/output如果您在项目中使用此代码,请引用以下论文:
@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 } ,
}