はじめに
gradSLAMやっていきます。
Excited to announce our new work!
— Krishna Murthy (@krrish94) October 24, 2019
"gradSLAM: Dense SLAM meets automatic differentiation"
We leverage the power of autodiff frameworks to make dense SLAM fully differentiable.
Paper: https://t.co/cN3tjc9e11
Project page: https://t.co/m3uVyDaGfn
Video: https://t.co/vawOe3zZjx pic.twitter.com/vhCS1faDVt
gradSLAM (https://t.co/FXDyYqqOja) を読んだ
— sumicco (@sumicco_cv) November 15, 2019
dense RGB-D SLAMのパイプライン全体をdifferentiableにする手法
微分可能なLM法やマップ構築法を用いることで、画像の入力からマップの生成までの計算グラフの構築を可能にした
KinectFusionなどのRGB-D SLAMに適用した例を提示している
DifferentiableなSLAM
— shirokuma (@neka_nat) November 8, 2020
微分可能な非線形最小二乗、ICP、Raycasting、マッピングなどが組み合わされている。
なんでも微分可能になっておるな。https://t.co/EYKO5lDr3l
ようやくGradSLAMのコード公開されましたね
— まさや (@syinari0123) November 8, 2020
(cuda実装じゃないっぽいので実行速度が気になる)https://t.co/gTiSdVgsUa
開発環境
- Windows 10 PC
- Anaconda
- Python 3.6
- PyTorch 1.7.0
- CUDA 10.2
- gradSLAM 0.0.1
プライムデーで安かったので、予備PC
— 藤本賢志(ガチ本)@pixivFANBOXはじめました (@sotongshi) October 18, 2020
【基本スペック】
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 pic.twitter.com/S8RIsayFPY
導入
1.Anaconda promptを開き、python3.6環境を作成します
conda create -n py36 python=3.6
conda activate py36
2.PyTorchをインストールします
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をインストールします
4.chamferdistをクローンし、インストールします
cd chamferdist
pip install .
5.gradSLAMをクローンし、インストールします
cd gradslam
pip install -e .
6.TUM RGBD Datasetをダウンロードし、examplesフォルダにdataset/tumフォルダを作成し、そこに置きます
7.次のコードを実行してみましょう!
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画像が見れます。
Visualize RGBD Images#gradSLAM #SLAM #Python pic.twitter.com/BPbx9fPn0Y
— 藤本賢志(ガチ本)@pixivFANBOXはじめました (@sotongshi) November 9, 2020
生成されたグローバルマップが見れます。
Plotly Visualization#gradSLAM #SLAM #Python pic.twitter.com/RDfjtU58hG
— 藤本賢志(ガチ本)@pixivFANBOXはじめました (@sotongshi) November 9, 2020
Open3Dでもグローバルマップが見れます。
Open3D Visualization #gradSLAM #SLAM #Open3D #Python pic.twitter.com/ZjOW1K0Np0
— 藤本賢志(ガチ本)@pixivFANBOXはじめました (@sotongshi) November 9, 2020
お疲れ様でした。
追記 20210728
gradSLAM 0.1.0
Pytorchのインストール
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
cd chamferdist
pip install .
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/
CUDA10.2インストール