gradSLAMやーる(gradSLAM0.0.1、Python3.6、CUDA10.2、PyTorch1.7.0)

# はじめに
gradSLAMやっていきます。

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Excited to announce our new work!<br>&quot;gradSLAM: Dense SLAM meets automatic differentiation&quot;<br><br>We leverage the power of autodiff frameworks to make dense SLAM fully differentiable.<br><br>Paper: <a href="https://t.co/cN3tjc9e11">https://t.co/cN3tjc9e11</a><br>Project page: <a href="https://t.co/m3uVyDaGfn">https://t.co/m3uVyDaGfn</a><br>Video: <a href="https://t.co/vawOe3zZjx">https://t.co/vawOe3zZjx</a> <a href="https://t.co/vhCS1faDVt">pic.twitter.com/vhCS1faDVt</a></p>&mdash; Krishna Murthy (@krrish94) <a href="https://twitter.com/krrish94/status/1187292243121655808?ref_src=twsrc%5Etfw">October 24, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">gradSLAM (<a href="https://t.co/FXDyYqqOja">https://t.co/FXDyYqqOja</a>) を読んだ<br><br>dense RGB-D SLAMのパイプライン全体をdifferentiableにする手法<br>微分可能なLM法やマップ構築法を用いることで、画像の入力からマップの生成までの計算グラフの構築を可能にした<br>KinectFusionなどのRGB-D SLAMに適用した例を提示している</p>&mdash; sumicco (@sumicco_cv) <a href="https://twitter.com/sumicco_cv/status/1195341801030209536?ref_src=twsrc%5Etfw">November 15, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">DifferentiableなSLAM<br>微分可能な非線形最小二乗、ICP、Raycasting、マッピングなどが組み合わされている。<br>なんでも微分可能になっておるな。<a href="https://t.co/EYKO5lDr3l">https://t.co/EYKO5lDr3l</a></p>&mdash; shirokuma (@neka_nat) <a href="https://twitter.com/neka_nat/status/1325378820593967104?ref_src=twsrc%5Etfw">November 8, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ようやくGradSLAMのコード公開されましたね<br>(cuda実装じゃないっぽいので実行速度が気になる)<a href="https://t.co/gTiSdVgsUa">https://t.co/gTiSdVgsUa</a></p>&mdash; まさや (@syinari0123) <a href="https://twitter.com/syinari0123/status/1325389895511105538?ref_src=twsrc%5Etfw">November 8, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# 開発環境
- Windows 10 PC
- Anaconda 
- Python 3.6
- PyTorch 1.7.0
- CUDA 10.2
- gradSLAM 0.0.1

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">プライムデーで安かったので、予備PC<br>【基本スペック】<br>OS：Windows 10 Home 64bit、CPU：インテル Core i7-9750H、GPU：NVIDIA GeForce GTX 1650 Ti Max-Q デザイン 4GB GDDR5、メモリ：16GB（8GB ×2）、SSD：512GB、液晶パネル：15.6インチ、フルHD（1,920×1,080）、リフレッシュレート120Hz <a href="https://t.co/S8RIsayFPY">pic.twitter.com/S8RIsayFPY</a></p>&mdash; 藤本賢志(ガチ本)@pixivFANBOXはじめました (@sotongshi) <a href="https://twitter.com/sotongshi/status/1317758401946947591?ref_src=twsrc%5Etfw">October 18, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# 導入
1．Anaconda promptを開き、python3.6環境を作成します

~~~
conda create -n py36 python=3.6
conda activate py36
~~~

2．PyTorchをインストールします

~~~console
pip install torch===1.7.0 torchvision===0.8.1 torchaudio===0.7.0 -f https://download.pytorch.org/whl/torch_stable.html
~~~

3．[CUDA Toolkit 10.2](https://developer.nvidia.com/cuda-10.2-download-archive?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exenetwork
)をインストールします


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/5eb87441-bc76-2f27-558e-6174fb4ec059.png)

4．[chamferdist](https://github.com/krrish94/chamferdist
)をクローンし、インストールします

~~~console
cd chamferdist
pip install .
~~~

5．[gradSLAM](https://github.com/gradslam/gradslam)をクローンし、インストールします

~~~console
cd gradslam
pip install -e .
~~~

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/9006f8db-4f97-7485-e663-0908171375a7.png)

6．[TUM RGBD Dataset](https://vision.in.tum.de/data/datasets/rgbd-dataset/download)をダウンロードし、examplesフォルダにdataset/tumフォルダを作成し、そこに置きます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/26b642d8-057c-df80-d72b-1e73593ae2be.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/7e031d34-99ea-df58-0d99-7be24fc488aa.png)

7．次のコードを実行してみましょう！

~~~python
import open3d as o3d
import torch
from torch.utils.data import DataLoader

from gradslam import RGBDImages
from gradslam.slam import PointFusion, ICPSLAM
from gradslam.datasets import ICL, TUM

# Dataset to use
dataset_name = "tum"  # "icl", "tum"

# Path to the dataset directory
dataset_path = "./dataset/tum/rgbd_dataset_freiburg1_xyz"

# Odometry method to use
odometry = "gradicp"  # "gt", "icp", "gradicp"

# select device
device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")

# load dataset
Dataset = ICL if dataset_name == "icl" else TUM
dataset = Dataset(dataset_path, seqlen=80, height=240, width=320)
loader = DataLoader(dataset=dataset, batch_size=2)
colors, depths, intrinsics, poses, *_ = next(iter(loader))

# create rgbdimages object
rgbdimages = RGBDImages(colors, depths, intrinsics, poses, channels_first=False)

# visualize rgbdimages
fig1 = rgbdimages.plotly(0)
fig1.update_layout(autosize=False, height=720, width=500).show()

# SLAM
slam = PointFusion(odom=odometry, dsratio=4, device=device)
pointclouds, recovered_poses = slam(rgbdimages)

# Plotly visualization
fig2 = pointclouds.plotly(0).update_layout(autosize=False, height=600)
fig2.show()

# Open3d visualization
o3d.visualization.draw_geometries([pointclouds.open3d(0)])
~~~

odometryをgradicpを指定、rgbd_dataset_freiburg1_xyzデータセットで80フレーム読み込みSLAMる。画像サイズは幅320×高240。

8．結果です

読み込んだRGBD画像が見れます。
<blockquote class="twitter-tweet"><p lang="ca" dir="ltr">Visualize RGBD Images<a href="https://twitter.com/hashtag/gradSLAM?src=hash&amp;ref_src=twsrc%5Etfw">#gradSLAM</a> <a href="https://twitter.com/hashtag/SLAM?src=hash&amp;ref_src=twsrc%5Etfw">#SLAM</a> <a href="https://twitter.com/hashtag/Python?src=hash&amp;ref_src=twsrc%5Etfw">#Python</a> <a href="https://t.co/BPbx9fPn0Y">pic.twitter.com/BPbx9fPn0Y</a></p>&mdash; 藤本賢志(ガチ本)@pixivFANBOXはじめました (@sotongshi) <a href="https://twitter.com/sotongshi/status/1325791614866919424?ref_src=twsrc%5Etfw">November 9, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

生成されたグローバルマップが見れます。
<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Plotly Visualization<a href="https://twitter.com/hashtag/gradSLAM?src=hash&amp;ref_src=twsrc%5Etfw">#gradSLAM</a> <a href="https://twitter.com/hashtag/SLAM?src=hash&amp;ref_src=twsrc%5Etfw">#SLAM</a> <a href="https://twitter.com/hashtag/Python?src=hash&amp;ref_src=twsrc%5Etfw">#Python</a> <a href="https://t.co/RDfjtU58hG">pic.twitter.com/RDfjtU58hG</a></p>&mdash; 藤本賢志(ガチ本)@pixivFANBOXはじめました (@sotongshi) <a href="https://twitter.com/sotongshi/status/1325794126592311296?ref_src=twsrc%5Etfw">November 9, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Open3Dでもグローバルマップが見れます。
<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Open3D Visualization <a href="https://twitter.com/hashtag/gradSLAM?src=hash&amp;ref_src=twsrc%5Etfw">#gradSLAM</a> <a href="https://twitter.com/hashtag/SLAM?src=hash&amp;ref_src=twsrc%5Etfw">#SLAM</a> <a href="https://twitter.com/hashtag/Open3D?src=hash&amp;ref_src=twsrc%5Etfw">#Open3D</a> <a href="https://twitter.com/hashtag/Python?src=hash&amp;ref_src=twsrc%5Etfw">#Python</a> <a href="https://t.co/ZjOW1K0Np0">pic.twitter.com/ZjOW1K0Np0</a></p>&mdash; 藤本賢志(ガチ本)@pixivFANBOXはじめました (@sotongshi) <a href="https://twitter.com/sotongshi/status/1325792963486650380?ref_src=twsrc%5Etfw">November 9, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

お疲れ様でした。

# 追記 20210728

gradSLAM 0.1.0

Pytorchのインストール

~~~cmd
pip3 install torch==1.9.0+cu102 torchvision==0.10.0+cu102 torchaudio===0.9.0 -f https://download.pytorch.org/whl/torch_stable.html
~~~

https://github.com/krrish94/chamferdist

~~~cmd
cd chamferdist
pip install .
~~~

https://github.com/gradslam/gradslam

pip install gradslam
Failed to build chamferdist

VisualStudioが必要
https://mebee.info/2020/07/18/post-13597/

visual studio 2019 community
https://visualstudio.microsoft.com/ja/downloads/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/76b18fca-f19e-58db-4f0f-5b3bfd21d98c.png)

CUDA10.2インストール