見出し画像

【4DGaussians】わずか20分で通常動画を3D動画に変換できるAI

みなさんは、写真から動画を生成してくれるAIツール「4D Gaussians」をご存知ですか?

4D Gaussiansはただ、パラパラ漫画の間を埋めるだけではありません。映画「マトリックス」の弾除けシーンのようなカメラ側が動く写真でも、70FPSのなめらかな動画にできちゃうんです!

しかも動画のレンダリングは、たったの20分で完了します。

今回はそんな4D Gaussiansの概要や使い方、実際に使ってみた感想をお伝えします。個人でムービーを撮っている方は必読ですので、ぜひ最後までご覧ください!

4D Gaussiansの概要

4D Gaussiansは複数の写真から1つの動画を生成するAIツールです。

定点カメラで撮った「静的シーン」のみならず、視点が動く「動的シーン」にも対応しています。なんと写真同士の間にある別視点を補完して、スムースな動画を作ってくれるのです。

この4D Gaussiansの開発にあたって、写真をデータに落とし込む処理を工夫しました。その結果D-NeRFなど、従来の動画生成AIよりも処理速度が格段に向上しています。その特徴は以下の3つです。

3Dガウススプラッティング:画像中の色の位置から大まかに動きを予想しています。物体の動きを個別に追いかける従来の手法よりも、処理を軽くできるのが特徴です。

高効率:たったの20分でレンダリングが完了します。開発者らはゲーミング用のグラフィックボード・RTX 3090 GPUで、高画質(800×800)かつスムース(70FPS)な動画を生成していました。

高品質:従来の動画生成AIと比べてPSNRが高い、つまり画質の劣化が抑えられています。さらに動画のなめらかさを示すフレームレート(FPS)の値も格段に向上しています。

ちなみに従来の動画生成AIとの性能比較は、下図の右側になります。

そして3Dガウススプラッティングでの世界の視え方は、以下のとおりです。

このように4D Gaussiansは、手足の動きを大まかにとらえたあと解像度を高めます。従来のように手先・足先・各関節の動きを都度追っていく必要はありません。

結果として速さの異なる物体であっても、高効率な学習が実現できているのです。

4D Gaussiansの実力

4D Gaussiansは複数枚の画像からスムースな動画が生成できます。

まずはTレックスの骨格のCG画像を200枚、4D Gaussiansに与えてみましょう。その結果は……

このようにTレックスが、ヌルヌル動きます!

もちろん人工の画像だけでなく、写真でも動画生成が可能です。900枚ほど写真を与えてみると……

多少動きがカクつきますが、まな板の木目まで再現できていますね。

さらに4D Gaussiansは同じ写真について、固定撮影と移動撮影の2形式で動画をレンダリングできます。固定撮影の動画の仕上がりは……

以下のとおり、視点を移動させてもハイクオリティです!

次からは実際に4D Gaussiansを使ってみて、動画生成の効率やクオリティを確かめていきます。まずは次の見出しで4D Gaussiansの使い方をご覧ください。

参考記事:4D Gaussian Splatting for Real-Time Dynamic Scene Rendering

4D Gaussiansの使い方

4D Gaussiansのリポジトリは、GitHubの公式ページから無料でクローンが作れます。ちなみにPyTorchの環境については、1.13.1+cu116が推奨です。

使ってみたい方は、以下のPythonソースコードをローカルで実行してみてください。

git clone https://github.com/hustvl/4DGaussians
cd 4DGaussians
git submodule update --init --recursive
conda create -n Gaussians4D python=3.7 
conda activate Gaussians4D

pip install -r requirements.txt
pip install -e submodules/depth-diff-gaussian-rasterization
pip install -e submodules/simple-knn

ここから実際に4D Gaussiansを使うには、データセットを学習させる必要があります。まずは次の項目で、4D Gaussians用のデータセットを用意していきましょう。

データセットの準備

CG画像・写真ともに、有志によってデータセットが公開されています。したがってダウンロードしたファイルを以下のようにまとめるだけで、データセットの準備は完了です。

#学習データのファイルパス一例
├── data
│   | dnerf 
│     ├── mutant
│     ├── standup 
│     ├── ...
│   | hypernerf
│     ├── interp
│     ├── misc
│     ├── virg
│   | dynerf
│     ├── cook_spinach
│       ├── cam00
│           ├── images
│               ├── 0000.png
│               ├── 0001.png
│               ├── 0002.png
│               ├── ...
│       ├── cam01
│           ├── images
│               ├── 0000.png
│               ├── 0001.png
│               ├── ...
│     ├── cut_roasted_beef
|     ├── ...

ちなみに4D GaussiansのGitHub公式ページでは、以下3つのデータセットが紹介されています。

D-NeRFのデータセット(CG):https://www.dropbox.com/s/0bf6fl0ye2vz3vr/data.zip?dl=0
Hypernerfのデータセット(写真・移動撮影):https://github.com/google/hypernerf/releases/tag/v0.1
DyNeRFのデータセット(写真・移動撮影):https://github.com/facebookresearch/Neural_3D_Video/releases/tag/v1.0

ただ写真は1ファイルにつき900枚も入っています。処理を軽くしたい方は、フレーム数を減らすとよいでしょう。

4D Gaussiansの操作方法

4D Gaussiansを使う前にまず、データセットを学習させていきます。以下の例のように、データセットのパスを指定して「train.py」を実行すれば学習が始まります。

#D-NeRFのデータセット「bouncingballs」を学習
python train.py -s data/dnerf/bouncingballs --port 6017 --expname "dnerf/bouncingballs" --configs arguments/dnerf/bouncingballs.py 

学習が完了したら、いよいよお待ちかねの動画生成です。こちらは下記のとおり、「render.py」を実行してください。

#D-NeRF「bouncingballs」を動画としてレンダリング
python render.py --model_path "output/dnerf/bouncingballs/"  --skip_train --configs arguments/dnerf/bouncingballs.py  &

ちなみに動画生成の精度は、下記の「metrics.py」で評価が可能です。

#D-NeRF「bouncingballs」にて精度を評価
python metrics.py --model_path "output/dnerf/bouncingballs/" 

次の見出しからは実際に、4D Gaussiansをローカル環境で使っていきます。4D Gaussiansの実力をご覧あれ。

4D Gaussiansを実際に使ってみた

これ以降は、以下の記事からご確認ください。

他の記事もご覧になりたい方は、こちらをご覧ください。

いいなと思ったら応援しよう!