common.title

Docs
Quantum Circuit
TYTAN CLOUD

QUANTUM GAMING


Overview
Contact
Event
Project
Research

Terms of service (Web service)

Terms of service (Quantum and ML Cloud service)

Privacy policy


Sign in
Sign up
common.title

巷のNeRF記事を見る

Yuichiro Minato

2023/11/16 10:51

NeRFもちょっと調べてみた感じだとかなり人気の技術ですね。

数式を使わずにやさしく解説するNeRF: Neural Radiance Fields

https://techblog.leapmind.io/blog/introduction-to-nerf-without-math/

NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis

Ben Mildenhall, Pratul P. Srinivasan, Matthew Tancik, Jonathan T. Barron, Ravi Ramamoorthi, Ren Ng

https://arxiv.org/abs/2003.08934

この論文みたいです。

「多くの3Dゲームでは、三次元オブジェクトは複数のポリゴンと、その上に貼られたテクスチャとして表現されます。しかし、三次元オブジェクトの表現方法はポリゴンだけではありませんよね。NeRFでは、三次元オブジェクトをニューラルネットワークのモデルパラメーター(本記事ではニューラルネットワークの学習対象となるパラメーターをモデルパラメーターと表現して、ニューラルネットワークへの入力パラメーターと区別することにします)として表現します。」

「3次元空間上における関心座標、その座標におけるカメラ方向を書くことにします。これらのパラメーターはすべて実数です。この5次元ベクトルを入力とし、密度と色の4次元を出力するMLP(Multi Layer Perceptron)を学習する、というのがNeRFにおける基本コンセプト」

ということで、座標を含むパラメータを入力として、密度と色を出力するニューラルネットワークのようです。

「NeRFでは、ある座標が物体表面なのかどうかはわかりません。代わりに、その座標での物体の密度を返します。原論文の表現(volume density)に倣って密度と表記はしますが、単位面積当たりの質量のことではなく、不透明度と考えたほうが、わかりやすいかもしれません。返ってきた色と密度の情報を使ってボリュームレンダリングを行い、画像を生成します。」

この解説わかりやすいですね。座標に対して、不透明度を考えて、ボリュームレンダリングを行なって画像を生成します。

一旦ボリュームレンダリングをみます。

https://school.dhw.co.jp/course/3dcg/contents/w_volumerendering.html

から、

「ボリュームレンダリング(Volume Rendering)」とは、主に3DCG(3次元コンピュータグラフィックス)において不透明度を変えることで空気感などの演出を行うことで自然で滑らかな濃淡を生み、リアルな表現を計算するレンダリング法のことです。ボリュームデータという「voxel(ボクセル)」と呼ばれる六面体(立方体)の集まりで形成された3次元的なデータを、voxel単位の輝度を算出し全体を見渡せる2次元画像としてピクセルに変換を行い画面に表示します。

元の解説に戻ると、

「実装上は、カメラから対象空間に飛ばした線分に沿って、各座標での色を、密度に応じて足し合わせていきます。その際、各座標までの不透明度の和によって重み付けを行います。具体的には、各座標とカメラを結ぶ線分の間に、密度が大きな点が存在すると、その後ろの座標のレンダリング結果に対する寄与率が減衰されます。」

つまり、カメラから対象の座標や空間に線分を書いて、その線の上の座標を足し合わせるようです。当然ですが、後ろに行くほどに不透明度が高まるので、見えにくくなるということでしょうか。

ということで、具体的には数式はなかったのでちょっとイメージがつかないところもありましたが、座標やカメラの入力からニューラルネットワークを介してパラメータを得て、さらにボリュームレンダリングという手法で絵を作り出しているようです。

結構NeRFに関しては詳しい解説記事が多いです。次です。

NeRFの仕組みを1からわかりやすくまとめたい

https://kentapt.hatenablog.com/entry/2023/07/30/203604

ページの最初の方は具体的な使い方が書いてあってわかりやすいです。技術が知りたいので4から見てみます。

読み進めるとこの記事めちゃくちゃ詳しくて長いです!

引用:https://arxiv.org/pdf/2003.08934.pdf

5DのInputは点の位置とカメラの角度で、出力はRGBと点における密度となっています。

ニューラルネットワークを利用し、学習は光線をいくつか出して、その光線上の複数の点を推定し、その立ち合わせと元の画像の誤差を学習して成立するということです。推論はカメラから光線を出して、その線分上の点を足し合わせればいいようです。

全体的にかなり細かく技術が説明されているので、この記事だけでも十分な気もします。他の記事もあるので、次に行ってみます。

次の記事。

NeRF図だくさん解説:ニューラルネットで自由視点画像を生成しよう

https://www.docswell.com/s/marbie/Z4QN4J-NeRF#p1

こちらの記事はさらに自分の絵で細かく説明していてわかりやすかったです。前の記事で触れられていた密度は不透明度として表現されていました。

ニューラルネットワークの中身についても触れていたので確認します。

全結合がいくつかついたような構造になっていて、極座標は三角関数に変換されていました。

基本的にはわかりやすかったです。細かい理論が割愛されているので、最初の記事と合わせて読むといいかもしれません。

次の記事です。

複数の視点の画像から新しい視点の画像を生成する技術「NeRF」とその学習速度を大幅に改善した研究の紹介

https://www.ibis.ne.jp/blog/20221117-nerf/

「多層パーセプトロン(畳み込み層を用いない全結合層のみのニューラルネットワーク)を用いています。」

重たそうな気がします。

Positional Encoding

「一般的に深層ニューラルネットワークは低い周波数の関数を学習する方向に進みやすいが、入力ベクトルを直接ニューラルネットワークに投入する前に、入力空間をより高い周波数を含む高次元空間に変換する関数に通すことでこれを回避し、ニューラルネットワークが高周波数の変動を学習し易くすることが可能です。」

「コンピュータ上で積分を厳密に計算することは難しいため、今回の手法では各区間においてランダムにサンプリングをする区分求積法を用いて積分値を近似的に計算しています。」

結構派生研究も紹介されていていい記事でした。

深層学習分野は本当にいい解説記事が多いですね。

次を見てみます。

【論文読解】NeRF in the Wild: Neural Radiance Fields for Unconstrained Photo Collections

https://qiita.com/takoroy/items/53e62d303b9743b06801

こちらの記事はボリュームレンダリングから解説が始まり、絵もあってとてもわかりやすいです。

最後の記事です。

[解説スライド] NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis

https://www.slideshare.net/KentoDoi/nerf-representing-scenes-as-neural-radiance-fields-for-view-synthesis-230911610

こちらもスライドでしたが、論文がきちんとまとまっていて読みやすかったです。個人的には好みの説明方法です。

全体的にNeRFはわかりやすい解説が多く、手法も同じように解説されていましたので読みやすかったです。より新しい技術であるGaussian Splattingの方はまだ出たばかりで詳しい解説も少なかったので、時間が経つと理解も進むということだと思います。以上です。

© 2025, blueqat Inc. All rights reserved