GluonCVのStyleGANを使って架空の顔を描いてみる(学習済みモデルを使用、GPUがなくても十分動作可能です)

2022年8月31日に記事を更新しました。

スクリプトのダウンロード

新しい変更が加えられたスクリプトはうまく動かないので古いものをダウンロードしてくる必要があります。

import os
from mxnet.gluon.utils import download
import zipfile

url = 'https://github.com/dmlc/gluon-cv/archive/v0.8.0.zip'
filename =download(url)

with zipfile.ZipFile(filename) as existing_zip:
    existing_zip.extractall('.')

os.remove(filename)

これで現在の作業環境に「gluon-cv-0.8.0」というフォルダが作られます。
GluonCV 0.8.0をPython環境にインストールする訳ではありません。過去のスクリプトを使用するだけです。

Gitが使えるなら以下の1行で同じことができます。

git clone -b v0.8.0 https://github.com/dmlc/gluon-cv.git

ただしフォルダ名が「gluon-cv-0.8.0」ではなく「gluon-cv」になるので注意して下さい。

学習済みモデルのパラメータをダウンロード

以下のサイトの中ほどにGoogle Driveから「stylegan-ffhq-1024px-new.params」というファイルがダウンロード可能と書いてあります。
そこからダウンロードして「gluon-cv-0.8.0\scripts\gan\stylegan」フォルダ内に保存して下さい。
github.com

実行

GPUなし

cd gluon-cv-0.8.0/scripts/gan/stylegan
python demo_stylegan.py --path ./stylegan-ffhq-1024px-new.params --gpu_id -1

GPUあり

cd gluon-cv-0.8.0/scripts/gan/stylegan
python demo_stylegan.py --path ./stylegan-ffhq-1024px-new.params --gpu_id 0

「samples」フォルダが作成されてその中に10枚の画像が作成されます。
警告がたくさん出ますが無視して問題ありません。

結果の表示

10枚の画像を並べて表示するだけのスクリプトです。

from PIL import Image
from matplotlib import pyplot as plt
import numpy as np

for i in range(10):
    plt.subplot(2,5,i+1)
    plt.imshow(np.array(Image.open('samples/sample_%d.png'%i)))
    plt.axis('off')

plt.show()


補足

何度実行しても同じ顔が描かれます。
他の顔を描きたければ「demo_stylegan.py」をエディタで開いて8行目の

import mxnet as mx

の下に

mx.random.seed(1000)

を書き加えて下さい。括弧内の数字を適当に変更すると結果が変わります。

動作環境

「tqdm」と「pillow」は別途インストールが必要です。

Windows

Windows 10
GPUなし
Python 3.8.7
mxnet==1.7.0.post1

Ubuntu on WSL2

1

Ubuntu18.04 on WSL2
GPUなし
Python 3.6.9
mxnet==1.8.0

2

Ubuntu 20.04 on WSL2
RTX 3060 Laptop
Python 3.8.10
mxnet-cu112==1.8.0.post0

2022年1月9日追記

スクリプトのダウンロードとパラメータのダウンロードは以下のスクリプトで可能です。
ただし事前に「autogluon.core」と「gdown」のインストールが必要です。

from autogluon.core.utils.loaders import load_zip
import os
url = 'https://github.com/dmlc/gluon-cv/archive/v0.8.0.zip'
load_zip.unzip(url, unzip_dir = '.')
os.remove('file.zip')

from gdown import download
download('https://drive.google.com/uc?id=1dYWAT9L3r2jmGe741AiSSAxg1su3ODvj',
         'gluon-cv-0.8.0/scripts/gan/stylegan/stylegan-ffhq-1024px-new.params',
         quiet = False)




autogluon.coreを使ったZIPのダウンロードと解凍はこちらを参照して下さい。
touch-sp.hatenablog.com
gdownを使ったGoogle Driveからのファイルのダウンロードはこちらを参照して下さい。
touch-sp.hatenablog.com



このエントリーをはてなブックマークに追加