
【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を実際に使ってみた
これ以降は、以下の記事からご確認ください。
他の記事もご覧になりたい方は、こちらをご覧ください。