Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kaggle 過去コンペまとめ Image Matching Challenge 2023

kami
April 17, 2024
230

Kaggle 過去コンペまとめ Image Matching Challenge 2023

LAIMEの勉強会で利用した資料です。

kami

April 17, 2024
Tweet

Transcript

  1. 1. コンペ概要・前提知識 2. 基本的な解法 3. 個別の技術紹介 4. voteの多い Notebook&Discussion 5.

    上位解法 目次 3 ※プライベートシェアリングにならないように2024年のコンペに ついては言及しません
  2. Image Matching Challenge 2023 • CVPR 2023 Workshop の併設コンペ •

    タスク概要 ◦ ランドマークを様々な位置や角度から撮影した複 数の画像が与えられ、それぞれの撮影位置と向き を推定する ◦ Structure from Motion と呼ばれるタスク 5
  3. データ形式 6 • [train/test]/*/*/images ◦ 同じ場所の近くで撮影された画像のバッチ。学習 用データセットの中には、images_fullというフォ ルダにさらに画像が含まれているものもある。 • train/*/*/sfm

    ◦ このバッチ画像の3D再構成。この画像は、本コン ペティションにバンドルされているライブラリ, colmapで開くことができる。 • train/train_labels.csv ◦ 正解ラベルを含むデータセットの画像のリスト
  4. ピンホールカメラモデル(Pinhole Camera model) ① • 3D の空間にある物体が2D 画像に投影される状態を記述 するためのモデリングの一つ •

    3つの座標系が存在 ◦ ワールド座標系: w ◦ カメラ座標系: c ◦ 画像座標系 8 画像引用:https://kornia.readthedocs.io/en/stable/geometry.camera.pinhole.html
  5. ピンホールカメラモデル(Pinhole Camera model) ② • ワールド座標系→カメラ座標系 回転と平行移動で変換 • 今回のコンペティションで出力し たいのは

    R, t 9 画像引用:https://kornia.readthedocs.io/en/stable/geometry.camera.pinhole.html ワールド座標系における 物体の座標 カメラ座標系における 物体の座標
  6. 評価 mean Average Accuracy (mAA) • scene ごとに正解率を計算して平均を取る ◦ 画像をペアにしたときの全組み合わせについて,

    以下の差の誤差を計算 ▪ 2つのGTの rotation_matrix, translation_vector の差 ▪ 2つの予測値の rotation_matrix, translation_vectorの差 ◦ 閾値ごとに正解率を計算して平均を取る ▪ 誤差が閾値以内あれば正解とする 10 ペアを使って計算をしているのは、おそらく一つの画像の rotation_matrix, translation_vector の値は基準と なる座標が変わると値が変わってしまうため 2つ使えば相対的な位置関係で値が一意に定まる
  7. 全体の流れ 12 scene(撮影の対象物)ごとに画像セットが与えられているのでsceneごとに以下を実行する 1. 類似する画像のペアを作る 2. 画像のキーポイントを検出 3. ペア画像のキーポイントマッチングを計算 4.

    ペア画像の対応を表す基礎行列の計算 5. ペア画像の基礎行列を使って Sparse Reconstruction 参考: https://www.kaggle.com/code/eduardtrulls/imc-2023-submission-example
  8. 1. 類似する画像のペアを作る 13 • 目的 ◦ 類似画像同士のペアを作成したい ▪ 全通りペアを作成してしまうと後の計算 で時間が足りなくなってしまう

    • やること a. 画像モデルで embedding 計算 ▪ input: 画像 ▪ output: embedding b. embedding 同士の cosine 類似度を計 算し、画像ごとに上位N件をペアにする 似てる 似てない ︙ 似てる
  9. 2. 画像のキーポイントを検出 14 • 目的 ◦ 画像の特徴的な点(キーポイント)を検出したい ▪ ペア画像のキーポイントマッチングに使う •

    やること ◦ キーポイント検出のアルゴリズム/モデルを使う ▪ 入力: 画像 ▪ 出力: キーポイント • 例 ◦ SIFT ◦ DISK ◦ SuperPoint 引用元:https://github.com/cvlab-epfl/disk?tab=readme-ov-file [Michał J. Tyszkiewicz, Pascal Fua, Eduard Trulls, 2020]
  10. 3. ペア画像のキーポイントマッチング 15 • 目的 ◦ ペア画像間のキーポイントの対応を見つける • やること ◦

    キーポイントマッチングのモデルを使う ▪ 入力: キーポイント検出済みの画像ペア ▪ 出力: キーポイント同士の対応 • 例 ◦ SuperGlue ◦ LightGlue (2023) 引用元:[Paul-Edouard Sarlin, Daniel DeTone, Tomasz Malisiewicz, Andrew Rabinovich,2020]
  11. 4. ペア画像の対応を表す基礎行列の計算 16 • 目的 ◦ ペア画像の対応を表す基礎行列を計算する ▪ Sparse Reconstruction

    で用いる • やること ◦ RANSACによる基礎行列の計算 ▪ Random sample consensus (RANSAC)によって iterative に外れ値を無視した better な基礎行列を求める ◦ pycolmapを使えば簡単に実行できる
  12. 参考:エピポーラ幾何と基礎行列 17 • エピポーラ幾何 (epipolar geometry) ◦ 2台のカメラで撮影した画像間における幾何 • 基礎行列

    ◦ カメラ固有の(内部)パラメータを用いて正規 化しない場合 X L と X R の位置はある行列F を用いて表現でき、これを基礎行列と呼ぶ ◦ 正規化する場合は基本行列と呼ぶ 引用元: https://kornia.readthedocs.io/en/stable/geometry.epipolar.html
  13. 5. ペア画像の基礎行列を使って Sparse Reconstruction 18 • 目的 ◦ 3D再構成とともにカメラの位置と向きを計算 •

    やること ◦ pycolmap.incremental_mapping ▪ 基礎行列を計算したペア画像を一組ずつ incremental に用いることで3D再構成す るアルゴリズムを提供 引用元:https://github.com/cvlab-epfl/disk?tab=readme-ov-file [Michał J. Tyszkiewicz, Pascal Fua, Eduard Trulls, 2020]
  14. SIFT (キーポイント検出) • 回転・スケール変化・照明変化等に頑健 なキーポイント検出 • アルゴリズム ◦ 少しずつ平滑化を強めた画像を用意し、その差 分画像(DoG画像)を計算

    ◦ DoG画像から極値となる画素を特徴点候補と して抽出 ▪ スケールに頑健になるように前後のスケールも 合わせて周囲の26近傍を比較 ◦ 特徴点の勾配強度と勾配方向を求め、4x4の ブロックからそれぞれ 8 方向の勾配方向ヒスト グラムを生成し、128次元の特徴量を得る 20 引用元:[DG Lowe, 2004]
  15. SuperPoint (キーポイント検出) • 自己教師あり学習によるキーポイント検出の手法 • 2head のモデル構造と多段の学習 • モデル中の65次元は 8x8

    + 1(no point) を表し、 8x8のセル上にキーポイントが存在するのかを表す 21 引用元:[Daniel DeTone, Tomasz Malisiewicz, Andrew Rabinovich, 2017]
  16. Notebook(ソリューション以外) • [EDA] 🏛IMC ~ 🔻3D plots | 📊Interactive vis

    ◦ 3d 再構成したときの結果を可視化 • imc-2023-submission-example ◦ ホストによるサンプル提出。これに習うだけで一通り実行できる上、意外とコード量 は少ない • imc2023-evaluation ◦ ホストによる評価コード • Image Matching Data Discovery and SIFT features ◦ SIFTによるキーポイントマッチングと可視化 27
  17. Discussion(ソリューション以外) • Learning Materials for Completely New to Structure from

    Motion ◦ SfM に関わる youtube 動画のリスト • Medals sellers are always there ◦ メダル圏内のソリューションを売っているのでは?という不正に関する話。 • Recent promising CVPR2023 papers on image matching. ◦ CVPR2023の関連研究のリスト。いくつかは上位ソリューションで使われている • Last year's image matching competition winning solutions ◦ IMC2022のソリューションリスト • Visually explore the dataset! ◦ データセット作成用のオープンソースツール FiftyOne を可視化として使う紹介 28
  18. 1st place solution (public 1st / private 1st) ① 30

    • ペア作成 ◦ NetVLAD • マッチング ◦ 90°回転により向きをあわせる ◦ マッチ部分をクロップしてスケー ルを合わせる ◦ 2つの手法を組み合わせ ▪ sparse method (SPSG) ▪ dense method (LoFTR) • dense method を組みわせると生じ る問題を後の処理で解消
  19. 1st place solution (public 1st / private 1st) ② 31

    • dense method を組みわせると生じる問題 ◦ ペア画像を入力としてキーポイントとマッチングを 作るため、一つの画像におけるキーポイントの位置 がペアごとに微妙に異なる 引用元:[Xingyi He, Jiaming Sun, Yifan Wang, Sida Peng, Qixing Huang, Hujun Bao, Xiaowei Zhou, 2023] • Transformer ベースのモデルと Geometry Refinement を組み 合わせて正確な結果を得る ◦ モデルはMegaDepthデータで 学習
  20. 2nd place solution (public 3rd / private 2nd) 32 •

    ペア作成 ◦ すべての画像ペアを利用 ◦ あとでマッチ数が100以上のものだけにフィ ルタ • マッチング ◦ Rotate detectionで回転検出と修正 ◦ SuperPoint&SuperGlueの組み合わせ ◦ 結果をキャッシュすることで高速化 • COLMAPにいれる最初のペアはマッチ数が 最も多いものにする • 閾値を変えて複数回再構成を実施し、画像数 と3Dポイントの数を元に最適なものを選択
  21. 2nd place solution (public 3rd / private 2nd) 33 •

    大きく効いてそうなもの ◦ 画像サイズの変更 ◦ 複数画像サイズの組み合わせ ◦ Rotate detection ◦ Multi-run reconstruction
  22. 3rd place solution(ban?) (public ? / private ?) 34 •

    画像が大きすぎる場合は長辺1920になるまでリサイズ • 各画像ペアについて片方を4回転して SuperGlue • GeoVerification(RANSAC) ◦ cv2.findFundamentalMat(mkpts0, mkpts1, cv2.USAC_MAGSAC, 2, 0.99999, 100000) • EXIFデータの利用 • 3D再構成の再実行: register ratio(復元に失敗した画像の割合)が 1 未満ならパラメータを変 えて再実行
  23. 4th(3rd) place solution (public 9th / private 3rd) 35 •

    90°回転を試してマッチ数が少なければ飛ばす • マッチング ◦ DKM v3 を使うと Super Glue では拾えなかったマッチングを拾えるように ◦ 画像を4分割して4x4 でマッチングさせる。SuperPointがオーバーヘッドなので実行時間は4倍程度
  24. 5th(4th) place solution (public 13th / private 4th) 36 •

    2022年の優勝ソリューションがベース ◦ DBSCANを利用することで、上位80〜 90%の一致するキーポイントを含むクラ スターを取得し、特徴的な領域のみを Cropする • 4種の回転画像を用意し、軽量なモデルで マッチさせる • CPUタスクとGPUタスクを別スレッドで実行 することで高速化を実現
  25. 6th(5th) place solution (public 5th / private 5th) 37 •

    KeynetAffnetHardnet+Adalam によるマッチング • EXIFの焦点距離の情報を利用 • CPUタスクとGPUタスクを別スレッド で実行することで高速化を実現
  26. まとめ 38 • マッチング ◦ 多くのチームが 90°回転をうまく使っていた ◦ リサイズ・クロップ・分割は性能に大きく影響 ◦

    複数のマッチング方法をうまく組み合わせて性能向上 • 3D 再構成 ◦ refine するか複数実施して適切な再構成を選択すると性能向上
  27. 参考 IMC 2023 • Image Matching Challenge 2023 _ Kaggle

    • Kaggle Image Matching Challenge 2023を振り返る IMC 2022 • Image Matching Challenge 2022 _ Kaggle • Kaggle Image Matching Challenge 2022 まとめ #Python - Qiita 40