Neural Point-Based Graphics (ECCV2020)

 ECCV2020の新視点画像の研究と言えばNeRF: Representing Scenes as Neural Radiance Fields for View Synthesisが有名で、コードが早い段階で公開されていたこともあり既にNeRFをベースにした研究も多く存在する。

Awesome Neural Radiance Fields

NeRFはとても素晴らしい研究だと思うけれど、処理時間などの点で色々と課題が残っている。上記ページのリストに載っているものには学習にV100GPU8枚を使って1週間かかるものもある。


一方で、同じECCV2020ではNeural Point-Based Grahics (NPBG)という3次元点群に対してNeural Descriptorという各視点からの見えをコード化した情報を持たせることで新視点画像を生成する手法が提案されている。この手法では、以下の図のようにNeural Descriptorを付与した点群を画像上へ投影し、その結果をUNet状のネットワークに通すことで最終的なレンダリング結果を得る。




かなりシンプルな方法にもかかわらず、良好なレンダリング結果を得ることができている。


NeRFと異なり、計算コストが低く、レンダリングはリアルタイムで実行することができる。

リアルタイムでのレンダリングが可能であることから、ARなどのアプリケーションへも応用可能であるかもしれないと思い、今回はNeural Point-Based Grahicsのコードを実行してみた。以下、windows10環境での実行までの手順を示す。

  1. コードをgithubからクローンしてくる
  2. condaではなくvenvで仮想環境を構築したので、pipでscripts/install_deps.shに記載されているモジュールを仮想環境へインストールする。ただし、glumpyとpycudaは、pip install glumpy, pip install pycudaしない。
  3. glumpyのコードをgithubからクローンしてくる。glumpyディレクトリへ移動し、
    python setup.py install
    する。
  4. pycudaのコードをgithubからクローンしてくる。pycudaディレクトリへ移動し、
    python configure.py --cuda-enable-gl
    する。また、aksetup-defaults.pyというファイルを作成し、このファイルに以下を記載する。
    CL_ENABLE_GL = True
    その後、
    python setup.py install
    する。
  5. npbg/piplines/pipeline.pyの9行目あたりに以下を追記する。
    import pathlib
    また、35行目を以下のように書き換える。
    pathlib.PosixPath = pathlib.WindowsPath
    ckpt = torch.load(checkpointmap_location='cpu')
上記手順で実行するための準備は完了となる。
以下のリンクにサンプルのデータがアップされているので、ダウンロードしnpbgのルートディレクトリへ配置する。その後、以下のコマンドを実行するとウィンドウが現れ、レンダリング結果を見ることが出来る。
python viewer.py --config downloads/person_1.yaml --viewport 2000,1328 --origin-view

viewerでは以下のようにポイントクラウドの表示や法線、Neural Renderingの結果を切り替えながら表示することができる。(以下の画像は90度回転させた結果となっている)


Trainingは試していないが、Trainingに関してもNeRFと比較しかなり短い時間で実施することができると思われる。NeRFと異なり2000x1328という高解像度な画像もリアルタイムにレンダリングでくることから、アプリケーションによってはNPBGの方が向いているかもしれない。









コメント

このブログの人気の投稿

COLMAPでキャリブレーション済みのデータを使う

5点アルゴリズムによるカメラ位置・姿勢の推定

2D-3D対応からのカメラ位置・姿勢の推定