このリポジトリには、次の論文の実装が含まれています。
"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、LINCOLN_MEMORIAL_STATUE -0021、BRITISH_MUSEUM -0024、LONDON_BRIDGE -0025、US_CAPITOL -0078、Mount_Ridge -1589)。最初の結果は、同様のパフォーマンスを示しています。これらのウェイトをテスト時に使用するには、 --model_file models/d2_tf_no_phototourism.pthを追加する必要があります。
extract_features.py使用して、特定の画像リストのD2機能を抽出できます。シングルスケールの機能には、1200x1600の画像には6GB未満のVRAMが必要です。 --multiscaleフラグは、マルチスケール機能を抽出するために使用できます。これについては、少なくとも12GBのVRAMをお勧めします。
出力形式は、 npzまたはmatいずれかです。どちらの場合でも、機能ファイルは3つの配列をカプセル化します。
x, yおよびスケールsの位置を含むkeypoints [ N x 3 ]アレイ。位置はcolmap形式に続き、 X軸は右を指し、 Y軸は底部に向かっています。scores [ N ]アレイ(高い方が優れています)。descriptors [ N x 512 ] L2正規化記述子を含む配列。 python extract_features.py --image_list_file images.txt (--multiscale)Kaptureは、テキストおよびバイナリファイルに基づいたピボットファイル形式であり、SFM(モーションからの構造)、より一般的にはセンサーアッチのデータを記述するために使用されます。
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をインストールする必要があります。インストール手順については、公式Webサイトを参照してください。
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/folderMegadepthをダウンロードおよび前処理した後、トレーニングはすぐに開始できます。
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 } ,
}