遊戯王カードのイラストをディープラーニングにより学習
GANという技術があって学習した画像に似た画像が生成できる。
人の顔、背景、動物、イラストなどいろいろな分野で成果が出ている。
そのGANを使って遊戯王カードのイラストの自動生成を行う。
以下の理由から都合がいい。
- カードの種類が1万枚以上と豊富
- 画像が入手できる
- 画像が正方形
GANの中にも種類があり、今回はProgressive Growing GAN(以降PGGAN)という手法を使う。
最終的にこんな感じになる。
1. PGGANについて
PGGANは2017年に提案された手法、従来の手法に対して小さい画像から段階的に大きい画像を学習することが特徴。
一応本を読んで勉強したが実験するだけなら何も知る必要はない。
後述のGitHubプロジェクトをそのまま使えば良い結果が出る。
2. 遊戯王カードのイラスト収集
遊戯王APIというAPIを使う。
これを使うと遊戯王カードに関する情報が取得できる。
その中にカード画像が含まれるのでそれを使う。
学習するのはイラスト部分のみなのでイラスト部分のみを取り出す。
遊戯王APIの画像はきれいに位置合わせされているため同一座標をプログラムでトリミングする。
カード画像全体の左上をxy座標の(0, 0)とすると、(49, 111)と(371, 433)を含む4点からなる正方形がイラスト部分となる。
ペンデュラムモンスターはイラストの縮尺が違うため除外。
また遊戯王APIにはなぜかスキルカード(デュエルリンクスで使えるプレイヤー能力)の画像まで用意されている。
これも今回は使用しないため除外。
3. PGGANによる学習
以下のGitHubプロジェクトを使うと極めて簡単に学習できる。
必要なのは
- 環境設定
- 画像フォルダ準備
- 学習プログラム実行
の3工程だけ。
3.1. 環境設定
Anacondaがインストールされている前提。
以下のコマンドで終わり。
すでにpytorchの環境があればそれを使ってもいい。
1 | conda create -n pytorch python=3.9 |
3.2. 画像フォルダ準備
Progressive-GAN-pytorchプロジェクトの中身は最初このようになっている。
ここに画像フォルダimage_root
を作成する。
image_root
の中に画像フォルダを1つ以上作成する。
このフォルダの中に含まれる画像が学習時に使用される。
3.3. 学習プログラム実行
先ほど作成した環境下で以下のコマンドを実行する。
1 | python train.py --path image_root --total_iter 300000 |
--path image_root
は自分の作成した画像フォルダの名前に合わせる。--total_iter 300000
は学習の反復回数。
300000でおよそ9時間半で終了し、128x128の画像が生成された。
600000だと19時間かかったが256x256の画像が生成された。
(CPU:インテル Core i9-9880H GPU:RTX 2080 Max-Q)
実行するとtrial_test1_実行した日時
という名前のフォルダが作成され、その中のsample
フォルダに生成された画像のサンプルが保存されていく。
反復回数が少ないうちは画像も小さく不明瞭。
反復回数が多くなると遊戯王感が増してくる。
膨大な量のイラストが産み出されるため全ては見きれないが割と良い感じになった。
4. 実験結果
自動生成された遊戯王カードのイラストの中からいくつか選んだものを貼る。
カード枠は紫炎の遊戯王オリカというブログが配布している素材を使わせてもらった。
なんとなくの雰囲気は遊戯王っぽいが細かいところまでよく見るとどこがどうなっているかわからない謎のイラストになっている。
5. 今後
従来の研究では、例えば顔の自動生成を行う際には正面顔に限定し顔の大きさ、眼の位置を合わせるなど学習する画像の条件を制限することで性能を高めている。
これに対して、今回行った遊戯王カードの自動生成では全ての種類のカードを学習したためまとまりが無くなったのではないかと予想される。
例えば機械族モンスターや魚族モンスターのように種族を限定して学習することで生成精度が高くなるかもしれない。
安定して良い感じのイラストが作れるようになったら自動生成した遊戯王カードを表示するWEBアプリを作りたい。
完成した。
6. 関連
6.1. LightWeight GAN
同じ実験を後日「Progressive GAN」の代わりに「LightWeight GAN」を使用してやってみた。
主観では「LightWeight GAN」の方が精度が高いように思えた。
6.2. gpt-2-simple
遊戯王カードのテキストの学習・生成を行った。