前回準備したStyleGAN2
を使って実際に画像の学習と生成をしてみます。
学習用の画像を見つけてくるところから始めます。
サンプルの実行
Preparing datasetsを見て、とりあえず試してみる。
サンプルのデータセットを使うためscipy
をインストールして起動するも、ダウンロードできませんでした。
1 2 3 4 5 |
//ModuleNotFoundError: No module named 'scipy' > pip install scipy > python download_ffhq.py --tfrecords OSError: Google Drive download quota exceeded -- please try again later |
何回かやってみてダメだったので何か変だと思ってソースを見ると、かなり大きなサイズをダウンロードしようとしているようです。
download multi-resolution TFRecords (273 GB)
他を見てもサムネイルで 2GB
ある。
自前で作ることにします。
画像セットの作成
TFRecords
を作ってみます。
同じ様式の画像ということでいらすとやの顔アイコン(男の子・女の子)を12
枚ずつお借りして、計24
枚ダウンロードしました。
2の累乗サイズでなかったり、透過画像だと以下のようなエラーになるので、適当なフリーソフトでも使ってリサイズしましょう。
1 2 |
Error: Input image resolution must be a power-of-two Error: Input images must be stored as RGB or grayscale |
私はImageMagick
を入れていたのでコマンド1発…と思いきや意外と試行錯誤。
最終的に以下のコマンドでコンバートしました。
1 |
> magick *.png -resize "128x128" -alpha remove -alpha off -set filename:x "Resize-%t" "png24:%[filename:x].png" |
create_from_image
で .tfrecords
ファイルを作成できます。
1 2 3 4 5 6 7 8 9 10 11 12 |
// 画像からTFRecordsを作る > python dataset_tool.py create_from_images ./datasets/tfr ./datasets/img/irasutoya ... Loading images from "./datasets/img/irasutoya" Creating dataset "./datasets/tfr" Added 24 images // TFRecordsを見る > python dataset_tool.py display ./datasets/tfr // If - ModuleNotFoundError: No module named 'cv2' > pip install opencv-python |
Training
/ 学習
GPUの数、データセットのルートディレクトリ、データセットのパスを設定して学習を開始します。
mirror-augument
は鏡面画像をトレーニングに使うかみたいなやつかな。
1 |
> python run_training.py --num-gpus=1 --data-dir=./datasets --config=config-f --dataset=tfr --mirror-augment=true |
これで.pkl
ファイル(Python pickle file
)が作成されますが非常に時間がかかることを覚悟してください。
24
枚の128x128
画像でこんな感じです。
tick 20
(約1日)でいったん止めました。
tick 10
回ごとにfake
画像を生成するので見てみましょう。
実験
準備でやったコマンドで動かしてみます。
1 |
python run_generator.py generate-images --network=./results/path-to-pkl --seeds=1-12 |
よくできてるなってのは元画像に似たやつです。
1 |
python run_generator.py style-mixing-example --network=./results/path-to-pkl --row-seeds=1,2,3,4,5 --col-seeds=6,7,8,9 --truncation-psi=1.0 |
これはまたなんとも言い難い。
うーん…。
単純に学習不足か、そもそもの理解不足か。
1回の施行に時間がかかりすぎるのがつらい。
もうちょっと試して面白いこと出来ないか探ってみます。