[StyleGAN-Human] AIでモデルの全身画像を生成する

2022年11月6日日曜日

Artificial Intelligence

本記事では、StyleGAN-Humanと呼ばれる機械学習手法を用いて、ファッションモデルのような人物の全身画像を生成する方法をご紹介します。

アイキャッチ
出典: stylegan-human/StyleGAN-Human

StyleGAN-Human

概要

StyleGAN-Humanは、人間の全身画像を生成する画像生成技術です。

様々なポーズやテクスチャをキャプチャした23万を超える人間の全身画像データセットを収集し、データサイズ、データ分布、データ配置などを厳密に調査しながら SytleGANをトレーニングすることによって、人間の顔のみならず、服のテクスチャ、ポーズなどバランスの取れた全身画像を生成することを可能にしています。

詳細はこちらの論文をご参照ください。

本記事では上記手法を用いて、全身画像を生成していきます。

スポンサーリンク

デモ(Colaboratory)

それでは、実際に動かしながら全身画像生成を行います。
ソースコードは本記事にも記載していますが、下記のGitHubでも取得可能です。
GitHub - Colaboratory demo

また、下記から直接Google Colaboratoryで開くこともできます。
Open In Colab

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

環境セットアップ

それではセットアップしていきます。 Colaboratoryを開いたら下記を設定しGPUを使用するようにしてください。

「ランタイムのタイプを変更」→「ハードウェアアクセラレータ」をGPUに変更

初めにGithubからソースコードを取得します。

  1. %cd /content
  2.  
  3. !git clone https://github.com/stylegan-human/StyleGAN-Human.git
  4.  
  5. # Commits on Oct 13, 2022
  6. %cd /content/StyleGAN-Human
  7. !git checkout 70a3b4e82d1a13a62e2e5c51c69557ad17ff6772

次にライブラリをインストールします。

  1. %cd /content/StyleGAN-Human
  2.  
  3. !wget https://github.com/ninja-build/ninja/releases/download/v1.8.2/ninja-linux.zip
  4. !sudo unzip ninja-linux.zip -d /usr/local/bin/
  5. !sudo update-alternatives --install /usr/bin/ninja ninja /usr/local/bin/ninja 1 --force
  6.  
  7. !pip install lpips
  8. !pip install --upgrade gdown

最後にライブラリをインポートします。

  1. import os
  2.  
  3. import glob
  4. import gdown
  5. import matplotlib.pyplot as plt

以上で環境セットアップは完了です。

学習済みモデルのセットアップ

続いて、論文発表元が公開する学習済みモデルをダウンロードします。

StyleGAN 1, StyleGAN 2, StyleGAN 3のいずれかから選択します。

  1. MODEL_PATHS = {
  2. "stylegan1_1024": {"id": "1h-R-IV-INGdPEzj4P9ml6JTEvihuNgLX", "name": "stylegan1_1024.pkl"},
  3. "stylegan2_1024": {"id": "1FlAb1rYa0r_--Zj_ML8e6shmaF28hQb5", "name": "stylegan2_1024.pkl"},
  4. "stylegan2_512": {"id": "1dlFEHbu-WzQWJl7nBBZYcTyo000H9hVm", "name": "stylegan2_512.pkl"},
  5. "stylegan3_512": {"id": "1_274jk_N6WSCkKWeu7hjHycqGvbuOFf5", "name": "stylegan3_512.pkl"}
  6. }
  7.  
  8. experiment_type = 'stylegan3_512' #@param ['stylegan1_1024', 'stylegan2_1024', 'stylegan2_512', 'stylegan3_512']
  9.  
  10. %cd /content/StyleGAN-Human
  11.  
  12. gdrive_id = MODEL_PATHS[experiment_type]["id"]
  13. model_name = MODEL_PATHS[experiment_type]["name"]
  14. print('id:', gdrive_id, 'model name:', model_name)
  15.  
  16. !mkdir pretrained
  17. model_path = os.path.join('pretrained', model_name)
  18.  
  19. gdown.download(
  20. url = 'https://drive.google.com/uc?id={}'.format(gdrive_id),
  21. output = model_path,
  22. quiet = False
  23. )

全身画像の生成

それでは、学習済みモデルにseedを入力し全身画像を生成していきます。

  1. version = experiment_type.split("_")[0][-1]
  2. out_dir = os.path.join('outputs', experiment_type)
  3. generate_num = 3 # 生成枚数
  4.  
  5. print('version:', version, 'out_dir:', out_dir)
  6.  
  7. !python generate.py \
  8. --outdir={out_dir} \
  9. --seeds=0-{generate_num-1} \
  10. --trunc=0.7 \
  11. --network={model_path} \
  12. --version={version}

出力画像は以下の通りです。

  1. out_imgs = glob.glob( os.path.join(out_dir, '*.png') )
  2.  
  3. for p in out_imgs:
  4. plt.imshow(plt.imread(p))
  5. plt.axis('off')
  6. plt.show()
result1
result2
result3

非常に自然な全身画像が生成されています。

まとめ

本記事では、StyleGAN-Humanを用いて人間の全身画像を生成する方法をご紹介しました。
任意の服装、任意の体型など制御が容易になれば、ファッションモデルの代わりを務めるかもしれませんね。

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


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

スポンサーリンク

参考文献

1.  論文 - StyleGAN-Human: A Data-Centric Odyssey of Human Generation

2. GitHub - stylegan-human/StyleGAN-Human

AIで副業ならココから!

まずは無料会員登録

プロフィール

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

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


Twitter

カテゴリ

このブログを検索

ブログ アーカイブ

TeDokology