あけましておめでとうございます!!今年もどうぞよろしくお願いします。
皆さんとどういう形で関われるのかわかりませんが、来年もたまにこのブログを読んでいっていただけたら嬉しいです。
牛のイラストを生成してみた
画像を生成できるニューラルネットワークであるGNAなるものが世の中に存在するのは昔から知ってましたが、
そういうものがあるって聞いていただけで、使ったこともないし、原理もよくわからないし・・・でもなんか派手だなぁーって思ってた感じです。
ただ最近、”Lightweight GAN”ってモデルがすごいという話を多方面から聞くんですよね。しかも、コマンドだけで実行できる実装済みのモデルがgitで公開されているという。
これは試してみるしかないと思ったわけです。
そう思ったのが12月上旬でした。そこからなんの画像を学習させるか考えたのですが、まぁブログとか載せるとしたら今年の干支の牛のイラストでも生成すると思ったわけです。
ただ、取り掛かったのが仕事納めをした後だったのであれやこれや工夫する時間はなくて、とりあえず大晦日に出力できた画像をphotoshopできれいにした画像がサムネになっている下の画像になります。
まず最初に始めたのがデータ集めですが正直どんな画像が生成しやすいとかもわかってないです。ただ、匿名の開発者の論文にはポケモンやアニメキャラを生成した画像もサンプルとして掲載されていたので、牛のイラストも作れるよなぁとおもむろにデータを集めてgitからダウンロードしたモデルに突っ込みました。
原理をちゃんと理解していないモデルをお試しに使っているのでそんな複雑なことはしません。
難易度を下げるために、画面上の牛のパーツの位置を固定しました。右側に顔、左側にお尻。でシルエットかホルスタインのイラストのみを使いました。
教師画像をスクレイピングするために適当なライブラリを使おうかとも思ったのですが、結局人間の僕が集めて方が早いとなってしまい一枚一枚ネットから教師画像を集めました(いづれここは自動化したい←ネットから類似画像を自動で集めてくるモジュール作ったら需要あるかな?てか、既にあるのだろうか?)
GANの教師画像って500枚くらい必要なイメージでしたが、”Lightweight GAN”は100枚以上あれば動くそうなので牛イラストを130枚集めて、K80を積んだAzureのVMで夜通しモデルを学習させました。
gitで公開されるLightweight GANの実装済みモデルについて
使い方は上のgitのページに書いてありますが、ここでザっと紹介しておくと、
まず、モデルのダウンロードはpipで簡単にできて`pip install lightweight-gan`でインストールできます。
その後はpythonでないかコードを書く必要はなく、lightweight-ganでモデルの学習から画像の生成までを行うことができます。
`lightweight_gan –data <教師画像のフォルダのパス> –image-size 256 –batch-size 16 –num-train-steps 100000`
こんな具合です。
そうすると、コンソールに進行状況が逐次出力されるようになり、1000イテレーションごとにチェックポイントとしてモデルと現在の出力画像がサンプルとして一枚の画面に64の画像が保存されます(下の画像は6000イテレーション時のサンプル画像)。
結果あまり上手くいかなかった
- 10000イテレーション学習させたあたりから、ある教師画像のイラストそっくりな画像が大量に生成されるようになった。
- 一度学習を止めて、1000イテレーションづつのチェックポイントから再開したら、教師画像にチェックポイントごとに生成されるサンプル画像が教師画像に混ざってしまい8×8のサンプル画像が生成されるようになってしまった。
6000イテレーション学習させたところでvmが止まってしまって、しょうがないのでチェックポイントから始めたのですが、それからいろいろおかしくなりました。
まず同じ画像が大量に生成される。
ここら辺のことを考察するにはまだ知識が足りてないのですが、もしかすると過学習のような現象が起きてきました。2,3枚の教師画像に酷似した画像がどんどん生成されるようになって、逆にそれ以外の画像は上手く生成できなくなりました。
今思った原因は、教師画像が少なかったか教師画像に同じ画像が複数あったとかそんなところでしょうか?
そもそも、学習の進め方やモデルの使い方に間違いがあったのかもしれないです。ただ、これに関してはgitのコマンドをコピペしてるので検証しようがないという感じです。
上の画像のように教師データと同じ画像がいくつも生成されるんですよね。あともう一つ、サンプル画像が生成されちゃっています。ダメだもう。
サンプル画像が生成されるのを回避するには、学習を再開させる前に教師データのフォルダ中にあるdefaultというファイルの中にあるサンプル画像を削除することで回避できると思います(未検証)。
モデルの実装をしてみたいと思った
もとから人のコードを利用させてもらうのが苦手というのもありますが、コマンドだけで実行しているとうまくいかないときにやれることが少ないので、勉強のためにも多少コードを書きたいと思いました。
まぁ、どのレベルで実装するかはよくわかりませんが、論文を片手にコードを書いてみたほうが当たり前ですけどその後に役立つ知見は得られますよね。
まぁ、初心者の僕が最初の一歩としてGANを触ってみるにはいいネタでしたね。
来年の干支のトラで再チャレンジしてみようと思います。
まぁ、ことしは上手くいかなかったので人間が手書きにで書くことにしました(使いどころがあったらご自由にお使いください)。
それでは。