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
IMC の細かすぎる話 2025
Search
@smly
July 24, 2025
Research
2
540
IMC の細かすぎる話 2025
Image Matching Challenge 2025 振り返り会にて発表した資料です。
https://turing.connpass.com/event/360266/
@smly
July 24, 2025
Tweet
Share
More Decks by @smly
See All by @smly
(Recognition) Large-scale Landmark Retrieval/Recognition under a Noisy and Diverse Dataset
smly
1
470
(Retrieval) Large-scale Landmark Retrieval/Recognition under a Noisy and Diverse Dataset
smly
2
11k
画像検索 (特定物体認識) — 古典手法、マッチング、深層学習、Kaggle
smly
24
7.6k
データ分析コンテストの 勝者解答から学ぶ
smly
46
18k
データ分析コンテストの技術と最近の進展
smly
25
8.9k
Python とデータ分析コンテストの実践
smly
15
8.8k
実験の再現性と効率化の話(Docker と Serialization 周辺)
smly
5
3.2k
Workflow, Serialization & Docker for Kaggle
smly
10
2.7k
Chapter9 Convolutional Networks
smly
2
360
Other Decks in Research
See All in Research
Streamlit 総合解説 ~ PythonistaのためのWebアプリ開発 ~
mickey_kubo
1
1.3k
Principled AI ~深層学習時代における課題解決の方法論~
taniai
3
1.2k
心理言語学の視点から再考する言語モデルの学習過程
chemical_tree
2
540
Creation and environmental applications of 15-year daily inundation and vegetation maps for Siberia by integrating satellite and meteorological datasets
satai
3
180
Towards a More Efficient Reasoning LLM: AIMO2 Solution Summary and Introduction to Fast-Math Models
analokmaus
2
710
2025年度 生成AIの使い方/接し方
hkefka385
1
750
多言語カスタマーインタビューの“壁”を越える~PMと生成AIの共創~ 株式会社ジグザグ 松野 亘
watarumatsuno
0
100
Google Agent Development Kit (ADK) 入門 🚀
mickey_kubo
2
1.5k
最適決定木を用いた処方的価格最適化
mickey_kubo
4
1.8k
SatCLIP: Global, General-Purpose Location Embeddings with Satellite Imagery
satai
3
250
Large Language Model Agent: A Survey on Methodology, Applications and Challenges
shunk031
14
9.5k
2021年度-基盤研究B-研究計画調書
trycycle
PRO
0
190
Featured
See All Featured
Embracing the Ebb and Flow
colly
86
4.8k
[RailsConf 2023] Rails as a piece of cake
palkan
56
5.8k
Music & Morning Musume
bryan
46
6.7k
The Straight Up "How To Draw Better" Workshop
denniskardys
235
140k
How to train your dragon (web standard)
notwaldorf
96
6.2k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
How to Ace a Technical Interview
jacobian
278
23k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
131
19k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.6k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
Transcript
IMC の細かすぎる話 2025 〜 COLMAP はアツいという話をそえて 〜
Agenda 最近の発展を紹介しつつ IMC を振り返り COLMAP の細かい話 Factory パターンと動的ローディングのススメ
Image Matching Challenge 2025 の概要 画像集合からカメラの姿勢 (rotation matrix) と座標 (translation
vector) を答える定番コンペ。 2025年度は画像集合に関係ない画像 (outlier) が含まれる。クラスタリングして推定する必要がある。
文字が見えない角度でも 文字盤とマッチしている
オブジェクトの裏側とマッチしている。 Keypoint detection してマッチングする アプローチだとまず無理
最近の進化:3D基盤モデル MASt3R pixel-aligned な点群を学習させることで 3D 空間の視点が必要なマッチングが可能に。 局所特徴を使った定番アプローチと比較して極端に視点が異なる場面で極めて強力。 一方で(画像が十分にある場面など)簡単な事例で精緻な推定が必要となるケースでは、それほど強くない。
最近の進化:VGGT CVPR’25 の best paper。”2枚以上” の画像を与えて、カメラ姿勢推定も深度推定もあわせてすべて同時に解く。必要とな る VRAM が大きいため IMC
環境ではうまく利用できたチームはいなかった。 MASt3R と同様、精緻な推定が必要となる場面では定番アプローチほど正確ではない。 (Camera Head で IMC’25 train の評価をしたが、可もなく不可もなくという結果。)
全画像ペアのマッチングと適応的なクラスタリング (7th place) 全画像ペアのマッチング後に inlier count で類似グラフを作成。 80 percentile point
の inlier count をしきい値としてグラフをカットしてクラスタ作成 独自に「クラスタのIoU」によりクラスタリング手法をローカルで評価して判断 VGGT (refiner のみ使用)、MASt3R を試すも上手く行かず停滞。猛省
1st place solution: MASt3R-Hybrid 全画像ペアの MASt3R によるマッチングは計算コストが高くて無理。画像検索によってマッチングするペアのリスト (shortlist) を作成する。MASt3R に加えて定番の
keypoint detector (ALIKED, SuperPoint) で keypoints を検出して、 MASt3R の semi-dense keypoints とあわせて MASt3R matcher でマッチングさせてる(精緻化を期待)。 Detection-based keypoints は必要? この hybrid なアプローチでは semi-dense も別アルゴリズムによ る detector から得られた keypoints も、MASt3R Matcher でマッ チングする。なので MASt3R の local features の良し悪しに依存 する。Matcher で合流せず concat して COLMAP で解くとアプ ローチごとの得意不得意を補って良い結果が得られた。 追試したが MASt3R-ASMK のみで十分。ただし計算コス トがほぼ無料なのでわずかに安定が増すならば積み得。
Agenda 最近の発展を紹介しつつ IMC を振り返り COLMAP の細かい話 Factory パターンと動的ローディングのススメ
pycolmap 3.10 から version が COLMAP と共通に これまで pycolmap リポジトリは
colmap とは別のリポジトリでメンテナンスされていた。 2024年7月の pycolmap 3.10.0 より本家の colmap リポジトリに統合された。 pycolmap パッケージの versioning が colmap と一緒に。めちゃ良いニュース!
pycolmap 3.10 から API が色々と変わった 3.10 から大きなリファクタリングが実施されており、API の変更点も多い。 Jianyuan Wang
が書いた VGGSfM の refiner によって point tracks を refine するスクリプト https://www.kaggle.com/code/jianyuanv/vggsfm-to-refine-pycolmap-tracks は CVPR’24 前の pycolmap 0.6.0 までは動作するが、その後の 3.10 以降は API 変更の影響を受けて動作しない。
Filtering logic が ObservationManager に移動 pycolmap 0.6.0 では filtering の各種ロジックを
Reconstruction オブジェクトのメソッドとして実装 されていたが、pycolmap 3.10 では削除されている。 代わりに ObservationManager オブジェクトが追加され、Reconstruction オブジェクトを渡して呼 び出すように仕様変更されている。ほかにも Image クラスなど Primitive なクラスから SfM のみに 使う実装を分離している。 Add ObservationManager #2575 https://github.com/colmap/colmap/pull/2575
RANSAC の停止判定の修正 (3.12.0; 2025/6/30) 停止基準に使用される「all-inlier set をサンプリングする確率 P」を近似確率から厳密な確率へ置き換えることで性 能向上した。 OpenCV,
scikit-image, COLMAP をはじめ多くの OSS 実装がこの楽観的な近似を採用していた。 1981年に示された式では、インライア比率 p の k 反復である p^k で P を近似。非復元抽出を考慮していない楽観的 な近似となっており、P を高く見積もりすぎてしまう。 これは早期停止による under sampling が起こりやすくなり、結果として誤差を生む。特にノイズが多い場合や複雑 なモデルの場合に影響が大きい。(p が小さいとき、k が大きいとき) “Fixing the RANSAC Stopping Criterion” https://arxiv.org/abs/2503.07829 COLMAP 3.12.0 にて修正。
COLMAP はアツい
Agenda 最近の発展を紹介しつつ IMC を振り返り COLMAP の細かい話 Factory パターンと動的ローディングのススメ
IMC はソフトウェア開発の工夫が活きる 様々な実験をしていくとコードベースはどんどん膨大に なっていく。ソフトウェア開発の工夫が活きる。 • Pydantic による config の validation
• Factory パターンによるモジュール分離 • テスト!テスト!テスト!(単体、統合、品質) コード例は IMC’25 1st place solution を拝借 →
経験的にモジュール間の結合を疎にしてポータビリティを上げ ると実験や開発がしやすくなる Factory モジュールをロードすると、ほかの具象クラスのモジュール も同時にロードする。複数の環境で動作して欲しいときに環境依存 の問題が起きやすくなる。 → 更に結合を疎にしてポータビリティを上げたい! 例:asmk パッケージ(環境にあわせて事前ビルド)が必要なときだ
け asmk パッケージを import して欲しい 例:なぜか pycolmap のパッケージで RuntimeError になるので必要 になるまで import しないで欲しい(※ pyceres とのバージョン不整 合でよく起こる) 例:ARM アーキテクチャでの動作をサポートしないが、開発環境で テストを動かすなど部分的に実行できるようにしたい コード例は IMC’25 1st place solution を拝借 →
Factory パターン + 動的ロードで結合を切る importlib.import_module() で動的にモジュールをロードすることで疎結合にする。 リファクタリングが難しくなる・型のサポートが部分的に消えるデメリットもあるが、 研究的なコードでは同時に依存関係を満たすことが難しいポータビリティの悪いパッケージがある。 HF transformers
も auto 系クラスは dynamic_module_utils.py から importlib で動的ロード。
デプロイ:vscode-fast-kaggle で Ctrl+Shift+U VSCode 上でショートカットキーひとつでコードベースを Kaggle Datasets にアップ。 ビルドなどワンクッション必要なときは、 git
commit を hook して Kaggle API 経由でデプロイ。あ るいは Github Actions からビルドして Kaggle API 経由でデプロイ。
まとめ • チームマージはよく考えよう • COLMAP はアツい • 動的ロードはいいぞ Image Matching
Challenge 2026 でまた会いましょう!