Este repositório contém a implementação do seguinte artigo:
"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, página do projeto
O Python 3.6+ é recomendado para executar nosso código. O CONDA pode ser usado para instalar os pacotes necessários:
conda install pytorch torchvision cudatoolkit=10.0 -c pytorch
conda install h5py imageio imagesize matplotlib numpy scipy tqdmOs pesos do Caffe VGG16 no entanto e sua contraparte sintonizados podem ser baixados com: Running:
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 May 2019 We have added a new set of weights trained on MegaDepth without the PhotoTourism scenes (sagrada_familia - 0019, lincoln_memorial_statue - 0021, british_museum - 0024, london_bridge - 0025, us_capitol - 0078, mount_rushmore - 1589). Nossos resultados iniciais mostram desempenho semelhante. Para usar esses pesos no tempo de teste, você deve adicionar --model_file models/d2_tf_no_phototourism.pth .
extract_features.py pode ser usado para extrair recursos D2 para uma determinada lista de imagens. Os recursos da escala de solteiro requerem menos de 6 GB de VRAM para imagens de 1200x1600. O sinalizador --multiscale pode ser usado para extrair recursos em várias escalas -para isso, recomendamos pelo menos 12 GB de VRAM.
O formato de saída pode ser npz ou mat . Em ambos os casos, os arquivos de recursos encapsulam três matrizes:
keypoints [ N x 3 ] Matriz contendo as posições dos pontos -chave x, y e as escalas s . As posições seguem o formato Colmap, com o eixo X apontando para a direita e o eixo Y para o fundo.scores [ N ] contendo as ativações dos pontos -chave (mais alto é melhor).descriptors [ N x 512 ] Matriz contendo os descritores normalizados de L2. python extract_features.py --image_list_file images.txt (--multiscale)O Kapture é um formato de arquivo pivô, com base em arquivos de texto e binário, usado para descrever os dados SFM (estrutura do movimento) e, mais geralmente, adquiridos no sensor.
Está disponível em https://github.com/naver/kapture. Ele contém ferramentas de conversão para formatos populares e vários conjuntos de dados populares estão diretamente disponíveis no Kapture.
Pode ser instalado com:
pip install kaptureOs conjuntos de dados podem ser baixados com:
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_* "Se você deseja converter seu próprio conjunto de dados em Kapture, encontre alguns exemplos aqui.
Depois de instalado, você pode extrair pontos -chave para o seu conjunto de dados Kapture com:
python extract_kapture.py --kapture-root pathto/yourkapturedataset (--multiscale) Execute python extract_kapture.py --help para obter mais informações sobre os parâmetros de extração.
O pipeline de treinamento fornecido aqui é uma implementação Pytorch do código Tensorflow que foi usado para treinar o modelo disponível para baixar acima.
Atualização - 05 de junho de 2019 Corrigimos um bug no pré -processamento do conjunto de dados - A reciclagem agora produz resultados semelhantes à implementação original do tensorflow.
ATUALIZAÇÃO - 07 de agosto de 2019 Lançamos uma versão atualizada e mais precisa do conjunto de dados de treinamento - o treinamento é mais estável e significativamente mais rápido para desempenho igual.
Para esta parte, o Colmap deve ser instalado. Consulte o site oficial para obter instruções de instalação.
Depois de baixar todo o conjunto de dados da Megadeptth (incluindo modelos SFM), a primeira etapa está gerando as reconstruções não distorcidas. Isso pode ser feito chamando undistort_reconstructions.py da seguinte forma:
python undistort_reconstructions.py --colmap_path /path/to/colmap/executable --base_path /path/to/megadepth Em seguida, preprocess_megadepth.sh pode ser usado para recuperar os parâmetros da câmera e calcular a sobreposição entre imagens para todas as cenas.
bash preprocess_undistorted_megadepth.sh /path/to/megadepth /path/to/output/folderApós o download e pré -processamento de megadepth, o treinamento pode ser iniciado imediatamente:
python train.py --use_validation --dataset_path /path/to/megadepth --scene_info_path /path/to/preprocessing/outputSe você usar este código em seu projeto, cite o seguinte artigo:
@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 } ,
}