DimensionXで4D動画作成

ジョブカン事業部のアドベントカレンダー14日目です。

https://qiita.com/advent-calendar/2024/jobcan

DONUTSの札幌オフィスでジョブカンの開発インターンに参加している@jptl_3です。
インターンシップでWeb開発に携わる傍ら、大学では深層学習に関する研究を行う予定です。
AI初心者 & 初めての記事執筆なので温かい目でご覧いただけると有難いです。

:::note warn
論文要約が主な内容になりますが、深層学習初心者を対象としているため、砕けた表現や、数式部分の割愛を行っております。正確性を重視される方は、元論文をご覧になられることを強く推奨します。
[DimensionX: Create Any 3D and 4D Scenes from a Single Image with Controllable Video Diffusion](https://arxiv.org/abs/2411.04928)
:::

# DimensionXとは
画像やテキストを入力値として3D、4D(3D + 時間変化を持つ)シーンの生成を行うことができるフレームワークです。
Hugging Faceに登場するや否や、わずか17日でImage-to-3Dモデル部門131モデル中6番目にいいねを集めるなど、勢いのあるトピックとなっています。(2024/12/02 時点)
従来の拡散モデルと比べ空間、時間の把握能力が高いことを強みとしており、生成された動画の空間内に入り込んで自由に視点を動かす、なんてことも可能となっております。
百聞は一見に如かず！YouTubeの紹介動画をご覧ください。

<iframe width="560" height="315" src="https://www.youtube.com/embed/ViDQI1HMY2U?si=BCkHih9c0up6KVc0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

視点移動には多少のカクツキを感じられるものの、大きな違和感はないように感じられます。

AIモデルを動作させるには通常自前の計算リソースとPythonの知識が必要になりますが、fffiloni氏がHugginga Face Space上に事前準備なしでつかえるデモ版をホスティングされてるので、有難く使用させていただきました。

デモ版 url: [fffiloni/DimensionX](https://huggingface.co/spaces/fffiloni/DimensionX)

# DimensionXの原理
DimensionXは従来の動画生成モデルと比較しどの点が優れているのでしょうか。
モデルの動作原理(パイプライン)の概要を見てみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3944324/6311fee2-5c62-cdff-4728-54a3d115fa66.png)
>「参照: https://arxiv.org/pdf/2411.04928」

### 時間と空間の重み付け
まず抑えていただきたいのが、S-DirectorとT-Directorです。
2つのディレクターは学習や生成に関与するパラメータであり、S-Directorは空間的(Space)な、T-Directorは時間的(Temporal)な情報を保持する役割があります。
平たく言えば、1枚の画像から多角的な画像と連続するフレームを生成することができれば、動画生成は可能だよね？という発想です。

[DimensionX: Create Any 3D and 4D Scenes from a Single Image with Controllable Video Diffusion](https://arxiv.org/abs/2411.04928)によると従来の直接的な動画生成技法は画質の鮮明さに秀でているが、空間的、時間的な生成に弱点があった。そこで2つの要因を分離させ、生成時に再構築する技法をとることで、空間の構造と動的な時間軸の表現力を得たとあります。

また、各Directorの学習用データは以下の様に作成されます。
S-Director : 被写体の中心とカメラの位置関係を計算する。距離が近いものを優先的に採用。
T-Director : オプティカルフロー(物体の動きを矢印で表す)を用いる。

これを後述する3D動画生成モデル(DiT)に注入することで動画の精度を向上させようとするアプローチが、DimensionX最大の特徴です。

:::note
主題から逸れるため、オプティカルフローの詳しい解説は以下の記事に譲ります。
[オプティカルフロー(Optical Flow)](https://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_video/py_lucas_kanade/py_lucas_kanade.html)
:::

### 3D動画生成
動画生成のタスクを担当するのはDiffusion Transformer(DiT)というモデルです。
画像生成の分野で旋風を巻き起こしているDiffusionモデルのU-Netアーキテクチャを、ChatGPTなど、自然言語領域に革命を起こしたTransformerモデルに置き換えたら性能よくなるんじゃない？といったアイデアです。
[Scalable Diffusion Models with Transformers](https://www.wpeebles.com/DiT)によるとモデルの深さや幅、入力数が増加した場合も、高いGlops(演算回数)と低いFID(待ち時間)を誇ったとあります。故に、動画生成分野と相性が良いモデルとなります。

### DirectorをDiTに注入する
事前学習モデルのパラメータチューニングを行う一般的な策としてフルファインチューニングという、モデル本体の重みをすべて更新する方法があります。しかしながら、膨大な数のパラメータを持つ動画生成モデルでこの手法をとることは非現実的です。そこで、DimensionXはLoRAを用いて計算量を削減するアプローチをとります。
LoRAとはLow-Rank Adaptation of Large Language Modelsの略で事前学習モデルの重みを更新するのではなく、元の重みを固定した状態のまま学習可能な低ランク分解された行列を足し合わせる手法です。

イメージがつきにくいので、簡単な例を挙げます。
あなたの前に目の分からないサイコロが2つあります。
2つの積のすべてのパターンを覚えてくださいという問題が出た時、通常は6×6の36パターンを暗記しなければならないですが、さいころの目を覚えて回答時に掛け算を行うことで12パターンの暗記で済みます。

モデルが巨大になればなるほど削減できる計算量は大きくなり、GPT-3に適応した際は学習可能なパラメータ数が10000分の1に、GPUメモリ必要量が3分の1に削減できたという検証結果が出ています。
この手法を用いることで動画生成モデルのパラメータにも、S-DirectorとT-DirectorをDiTに効率的に注入することができます。

:::note
主題から逸れるため、LoRAの数学的な解説は以下の記事に譲ります。
[LoRA: Low-Rank Adaptaion of Large Language Models の解説](https://zenn.dev/fusic/articles/paper-reading-lora)
:::

### 性能改善
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3944324/d3972219-12fa-2666-4e31-89a21da9a052.png)
>「参照: https://arxiv.org/pdf/2411.04928」

左が従来のDiffusion model、右上がS-Director、右下がT-Directorによって生成された連続写真です。空間的、時間的な遷移をおこなう各Directorの特徴が表れていることがわかります。

また、開発チームは生成結果から、以下の傾向があることを発見しました。
1. 初期生成時(step0)の画像が動画の方向性を決定づける
1. S-DirectorがT-Directorより画面構成の速度が速く、バランス調整が必要

以上の点を踏まえて、Switch-Onceという手法が考え出されました。
S-Directorはstep3の時点の時点で仕事がほぼ終わっているので、step4以降はT-Directorが作業していいよね？という発想です。
その後の実験によってstep4~5あたりから切り替えを行うと、画像生成が上手に行えることがわかりました。(詳細は省略)

:::note warn
他にも、解説しきれなかった性能改善の取り組みがございます。ご興味がございましたら、[元論文](https://arxiv.org/abs/2411.04928)をご覧ください。
:::

# 4D動画を作成してみた
DimensionXが1度に生成できる秒数は6秒と短いので、CM作成に転用できるのでは？と考え、架空のレモンジュース会社の宣伝映像生成にチャレンジしました。

初めに、入力する画像を準備します。
都合よくレモンを絞る画像は持っていなかったので、画像生成モデルに作成を依頼しましょう。今回はHugging Face Space上のStable Diffusion 2.1を使用しました。
url : https://huggingface.co/spaces/stabilityai/stable-diffusion

また、プロンプトはChatGPTに考えてもらいました。
<details><summary>プロンプト</summary>

```
A man squeezing a fresh lemon into a glass, the vibrant yellow lemon juice dripping into 
a crystal-clear glass, close-up shot. The man’s hands are clean and strong, emphasizing 
freshness and naturalness. Bright natural light illuminates the scene, highlighting the 
texture of the lemon and the clarity of the juice. The background is softly blurred, 
giving focus to the action, with subtle green leaves or lemons in the background to 
enhance the fresh, organic atmosphere. Perfect for an advertisement promoting freshness 
and natural ingredients.
```
</details>

生成された画像
![5ede1756-a7ae-45ee-9cbb-0a3298792e57.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3944324/6b398358-1074-23ab-ef84-139aa00a7ea8.jpeg)


これを用いて、3D動画を生成します。
生成にかかる時間は8分程度です。
注) Qiitaに添付する関係上、git画像にしています。カクツクかも。
<details><summary>プロンプト</summary>

```
In a bright kitchen setting, a lemon is being squeezed by hand. The juice flows out 
forcefully, with droplets splashing into the air, captured in slow motion. The golden 
liquid gradually fills a transparent glass, creating a vivid and dynamic scene.
```
</details>

![ezgif.com-video-to-gif-converter (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3944324/c124cfb9-2bb8-d830-c293-85208c0d1c47.gif)

~~絞っていないのに果汁が出ています。~~
液体の流れ落ちる表現と、レモンのみずみずしさが伝わる光の加減。
レモンジュースが飲みたくなるような良いプロモーションビデオだと思います！

# 最後に
3D動画生成の分野は計算資源の制約が厳しいため、今日の技術力では正確な動画を長時間作成することは厳しいようです。しかしながら、新たなモデルが続々登場していること、計算リソースが年々進化していることにより、今後も注目のトピックで有り続けるでしょう。

私事ですが初めての論文読みを通して、画像生成技術と線形代数が切っても切り離せない存在だと再認識し、数学力の至らなさを痛感しました。
また書かせていただく機会がございましたら、より良い記事が書けるよう精進いたします。

# 採用情報
DONUTSでは新卒中途問わず積極的に採用活動を行っています。
インフラエンジニアの募集などもあるので、ご興味あればぜひご覧ください！

https://recruit.jobcan.jp/donuts/job_offers/1396392?hide_breadcrumb=false&hide_search=false

https://recruit.jobcan.jp/donuts/job_offers/1396393?hide_breadcrumb=false&hide_search=false

# 参考資料(再掲含む)
1)Wenqiang Sun, Shuo Chen, Fangfu Liu, Zilong Chen, Yueqi Duan, Jun Zhang, Yikai Wang."DimensionX: Create Any 3D and 4D Scenes from a Single Image with Controllable Video Diffusion".arxiv.7 Nov 2024.https://arxiv.org/abs/2411.04928 ,(2024/12/09)
2)William Peebles Saining Xie UC Berkeley New York University."Scalable Diffusion Models with Transformers".10/12/2024.https://www.wpeebles.com/DiT ,(2024/12/04)
3)Edward J. Hu, Yelong Shen, Phillip Wallis, Zeyuan Allen-Zhu, Yuanzhi Li, Shean Wang, Lu Wang, Weizhu Chen."LoRA: Low-Rank Adaptation of Large Language Models".16 Oct 2021.https://arxiv.org/abs/2106.09685 ,(2024/12/04)
4)かわら."LoRA: Low-Rank Adaptaion of Large Language Models の解説".2023/04/10.https://zenn.dev/fusic/articles/paper-reading-lora, (2024/12/09)
5)Alexander Mordvintsev & Abid K. Last."オプティカルフロー".Jun 11, 2018.https://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_video/py_lucas_kanade/py_lucas_kanade.html ,(2024/12/09)