ORB-SLAMとNeRFを組み合わせた最速の３DSLAM

# 簡単に言うと、これは何？

Orbeez-SLAMは、カメラが捉えた映像を使って、リアルタイムで周囲の3Dマップを作成できるシステムです。これまでの手法よりも速く、新しい環境にもすぐに対応できます。既存のORB-SLAMという技術と、即時レンダリングが可能なNeRF技術を組み合わせています。

# 詳しい説明

### 論文リンク
https://github.com/MarvinChung/Orbeez-SLAM

https://arxiv.org/abs/2209.13274


### 1. どんなもの？
- Orbeez-SLAMではORB-SLAMとNeRFをしようして新しいシーンへの迅速な適応とリアルタイム推論での高密度マッピングを実現
- ORB-SLAM２と[instant-ngp framework](https://nvlabs.github.io/instant-ngp/)に基づくNeRFを使用している。
- 事前のトレーニングなしでのオンラインかつリアルタイム
- NeRF-SLAMのベースラインを上回っている
- 視覚なオドメトリと高速 NeRF フレームワークを組み合わせる
- sotaの更新
- 既存のベースラインよりOrbeez-SLAMは800倍高速
### 2. 先行研究と比べてどこがすごいの？
#### 先行研究の嫌なところ
- ビジュアル SLAMの最新版である[Tandem](https://arxiv.org/abs/2111.07418) は事前学習しないと使えない。
- [iMAP](https://arxiv.org/abs/2103.12352)や[NICE-SLAM](https://github.com/cvg/nice-slam) はRGB-D 入力が必要である（ビジュアル オドメトリ使えよ...と筆者言っている)
- COLMAPとか使ってカメラの位置推定して最適化とこやってるけど時間遅すぎ(NeRFの弱点)
- 従来のニューラルを使用したvision slamは事前学習あるからヤダ
#### 筆者が思いついたすげーところ
- Instant-ngp つかえば早いじゃん
- ORB-SLAM２使えばRGB-D 入力いらないじゃん
- iMAPとかのNeRF-SLAMじゃビジュアル オドメトリないからこれ入れてあげようぜ
- 結果としてはえーつえーSLAMができる
### 3. 技術や手法の"キモ"はどこにある？
#### システム概要
![image](https://github.com/Buddies-as-you-know/paper-survey/assets/69001166/f398afd6-80ec-4912-ba77-2d316f5469a2)
- 入力画像ストリームから画像の特徴を抽出します
- VOを使用してカメラを位置推定を行う。
```math
\begin{equation*}L_{rpj}= \sum\limits_{ij}\Vert u_{ij}-\pi(\mathscr{C}_{j},P_{i})\Vert_{2} \tag{6}\end{equation*}
```
ここで、

- uij : 画像j上の点iの画素位置
- Cj : カメラjの姿勢(内参行列と外参行列)
- Pi : 3D空間上の点i
- π : 投影関数で、3D点PiをカメラCjの姿勢に投影する
3D点PiをカメラCjの姿勢で画像平面に投影した位置と、実際に観測された画素位置uijの誤差をすべての点について計算し、その二乗和を最小化することでカメラ姿勢Cjを推定しています。
- 三角分割によるマップ ポイントを生成し
![image](https://github.com/Buddies-as-you-know/paper-survey/assets/69001166/2631819b-f334-4365-adb7-9b61f76c9404)

- カメラのポーズとマップ ポイントの最適化はbundle adjustment を行う
```math
\begin{equation*}\min\limits_{\{[R\vert t]_{j}\},\{P_{i}\}}L_{rpj} \tag{8}\end{equation*}
```
最小化問題は、Levenberg-Marquardt法を用いて解いています。
- 更新されたカメラのポーズとマップを利用して NeRF をトレーニング
- 損失関数出して最適化
##### 実装の詳細
- Intel i7-9700 CPU と NVIDIA RTX 3090 GPU を搭載したデスクトップ PCを用意
- ORB-SLAM2からループ終了プロセスを継承している
- NeRF に渡した後にキーフレームが削除されないように、ORB-SLAM2 のようにキーフレームをカリング
- instant-ngpでNeRF最適化
### 4. どうやって有効だと検証した？
#### データセット
- TUM RGB-D , Replica , and ScanNet 
#### Baselines
- 学習ベース：SLAM: DI-Fusion, iMap, NICE-SLAM,  
- 従来ベース : SLAM: BAD-SLAM, Kintinuous , ORB-SLAM2
#### 評価設定
- 深度バージョンでの有効性
#### メトリクス
- ATE:ラウンド トゥルース (GT) 軌道と位置合わせされた推定軌道の間の二乗平均平方根誤差 (RMSE) 
- [PSNR](https://qiita.com/toshi_machine/items/3ff0a09279a8e71c4e82#psnr%E3%81%A8%E3%81%AF)(ピーク信号対雑音比):NeRF でレンダリングされた画像と GT 軌跡が通過した GT 画像の歪み率を評価
- Depth L1:推定された深度とGT深度のL1誤差を計算（２乗しない）
 tum rgb-d での追跡結果。frは、TUM RGB-Dデータセットのシーケンス名
![image](https://github.com/Buddies-as-you-know/paper-survey/assets/69001166/63454583-3776-42d4-8773-620f9ed19b93)
スキャンネット上の追跡結果
![image](https://github.com/Buddies-as-you-know/paper-survey/assets/69001166/99d65f3c-5a7e-415f-83fe-38bca7c45bd6)
レプリカでの再構成結果。深さ l1 [cm] (↓) と psnr [db] (↑) を使​​用します。値は、オフィス 0 ～ 4 および部屋 0 ～ 2 で平均化されます。Nice-slam は、色と深度のレンダリング中に gt Depth を使用します。GT深度ありおよびなしのナイススラムの結果を示します。
![image](https://github.com/Buddies-as-you-know/paper-survey/assets/69001166/e7494f46-4384-4c99-8617-dca0c0baec2c)
実行時のフレーム数比較
![image](https://github.com/Buddies-as-you-know/paper-survey/assets/69001166/d62d9c51-8240-4140-8c46-9b20962f8d56)
レプリカのアブレーション研究。再投影誤差のみからカメラのポーズを最適化することを実証します。
![image](https://github.com/Buddies-as-you-know/paper-survey/assets/69001166/286d36f8-ef43-4828-8f99-4343c1e40343)
レンダリング評価
![image](https://github.com/Buddies-as-you-know/paper-survey/assets/69001166/bb68315a-23c0-4f2a-a5be-f543231ce916)
NeRF生成
![image](https://github.com/Buddies-as-you-know/paper-survey/assets/69001166/f721372a-f819-4efb-9c40-b7105f410655)

### 5. 論文において、研究の成果やデータに基づいて、その意義や影響、さらには限界点について詳細かつ適切に分析や評価がなされている部分は存在するのでしょうか？
- 大規模なシーンにおける性能が課題
- レイキャスティング三角測量がハードコーディングの可能性あり（実際の実装のしきい値として 64 を選択）
### 6. 次に読むべき論文はあるか？
- orb-slam2
- Instant Neural Graphics Primitives with a Multiresolution Hash Encoding