RGB-D 自撮り写真から高忠実度の 3D デジタル人体頭部を作成

参考論文:
1:「RGB-D Selfies からの高忠実度 3D デジタル人体頭部の作成」
目的: 1 枚の写真を使用して、画像に対応する 3D 画像を生成します。
鮮やかな 3D 画像を生成するプロセスでは、主に 1: 3D 頭部モデル、2: 法線マップ、3: テクスチャ マップ、4: 各種表現係数、照明係数、ポーズ係数などの生成が必要になります。3D 頭部モデルと頭部モデルの法線マップが正確であれば、90% 成功します。

3D頭部モデルと係数生成

どのような3D頭部モデルが高品質な頭部モデルと言えるでしょうか?

3D 頭部モデルの生成は 3D 画像生成の最初のステップです。数万の 3D 点群から構成される 3 次元の人間の頭部形状を図 1 に示し、図 2 に視覚化します。
1
図 1
図2
図 2
生成された 3D 頭部モデルの品質は、頭部モデルを直接見ることによってのみ概算できます。正確にしたい場合は、さまざまな角度からの写真で視覚化する必要があります (同じ人物をさまざまな角度から見た場合、 2D写真の顔の形と実際の顔の造作は異なっていても、3D頭部モデル上では同じでなければなりません。異なると頭部モデルがうまく生成されません)。
たとえば、図 3 (同僚の画像を使用した実験。他人の肖像権の侵害を避けるために削除されています) では、この人物の生成された頭部モデルが正面の顔に視覚化されています。対応する側面 顔のポーズ係数に関しては、横顔の可視化に移行した後に問題が露呈し、頭部モデルが適切に生成されていないことがわかります。

図 3 の優れた頭部モデル
は、図 4 に示すとおりである必要があります。ポーズ係数がどのようなものであっても、さまざまな視野角から視覚化したときに輪郭によく適合します。
csdnimg.cn/903bd4b3392e4400a42dc8fada203a18.png#pic_center)
図 4

高品質の頭部モデルを生成するにはどうすればよいですか?

3D頭部モデルはどのように生成されるのでしょうか?

ここに画像の説明を挿入します
s は生成された新しい 3D 頭部モデルを表し、s~ は基本的な頭部モデルを表し、S は N 個の頭部を使用して PCA に基づいて計算された主成分である基本形状識別子を表します。Xshp は推定する必要がある形状パラメーターを表します。 -次元 1*500 配列。
a は生成された新しいカラー マップを表します。a~ は基本カラー マップを表します。A は基本カラー識別を表します。これは、N 個のヘッドを使用する PCA に基づいて計算される主成分です。Xalb は、推定する必要があるカラー パラメータを表します。 1*199 の次元配列。

基本的な頭部の型の入手方法

Artec Eva などの高解像度 3D スキャナを使用して人間の頭部をスキャンし、対応する 3D 頭部モデルを取得します。一般に、N 個の頭部をスキャンして N 個の頭部モデルを取得し (Tencent の N=200)、N 個の頭部モデル ポイントが基本的な頭部の型を取得します。

基本形状識別子の取得方法

ここに画像の説明を挿入します
アルゴリズムの説明: 1: 200 個のヘッド モールドを元のヘッド モールド セットとして使用します S
2: 外側のループに入る
2.1) 10,000 個のヘッド モールドのセットから交換せずに m = 1000 個のヘッド モールドをランダムに抽出し、D として記録します
2.2) 初期サイクル数k、およびヘッドフォーム誤差平均 §
3: 内側のループに入る
3.1) S の PCA を計算し、S セットの特性の 99.9% を表すことができる最初の k 個のヘッドフォーム セットを取得し、それらを Sk として記録します。 3.2) Sk を使用します
。 3.3) 誤差の大きい
頭部モデル (頭部モデルの平均誤差 § を超える) は、M セットに移動されます。たとえば、m 個あります。 3.4)
M セット内のすべての頭部モデルをミラーリングし、2m を取得します。
3.5) M セット内のすべてのエラーの平均を求め、§ を更新します。
3.6) M セットをマージして、初期 S セットを取得します。
3.7) 累積反復回数
§ がエラーしきい値 thresh 未満の場合、内側のループを終了し、外側のループに入ります。ループを実行し、9000 個の頭部モデルからランダムに 1000 個の頭部モデルを選択し、3 を入力します。最終的に、
基本形状識別子として頭部モデルの PCA が10000 個以上取得されます。

推定する必要がある形状パラメータ Xshp を取得します

ここに画像の説明を挿入します
ここに画像の説明を挿入します
これら 5 つの損失を計算することにより、反復トレーニングを通じて P が取得されます。これには、500 パラメーターを含む Xshp、199 パラメーターを含む Xalb、27 の照明係数、および 6 つのポーズ係数が含まれます。
6 つのポーズ係数には、[y 軸の並進変位、x 軸の並進変位、z 軸の並進変位、kx 左右の偏向振幅、ky 上下の偏向振幅、th スケール係数係数] が含まれます。ポーズ係数を変更することで、生成された 3D ヘッドは変更可能です。
モールドの姿勢は上の図 4 に示すとおりです。
1:
ここに画像の説明を挿入します

元のイメージとレンダリングされたイメージの L1 正規形 2 を求めます

ここに画像の説明を挿入します

深度画像の損失。深度画像データがないため、この損失は発生しません。
3:
元のイメージとレンダリングされたイメージの深度特徴をそれぞれ見つけて (VGGFace モデルの fc7 レイヤー特徴によって表されます)、すべての深度特徴に対して L2 正規形式を実行します。
4:
ここに画像の説明を挿入します
輪郭点のフィッティング
テンセントはここで 86 個の輪郭点をフィッティングしています。206+86=292 個の輪郭点をフィッティングし、フィッティング ポイントの重みを動的に変更します。つまり、正確な点は重みが高く、不正確な点は重みが高くなります。高重量ポイント、低重量。したがって、生成される頭部モデルの形状の詳細はより正確になります。下の写真はフィッティングポイントです。
ここに画像の説明を挿入します
ポイントの位置を調整することで、顔のパーツの見た目や大きさを調整できます。
ここに画像の説明を挿入します

5:
ここに画像の説明を挿入します
形状とテクスチャのパラメータを正規化します。

テクスチャの生成

まずいくつかのマップについて説明します:
アルベド マップ: 主にカラー マップと呼ばれるモデルのテクスチャと色を反映します
法線マップ: 法線マップはサーフェスの法線方向を保存します
UV マップ: ここでの「UV」は u、v テクスチャを指しますマップ座標(空間モデルのX,Y,Z軸に相当)の略称。画像上の各点の位置に関する情報を定義します。これらの点は 3D モデルに関連付けられ、表面テクスチャ マップの位置が決定されます。UV は、画像上の各点をモデル オブジェクトの表面に正確にマッピングし、点間のギャップに対して画像の滑らかな補間処理を実行します。これをUVマップと呼びます。テクスチャ生成には主に(1) アンラップの生成(2) エリアフィッティング(3) pix2pix を使用したテクスチャの微調整 の
3 つの部分があり、以下でこれら 3 つの部分について説明します。



アンラップを入手するにはどうすればよいですか? つまり、3D モデルを 2D テクスチャに拡張するにはどうすればよいでしょうか?

この文書では詳細には触れませんので、情報はオンラインで検索し、公式のソース コードと併せて読む必要があります。
理論: テクスチャ座標 UV を頂点の画面位置として使用します ([0,1] 範囲のテクスチャ座標を [-1,1] 範囲の正規化された位置座標に再マップします)。モデルの UV マッピングが適切である必要があることに注意してください。つまり、テクスチャ上の各点はモデル上の固有の点にマッピングされ、重複することができない必要があります。次に、拡張されたメッシュを 3D モデルの各ピクセルの色で色付けすると、拡張された 2D マップが得られます。
まとめると、大まかにメッシュの分割、プレーンマッピングの作成、UVメッシュの展開、メッシュのカラーリングなどです。
上記のメイン コード:
正面顔の場合:
ここに画像の説明を挿入します
ここに画像の説明を挿入します
実装手順:
1: 頭部モデル ジオメトリの (x, y) 軸固定点、vt マップ座標点、および v 法線固定点を使用して頭部モデルを展開します。前のステップで取得した uv を取得する座標点の位置、展開されたマップのサイズが uv のサイズになります。
2: 元のイメージを uv_map と同じサイズにサイズ変更し、位置インデックスを使用して各 UV 座標ポイントのピクセルに色を付けます。
3: 基本的な uv_map を使用して、前のステップで取得した uv_map とイメージのラプラシアン ピラミッド フュージョンを実行し、最終的なアンラップを取得します。
複数の写真の場合 (例: 正面 1 枚と左右の側面 2 枚):
実装手順:
1: 3 つの写真についてそれぞれ上記の手順 1 と 2 を計算し、3 つの視点から uv_map を取得します。
2: 前の手順で取得した uv_map と以下の対応するマスクを融合し、それらを重ね合わせます。
3: 最後に、基本 uv_map を重ね合わせた uv_map と次の 3 つのマスクで重ね合わせ、[0, 1] に正規化して画像のラプラシアン ピラミッド フュージョンを実行して、最終的な Unwrap を取得します。
ここに画像の説明を挿入します

領域フィッティングの詳細

地域フィッティングの過程では、地域ピラミッドの結果が利用されますので、地域フィッティングの詳細を説明する前に、まず地域ピラミッドについてご紹介し、次の図は地域ピラミッドの全体プロセスを示しています。

ピラミッドベースのパラメトリック表現を使用して、高解像度のカラー マップと法線マップを合成します。

ピラミッド アルゴリズムを構築するプロセス:
1): 200 個のカラー マップを ( 2 つの解像度: 512 512 および 2048
2048) にサイズ変更します。 2): 顔の領域を 8 つの領域に分割し、次の UV マップの表現で異なる色を使用します。
ここに画像の説明を挿入します
3) : このように、各サンプルは 3 タプルを形成し、k は 8 地域種の領域を表します。
ここに画像の説明を挿入します

4): 3 タプルのベクトル化を 1 次元ベクトルに結合し、PCA を計算してその主成分を取得します。
5): 4)で得られた主成分をインデックスに従って新しいベクトルに拡散し、k領域のピラミッド特徴を取得します。
ここに画像の説明を挿入します

領域フィッティングの詳細

エリア フィッティングには 2 つの部分があります:
1: パラメータ フィッティング
2: 高解像度マップ合成
まずパラメータ フィッティングについて説明します。次の式はパラメータ フィッティングです: まず、
ここに画像の説明を挿入します
上の式のいくつかの変数の意味を説明します:

: 前のステップのアンラップで生成。
ここに画像の説明を挿入します
これは、頭部モデル生成プロセスで生成された大まかなカラーマップ パラメーターを、エリア ピラミッドによって生成された A512 (512*512 解像度のカラー マップ ベース) とエリアごとに乗算してフィッティングし、全体のカラー マップに重ね合わせることを意味します。
実装手順:
1:とここに画像の説明を挿入します
の間のl2 パラダイムを計算し
、loss1 として記録します;
2:ここに画像の説明を挿入します
主に 8 つの領域の境界にあるアーティファクトを除去します。この方法は、uv_mask を使用してカラー マップ全体を境界マスクと非境界マスクに分割し、カラー マップ内の境界距離と非境界距離をそれぞれ計算し、これら 2 つの距離を加算します。それを loss2 として記録します。 3:トレーニングされた Xalb が取得されるまで、
カラー
マップパラメーター テクスチャ パラメーター Xalb に L2 正則化を適用します。ここでのステ​​ップ 1 ~ 5 は、上図のパラメータ フィッティング部分であり、頭部モデル生成時に生成された粗化された Xalb を、損失を最小限に抑えて反復学習を実行して、より良い Xalb を取得します。次に、高解像度テクスチャ合成について紹介します。6: 前のパートで得られたより良い Xalb と、地域ピラミッド (2048*2048 解像度カラー マップ ベース) によって生成された A2048 を地域ごとに乗算して適合させ、それを全体のカラー マップに重ね合わせます。これが地域マップです。パーツを組み合わせて最終的なカラーマップが得られます。



ここに画像の説明を挿入します

7: 前のパートで得られたより良い Xalb を、領域ごとのピラミッド (2048*2048 解像度の法線マップ ベース) によって生成された G2048 と乗算してフィットさせ、それを全体の法線マップに重ね合わせます。これが、取得された最終的な法線マップです。エリアフィッティング部による。

カラーマップとノーマルマップの構成詳細

2 つの GAN ベースのネットワークを使用して詳細を合成します
3.1) unwrap uv と呼ばれる前のステップから初期カラー マップを取得し、uv をマスクします
| ここに画像の説明を挿入します
| ここに画像の説明を挿入します
|
|–|–|
| | |
3.2) ピラミッド フィーチャを通じて領域ごとに Fit_unwrap マップを領域ごとにフィットさせます。左側は詳細なカラー マップ、右側は生成された法線マップです。
| ここに画像の説明を挿入します
| ここに画像の説明を挿入します
|
|–|–|
| | |
3.3) fit_unwrap マップを入力として使用し、GAN (pix2pix ネットワーク) を通じて同じ解像度でより洗練されたカラー マップと法線マップを取得します。(pix2pix は 2017 年に CVPR で発表された古典的な論文で、GAN を教師付き画像間変換に適用しています) このブロガーが pix2pix アルゴリズムを詳しく説明しました: https://blog.csdn.net/u014380165/article/details / 98453672
3.3.1) カラー マップ生成の場合:
入力: 前のステップで取得した 2048* 2048 のラフなカラー マップ
出力: 洗練された 2048* 2048 カラー マップ
3.3.2) ノーマル マップの生成の場合:
入力: このステップで取得した洗練されたカラー マップ前のステップで取得した粗い法線マップは、入力としてチャネル次元に沿って結合されます 出力
: 洗練された 2048*2048 法線マップ
| ここに画像の説明を挿入します
| ここに画像の説明を挿入します
|
|–|–|
| | |
合計 プロセスは次のとおりです。

おすすめ

転載: blog.csdn.net/jiafeier_555/article/details/125428388