MMGenerationのセットアップと学習済みモデルの使い方

2022年7月3日日曜日

Artificial Intelligence

本記事では、GANに特化したツールセットであるMMGenerationのセットアップ方法や学習済みモデルを用いた様々なタスクの実行方法をご紹介します。

eye catch
出典: open-mmlab/mmgeneration

MMGeneration

概要

MMGenerationはOpenMMLabが開発するPytorchをベースとしたGANに特化したツールセットです。

Pytorch1.5以降で動作する本ツールセットは、StyleGANv1, v2, v3などのUnconditional GANからBIGGANやSNGANなどのConditional GANなど様々なモデルをサポートしており、統一されたAPIを使用して容易に切り替えることが可能です。

また、トレーニングや評価等の基本的なパイプラインの構築はもちろんのこと、GAN Interpolation, GAN Projection, GAN Manipulationなど複数のタスクがツールセットに組み込まれており、モデルの構築から使用まで幅広くサポートされています。

詳細はこちらのドキュメントをご参照ください。

本記事では上記手法を用いて、画像合成やGAN Interpolationを動かしていきます。

デモ(Colaboratory)

それでは、実際に動かしながらMMGenerationを用いた画像合成や画像補間を行っていきます。
ソースコードは本記事にも記載していますが、下記のGitHubでも取得可能です。
GitHub - Colaboratory demo

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

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

環境セットアップ

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

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

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

%cd /content

!git clone https://github.com/open-mmlab/mmgeneration.git

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

%cd /content/mmgeneration

!!pip install moviepy
!pip3 install openmim
!mim install mmcv-full

!pip install -e .[all]

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

画像合成

ここでは、FFHQでトレーニングされたStyleGANv2モデルを使用してランダムに人の顔画像を生成します。
MMGenerationを使用するとコンフィグファイルとモデルのパスを指定するのみでモデルが使用できます。

import mmcv
from mmgen.apis import init_model, sample_unconditional_model

# Specify the path to model config and checkpoint file
config_file = 'configs/styleganv2/stylegan2_c2_ffhq_1024_b4x8.py'
# you can download this checkpoint in advance and use a local file path.
checkpoint_file = 'https://download.openmmlab.com/mmgen/stylegan2/stylegan2_c2_ffhq_1024_b4x8_20210407_150045-618c9024.pth'

device = 'cuda:0'
# init a generatvie
model = init_model(config_file, checkpoint_file, device=device)
# sample images
fake_imgs = sample_unconditional_model(model, 4)

生成された画像を表示します。

from torchvision import utils
import matplotlib.pyplot as plt
import os
from IPython.display import Image, display

results = (fake_imgs[:, [2, 1, 0]] + 1.) / 2.
save_path = './outputs/unconditional/results.jpg'

# save images
mmcv.mkdir_or_exist(os.path.dirname(save_path))
utils.save_image(
    results, save_path, ncol=1, padding=0)

# display
display(Image(save_path))
fake images

実在している人だと言われても違和感がないほどの画像が生成されています。

ラベル付き画像合成

ここでは、ImageNetを用いてトレーニングされたBigGANを用いて、ラベルで指定した画像を合成してみます。

from mmgen.apis import init_model, sample_conditional_model

# Specify the path to model config and checkpoint file
config_file = 'configs/sagan/sagan_128_woReLUinplace_noaug_bigGAN_Glr-1e-4_Dlr-4e-4_ndisc1_imagenet1k_b32x8.py'
# you can download this checkpoint in advance and use a local file path.
checkpoint_file = 'https://download.openmmlab.com/mmgen/sagan/sagan_128_woReLUinplace_noaug_bigGAN_imagenet1k_b32x8_Glr1e-4_Dlr-4e-4_ndisc1_20210818_210232-3f5686af.pth'

device = 'cuda:0'
# init a generatvie
model = init_model(config_file, checkpoint_file, device=device)

# sample images with specific labels
# label https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a
fake_imgs = sample_conditional_model(model, 4, label=[0, 1, 2, 3])

合成結果を表示します。

results = (fake_imgs[:, [2, 1, 0]] + 1.) / 2.
save_path = './outputs/conditional/results.jpg'

# save images
mmcv.mkdir_or_exist(os.path.dirname(save_path))
utils.save_image(
    results, save_path, ncol=1, padding=0)

# display
display(Image(save_path))
fake iamges2

StyleGAN使用時と比較して、コンフィグと学習済みモデルのパスを変更した以外ほとんど実装内容を変えずにモデルを切り替えることができています。



Interpolation

最後に、StyleGANv2を用いて、画像間を補間しながらモーフィングのような動画を生成していきます。

!python apps/interpolate_sample.py \
  configs/styleganv2/stylegan2_c2_ffhq_256_b4x8_800k.py \
  https://download.openmmlab.com/mmgen/stylegan2/stylegan2_c2_ffhq_256_b4x8_20210407_160709-7890ae1f.pth \
  --export-video \
  --samples-path outputs/interpolation \
  --endpoint 6 \
  --interval 60 \
  --space z \
  --seed 12 \
  --sample-cfg truncation=0.8

生成された動画は以下の通りです。

from moviepy.video.fx.resize import resize
from moviepy.editor import VideoFileClip

# display
clip = VideoFileClip('/content/mmgeneration/outputs/interpolation/lerp.mp4')
clip = resize(clip, height=420)
clip.ipython_display()
interpolation result

用意されているサンプル実装を使用することで非常に簡単にInterpolationを実現できました。

まとめ

本記事では、MMGenerationのセットアップから画像合成などの実行方法をご紹介しました。
こうしたツールセットの使用により、モデルの選択や実装が楽になりそうです。

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


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

参考文献

2. GitHub - open-mmlab/mmgeneration

AIで副業ならココから!

まずは無料会員登録

プロフィール

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

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


Twitter

カテゴリ

このブログを検索

ブログ アーカイブ

TeDokology