cedro-blog

pi-GANで高精度な3D表現を可能にする

1.はじめに

 既存のGANで3D表現をしようとすると一貫性のないレンダリングとなるため画質が落ちる問題点がありました。今回ご紹介するGANは、モデル内に3D表現を盛り込み、一貫性のあるレンダリングが可能なpi-GANという技術です。

*この論文は、2021.4に提出されました。

2.pi-GANとは?

 下記が、Generatorの概略図です。空間座標(Position x)を多層パーセプトロン(φ0〜φn-1)に入力します。一方で、ノイズ(Noise z)をマッピングネットワーク(Mapping Network)を通して周波数と位相シフトに変換し各層に入力します。その結果、空間密度分布σ(x)とc(x,d)を得ることが出来ます。

 空間密度分布と色の情報があると、任意のカメラ位置から画像をレンダリングすることが出来ます。具体的には、カメラ原点oから出した線毎に、空間密度分布と色を積分することによって得ることが出来ます。

 学習中に、Discriminatorで判定する画像は、カメラ位置をランダムサンプリングして生成したものを使用します。

 では、早速コードを動かしてみましょう。

3.コード

 コードはGoogle Colabで動かす形にしてGithubに上げてありますので、それに沿って説明して行きます。自分で動かしてみたい方は、この「リンク」をクリックし表示されたノートブックの先頭にある「Colab on Web」ボタンをクリックすると動かせます。

 まず、セットアップを行います。

 render_multiview_images.pyを使って、マルチビュー画像を生成してみましょう。コマンド直後にパラメータのパス、–curriculmで種類、–seeds で画像を指定します。

 今度は、render_video.pyを使って、画像を3Dで見る動画を作ってみましょう。コマンド直後にパラメータのパス、–curriculmで種類、–seeds で画像を指定します。

 複数の動画がvidsフォルダーに保存されていますので、その内2.mp4を見てみましょう(video=の指定で見る動画を変更できます)。

 render_video_interpolation.pyを使って、複数画像の補間ビデオを作成してみましょう。コマンド直後にパラメータのパス、–curriculmで種類、–seeds で画像を指定します。

 せっかくですので、猫の画像でも同様な動画を作成してみましょう。

 ついでに、車の画像でも同様な動画を作成してみましょう。–curriculmの種類は、CARLAです。

 では、また。

(オリジナルgithub)https://github.com/marcoamonteiro/pi-GAN