[BlendGAN]AIで写真を漫画風に変換する

2021年11月22日月曜日

Artificial Intelligence

本記事では、BlendGANと呼ばれる機械学習手法を用いて、顔写真を漫画風のイラストに変換する方法を紹介します。

アイキャッチ

BlendGANとは

GANとは生成的敵対的ネットワークのことであり、データから特徴を学習し、新規データの生成、または、存在するデータに沿った変換を可能とします。
画像においてGANとは顔画像の生成などに用いられています。

従来手法では、単一のスタイルに適応したモデルを生成しており、複数のスタイルに適応したモデルの生成はできていませんでした。
StyleGANでは、複数のスタイルに適応した単一のモデルを生成するという新規性を持つ手法となっています。

StyleGANサンプル
出典: https://github.com/onion-liu/BlendGAN

BlendGANの導入手順

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

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

OS: Ubuntu 18.04.3 LTS
GPU: GeForce GTX 1080

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

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

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

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

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

# 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/onion-liu/BlendGAN.git
$ cd BlendGAN

# 関連するライブラリをインストール
$ conda install -c conda-forge opencv dlib
$ conda install tqdm ninja ipykernel ipywidgets scipy
# https://pytorch.org/get-started/previous-versions/ からcudaバージョンが一致するものをインストール
$ conda install pytorch==1.10 torchvision torchaudio cudatoolkit=11.3 -c pytorch
# torchの動作確認
$ python
>>> import torch
>>> print(torch.cuda.is_available())
True
>>> print(torch.cuda.device_count())
2

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

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

続いて学習済みモデルを準備していきます。
学習済みモデルは公式のGithubからダウンロード可能です。
学習済みモデルをセットアップしていきます。

# 学習済みモデルをダウンロード
# https://drive.google.com/file/d/1eF04jKMLAb9DvzI72m8Akn5ykWf3EafE/view?usp=sharing
# https://drive.google.com/file/d/14nevG94hNkkwaoK5eJLF1iv78cv5O8fN/view?usp=sharing
# https://drive.google.com/file/d/1EaM0ZYsAMdPkbRz0smLNIlJ1rxVAhbEz/view?usp=sharing
# ./pretrained_modelsに配置

$ cd ffhq_dataset/
$ wget http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2
$ bzip2 -dk shape_predictor_68_face_landmarks.dat.bz2

以上で学習済みモデルのセットアップは完了です。

BlendGANの実行

最後に、顔写真を漫画風に変換してみます。
下記コマンドでは、./test_imgs/face_imgs/の格納された写真を
./test_imgs/style_imgs/に格納されたテイストのイラストに変換します。

$ python style_transfer_folder.py --size 1024 --ckpt ./pretrained_models/blendgan.pt --psp_encoder_ckpt ./pretrained_models/psp_encoder.pt --style_img_path ./test_imgs/style_imgs/ --input_img_path ./test_imgs/face_imgs/ --outdir results/style_transfer/
出力結果

上図左列の写真と、上図中央のイラストを入力として、イラストのテイストを反映したイラストが右列に出力されています。
イラストのテイストは正確に反映されていますが、やや濃ゆい顔に変換されていますね。
この点、追加学習によって改善の余地がありそうです。

まとめ

本記事では、BlendGANで顔写真を漫画風に変換する方法を紹介しました。
スマートフォンの写真アプリのフィルター機能にも存在している通り、エンターテインメント性の高い技術ですね。

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


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

参考文献

1. 論文 - BlendGAN: Implicitly GAN Blending for Arbitrary Stylized Face Generation

2. GitHub - onion-liu/BlendGAN

AIで副業ならココから!

まずは無料会員登録

プロフィール

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

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


Twitter

カテゴリ

このブログを検索

ブログ アーカイブ

TeDokology