投稿

ラベル(三次元復元)が付いた投稿を表示しています

Neural Head Avatars from Monocular RGB Videos (CVPR2022)

イメージ
Neural Head Avatars from Monocular RGB Videos https://philgras.github.io/neural_head_avatars/neural_head_avatars.html 単眼のビデオ映像から頭部のモデルを生成するための手法を提案.3Dのメッシュモデルを生成するためのネットワークと見え方を生成するためのネットワークから構成されている.これまでに提案されている手法と比べて,3DのメッシュモデルをExplicitに推定していることから大きな視点の変化に対しても高品質な映像を生成することができる.また,提案手法はColor-dependent,Color-independentな項からなるコスト関数を最適化する枠組みとなっており,これにより形状と見えの情報をうまく分離できるようになっている. 頭部形状については,FLAMEモデルを初期値とし各頂点のオフセットを求めることで髪の毛の形状を含めたメッシュモデルを生成している.ただし,FLAMEモデルについては,頂点数を5023から16227へsubdivisionすることで利用している. 結果からも,既存手法に比べて詳細なテクスチャを再現することができていることが確認できる.

4DComplete: Non-Rigid Motion Estimation Beyond the Observable Surface (ICCV2021)

イメージ
 4DComplete: Non-Rigid Motion Estimation Beyond the Observable Surface https://github.com/rabbityl/DeformingThings4D 部分的なスキャンデータから全体の形状と密なモーションを補間する手法.入力は2フレーム分のスキャンデータで,初期のモーションは FlowNet3D によって推定している.深層学習を用いて形状を補間する方法はこれまでにも提案されていたが,形状とモーションの両方を同時に補間する取り組みはこれまでになかった. 主な新規性は以下の3点となっている. 部分的なスキャンデータから密な形状とモーションを同時に補間するという問題設定の新しさ ネットワークを学習するために大規模な4Dデータのデータセットを構築したこと 形状の補間とモーションの補間は相補的な関係にあり,提案手法を用いることでベースラインの手法よりも大きく精度を改善することが出来ること この研究では,モーションを補間するためのネットワークと形状を補間するためのネットワークの2つを用いており、各ネットワークでは段階的に解像度を上げながら処理を行っていくようになっている.また,その際に,中間出力を共有することによってモーションの補間結果と形状の補間結果がお互いに干渉しあうようになっている.ただし,学習の初期段階では,中間出力は安定して得られないため,真値を用いているらしい. 著者らはこのようなネットワークを学習するために,CGデータを用いて DeformingThings4D というデータセットを構築し公開している. DeformingThings4Dのデータセットには1,972のアニメーションシーケンスが収録されており,全体で122,365フレーム分の4Dデータ(モーションや形状など)の真値が得られるようになっている. 4DCompleteは,Localな特徴のみを用いて形状およびモーションの補間を行っており,人物などのGlobalな特徴を利用していないことから,様々な物体に適用できるという特徴がある.現状,色情報の補間はできていないが,色情報も含めた復元が可能になるとNon-rigidな物体の3次元形状復元の研究が大きく前進するような気がする.

3D human tongue reconstruction from single ''in-the-wild'' images (arXiv2021)

イメージ
3D human tongue reconstruction from single ''in-the-wild'' images https://github.com/steliosploumpis/3D_human_tongue_reconstruction 1枚の画像から舌の三次元形状を復元する手法.画像から顔の形状,耳の形状などを復元する取り組みはこれまでにあるが,舌に着目した研究は無かった.ただし,舌は表情を表現するためにも重要であるため,この研究では1枚の画像から舌の形状を復元することに取り組んでいる. 主な新規性は以下の3点となっている. 約700名から1800の舌形状のスキャンデータを収集しデータセットを構築した. End-to-Endの学習フレームワークで1枚の画像から舌を含めた顔の三次元復元を実現した. 様々な画像に対応するために,GANベースのフレームワークを用いて画像から舌の三次元形状を復元するフレームワークを提案した. この研究では,実際に舌の形状を三次元スキャナを用いて計測することで,画像と三次元の舌形状の正解データセットを構築している.ただし,スキャンデータのみでは,コントロールされていない環境で撮影されたデータに対してのロバスト性が低いため,GANベースのフレームワークを用いて画像から三次元の舌形状を推定する手法を導入している.これにより,生成されたデータセットも学習に用いることで,一般的な画像に対してもロバストに顔の三次元形状復元を行うことができるようになっている. 提案されているフレームワークはPoint Cloud Auto-Encoder,Image Encoder,Shape Decoderの3つのパートで構成されている.基本的なアイデアとして,スキャンデータを用いて学習済みのPoint Cloud Auto-Encoderから得られる潜在ベクトルをガイドとしてImage Encoderを学習する.これにより,画像から舌に関する三次元の特徴量を取得することができるようになる.その後,Image Encoderによって取得された特徴ベクトルをShape Decoderを用いて舌形状を制御可能な3D Morphable Modelのパラメータに変換する.   実験結果を見て分かるように,舌を出した...

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

イメージ
COLMAPで三次元復元を行う際に既知のカメラパラメータを利用する方法についてメモしておく。多くの場合、SfMでカメラパラメータも含めて推定することで十分だが、例えばCMUの Panoptic dataset のようにカメラキャリブレーション結果が提供されているようなものに対して、COLMAPを適用してみたい場合は提供されているカメラパラメータを利用する方が良い場合がある。実際に、Panoptic datasetでCOLMAPを実行するとマッチングが上手くいかず推定に失敗する場合が多くある。 既知のカメラパラメータを利用する方法については、COLMAPのFAQの中で回答があるので、ここにある通りにcamera.txt, images.txt, point3D.txtを準備すると良い。 Reconstruct sparse/dense model from known camera poses https://colmap.github.io/faq.html#reconstruct-sparse-dense-model-from-known-camera-poses 以下はCOLAMPで画像群を読み込み、特徴点の対応関係の取得まで終わっている(マッチング結果のデータベースhogehoge.dbがある)ことを前提としている。 camera.txtの生成 camera.txtには各カメラのカメラモデルおよびカメラ内部パラメータを記載する。フォーマットは以下の通り。 カメラID カメラモデル 解像度x 解像度y fx fy cx cy 歪パラメータ 内部パラメータの表現については利用するカメラモデルに依存するので、以下のURLを参照しながら必要に応じて使い分ける。 Camera Models https://colmap.github.io/cameras.html camera_models.h https://colmap.github.io/cameras.html image.txtの生成 image.txtには各画像に対応するカメラ外部パラメータを記載する。フォーマットは以下の通り。 画像ID qw qx qy qz tx ty tz カメラID 画像ファイル名 ここで(qw, qx, qy, qz)は3次元回転のクウォータニオン表現で(tx, ty, tz)は...

NeRF--: Neural Radiance Fields Without Known Camera Parameters

NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis (ECCV2020) の発展版でNeRFと異なりカメラの内部、外部パラメータも推定する手法の提案。NeRFに関する説明は、既に色々とあるのでそちらを参照。 [解説スライド] NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis 三次元空間のニューラルな表現とNeRF 基本的には、NeRFなどの新視点画像を生成の研究では、多くの場合、前処理としてStructure-from-Motionなどによって撮影画像のカメラの内部パラメータ(焦点距離や画像中心座標など)および外部パラメータ(回転、併進)を推定しておくことが必要となっている。これに対して、 NeRF--: Neural Radiance Fields Without Known Camera Parameters では新視点画像を生成するためのネットワークの学習時にカメラの内部、外部パラメータも推定してしまおうという研究。 アイデアは単純でカメラの内部、外部パラメータも推定対象としてネットワークを学習するというもの。ただし、内部パラメータは歪無し、光学中心と画像中心の座標は一致している、というもので内部パラメータは焦点距離fx,fyの2パラメータで表現されている。また、全てのフレームにおいて内部パラメータは共通(Shared Intrinsics)を仮定している。 推定処理は多段階になっており、各ステップでNeRFのモデルとカメラの内部、外部パラメータを推定する。ステップを進める際には、カメラのパラメータのみ推定値を保持し、NeRFのモデルについては初期化して学習を行う。これにより、カメラのパラメータが徐々に最適化される仕組みになっており、NeRFのモデルを各ステップで初期化して用いることで局所解の問題をできるだけ回避するようにしているらしい。 実験結果を見ると上手くパラメータの推定が出来ており、COLMAPの推定結果と比較しても同等の結果が得られていることが分かる。ただし、以下のような制約が現状はある模様。 カメラの運動に関しては、姿勢はあまり変化せず、併進が主で同一平面状を運動してい...

Photogrammetry (COLMAP + OpenMVS)

イメージ
 以前、Meshroomを使って複数枚の画像から三次元復元を行うPhotogrammetryを行った。 Photogrammetry:  https://moitkfm.blogspot.com/2019/08/photogrammetry.html 今回は、COLMAPとOpenMVSを使ってPhotogrammetryを行ってみる。というのも、以下の記事にあるように、カメラポーズの復元と疎な復元をCOLMAPで行い、密な復元をOpenMVSで行うという組み合わせが復元されるモデルの品質を向上させるためにはよさそうなため。これは、COLMAPはStructure-from-Motionのライブラリであり、疎な復元に特化しており、逆にOpenMVSは既知のカメラポーズを入力としたMulti-View Stereoに特化したライブラリだからだと思う。 COLMAP、OpenMVSはどちらもビルド済みの実行ファイルが公開されているので、上記のパイプラインを試すのはとても簡単。 COLMAPの実行ファイル:  https://github.com/colmap/colmap/releases OpenMVSの実行ファイル: https://github.com/cdcseacave/openMVS_sample/releases/tag/v0.7a また、COLMAPとOpenMVSを使ったパイプラインについては、以下のページにバッチファイルが公開されている。 COLMAP + OpenMVS scripts: https://peterfalkingham.com/2018/04/01/colmap-openmvs-scripts-updated/ ただし、27行目の"--export_path"となっている部分は"--output_path"と修正する必要がある。修正したスクリプトは以下の通り。12行目、15行目、18行目のCOLMAPとOpenMVSへのパス、作業ディレクトリへのパスは各自の環境に併せて修正する必要がある。 ::These parameters are specific to computer ::Store current Directory: set...

COLMAP開発環境の準備

イメージ
これまでVisualSfMを使っていたが、SfMツールのデファクトスタンダードとなりつつあるCOLMAPに乗り換えてみることにした。ちなみに、COLMAPはECCV2020で PAMI Mark Everingham Prize を受賞している。 COLMAP:  https://colmap.github.io/index.html COLMAPは比較的最近のアルゴリズムも実装されており、聞く話によるとVisualSfMよりも安定した復元が可能らしい。 COLMAPはビルド済みの実行ファイルも公開されているため、すぐに試すこともできる。 COLMAP binaries: https://github.com/colmap/colmap/releases ただ、色々とカスタマイズして利用したいので、今回はVisual StudioでCOLMAPライブラリを利用できるようにすることを目指す。 開発環境(Windows10, Visual Studio 2019)の構築手順は以下の通りとなっている。基本的には、COLMAPのDocumentにあるvcpkgを使ったインストール手順に従えば良い( https://colmap.github.io/install.html )。(vcpkgを使わずにビルドしようとしたが色々と依存関係を解決するのが難しく断念した) vcpkgのインストール git clone https://github.com/microsoft/vcpkg cd vcpkg bootstrap-vcpkg.bat vcpkg integrate install vcpkg install yasm-tool:x86-windows COLMAPのインストール vcpkg install colmap[cuda]:x64-windows COLMAPのDocumentには手順1の"vcpkg install yasm-tool:x86-windows"が無いが、自分の環境ではこれが無いとビルドエラー(Error: Building package gmp:x64-windows failed with: BUILD_FAILED)でインストールが正常に完了しなかった。また、手順2は結構時間がかかるので、完了するまで気長に待つ必要がある。...

Differentiable Renderer (Mitsuba2)

イメージ
ここ数年、(主観ではあるが)微分可能レンダリング(Differentiable Rendering)の研究が流行っているように思う。有名どころだと、以下のものがあるかと思う。(専門家ではないので色々と取りこぼしがあると思う) Neural 3D Mesh Renderer (CVPR2018) Differentiable Monte Carlo Ray Tracing through Edge Sampling (ACM ToG2018) Soft Rasterizer: A Differentiable Renderer for Image-based 3D Reasoning (ICCV2019) Mitsuba 2: A Retargetable Forward and Inverse Renderer (ACM ToG2019) SDFDiff: Differentiable Rendering of Signed Distance Fields for 3D Shape Optimization (CVPR2020) Modular Primitives for High-Performance Differentiable Rendering (ACM ToG2020) また、Neural 3D Mesh Rendererの著者がDifferentiable Renderingに関するサーベイ論文をarXivにアップしている。 Differentiable Rendering: A Survey さらに、Modular Primitives for High-Performance Differentiable Rendering (nvdiffrast)の論文では、いくつかのアルゴリズムの特徴を分かりやすい表でまとめてあるのでとても参考になる。 Modular Primitives for High-Performance Differentiable Renderingより引用 Differentiable Renderingを用いることで、パラメータで表現されるシーンから2Dの画像を生成し、生成された画像と目標とする画像との差分を取り、誤差を逆伝搬させることでパラメータを更新する、といったことが可能となる。ただ、画像からレンダリングのパラメータを...

PIFuHD: Multi-Level Pixel-Aligned Implicit Function for High-Resolution 3D Human Digitization (CVPR 2020)

イメージ
CVPR2020で以下の紹介したPIfuの発展版であるPIFuHDが発表された。 画像1枚から全身アバターを作る PIFuHDではより詳細な形状の復元が可能になっている。PIFuとの違いとしては、推定処理において、正面および背面の高解像度な法線マップもImage-to-Image Translationによって生成し利用している。これにより、服のしわなども再現できるようになっている(と思われる)。 PIFuHD: Multi-Level Pixel-Aligned Implicit Function for High-Resolution 3D Human Digitization (CVPR 2020) PIFuと同様にCodeが公開されており、実際に様々な画像に対して気軽に適用してみることができる。Google Colabのバージョンも公開されており、手元にGPUを搭載したPCが無い場合でも実行することができる。(GPUについては、最低8GBのメモリが必要とgithubのページに書かれている) Code:  https://github.com/facebookresearch/pifuhd 以下はサンプルの画像に対して、PIFuHDを実行した結果になっている。 入力画像,法線マップ(正面),法線マップ(背面) 復元された形状(上)と法線マップ(下) PIFuの時の結果に比べて詳細な形状が復元されていることが確認できる。ただし、PIFuと異なり形状のみの復元となっており、テクスチャ情報については復元されない。この点については、githubのissueを見る限り今後も機能が追加されることは無さそう。 ただし、ソースコードを1行変更することで、復元されたモデルを入力画像上へ投影し各頂点に対して色情報を付加することが可能になる。変更する場所はapps/recon.pyの210行目get_meshをget_mesh_imgColorである。 これにより、以下のように色付きのモデルを生成することができる。 ただし、あくまで画像上に投影した際の色情報を参照しているだけなので、背面などの見えていない部分については、後頭部に顔が出てきたりとおかしくなってしまう。なので、テクスチャについては、他のアルゴリズムで生成する、背面の画像も撮影して貼り付け、など行う必要がある。 ...