Ubuntu 20.04 + StyleGAN2 でアニメキャラを生成してみた


Ubuntu 20.04 上で StyleGAN2 を動かし、アニメキャラの顔を生成してみました。
なお、学習データの収集やモデルのトレーニングには非常にコストがかかるため、今回は有志による学習済みモデルを使用させていただきました。

StyleGAN2 の公式の GitHub リポジトリは以下
https://github.com/NVlabs/stylegan2

参考

環境

  • Ubuntu 20.04 LTS
  • GPU: GTX GeForce 1080Ti
  • NVIDIA Driver 460.73.01
  • CUDA 10.0
  • cuDNN 7.4.2
  • Python 3.6.9
  • TensorFlow 1.14

NVIDIA Driver インストール

こちらを参考にインストールします。私の環境ではバージョン 460.73.01 でした。

GCC 7 インストール

CUDA 10.0 のインストールに GCC 7 が必要なので入れます(Ubuntu 20.04 のデフォルトは GCC 9)

sudo apt install gcc-7
sudo apt install g++-7

# 優先度を設定
# gcc-7 の方が大きければ数値はなんでもいい
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 50
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 50
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 100

# バージョン変更できたか確認
gcc --version

CUDA 10.0 インストール

CUDA Toolkit 10.0 Archive で Linux->x86_64->Ubuntu->18.04->deb(network) を選択し、指示に従ってインストールします。最後のインストールコマンドのみ異なります。

  1. Download ボタンから Base Installer をダウンロード
  2. 以下のコマンドでインストール
sudo dpkg -i cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
sudo apt-get update
sudo apt-get install cuda-10-0 # ここが違う

# 確認
cat /usr/local/cuda/version.txt

cuDNN 7.4.2 インストール

cuDNN Archiveから Download cuDNN v7.4.2 (Dec 14, 2018), for CUDA 10.0 を選び、以下の3つをダウンロードします。

  • cuDNN Runtime Library for Ubuntu18.04 (Deb)
  • cuDNN Developer Library for Ubuntu18.04 (Deb)
  • cuDNN Code Samples and User Guide for Ubuntu18.04 (Deb) <-なくても問題はない

次に、ダウンロードしたディレクトリに移動し、以下のコマンドでインストールします。

sudo dpkg -i libcudnn7_7.4.2.24-1+cuda10.0_amd64.deb
sudo dpkg -i libcudnn7-dev_7.4.2.24-1+cuda10.0_amd64.deb
sudo dpkg -i libcudnn7-doc_7.4.2.24-1+cuda10.0_amd64.deb

こちらを参考にして、動作確認を行います。

# 過去に他のバージョンを入れていた場合
sudo update-alternatives --config libcudnn

# 動作確認
cp -r /usr/src/cudnn_samples_v7/ $HOME
cd  $HOME/cudnn_samples_v7/mnistCUDNN
make clean && make
./mnistCUDNN # Test passed! と出れば OK

Python 3.6.9 インストール

各々の方法でインストールしてください。私は pyenv で管理しています。

pyenv install 3.6.9
pyenv versions

TensorFlow 1.14 インストール

pip install tensorflow==1.14
pip install tensorflow-gpu==1.14

Python で以下のコードを実行します。

# バージョン確認
import tensorflow as tf
print(tf.__version__)

# TensorFlow が GPU を認識しているか確認
# device_type: “GPU” と出れば OK
from tensorflow.python.client import device_lib
device_lib.list_local_devices()

StyleGAN2 でサンプルを実行

git clone https://github.com/NVlabs/stylegan2.git
cd stylegan2
/usr/local/cuda/bin/nvcc test_nvcc.cu -o test_nvcc -run
# 以下のように出れば OK
# CPU says hello.
# GPU says hello.

# サンプルの学習済みモデルで画像を生成
python run_generator.py generate-images --network=gdrive:networks/stylegan2-ffhq-config-f.pkl --seeds=6600-6625 --truncation-psi=0.5
オプション 説明
--network .pkl ファイルへのパスを指定する。pretrained_networks.py に追記することでエイリアスを設定できる。
--seeds 乱数で画像の枚数を指定する。乱数が変わると生成される画像も変わる。1-10 だと10枚生成され、10,20,30 などとすると3枚生成される。

このように人間の顔が26枚生成されていれば大丈夫です。(results 内にあります)

StyleGAN2 でアニメキャラを生成

本題です。
有志の方がモデルを公開しているので、ありがたく使わせていただきます。
Making Anime Faces With StyleGAN
こちらのページにリンクがあります。
https://mega.nz/#!PeIi2ayb!xoRtjTXyXuvgDxSsSMn-cOh-Zux9493zqdxwVMaAzp4
ダウンロードした .pkl ファイルを stylegan2 内に置きます。

python run_generator.py generate-images --network=2020-01-11-skylion-stylegan2-animeportraits-networksnapshot-024664.pkl --seeds=1-9

無事生成できました!(imagemagick で画像をまとめています)
ほとんど違和感がありません。すごい...

次に、男性キャラを生成してみます。
先程のページANIME FACES → MALE FACES にてモデルをダウンロードできます。
https://mega.nz/#!fMNDkYwS!X-7_nBtsC6P_09CINIJAoVqR3V8Ffbv5On74rVoUbik

run_generator.py のもう一つのコマンドである style-mixing-example を使ってみます。

python run_generator.py style-mixing-example --network=2019-05-03-stylegan-malefaces-02107-069770.pkl --row-seeds=1-5 --col-seeds=1-5

このような画像ができました。こちらも自然な顔が生成できています。

seeds を変えると顔も変わるので、色々試してみると面白いです。

最後に

こちらでも紹介されていますが、機械学習用にデータをまとめてネットで公開している方もいるようなので、こういったものを使って自分でも学習させてみたいと思いました。
また、Lightweight GAN という個人の PC でも学習可能なものもあるようなので、そちらも試してみようと思います。