Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
しくじり先生 Image Matching Challenge 2024 編
Search
goosehaaan
July 05, 2024
Programming
1
1.4k
しくじり先生 Image Matching Challenge 2024 編
2024/7/5の関西kaggler会の発表資料です。
goosehaaan
July 05, 2024
Tweet
Share
Other Decks in Programming
See All in Programming
Nurturing OpenJDK distribution: Eclipse Temurin Success History and plan
ivargrimstad
0
1.2k
Click-free releases & the making of a CLI app
oheyadam
2
120
Jakarta EE meets AI
ivargrimstad
0
320
3rd party scriptでもReactを使いたい! Preact + Reactのハイブリッド開発
righttouch
PRO
1
610
AI時代におけるSRE、 あるいはエンジニアの生存戦略
pyama86
6
1.2k
2024/11/8 関西Kaggler会 2024 #3 / Kaggle Kernel で Gemma 2 × vLLM を動かす。
kohecchi
5
980
エンジニアとして関わる要件と仕様(公開用)
murabayashi
0
320
카카오페이는 어떻게 수천만 결제를 처리할까? 우아한 결제 분산락 노하우
kakao
PRO
0
120
React への依存を最小にするフロントエンド設計
takonda
20
6k
WebフロントエンドにおけるGraphQL(あるいはバックエンドのAPI)との向き合い方 / #241106_plk_frontend
izumin5210
4
1.4k
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
0
110
Duckdb-Wasmでローカルダッシュボードを作ってみた
nkforwork
0
140
Featured
See All Featured
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
Become a Pro
speakerdeck
PRO
25
5k
How to train your dragon (web standard)
notwaldorf
88
5.7k
Visualization
eitanlees
145
15k
Raft: Consensus for Rubyists
vanstee
136
6.6k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
How To Stay Up To Date on Web Technology
chriscoyier
788
250k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
93
17k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
KATA
mclloyd
29
14k
Speed Design
sergeychernyshev
25
620
Testing 201, or: Great Expectations
jmmastey
38
7.1k
Transcript
Image Matching Challenge 2024 編
自己紹介 ぐちやま @goosehaaan - 社会人4年目のメーカーDS - 物理系出身 - 東京在住(一昨年まで2年間京都) - コンペは雑食・ソロ参加
- 趣味 ランニング(毎日7km) 旅行
Agenda - コンペ概要 - 上位解法 - しくじり紹介 - 教訓・まとめ
Image Matching Challenge 2024 - Hexathlon - CVPR Workshopの併設コンペ -
2022年から始まり今年で3回目(2024/3/26 - 2024/6/4) - シーン毎の画像セットから、カメラ位置・角度を推定するタスク - train: 36 ~ 1148枚、test: ~100枚 / シーン 教会シーンの場合 1) より引用
Image Matching Challenge 2024 - Hexathlon - 評価指標は全画像ペアの回転・並進行列の差の誤差を用いたmAA(mean Average Accuracy)
- シーンに応じて与えられた6段階の閾値ごとに正解率を計算、平均化 - シーンごとに正解率を計算、平均化 教会シーンの場合 1) より引用
Image Matching Challenge 2024 - Hexathlon 今年はHexathlon(六種競技)の名の通り、6種類の課題に該当するシーンが対象だった。 simmetories-and-repeats historical-preventation air-to-ground
day-night nature transparent
以下ベースライン(ホスト提供)を元にしたパイプラインが基本となる。 パイプライン 1. 画像マッチング(DINOv2) 3. 特徴点マッチング(LightGlue) 4. カメラポーズ推定(COLMAP) 2. 特徴点抽出(ALIKED)
keypoints (n_kpts , 2) descriptions (n_kpts , n_dim) keypoints (n_kpts , 2) matches (n_mchs , 2) 1) より引用 特徴点の座標とペア情報を COLMAP DBに保存 RANSACを用いた基礎行列計算 シーン再構成
Agenda - コンペ概要 - 上位解法 - しくじり紹介 - 教訓・まとめ
多くのチームが 1. 通常シーンと、2. 透明シーン で別々のパイプラインを組んでいた。 上位解法 1. 通常シーン 2. 透明シーン
1. 通常シーン - 大きく3種類の工夫ポイントがあった 1. 画像マッチング 2. 特徴点マッチング 3. カメラポーズ推定
上位解法
1. 通常シーン 1. 画像マッチング 上位解法 - 画像特徴による類似度マッチング - 特徴抽出の工夫 -
ベースラインのDINOv2を用いるチームが多かった - 画像:頂点、類似度:辺とする最小全域木を計算 - 網羅的マッチング - 全マッチングを試す - 今回は1シーンあたり画像数が最大100枚 - 高速化で対応可能だった 2位解法より引用
1. 通常シーン 2. 特徴点マッチング 上位解法 - モデル - ベースラインのALIKED +
LightGlueを用いるチームが多かった - division - 画像を分割して、より細かい特徴点を抽出 - rotation - 画像を90度ずつ回転させ、最もマッチする特徴点数が多い方向でマッチング - crop - マッチする特徴点の密集領域をcrop 1位解法より引用 6位解法より引用
1. 通常シーン 3. カメラポーズ推定 上位解法 - 独自のSfMパイプラインでCOLMAPのモデルを精緻化 - できるだけ多くの画像を再構成結果に登録 3位解法より引用
6位解法より引用
上位解法 2. 透明シーン - カメラが物体を取り囲むように撮影方法が特徴的だった - 通常パイプラインだと一見変化していない輪郭や背景でマッチしてしまう - 大きく2つのアプローチがあった 1)
より引用
上位解法 2. 透明シーン 2位解法より引用 1. DIP (Direct Image Pose estimation)
- 画像の類似度を元に画像の順序を推定後,カメラパラメータを直接推定するアプローチ - SSIM、画像・特徴点の特徴などが類似度に用いられた
上位解法 2. 透明シーン 2. マッチングの工夫 - 前処理の工夫により微細特徴を元に通常通りマッチングをおこなうアプローチ - 物体表面のcropなど 4位解法より引用
6位解法より引用
自分の結果 - 通常シーン - 画像マッチング:dinov2-base, netvlad - 特徴点マッチング: - ALIKED
+ LightGlue - rotation -> 4 divisions -> resize -> extract keypoint - 透明シーン - 画像マッチング:全マッチング - 特徴点マッチング: - ALIKED + LightGlue - padding -> object detection -> resize -> 9 divisions -> extract keypoint CVはいい感じ...!!
自分の結果 - 通常シーン - 画像マッチング:dinov2-base, netvlad - 特徴点マッチング: - ALIKED
+ LightGlue - rotation -> 4 divisions -> resize -> extract keypoint - 透明シーン - 画像マッチング:全マッチング - 特徴点マッチング: - ALIKED + LightGlue - padding -> object detection -> resize -> 9 divisions -> extract keypoint
Agenda - コンペ概要 - 上位解法 - しくじり紹介 - 教訓・まとめ
僕の苦労・失敗談4つを紹介 年一コンペの割に公開codeも少なく 参入障壁が高めのコンペに感じたので 来年以降初参加される方々の参考になれば幸いです
推論結果が 毎回変わる - COLMAPの出力結果が毎回変わる - 自環境では以下でパイプライン全 体の再現性を確保 - pycolmapのパラメータ変更 -
torch系ライブラリのversion変更 - torch.backends設定変更 - 公開codeでPB300~800位程度のス コアのばらつき - 非対処の上位解法もあり 1
- 明らかにマッチングが改善している のにスコアが向上しない - 画像に対しておこなった変換を、 colmap DBに保存する特徴点に反映し ていなかった - 画像変換
-> 特徴点逆変換のクラスを 用意して対処 2 特徴点の 逆変換を 忘れる
透明シーンの 検証が 足りない - 指紋や傷で特徴点を得るというアイ デアはあったが、やりきれず - 汎用detectorで輪郭内部を検出 - classは無視してscore最大のbboxを
cropする戦略をとった - 一方で上位解法では”bottle” classの あるデータセットで事前学習された segmenterを使用 - モデル調査やsegmentationをもっと 試すべきだった 3
テストシーンの 仕様を 間違える 4 - 史上最大のやらかし - testシーン名がtrainシーン名を含むも のと思い込む(実際はunknown) -
シーン毎に名前で条件分岐させたた め、全パイプラインがelse処理に - discussionにはちゃんと書いてあった
colmapのログ出力が長すぎる 公開notebookのALIKEDのresizeが機能していない LightGlueとHierarchical-Localizationがkaggle notebookでインストールできない 特徴点をアンサンブルしすぎてごく近傍なのに別の特徴点がマッチングしてしまう 透明シーンの順番推定を検証前に諦める 可視化が不十分で教会シーンの再構成の偏りに気付けない 出張期間用に自宅マシンの外部接続設定をするも使わない kaggle notebook上でプライベートレポジトリをcloneできない
何故か実験管理ツールが動かない 全く効かないcrop+アンサンブル+nmsのためにめちゃくちゃ時間を溶かす 提出ID以外の画像がtestセットに含まれていることに気付けない カメラ位置の閾値から透明シーンにおけるオブジェクトとの距離を推測できなかった : ∞
Agenda - コンペ概要 - 上位解法 - しくじり紹介 - 教訓・まとめ
教訓 - discussionはきちんと読む - ローカルでの実験が上手くいっているとdiscussionやcodeを読む優先度を下げがち - 定期的に時間を作ってupdateを追う - 本当にだいじ -
信じたアイデアにはとことん向き合う - 心中しても良いと思えるアイデアを見つける - ソロだと特に向かうべき道が定まらないことも多いイメージ - 微妙なアイデアも一旦試してみる - あきらめるのは簡単 - あまねく試せる手の速さを!
まとめ - Image Matching Challengeはアイデア次第で結果を出せる(はずの)面白いコンペ - しくじりを知ることで圧倒的成長 - つよつよな方々のしくじりも聞いてみたい -
Masterなりたい!!!! だ な り た い っ
参考 1) kaggle IMC2024コンペ 上位解法まとめ