[PIXIE] AIで精細な人の3Dモデルを作る

2021年11月14日日曜日

Artificial Intelligence

本記事では、PIXIEと呼ばれる機械学習手法を用いて、画像から精細な人の3Dモデルを作る方法を紹介します。

アイキャッチ

PIXIEとは

PIXIEとは、画像から精細な顔、手、関節の3Dモデルを生成する機械学習手法です。
特徴は下記が挙げられています。

  1. 表現力豊かなBody推定: Expressive body estimation
    単一の画像から3Dの体の形状、ポーズ、手の関節、顔の表情などを推定
  2. 顔の詳細化: Facial details
    DECAを使用してしわなど詳細に顔を抽出
  3. 顔の質感: Facial texture
    対象者の顔のalbedo値(光の反射率)を推定
  4. アニメーション: Animation
    推定された3Dモデルはポーズを撮り直すことでアニメーション化可能
  5. 堅牢: Robust
    全身画像を使ってテストされたモデルは不自然なポーズの3Dモデルの生成を防ぐ
  6. 正確性: Accurate
    最先端で表情力豊かなbodyの構築
  7. 高速: Fast
    直接回帰法(direct regression)を使用
PIXIE出力結果例
PIXIEの出力結果例
出典: YadiraF/PIXIE

PIXIEの導入手順

セットアップ1: conda環境構築

それでは早速、開発環境にPIXIEをセットアップしていきます。
動作確認は下記の環境で行っています。

OS: Ubuntu 18.04.3 LTS
GPU: GeForce GTX 1080

なお、このデモはPythonで実装しています。
Pythonの実装に不安がある方、Pythonを使った機械学習について詳しく勉強したい方は、以下の書籍やオンライン講座などがおすすめです。

それでは、PIXIEをインストールしていきます。他の機械学習環境に影響を与えないためにMinicondaの仮想環境上に構築していきます。Minicondaのインストール手順は公式ドキュメントをご参照ください。

conda環境構築手順を下記に記載します。

# python version 3.7のconda環境を作成
$ conda create -n pixie python=3.7

# 作成した環境をアクティベート
$ conda activate pixie
$ cd pixie

# Proxy配下の場合は事前に下記を設定
$ export http_proxy="http://"username":"password"@proxy:port"
$ export https_proxy="http://"username":"password"@proxy:port"

# gitからcodeをclone
$ git clone https://github.com/YadiraF/PIXIE
$ cd PIXIE

# cudaバージョンが合致するpytorch1.6.0をインストール
# https://pytorch.org/get-started/previous-versions/
$ conda install pytorch==1.6.0 torchvision==0.7.0 cudatoolkit=10.1 -c pytorch

# 関連するライブラリをインストール
$ pip3 install -r requirements.txt

# nvcc fatal   : Path to libdevice library not specified回避のため下記設定
$ export CUDA_HOME="/usr/local/cuda-10.1"
$ export LD_LIBRARY_PATH="/usr/local/cuda-10.1/lib64":$LD_LIBRARY_PATH

以上でconda環境構築は完了です。

セットアップ2: 学習済みモデルとデータ準備

続いて、学習済みモデルとデータを準備します。
SMPL-X Modelをダウンロードするためにはemail登録が必要です。
Signinを選択しemail登録を行ってください。登録はすぐに完了しますが、迷惑メールに入っている場合があるのでご注意ください。
その後下記の通りSMPLX_NEUTRAL_2020.npzをダウンロードします。

PIXIEデータのダウンロードも同様にemail登録が必要です。
PIXIEからutilities.zipとpixie_model.tarをダウンロードします。

モデルのダウンロード手順
# http://smpl-x.is.tue.mpg.de/
# 上記からSMPLX_NEUTRAL_2020.npz(160MB)をダウンロード
# /PIXIE/dataに配置

# https://smpl-x.is.tue.mpg.de/
# 上記からutilities.zip(6MB)とpixie_model.tar(738MB)をダウンロード
# /PIXIE/dataに配置
$ unzip utilities.zip

続いてFLAME_albedo_from_BFM.npzを生成します。

$ envs/pixie
$ git clone https://github.com/TimoBolkart/BFM_to_FLAME.git
$ cd BFM_to_FLAME/data
$ wget http://files.is.tue.mpg.de/tbolkart/FLAME/mask_inpainting.npz

# https://faces.dmi.unibas.ch/bfm/bfm2017.htmlからmodel2017-1_bfm_nomouth.h5をダウンロード
# BFM_to_FLAME/modelに配置

$ cd BFM_to_FLAME
$ python col_to_tex.py
# BFM_to_FLAME/output/FLAME_albedo_from_BFM.npzが出力されるためPIXIE/data/にコピー
$ cp output/FLAME_albedo_from_BFM.npz ../PIXIE/data/

なかなか手順が多いですが、以上で完了です。
学習済みモデルが配布されていない理由ですが、ベースのモデルとなるBasel Face Modelの利用規約に同意している人のみが利用できるため同意なく再頒布が不可能であるためです。

3Dモデルの生成

いよいよ3Dモデルの生成です。
今回はこちらの画像のモデルを生成していきます。

ターゲット画像
# PIXIE/TestSamples/bodyに対象画像を配置
$ cd PIXIE

# bodyにfitした3Dモデルを生成
$ python demos/demo_fit_body.py --saveVis True

こちらを実行すると以下のような結果が出力されます。

bodyfit出力結果

続いて、以下のコマンドを実行すると生成した3DモデルのGIF画像を出力します。

$ python demos/demo_fit_body.py --saveGif True

以下が出力されます。

3DモデルGIF

非常に精細な3Dモデルが出力されます。
体型や性別を考慮したモデルが生成されていますね。

これを応用して連続撮影した写真を3Dモデル化すれば3Dモデルのアニメーションを生成できます。

まとめ

本記事では、PIXIEで3Dモデルを生成する方法を紹介しました。
労力を要する3Dモデルの作成が1枚の画像から生成できるため有用性の高い技術となっています。

また本記事では、機械学習を動かすことにフォーカスしてご紹介しました。
もう少し学術的に体系立てて学びたいという方には以下の書籍などがお勧めです。ぜひご一読下さい。


また動かせるだけから理解して応用できるエンジニアの足掛かりに下記のUdemyなどもお勧めです。

参考文献

1. 論文 - Collaborative Regression of Expressive Bodies using Moderation

2. GitHub - YadiraF/PIXIE

AIで副業ならココから!

まずは無料会員登録

プロフィール

メーカーで研究開発を行う現役エンジニア
組み込み機器開発や機会学習モデル開発に従事しています

本ブログでは最新AI技術を中心にソースコード付きでご紹介します


Twitter

カテゴリ

このブログを検索

ブログ アーカイブ

TeDokology