2023.10.31
NeRFのお気持ちを理解する
はじめまして、AaaS Tech Lab の髙橋です。
キャリア採用で7月からAaaS Tech Labに所属しています。
前職では3Dコンピュータービジョンの研究開発を担当していた経験から、NeRFという技術に関するキャッチアップを継続的に行っています。
NeRFを広告やプロモーションに活用する例として、McDonaldが初めてNeRFを取り入れたTVCM[1]や、櫻坂46の新曲『Start over!』のビジュアル[2]などが挙げられます。
しかし、私の経験上、NeRFを効果的に応用するためには、撮影テクニックが不可欠です。
この記事を通して、NeRFの理論や特性を理解し、それを撮影技術にどのように応用するのかを紹介していきます。
目次
1. NeRFとは
2. NeRFの理論
3. NeRFの処理の流れ
4. colmapを理解する
5. NeRFのツールの紹介
6. NeRFの検証
1. NeRFとは
"NeRF"は、ECCV 2020でBest Paper Honorable Mentionを受賞した論文 "Representing Scenes as Neural Radiance Fields for View Synthesis"[3]に基づく技術です。さまざまな角度から撮影した複数の写真から、自由視点画像を生成する技術で、以下のように好きな視点から対象物を見ることができます。
2. NeRFの理論
NeRFではカメラの座標や光線方向(見ている方向)の情報をもとに、各ピクセルのRGBと透明度を学習します。 NeRFの理論の詳細はここでは述べませんが、理論を理解する上で、以下の動画[4]が非常にわかりやすいです。
3. NeRFの処理の流れ
NeRFの入力は複数枚の画像と、その画像が撮影されたカメラ位置です。これらをもとに学習を行うことで、自由視点画像を生成することができます。
記事画像
ここでカメラ位置を算出するためにcolmap[5]という手法を用います。
colmapでは、まず複数の画像から特徴量を抽出し特徴点マッチングを行います。このマッチングを元に、3次元の点とカメラの姿勢を初期化し、画像を登録します。さらに、三角測量とバンドル調整を行い、カメラの姿勢や3次元の点の位置を精緻化します。外れ値のフィルタリングを行い、最終的な3次元の再構築が得られます。
記事画像
つまり高品質なNeRFの結果を得るためには、colmapを用いて正確なカメラの位置を求める必要があります。
そこでまず、colmapの特性を深く理解するために、いくつかの検証を行います。
4. colmapを理解する
この検証では、実際に自分で用意した画像のペアに対して特徴量を算出と特徴点マッチングを行います。どのような画像やシーンだとcolmapが上手くいくのかを実験的に理解していきます。
検証の前に特徴量と特徴点マッチングについて説明します。
colmapではSIFT[6]という特徴記述子を使用します。SIFTは、画像内のスケールや回転に不変な特徴点を検出します。以下はSIFTの検出結果です。
記事画像
また、以下は特徴点マッチングの結果です。ここでは特徴点マッチングの信頼度を基にフィルタリングして、トップ10の結果だけを表示しています。このマッチングがうまく行けば、カメラの位置を正確に復元できます。
記事画像
それでは検証に入ります。
まずは白い壁です。以下のように特徴がない領域では特徴点マッチングが上手くいきません。そのためこのような画像でのカメラ位置の復元は困難だと予想されます。
記事画像
しかし、白い壁の一部でも特徴のある物体があれば、特徴点マッチングの精度は向上します。
記事画像
また、特徴はあっても、格子状のような繰り返しパターンの柄は苦手だと言われています。
記事画像
このようなシーンでは、引きで撮影し周りの特徴を補ってあげることで、特徴点マッチングが上手くいきます。
以下の例では、引きで撮影することで服の中でも襟元や左袖付近といった特徴を把握することできます。
記事画像
その他にも、以下のようなシーンでは、colmapは最適な結果を得るのが難しいです。
・移動物体 (人、車)
・撮影者の手足や影の映り込み
・手ブレやカメラの速度によるブラー
・ディスプレイや鏡の反射
ここまでを総括すると、colmapで良好な結果を得るためには、特徴点の気持ちになり、特徴がない領域では引きで広範囲を撮影して特徴を補ってあげることが重要です。
5. NeRFのツールの紹介
NeRFでの検証の前にツールの紹介を行います。
NeRFができるツールは主に2つあります。
1つ目はLuma AI[7]です。このアプリは商用利用可能で、APIの提供もされています。ただし、商用利用の際には、プロアカウント以外の方は以下どちらかの帰属表示が必要です。
①成果物の目立つところにLumaのロゴを表示する。
②ソーシャルメディアへの投稿のメッセージの中でLumaについて言及する。
記事画像
2つ目は、nerfstudio[8]です。こちらも商用利用可能 (Apache License 2.0)で、Dockerやpipなどで環境構築が可能です。
nerfstudioで使用可能なモデルはさまざまありますが、Nerfactoがデファクトで精度、速度に応じて好きなモデルを利用可能です。
記事画像
以降の検証はnerfstudioを使用します。モデルはNerfactoです。
6. NeRFの検証
colmap同様、以下3つの撮影・シーンにおいてNeRFがどのようにできるか実験的に検証していきます。
・透明物体
・カメラを移動させず、手首を回転する撮影
・特徴のないシーン
まずガラスの食器を使用して透明物体に関する検証を行います。ガラスは透明でありながら反射もあるためでかなり難しいシーンと想定されます。
記事画像
結果は次のようになりました。
記事画像
LiDARの場合、光が透過してしまうため、3Dの再構築が難しくなります。しかし、NeRFの場合、完璧ではないものの、透明で反射する物体を一定の精度で再現することができました。これはNeRFが物体の密度を推定するため、透明なガラスの表面とその背後の物体の密度を効果的に推定できるからだと解釈されます。
次に、カメラはその場に固定し、手首のみを回転させて撮影したシーンでの検証を進めます。
安定してゆっくりと撮影をしても、colmapがカメラの位置を正確に推定できていないことが明らかとなりました。その結果、NeRFの成果も期待通りではありませんでした。
記事画像
単に手首を回転させた撮影なのに、2枚の画像間でカメラが左に移動したかのような誤解を生じさせる結果となり、これがcolmapの推定失敗の原因であると考えられます。
記事画像
記事画像
最後に、撮影の途中で極端に特徴のないシーンを取り入れた検証です。
結果は以下の通りです。右上部分でカメラ位置推定に失敗した結果、ゴーストが発生しています。やはり特徴のないシーンのカメラ位置推定は難しいという結果になりました。
記事画像
上述の検証は私が実際に撮影したデータを基に行ったものですが、Luma AIは「撮影のベストプラクティス[9]」というドキュメントを公開しています。その中でキャプチャ速度や対象のサイズについて述べられており、シーンのカバレッジに関しても、私の検証と似たようなアドバイスがあり、スマホを静止させた状態で回転させるよりも、3次元空間で動かす方が望ましいと述べられています。
私の検証とLuma AIのベストプラクティスを考慮して撮影したものは以下になります。正しく撮影することで、nerfstudioを利用した場合でもここまで高精度にNeRFができることがわかります。
記事画像
以上がcolmap 、NeRFに関する簡単な検証でした。
よりよいコンテンツ作成のためには、モデルのお気持ちやシーンの性質を深く理解し、これらの知識を撮影テクニックに取り入れることが不可欠です。私たちはこれらの知見を活かし、AI技術を活用したメディア・コンテンツの開発を進めていきます。
AaaS Tech Lab 髙橋正憲
//データサイエンティスト
髙橋 正憲
Masanori Takahashi
view more --->
==============