Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PIFuHD: Multi-Level Pixel-Aligned Implicit Function for High-Resolution 3D Human Digitization #94

Open
Yagami360 opened this issue Aug 24, 2020 · 0 comments

Comments

@Yagami360
Copy link
Owner

Yagami360 commented Aug 24, 2020

0. 論文情報・リンク

1. どんなもの?

  • PIFu のアーキテクチャをベースとして、高解像度(1K)の入力人物画像とその法線マップを入力し、画像の荒い低解像度レベルで画像全体を捉え、画像の細かい高解像度レベルで画像詳細を捉えるような PIFuHD のアーキテクチャを採用することで、3D再構成した人物メッシュの品質向上を実現。

2. 先行研究と比べてどこがすごいの?

  • 既存の imge-to-3D モデルでは、入力画像の局所的な詳細をうまく3D再構成できないと問題が存在する。
    この問題は、GPUメモリ制約のために、入力画像として比較的低解像度の画像を入力しているのが1つの原因で発生していると考えられる。
    本手法では、PIFu のアーキテクチャをベースとして、高解像度(1K)の入力人物画像とその法線マップを入力し、画像の荒い低解像度レベルで画像全体を捉え、画像の細かい高解像度レベルで画像詳細を捉えるような PIFuHD のアーキテクチャを採用することで、3D再構成した人物メッシュの品質を向上させている。

3. 技術や手法の"キモ"はどこにある?

  • 【前提知識】PIFu [Pixel-Aligned Implicit Function]



    人体メッシュの3D再構成は、一般的に、3D空間内の各点が人体メッシュ表面内にあるかメッシュ表面外にあるかを決定するための緻密な [dense] 3D体積(※3D空間離散化時はボクセルに対応)の占有率(=占有確率)を推定することで実現される。
    既存の3D再構成モデルでは、3D空間を離散化し、各ボクセルの占有確率を明示的に推定するアプローチを採用していた。

    一方で PIFu は、以下の式のように、連続なカメラ空間 X 内において、任意の3次元位置での2値(メッシュ内 or メッシュ外)の占有率を推定する関数 f(X) を end2end で学習されるニューラルネットワークでモデル化している。

    このようにモデル化することで、学習時に明示的な3D体積をメモリに保管する必要がなく、3D空間の離散化も不要となる。このことは、高品質の3D再構成を実現する上で重要な点となる。

    PIFu での具体的な処理は、以下のような流れになる。

    1. 射影変換(直交射影) π(X)=x∈R2 で投影された2D画像位置から、入力画像の encode された特徴埋め込み Φ(x,I) を抽出する。
    2. encode された特徴埋め込み Φ(x,I) から、3次元位置 X の占有率を以下の式で学習&推定する。


    3. 上式 (2) で定義されたネットワーク f を、大規模な3D人体メッシュデータセットで end2end に学習する。
    4. 推論時は、3D空間上の点を一様にサンプリングして占有率を推定する。最後に marching cubes アルゴリズムを用いて、0.5 のしきい値で等直面を抽出する。
  • PiFuHD のアーキテクチャ

    上図は、本手法(PiFuHD)でのアーキテクチャの全体像を示した図である。
    PiFuHD は、PiFu をベースに、入力画像として 1024 x 1024 の高解像度画像を入力している。
    また、この入力画像から image-to-image 変換(Pix2PixHD使用)で得られる正面と裏向きでの法線マップを入力している。
    ※ 法線マップを活用することで、背面での3D再構成の品質を向上させている

    PiFuHD は、以下の2つのサブネットワークから構成される。

    1. 1024x1024 の入力画像をダウンサンプリングした 512x512 画像を入力として、128 x 128 の画像特徴マップを生成することで、画像全体の大域的な特徴を捉える荒いレベルのネットワーク(※ PiFu と同じような構成)
      この荒いレベルのネットワークでの処理は、以下のように定式化される
    1. 1024x1024 の入力画像を入力として、512 x 512 の画像特徴マップを生成することで、画像詳細の局所的な特徴を捉える細かいレベルのネットワーク。このネットワークには、荒いレベルのネットワークからの特徴マップも入力される。
      この細かいレベルのネットワークでの処理は、以下のように定式化される

    ※ これら荒いレベルのネットワークと細かいレベルのネットワークの具体的な構造は、Stacked hourglass networks の構造を採用されている。
    ※ PifuHD のこの部分の構造や発想は、最近のセグメンテーションモデルにおいてよく採用されているピラミッド構造や UNet 構造のように局所的な情報と大域的な情報の両方を捉える構造や発想とよく似ている印象。

  • 正面から背面への推論(Front-to-Back Inference)
    一般的に背面の3Dメッシュ再構成は、入力人物画像では直接観測できないために困難なタスクである。
    このことは、最終的な3D点の占有確率を推定する MLP が複雑な関数を学習することが困難であるためとも解釈できる。

    本手法では、PixPixHD を用いて、入力画像から正面と背面の法線マップを image-to-image 変換し、それを PiFuHD ネットワークに入力することで、背面での3D再構成の品質を向上させている。
    ※ 法線マップを入力することで、最終的な MLP がより簡単に占有確率を推定できるようになる。

  • 損失関数
    本手法でのネットワークは、Pifu のような L1 loss や L2 loss ではなく、
    以下の式のように、サンプリングされた3D点集合に対しての拡張された BCE loss で学習される。
    ※ サンプリングされた3D点集合に対しての拡張された BCE loss : 論文「Deephuman: 3d human reconstruction from a single image」

    損失関数を評価するサンプル点集合 S のサンプリングは、Pifu と同様にして、
    一様な体積サンプリングと、この一様サンプリングされたメッシュ表面点周りでガウシアン摂動したメッシュ表面周りの重点サンプリング [importance sampling] を混合したサンプリングで行う。

    また法線マップを推論するための PixPixHD ネットワークは、以下の式のように、正解法線マップと推論法線マップとの間の L1 loss + VGG loss の線形結合で学習する。

4. どうやって有効だと検証した?

  • 学習用データセット
    Pifu の RenderPeople data。
    商用利用可能な 500 枚の高解像度人物スキャンデータ

  • 既存の imge-to-3D モデルとの定性的品質比較検証

    既存の imge-to-3D モデルと比較して、本手法での3D再構成品質が最も優れている。

  • 法線マップ活用有無での背面品質の定性比較検証

    法線マップを活用することで、背面での3D再構成品質が向上している。

  • 本手法での3D再構成の定性的品質検証

    様々な1枚の入力人物画像から、品質の高い3D再構成を実現できている。

5. 議論はあるか?

  • 入力画像から imge-to-image 変換(Pix2PixHD)で得られる法線マップを活用しているのが1つの注目点。
  • PiFuHD のネットワークの発想は、最近のセグメンテーションモデルにおいてよく採用されているピラミッド構造や UNet 構造のような局所的な情報と大域的な情報の両方を捉えるための構造とよく似ている印象。(※法線マップを活用する点は異なる)

6. 次に読むべき論文はあるか?

  • 損失関数
    • Deephuman: 3d human reconstruction from a single image

7. 参考文献

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Development

No branches or pull requests

1 participant