English version is here
こんにちは、私の名前はアルフォンソです。カシカの新メンバーです。
この記事では、AI とコンピューター グラフィックスの最新技術について、最新情報をお届けします。
今日はNeRFについてお話しします。
NeRFとは ?
NeRF は、Neural Radiance Fields for View Synthesis の頭字語です。これは、カリフォルニア大学バークレー校で開発された 新しい AI ベースのレンダリング手法です。 この新しい手法は、カメラの姿勢がわかっている一連の画像を入力として使用するディープ ニューラル ネットワークに基づいています。 画像とカメラのポーズのセットは、3D 座標 (x、y、z) とカメラの視線方向 (thetha、phi) の 5D 座標入力セットとして表示されます。 ネットワークの出力は、放射輝度と場所に依存するボリューム密度になります。これは、ボリューム レンダリングをトレースしたものです。
簡単に言えば、NeRF は、入力写真の表示パースペクティブに依存するボリューム/輝度レンダリングを生成する AI ツールのように想像できます。 多くの人がさまざまな角度から物体を見つめているようなイメージで、NeRF は各人の「神経情報(neural information)」を使用して物体自体を作成します
NeRFの入力 - 写真撮影
写真はスマホやデジカメで撮影します。解像度が高いほど良いです。
オブジェクトの写真が さまざまな角度と視点 から撮影されていることが非常に重要です。
正面の写真だけを撮ると、NeRF はオブジェクトのボリュームをレンダリングするのに十分な情報を持ちません。
また、写真の数 も重要です。大量の画像を撮る必要はありません。 そのため、10 ~ 30 枚の写真をお勧めしますが、これは対象物によって変わる可能性があり、対象物をカバーするのに十分な写真です。 撮影枚数が多すぎると、カメラ位置の推定が遅くなり、難しくなり、視点の悪いカメラが生成される可能性があります。
さらに、画像はオブジェクトのパースペクティブを共有する必要があります。つまり、写真の間に別の写真のパースペクティブが見えようにすべきです。 そうしないと、カメラの位置を計算できなくなります。
NeRFの入力 - カメラの位置と向き
オブジェクトの写真に加えて、NeRF ではカメラの位置と向きが非常に重要です。 1つのカメラが間違った位置にあると、すべてのレンダリングが失敗する可能性があります。
したがって、カメラの位置と向きがどのように計算されるかを理解することは非常に重要です。これにより、できる限り最高の写真を撮ることができます。
カメラの位置を計算するには、Colmap と呼ばれる手法を使用します。 Colmap は、2D 画像から 3D 点群を再構築するために使用されるソフトウェアです。 ただし、異なる視点から撮影された同じオブジェクトの写真を使用して、カメラの位置を三角測量するためにも使用できます。 Colmap の心臓部は SIFT (Scale Invariant Feature Transform) と呼ばれます。
SIFTとは ?
SIFT は特徴検出アルゴリズムです。SIFT は、同じオブジェクトが異なる視点で撮影された場合や、画像のサイズが変わったり回転したりした場合でも、画像内の特徴を特定します。 このアルゴリズムは、3D 再構成、ステレオ ビジョン、および写真測量に非常に役立ちます。
SIFT 特徴は、境界検出に基づく手法を使用するため、画像の外観に基づいています。SIFT 特徴は通常、コントラストの高い画像の一部です。通常 オブジェクトの境界線、角、または先端 のように。 SIFT では、対照的な境界線、角、または先端を持つ画像が必要です。そうでない場合、特徴を抽出できません。 SIFT は、空の雲、白い壁、光沢のある反射素材など、 フラットまたはプレーンなコントラストを持つ画像の特徴を抽出できません。
Colmap は SIFT を使用するため、SIFT 機能は NeRF でも非常に重要です。 画像に SIFT 機能がない場合、Colmap はカメラ位置を 推定 できません。または、推定の品質が低くなります。
そのため、NeRF 画像には SIFT 機能 (角、境界、またはヒント) が必要です。スキャンしたいオブジェクトにこの機能がない場合は、 Colmap がカメラの位置を正しく計算できるように、背景にコントラストの高い別のオブジェクトを配置します。
NeRF (instant-ngp) のインストール
ここでは、高速にNeRFを学習できるinstant-ngpというツールを紹介します。NeRFは発展途上です。他にも多くのNeRFの実装はありますが、 導入が簡単かつ高速なinstant-ngpに説明を絞ります。(以下NeRFとして説明します) Instant-NGP は非常に新しいため、NeRF を PC にインストールする唯一の方法はソース コードからです。ただし、これは経験の浅いユーザーにとっては難しいかもしれません。 Instant-NGP を段階的にインストールする方法を示すチュートリアルがいくつかあります。
ここにいくつかの情報があります:
https://lilea.net/lab/how-to-setup-instant-ngp/ (日本語)
https://www.youtube.com/watchv=kq9xlvz73Rg (英語)
基本的な Instant-NGPの インストール チュートリアルも作業中です。近日公開予定です… ;)
Colmapのインストールと使い方
カメラの位置を計算するには、Colmap というプログラムと Instant-NGPの ソース コードに含まれるスクリプトを使用する必要があります。
まず、ここから Colmap 3.7 をインストールする必要があります。 ( COLMAP-3.7-windows-cuda.zip をインストールします)。 Colmap をインストールしたら、Colmap のインストール ディレクトリを PATH 環境変数に追加します。
次に、NeRF-Colmap スクリプトをインストールするには、Anaconda をインストールする必要があります。
インストールしたら、Anaconda プロンプトを開き ( 管理者として )、NeRF インストール フォルダー (instant-gp) に移動します。
次に、以下のコマンドを実行します:
conda create -n ngp python=3.9
conda activate ngp
pip install -r requirements.txt
(自分の環境に合わせてPython のバージョンを変更する必要がある場合があります )
インストールしたら、画像を Instant-NGP のデータ フォルダ内に配置する必要があります: <data/nerf/your_image_set_name>
最後に、カメラの位置を計算するには、次のコマンドを実行します (Instant-NGP インストール フォルダー内)。
python scripts\colmap2nerf.py --colmap_matcher exhaustive --run_colmap --aabb_scale 1 --images <data\nerf\your_image_set_name>
このコマンドは、Instant-NGPの インストール フォルダー内にある必要がある「transforms.json」という名前の JSON ファイルを生成する必要があります。
次に、「transforms.json」を画像データ フォルダー内にコピーします。次に、次のコマンドを使用して NeRF を実行します。
.\build\testbed.exe --scene <data\nerf\your_image_set_name>\transforms.json
Colmap カメラのデバッグ
Colmap は非常に便利ですが、完璧ではありません。 Colmap は向きの悪いカメラを生成することがあります。
この問題を解決するには、カメラの視点を確認する必要があります。不良カメラを検出するには、NeRF プロジェクションが影またはゴースト オブジェクトを作成するかどうかを確認します。そうである場合は、カメラの番号を書き留めて、JSON から手動で削除します。
まとめ
これで、NeRF(Instant-NGP) がどのように機能し、入力データが何であるかを大まかに理解できました。履歴書では、あなたはただする必要があります たくさんの SIFT 機能 (角、角度、しわなど) を使って、さまざまな視点 から かなりの数 (10 枚以上、30 枚未満) の写真を撮ります。 これにより、高品質の NeRF レンダリングが保証されます。