Slide 1

Slide 1 text

AI 2023.06.02 @tattaka_sun 株式会社ディー・エヌ・エー + GO株式会社 最近のVisual Odometry with Deep Learning

Slide 2

Slide 2 text

AI 所属:GO株式会社 興味:Computer Vision・Computer Graphics・Deep Learning 文責:@tattaka_sun

Slide 3

Slide 3 text

AI ● 2フレーム以上のカメラ画像間の相対的な姿勢を 追跡するタスク ● 初期位置から姿勢の変化を積分していくことで大局的な カメラの自己位置を求めることができる Visual Odometryって何?

Slide 4

Slide 4 text

AI 処理の流れとしては、 1. カメラ画像の取得 2. カメラ画像の歪み補正 3. 画像特徴の抽出 4. 画像特徴の追跡 5. RANZACなどを用い、特徴点の対応から基本行列を推定する 6. 基本行列から回転行列Rと並進ベクトルtを計算 7. 並進ベクトルを実世界のスケールに合わせて、 カメラの自己位置を計算 8. (後処理・最適化など) 従来のVisual Odometry

Slide 5

Slide 5 text

AI 処理の流れとしては、 1. カメラ画像の取得 2. カメラ画像の歪み補正 3. 画像特徴の抽出 4. 画像特徴の追跡 5. RANZACなどを用い、特徴点の対応から基本行列を推定する 6. 基本行列から回転行列Rと並進ベクトルtを計算 7. 並進ベクトルを実世界のスケールに合わせて、 カメラの自己位置を計算 8. (後処理・最適化など) 従来のVisual Odometry Deep Learningでどうにかする

Slide 6

Slide 6 text

AI Deep Learningを用いたVisual Odometryの分類 Deep VO+Traditional VO 組み合わせ方はいろいろ ● CNN-SVO (ICRA’19) ● D3VO (CVPR’20) ● DF-VO (ICRA’20) End-to-End VO Hybrid VO Supervised VO Unsupervised VO 教師ありでposeを推論 CNN+RNNの構造が多い ● DeepVO (ICRA’17) ● DeMoN (CVPR’17) 単眼 or stereoのビデオ だけで学習 大体depth推定とセット ● SfmLearner (CVPR’17) https://arxiv.org/pdf/1709.08429.pdf https://arxiv.org/pdf/1704.07813.pdf https://arxiv.org/pdf/2003.01060.pdf

Slide 7

Slide 7 text

AI ● 精度 ○ Hybrid >= Traditional > Supervised > Unsupervised ● データ要件(左になるほどゆるい) ○ Unsupervised = Hybrid(手法による) > Traditional > Supervised ● 複雑さ (左になるほど単純) ○ Supervised > Unsupervised > Hybrid >= Traditional それぞれの手法の性能比較(一般論としての傾向)

Slide 8

Slide 8 text

AI 8 Unsupervised Visual Odomety

Slide 9

Slide 9 text

AI Deep Learningを用いたVisual Odometryの分類 Deep VO+Traditional VO 組み合わせ方はいろいろ ● CNN-SVO (ICRA’19) ● D3VO (CVPR’20) ● DF-VO (ICRA’20) Hybrid VO Unsupervised VO 単眼 or stereoのビデオ だけで学習 大体depth推定とセット ● SfmLearner (CVPR’17) End-to-End VO Supervised VO 教師ありでposeを推論 CNN+RNNの構造が多い ● DeepVO (ICRA’17) ● DeMoN (CVPR’17) https://arxiv.org/pdf/1709.08429.pdf https://arxiv.org/pdf/1704.07813.pdf https://arxiv.org/pdf/2003.01060.pdf

Slide 10

Slide 10 text

AI ● 論文名: ”Unsupervised Learning of Depth and Ego-Motion from Video” ● 単眼カメラ動画のみから深度情報とカメラの姿勢の変化を推定するこ とができる手法 SfmLearner: Unsupervisedな手法の基本系

Slide 11

Slide 11 text

AI ● ネットワーク構成 ○ Depth CNN ■ UNet likeな構造 ■ 1枚の画像を入力として depth mapを出力する ○ Pose CNN ■ Encoder-Decoder構造 ■ Encoderは連続した3フレームを入力として、中心のフレーム画像(t)と近傍 フレーム画像(t-1, t+1)間の相対pose (R, t)を出力する ■ Decoderはexplainability maskを出力する ● 深度画像の大きさに対応するsoftmaxで正規化されたベクトル ● lossの計算に使う SfmLearner: Unsupervisedな手法の基本系

Slide 12

Slide 12 text

AI ● 学習の手順 1. depth mapと相対poseを出力する 2. depth mapと相対pose(t→t+1, t→t-1)を用いて、座標変換を行うこと でソース画像(t)から擬似的にターゲット画像(t-1, t+1)を生成する ▪ 3. lossの計算 ▪ 生成画像とターゲット画像のL1 loss (Photometric Loss) を計算 ▪ explainability maskが1の部分のみ計算 ▪ depth mapのsmoothさを計算 ▪ pixel値がなだらかになるように ▪ explainability maskが1に近づく ような正則化 4. modelを更新 SfmLearner: Unsupervisedな手法の基本系

Slide 13

Slide 13 text

AI ● 動物体やオクルージョンへの対処ができていない ○ photometric lossは動物体やオクルージョンがないという仮定のため、 depth・pose推定の精度悪化の原因 ○ explainability maskで暗黙的に除外できているかもしれないが... ● シーケンス内でのスケールの一貫性が担保できていない ○ depth・poseともに何らかの制約をかけないと担保できない SfmLearnerの課題

Slide 14

Slide 14 text

AI 前ページの課題の解決に加えて...... ● カメラパラメータの推定 ● ネットワーク構造の改良 ● 損失関数の改良 ● 推論時のfinetune など その他のUnsupervised VOの改善

Slide 15

Slide 15 text

AI ● optical flow推定の併用 ○ GeoNet (CVPR’18) ○ DF-Net (ECCV’18) ○ GLNet (ICCV’19) ○ Every Pixel Counts++ (TPAMI Vol. 42) ● 動物体の情報を外部から与える ○ Depth from Videos in the Wild (ICCV’19) ○ struct2depth (AAAI’19) ○ SGDepth (ECCV’20) ○ PVO: Panoptic Visual Odometry (CVPR’23) ● その他 ○ MonoDepth2 (ICCV’19) ○ ManyDepth (CVPR’21) 動物体やオクルージョンへの対処

Slide 16

Slide 16 text

AI ● stereoカメラの使用 ○ UnDeepVO (ICRA’18) ○ UnDEMoN (IROS’18) ● depth推定に制約をかける ○ vid2depth (CVPR’18) ○ SC-Depth v1, 3 (NeurIPS’19, ArXiv’22 preprint) ○ SAG(scale-aware geometric) Loss (ICCV’21) ● pose推定に制約をかける ○ Li et al. (ICCV’19) ○ PackNet (CVPR’20) ○ LTMVO (ECCV’20) ○ MotionHint (ICRA’22) スケールの一貫性の制約

Slide 17

Slide 17 text

AI 17 動物体やオクルージョンへの対処

Slide 18

Slide 18 text

AI ● DepthNetとPoseNetを学習させ、depth mapと相対poseからoptical flowを計算 ● 学習ずみのDepthNetとPoseNetから出力されたoptical flowを使い、 ResFlowNetを学習する ○ depthと同じく生成したflowをターゲットにwarpさせることで学習できる ○ 順方向・逆方向のflowで矛盾が大きい箇所はlossの計算から除外 ● 1段目のdepthとposeで大域的な動き・非動物体を担当させ、 optical flowで動物体を表現 optical flowを使った手法①: GeoNet (CVPR’18)

Slide 19

Slide 19 text

AI ● DepthNetとPoseNet、FlowNetを同時に学習させる ● 従来のphotometric lossに加えてターゲット・ソース画像から生成したものを それぞれお互いに一貫性を保つような損失関数を設計 ● この手法もoptical flowが前方向・逆方向で大きく矛盾する箇所を 損失の計算に使わないようにしている optical flowを使った手法②: DF-Net (ECCV’18)

Slide 20

Slide 20 text

AI ● instance segmentationを用いて事前に物体のmaskを作っておき、 物体領域と物体領域じゃない領域を分けてpose推定をする ○ photometric lossは物体領域と非物体領域のwarp結果を合成して計算 ● 物体はカメラの距離に反比例して大きく写るため、 物体クラスごとの大きさを定めておき正則化として用いる ● L1 lossに加えてSSIM lossも使用 ● オンラインでfinetune 動物体の情報を外部から与える手法①:struct2depth (AAAI’19)

Slide 21

Slide 21 text

AI ● カメラパラメータを推測するようにした ○ 推論時にカメラパラメータがわかっている場合は補正して さらにVOの精度を上げることができる ● photometric lossを計算する際に、推定したdepthよりも ワープした結果前景にくるpixelだけを使用する ● 物体のbboxを与え、動物体として別でmotionを計算 ● Layer Normalizationの平均と分散にガウシアンノイズ乗算 ○ そのままだと平均と分散が安定しすぎてよくないらしい(謎) 動物体の情報を外部から与える手法②: Depth from Video in the Wild (ICCV’19)

Slide 22

Slide 22 text

AI ● photometric lossを計算する際、 参照フレームごとのlossを平均するのではなく最小値をとる ○ オクルージョンへの対処 ● ターゲット画像とwarp画像のphotometric lossがターゲット画像とソース画像の photometric lossよりも低い場合のピクセルのみを使う ○ ほとんど画像の動きがない領域(≒低テクスチャ・カメラと等速運動している領域) を除外する ● depthを以下のように 正規化する(フレーム間の 深度の合計で深度にフレーム数 をかけたものを割る) その他: MonoDepth2 (ICCV’19)

Slide 23

Slide 23 text

AI 23 スケールの一貫性の制約

Slide 24

Slide 24 text

AI ● SC-Depth v1 ○ 生成された深度画像のスケールが一貫しているかの拘束を追加 ○ フレームI_aとI_bがあったとして、I_aから生成されたD_aをwarpさせたD_abと D_bを補完したD_b'を比較する ○ MonoDepth2と同様のマスキング ● SC-Depth v3 ○ 大規模データセットで教師あり学習されたdepth netの出力を pseudo labelとして使用 depth推定に制約をかける手法①: SC-Depth v1, 3 (NeurIPS’19, ArXiv’22) SC-Depth v1 SC-Depth v3

Slide 25

Slide 25 text

AI ● depthを点群に投影し、点群の位置合わせを通じてスケールの一貫性を強制する Scale-aware geometric (SAG) lossを提案 ○ 点群間の座標の差を使う代わりに、最小二乗法でそれらの 相対運動パラメータを推定 ● depth推定にscale推定のheadを追加 depth推定に制約をかける手法②: SAG Loss (ICCV’21)

Slide 26

Slide 26 text

AI ● 速度のGTが使える場合、poseに関してのみ教師あり学習を行うことで スケール一貫性の問題を解決 ○ 推定した並進tの大きさとターゲット・ソース画像の時間差 * v_gtの差分をとる ○ ● PackNetと呼ばれるchannel方向を分割して 3D Convで処理するアーキテクチャを提案 pose推定に制約をかける手法: PackNet (CVPR’20)

Slide 27

Slide 27 text

AI 27 Hybrid Visual Odometry

Slide 28

Slide 28 text

AI Deep Learningを用いたVisual Odometryの分類 Deep VO+Traditional VO 組み合わせ方はいろいろ ● CNN-SVO (ICRA’19) ● D3VO (CVPR’20) ● DF-VO (ICRA’20) Hybrid VO Unsupervised VO 単眼 or stereoのビデオ だけで学習 大体depth推定とセット ● SfmLearner (CVPR’17) End-to-End VO Supervised VO 教師ありでposeを推論 CNN+RNNの構造が多い ● DeepVO (ICRA’17) ● DeMoN (CVPR’17) https://arxiv.org/pdf/1709.08429.pdf https://arxiv.org/pdf/1704.07813.pdf https://arxiv.org/pdf/2003.01060.pdf

Slide 29

Slide 29 text

AI ● 従来のDSO(Direct Sparce Odometry)とUnsupervised VOを融合させたHybrid VO ○ 従来のDSO: ■ フレーム画像間のマッチング->差分計算 ->差分が最小化するようにカメラ位置をニュートン法で最適化 (back-end部分) ■ poseの初期値を等速運動モデルと仮定してtrackingする ● 最適化に用いるdepth, poseの初期値をNNの出力とする ● 従来のphotometric lossは輝度の変化が一定であるという仮定があるが、 I_ab = a*I + bの形で定式化し、a, bを予測する ● 教師なしで深度推定のuncertainty mapを推定することで、 動物体などの影響を軽減 Hybrid VO①: D3VO (CVPR’20)

Slide 30

Slide 30 text

AI ● DLでposeを直接推論するのはあまりロバストじゃない →optical flowを教師なしで学習するのは比較的正確かつ容易なため、 optical flowを使って画像間の疎な対応からpose変化を計算 (E-tracker) ・flowが正確でない時のみdepthを使って対応関係を計算 (PnP-tracker) ● flowの順・逆方向の矛盾が少ない(≒非動物体・オクルージョン)ところから 対応点をサンプリング ● SC-Depthの枠組を用いてdepthのスケールの一貫が取れているので、 計算したposeはdepthのスケールに準ずる ● depth netの学習の際のみpose netを用いる Hybrid VO②: DF-VO (ICRA’20)

Slide 31

Slide 31 text

AI 31 Visual Odometryの評価

Slide 32

Slide 32 text

AI KITTI (Odometry benchmark)が多くの研究で使われている ● 22のステレオ画像シーケンスのdataset ○ trainセット(00~10)とvalセット(11~21)で構成される ○ valデータセットがkittiのLBに投稿しないとスコアリングされないため、 最近の研究ではtrainセットの09, 10が検証用として使われることが多い データセットについて

Slide 33

Slide 33 text

AI ● ATE (Absolute Trajectory Error) ○ gtとpredの軌跡を最小二乗法を用いて 位置合わせしてから全ての差分の平均値をとる ○ 単位は[m] ● t_err (RTE, Relative Translation Error) ○ 全シーケンスから800mまでの100mごとの平均並進誤差 ○ 単位は[%] ● r_err (RRE, Relative Rotation Error) ○ 全シーケンスから800mまでの100mごとの平均回転誤差 ○ 単位は[°/100m] ATE、t_err・r_errどちらで評価しているかは論文次第...... よく使われる指標について

Slide 34

Slide 34 text

AI 2020年に出たsurvey論文によるとD3VOはじめとするHybrid VOが強い (以下のmetricはt_err) 結局SOTAってどれなんですか?

Slide 35

Slide 35 text

AI ● Unsupervised VOにおける主な課題は ○ 動物体・オクルージョンの対処 ○ スケールの一貫性 ● Unsupervised VOの出力を初期値として Traditional VOを用いるとより正確な推定ができる ● supervised・unsupervisedともにVOのみをEnd-to-Endで 処理する手法についてはネタ切れ感がある ○ そのためかCV系の学会での数は減ってきている気がする ○ 3D visionに関してはNeural Radiance Fieldsなどに人気が移っている? (NeRF+SLAMとかはあるにはある) ● poseを直接推定せずに、optical flowを経由して画像の対応点からposeを求 める手法が個人的には納得感があり面白かった まとめ・感想とか

Slide 36

Slide 36 text

AI ● Essential Matrix (基本行列) と R, T の復元 ● patrick-llgc.github.io/Learning-Deep-Learning/ ● Depth from Videos in the Wild: Unsupervised Monocular Depth Learning from Unknown Cameras ● A Benchmark for the Evaluation of RGB-D SLAM Systems 参考文献(スライド中に記載がないもののみ)