クリスマスなのでGANでサンタさん作ってみた
クリスマスの夜、なんとかの6時間っていうのがあるらしいんですけど、6時間もあったら何か作れるんじゃね?ということで何か作ってみることにしました。
作ったもの
クリスマス、情報系ならサンタさん作るところからやるべきだよなぁ?ってことでGANを使ってサンタクロースの画像を生成することにしました。ソースはGitHubに公開しています。
手順
今回は同じ研究室の方と2人で取り組んだので、画像収集と前処理を自分が、学習と画像生成の部分をもう一人が担当しました。
画像収集と前処理
Googleの画像検索から「サンタクロース」とか「Santa Claus」とかでスクレイピングしてきて、約500枚集めました (scraping.py)。このとき、ぱっと見で全く関係なさそうな画像は手作業で削除しました。
次に、集めた画像に対してエッジ抽出したり回転させたりして1万5千枚程度まで水増しさせ (padded.py)、その上で64x64のサイズに統一させました (resize.py)。
学習と画像生成
ぶっちゃけGANよく知らないのでラボの方が作ってるのを見ながら学んでました……(;´・ω・)
学習ではKerasを使って書いています (train.py)。ネットワーク構造に関しては参考論文で使われてる構造をそのまま用いたとか。
画像生成で一番エラー吐いて四苦八苦してました (gen.py)。
生成されたサンタたち
クリぼっちな学生の怨念を感じるサンタさんが生み出されました。
画像によってはそれっぽい形をしてるのもあり、予想より上手く出来たなーという所感です。
ちなみに学習のlossはこんな感じでした。
改善点
今回は夜中の数時間でやろうとしたのでゴリ押しのところがいくつもありました。
まず、収集した画像が500枚程度なのに対して水増しさせた最終的な画像が1万5千枚の時点でちょっと強引すぎました……
また、生成された画像からも分かる通り、画像水増しで行った回転がそのまま生成にも反映されてしまっているので、回転とかは使わないほうが良かったです。水増し手法はCNNとかで認識させるときと同じ方法をそのまま用いましたが、GANのような画像を生成させる場合使い方を変える必要があるなと気づきました。
あとは学習部分を担当した方曰く、GAN特有のオーバーフィッティングが起きてるかもとのことなのでその辺も要改善です。
その他
ラボの方「クリスマスのこんな時間まで何してんだよ」
— セーター🌖 (@re_sweater) 2018年12月24日
ボク「サンタさん(プログラムで)作ってんだよ!💢」
クリぼっちの院生二人で過ごすステキな夜でした☆