Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
SciPyとAutogradを使ったバンドル調整
Search
hei4
May 24, 2023
Programming
500
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SciPyとAutogradを使ったバンドル調整
hei4
May 24, 2023
More Decks by hei4
See All by hei4
One/Few-shot Semantic Segmentation サーベイ
hei4
0
96
Other Decks in Programming
See All in Programming
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
610
Event is what happens
moro
2
850
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
190
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
620
The Rails Doctrine Decade
koic
2
590
Vue Fes Japan の “作る側”に関わってみて
naokihaba
0
160
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
3
660
re:Inventに行く前に知っておきたい現地参加のノウハウ
nokomoro3
0
430
すこし踏み込む CancellationToken
htkym
2
1.7k
気持ちぃ〜角丸 Squircle
ryu1013
0
310
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
300
Optunaを作ったときにやりたかったこと、その後 (2026/10/16, Optuna Meetup #3)
iwiwi
1
440
Featured
See All Featured
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
850
Ruling the World: When Life Gets Gamed
codingconduct
0
400
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
The agentic SEO stack - context over prompts
schlessera
0
970
Building Flexible Design Systems
yeseniaperezcruz
330
41k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
Side Projects
sachag
456
43k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.4k
The Cult of Friendly URLs
andyhume
79
7k
Transcript
SciPyとAutogradを使ったバンドル調整 hei4
報告内容 三次元点群 カメラ行列 投影座標 特徴点座標 透視投影 変換 三次元点群 内部パラメータ 投影座標
特徴点座標 透視投影 変換 外部パラメータ 固定値 最適化対象 最適化対象 固定値 推定値 推定値 観測値 観測値 損失計算 損失計算
所与のデータについて •37枚の画像 (先頭と末尾は同一カメラのため実体としては36枚) •36個のカメラ行列 •4982 × 36個の画像特徴点の二次元座標(無効値あり)
定式化 𝑀 個のカメラによって撮影された 𝑀 枚の画像から、特徴点マッチングによって 𝑁 個の画像特徴点 𝒙 ∈ ℝ𝑀×3×𝑁
(同次座標系)が与えられたとする。ただし 𝒙 は無効値を含んでおり、有効値と無効値の 二値マスク 𝑩 ∈ ℤ𝑀×3×𝑁 が付随する。 𝑩 = ቊ 1 (enable) 0 (disable) いま 𝑁 個の画像特徴点に対応する 𝑁 個の三次元点群 𝑿 ∈ ℝ4×𝑁 (同次座標系)の座標を求 めたい。𝑀 個のカメラ行列 𝑷 ∈ ℝ𝑀×3×4 が与えられたとき、 𝑿 の透視投影変換 ෝ 𝒙 = 𝑷𝑿 を行い、𝒙 と ෝ 𝒙 の残差二乗和 ℒ(𝑿) を最小化することで三次元点群の座標についての推定値 𝑿∗ を求めること にする。ただし 𝑩 が無効である箇所についての残差は考慮しない。 𝑿∗ = argmin 𝑿 ℒ 𝑿 ℒ 𝑿 = 𝑩 ⊙ 𝒙 − 𝑷𝑿 2
実装方法 scipy.optimize.least_squaresによって残差二乗和の最小化を行う。 least_squaresに与えるヤコビ行列はAutogradによって算出する。
はまりポイント① 透視投影変換によって推定した投影座標は、三軸目が1に正規化されていない。 𝑥 𝑦 𝑓0 = 𝑃11 𝑃12 𝑃13 𝑃14
𝑃21 𝑃22 𝑃23 𝑃24 𝑃31 𝑃32 𝑃33 𝑃34 𝑋 𝑌 𝑍 1 観測値との損失計算を行う前に、三軸目が1の同次座標系に正規化する必要がある。 𝑥/𝑓0 𝑦/𝑓0 1
はまりポイント② 𝑿 の初期値は最小二乗法によって設定する。初期値を乱数にすると収束しない! 参考:『3次元復元のためのバンドル調整の実装と評価』
結果(三次元点群の最適化)
報告内容 三次元点群 カメラ行列 投影座標 特徴点座標 透視投影 変換 三次元点群 内部パラメータ 投影座標
特徴点座標 透視投影 変換 外部パラメータ 固定値 最適化対象 最適化対象 固定値 推定値 推定値 観測値 観測値 損失計算 損失計算
カメラ行列の分解と同時最適化 カメラ行列は内部パラメータと外部パラメータに分解できる。さらに外部パラメータは、 回転成分と並進成分で構成される。 𝑃11 𝑃12 𝑃13 𝑃14 𝑃21 𝑃22 𝑃23
𝑃24 𝑃31 𝑃32 𝑃33 𝑃34 = 𝐾11 𝐾12 𝐾13 0 𝐾22 𝐾23 0 0 1 𝑅11 𝑅12 𝑅13 𝑡1 𝑅21 𝑅22 𝑅23 𝑡2 𝑅31 𝑅32 𝑅33 𝑡3 内部パラメータは所与で真値だと仮定し、三次元点群と外部パラメータ(回転と並 進)の同時最適化を行うことにする。 これは三次元点群の座標とカメラの位置姿勢を同時に求めることを意味する。 𝑿∗, 𝑹∗, 𝒕∗ = argmin 𝑿,𝑹,𝒕 ℒ 𝑿, 𝑹, 𝒕
実装方法 外部パラメータの回転成分は回転行列だが、9要素を独立に最適化しているため、 得られた値は回転行列の条件を満たしていない。最適化後にSciPyのRotationイ ンスタンスを from_matrix メソッドから作ることで、回転行列に補正している。
はまりポイント③ カメラ行列の分解にはOpenCVの decomposeProjectionMatrix が便利だが、 出力が「外部パラメータの回転成分」と「ワールド座標系におけるカメラ位置」とチグハ グなため注意が必要。 外部パラメータの回転成分 𝑹 と並進成分 𝒕
、ワールド座標系におけるカメラ姿勢 𝑹𝑊 とカメラ位置 𝒕𝑊 は以下の関係が成り立つ。 𝑹 = 𝑹𝑊 −1 = 𝑹𝑊 𝑇 𝒕 = −𝑹𝒕𝑊 参考:https://mem-archive.com/2019/04/21/post-1778/
はまりポイント④ もし内部パラメータの焦点距離(𝐾11 と 𝐾22 )の符号がマイナスなら、内部パラメータには右から、回 転成分には左から以下の行列を掛けて補正してやればよい。 −1 0 0 0
−1 0 0 0 1 これは内部パラメータと回転成分の間に単位行列を挟んでいることに等しい。 𝐾11 𝐾12 𝐾13 0 𝐾22 𝐾23 0 0 𝐾33 −1 0 0 0 −1 0 0 0 1 −1 0 0 0 −1 0 0 0 1 𝑅11 𝑅12 𝑅13 𝑅21 𝑅22 𝑅23 𝑅31 𝑅32 𝑅33 = 𝐾11 𝐾12 𝐾13 0 𝐾22 𝐾23 0 0 𝐾33 1 0 0 0 1 0 0 0 1 𝑅11 𝑅12 𝑅13 𝑅21 𝑅22 𝑅23 𝑅31 𝑅32 𝑅33
はまりポイント⑤? decomposeProjectionMatrix で出力した内部パラメータは、右下が1ではない 場合がある。カメラ行列(透視投影変換行列)は定数倍しても本質的には同一な ため、内部パラメータの右下が1になるよう、カメラ行列全体を正規化すればよい。 1 𝐾33 𝐾11 𝐾12 𝐾13
0 𝐾22 𝐾23 0 0 𝐾33 𝑅11 𝑅12 𝑅13 𝑡1 𝑅21 𝑅22 𝑅23 𝑡2 𝑅31 𝑅32 𝑅33 𝑡3 (しかし、本質的に変わらないなら正規化しなくてもいいのでは?とも思える。)
結果(三次元点群とカメラ外部パラメータの同時最適化)