無形文化財保存に使えそうな技術である"4K4D"を環境構築しようとしたけど、エラー解析で終わった

# 目次
- [自己紹介](https://qiita.com/drafts/bccd2beb7a3a031fb72b/edit#%E8%87%AA%E5%B7%B1%E7%B4%B9%E4%BB%8B)
- [4k4Dとは？](#step2-目次化する)
- [構築環境](#リンク化の細かいルール)
- [実行結果]()
- [参考サイト]()

# 自己紹介
主にX(旧Twitter)で発信をしているいっちーというものです。
「営みのデジタルアーカイブ」を4D/AIで表現する！」というコンセプトのもと開発や撮影をしている大学院生です。
令和の小泉八雲を目指して活動しています
撮影したほかの場所にご興味がありましたら、以下のURLよりプロフィールを見てください！

[X(旧Twitter)](https://x.com/icchy_yakumo)

[Instagram](https://www.instagram.com/icchy_xx8c/)

ポートフォリオはこちらからご覧ください。

[icchyのポートフォリオ](https://ultra-citron-588.notion.site/icchy-ba0bd360576641b2b01c6dd7b3b3ef25)


## 普段の活動について
私の活動の一部として、全国に旅をしながら、さまざまな建物や文化をデジタルアーカイブする活動を個人活動として行っています。

もし今まで撮影してきたものに興味がある方は、以下のマガジンで旅記録を更新していますので、ご覧いただけますと幸いです。

1.[スキャン旅記録まとめ](https://note.com/icchy_3dscan/m/mbd5607bb3805)

2.[イベント参加記録](https://note.com/icchy_3dscan/m/m73f2bd2d651f)

# 4k4Dとは？
[論文](https://arxiv.org/abs/2310.11448)を見ていただくことが正確な理解できると思いますが、notebookLLMで概要を書いていただいたものを紹介します。


**[研究背景]**
*   動的な3Dシーンをキャプチャしたビデオから、**高忠実度かつリアルタイム**で視点合成を行うことは、コンピュータビジョンおよびコンピュータグラフィックスにおける長年の研究課題です。
*   従来の動的3Dシーン表現は、複雑なハードウェアを必要とし、制御された環境に限定されていました。
*   近年、**暗黙的なニューラル表現**がRGBビデオからの動的3Dシーン再構成に成功していますが、高解像度画像でのレンダリング速度が課題となっています。例えば、MLP Mapsは中程度の解像度でのみリアルタイム性能を達成し、4K解像度では速度が大幅に低下します。
*   既存の高速化技術は静的シーンに限定されており、動的シーンでのリアルタイムレンダリングは依然として課題です。

**[研究目的]**
*   本研究では、**4K解像度**での動的な3Dシーンの高品質な視点合成をリアルタイムで行うことを目指しています。
*   従来の動的視点合成手法と比較して、レンダリング速度を大幅に向上させる新しいニューラル表現（**4K4D**）を提案します。
*   特に、ハードウェアラスタライズをサポートする**4D点群表現**と、レンダリング品質を向上させる**ハイブリッド外観モデル**を導入します。

**[方法]**
*   まず、空間彫刻アルゴリズムを用いて、動的シーンの粗い点群シーケンスを抽出します。
*   各点に特徴ベクトルを割り当てるために、**4D特徴グリッド**を導入します。
*   点の位置は学習可能なベクトルとしてモデル化し、半径と密度はMLPネットワークで予測します。
*   外観モデルには、**離散的な画像ブレンディングモデル**（cibr）と**連続的な球面調和関数モデル**（csh）を組み合わせたハイブリッドモデルを使用します。画像ブレンディングモデルは視点に依存しないため、事前計算が可能であり、レンダリング速度を向上させます。
*   ハードウェアラスタライザーを活用した**微分可能なデプスピーリングアルゴリズム**を開発し、高速なレンダリングを可能にします。
*   モデルは、入力RGBビデオを使用してエンドツーエンドで最適化されます。

**[結果]**
*   DNA-Renderingデータセットで、1080p解像度で400FPS以上、4K解像度で80FPS以上のレンダリング速度を達成しました。
*   他の動的視点合成手法と比較して、大幅に高速なレンダリング速度と、同等以上のレンダリング品質を達成しました。
*   特に、高速な動きを含むデータセット（DNA-RenderingやNHR）においても、高品質なリアルタイムレンダリングを実現しました。
*   提案手法の各構成要素（4D埋め込み、ハイブリッド外観モデル、損失関数）の有効性を検証し、それらがレンダリング品質に大きく貢献することを示しました。

**[考察]**
*   4K4Dは、4D特徴グリッドとハイブリッド外観モデルにより、空間的な正則化と高品質なレンダリングを両立しています。
*   デプスピーリングアルゴリズムとハードウェアラスタライザーの活用により、レンダリング速度を大幅に向上させることができました。
*   画像ブレンディングモデルと球面調和関数モデルの組み合わせは、動的シーンの外観を効果的に表現し、レンダリング品質と速度の両立に貢献します。
*   事前計算などの最適化技術により、リアルタイムレンダリングを実現しました。

**[結論]**
*   本論文では、動的3Dシーンのリアルタイムレンダリングのための新しいニューラル点群ベース表現である4K4Dを提案しました。
*   4K4Dは、4D特徴グリッドに基づく点群の正則化、高品質レンダリングのためのハイブリッド外観モデル、およびハードウェアラスタライズを利用した微分可能なデプスピーリングアルゴリズムを採用しています。
*   実験により、4K4Dが最先端のレンダリング品質を達成するだけでなく、レンダリング速度を30倍以上向上させることが実証されました。

**[専門用語]**
*   **4D点群表現**: 3次元空間に時間軸を加えた4次元空間における点群の表現方法です。この論文では、動的シーンの形状と動きを効率的にモデル化するために使用されます。
*   **4D特徴グリッド**: 4次元空間に定義されたグリッドであり、各グリッド点に特徴ベクトルを割り当てることで、点群の空間的な特徴を表現します。
*   **ハイブリッド外観モデル**: 画像ブレンディングモデルと球面調和関数モデルを組み合わせた外観表現モデルです。画像ブレンディングモデルは入力画像から色情報を取得し、球面調和関数モデルは視点依存効果を表現します。
*   **デプスピーリングアルゴリズム**: 複数の透明なレイヤーをレンダリングするために、深度に基づいてピクセルを剥がしていくアルゴリズムです。この論文では、ハードウェアラスタライザーと組み合わせて、高速なボリュームレンダリングを可能にしています。
*   **球面調和関数 (SH)**: 球面上で定義された関数の基底関数であり、視点依存の色を表現するために使用されます。この論文では、連続的な視点依存効果を表現するために使用されています。
* **MLP**: 多層パーセプトロンの略で、ニューラルネットワークの一種です。 この論文では、点の半径や密度、SH係数などを予測するために使用されています。

***つまり、立体的な映像表現をすることができるということです***
    
[Hugging Face](https://huggingface.co/dylanebert/4K4D)や[Github](https://github.com/zju3dv/4K4D)に取り上げられています。
    

# 構築環境

自分の環境は以下のような構成です。

- Windows 11
- Miniconda
    - Python 3.10
- GPU: Nvdia GeForce RTX4090
- CPU: Intel  Corei9-14900KF
- Memory: 128GB
幣環境は、フォトグラメトリーやGaussian Splattingをローカルで行うことを想定しているので、メモリーはオーバースペック気味ですが、メモリーは16GBでも動くそうです。[1]

# 環境構築
## Windows環境を作る。
* git for Windowsをインストールします。

https://gitforwindows.org/

* Visual Studio Community 2022のC++のコンパイラが必要となるので、以下からダウンロード＆インストールします。C++によるデスクトップ開発をインストールすれば問題ないはずです。

https://visualstudio.microsoft.com/ja/vs/community/

* Cuda 11.8, cudnnの環境を構築する
以下のサイトをもとに構築しました。

https://www.kkaneko.jp/tools/win/cuda.html
        
* minicondaをインストールし、Pythonの仮想化環境を作る準備をします。

https://www.anaconda.com/download

メールアドレスを打つと、メールにてダウンロードURLが送られてきます。
![{4FFACE4B-AD8B-4CA5-916F-32E69C371F7A}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2374969/c7b63cb5-c0ae-de71-d744-52c423d54240.png)

## Minicondaでの作業
* はじめに作業環境に移動しましょう。
以下の例では、ホームディレクトリ直下にWorkspaceがあるとします。
```
$ cd ~/Workspace
```


* MinicondaのTerminalを起動し、仮想化環境を作成します。
ここで、仮想化環境を作るときにPython3.10にする必要があるので注意します。

```
$ conda create -n 4k4d-env python==3.10 -y
$ conda activate 4k4d-env
```

* 続いて、GithubのリポジトリをCloneします。
```
$ git clone https://github.com/zju3dv/4K4D.git
$ cd 4K4D
```

参考サイトではCuda-12.1にしていましたが、自分の環境では後ほど詰まったので、Cuda-11.8でインストールしています。

* pipのライブラリをインストール
[以下のサイト](https://zenn.dev/navigation_surg/articles/95586abc188f60)を参考にpytorchをインストールしました。version指定したほうが安全だと踏んでいます。
```
$ pip install torch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 --index-url https://download.pytorch.org/whl/cu118
```

* pipのversionを固定します。(警告は出るけれど、無視します。）
```
$ pip install -U pip==23.3.2
```


```
$ pip install -r requirements.txt
$ pip install -e . --no-build-isolation --no-deps
```
* requirements.txtでinstall時にimgui-bundle関係でエラーが出ます。
![{3C281AF9-A2D1-472B-88CA-3FB9343CF6EC}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2374969/72ec7d44-f113-ffa7-94b4-2d91e1b1248c.png)
### 対応策
##regeditツールを使用して、Windowsレジストリでその制限を解除することができます。

1.Windowsのスタートメニューに「regedit」と入力して起動しますregedit。

2.Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem キーに移動し ます。

3.LongPathsEnabledそのキーのプロパティの値を編集し、1に設定します。

4.imgui-bundleを再インストールします

### pytorch3dのインストール
* 事前にninjaをインストールします。
```
$ pip install ninja
```

おそらく安定板をインストールするのがよさそうでした。
```
$ pip install "git+https://github.com/facebookresearch/pytorch3d.git@stable"
```

* エラー解消案件
\NVIDIA GPU Computing Toolkit\CUDA\v11.8\include\crt\host_config.hpp
の151行目を以下のように変更する。
```
#if _MSC_VER < 1910 || _MSC_VER >= 1950
```
Microsoft Visual Studio 2022のC++のコンパイル環境に合わせる必要があります。

続いて、こんなエラーになりました。

```
 C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/VC/Tools/MSVC/14.42.34433/include\yvals_core.h(892): error: static assertion failed with "error STL1002: Unexpected compiler version, expected CUDA 12.4 or newer."
```

pytorchとCuda-12.4を再インストールします。
```
pip install torch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 --index-url https://download.pytorch.org/whl/cu124
```

結果的には意図しないErrorとなり、もう泣きそう、、、
後々見てみると
![{AA0C1C2E-AFD7-4A5E-8A0D-DAE05C85E982}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2374969/3894ba76-3453-4056-69a3-058c2a8b1d87.png)
CudaのArchitectureが違うらしい
怪しそうなところとして以下のエラーが現れた
```
C:\Users\xxx\miniconda3\envs\4k4d-env\lib\site-packages\torch\utils\cpp_extension.py:1965: UserWarning: TORCH_CUDA_ARCH_LIST is not set, all archs for visible cards are included for compilation.
```


そのほかにインストールしないといけない"tiny-cuda-nn"も同様のエラーで動かない


### open3dのインストール
```
$ pip install open3d
```
これはできた。

### 備考
* いつでも環境が壊れてもよいようにconda exportで環境を保存します
```
// 環境の保存
$ conda env export -n 4k4d-env > 4k4d-env.yml
// 再構築する際は以下のコマンドを打ちます
$ conda env create -f=4k4d-env.yml
```

### データセットのセットアップ
* はじめにGoogleのgdownパッケージを使います。Windowsですとchardetパッケージもインストールします。
```
$ pip install gdown chardet
```

* 今回は最低限のデータセットをインストールする設定にします
```
$ mkdir data
$ gdown -O data --folder --remaining-ok https://drive.google.com/drive/folders/1pH-SWwbt01raqZ74dvcOvYFxDbGGUcxu?usp=sharing
```

# 実行結果
環境ができるようになったらその時に更新します。
次の何かが来ているかもと思います。

# まとめ
本記事では、"4K4D"の環境を作るために苦戦している話でした。
本当にCuda周りとC++コンパイルの依存関係があまりに面倒だったという印象です。

4D Gaussian Splattingのほうが試しやすいので、そちらで対応しようかなと思っております。

WindowsのWSL2ではPyOpenGLが機能しないらしく使えないという検証結果を公開されているので、いったんあきらめなのかなと思います。
もし解決された方がいれば、教えてください。



# 参考記事
[1]: [Windows 11で4K4Dを試してみる](https://note.com/ngc_shj/n/n094ebceb5468)