何もわからない

よくわからん

うどん職人への道

はじめに

まずはこれを見てほしいです.

f:id:ihatasi:20190603224042p:plain
@ihatasiのbio
そう,私はうどん職人を名乗っているのです. しかし,次のツイートを見てほしいです.

なんと私氏,うどん職人を名乗っておきながらうどんを打ったことがない!





私はこれは大変由々しき事態だと考え,うどん職人への道を歩むことを決めました.

では,どうやってうどん職人になればいいのでしょうか? 私は,うどんを生成できたらうどん職人を名乗れるのではないかと考えました.


生成...
そう,深層「生成」モデルを使ってうどんを生成することにより,うどん職人の門を叩くのです(この記事はこれがやりたかっただけなのでもう閉じていただいて大丈夫です)!

学習

データ

学習データは,FlickrAPIで集めた(276枚)+google画像検索で拾った(124枚)の「合計400枚の画像」で学習しようとしましたがFlickrAPIで集めた方の画像がイマイチだったので,google画像検索で拾った(124枚)で学習することになりました. データの水増しのために,画像はランダムに左右反転するようにしています.

モデル

学習モデルにはDCGANを使用しています.

GANはDiscriminator(識別器)とGenerator(生成器)によって構成され,Discriminatorはもらった画像が本物のデータかGeneratorによって作られた偽物のデータかを識別し,GeneratorはDiscriminatorに本物のデータと誤識別させるように敵対的に学習します.結果,学習終了後にはGeneratorは本物のようなデータを生成できるようになります.(追記:2019/06/28)

さらにGANにはmode collapseと呼ばれる,生成が本来のデータの分布の一部からしか行われないようになるという問題があります.(追記:2019/06/28)

mode collapseを防ぐためにUnrolled GAN(https://arxiv.org/abs/1611.02163)を使っています.

これはDiscriminatorのパラメータを保存しておき,数ステップ学習が進んでから保存していたパラメータでDiscriminatorを上書きするというものです.これによってGeneratorは数ステップ先のDiscriminatorへの対策ができるようになります.(追記:2019/06/28)

さらに,より本物に近い画像を出力できるように,Improved Techniques for Training GANs(https://arxiv.org/abs/1606.03498)で提案されたfeature matchingを行なっています.(追記:2019/06/28)

うどん生成

こちらが最終的に生成されたうどんです.

f:id:ihatasi:20190605194603p:plain
うどん1
f:id:ihatasi:20190605194617p:plain
うどん2
f:id:ihatasi:20190605194629p:plain
うどん3
そんなに綺麗に生成することはできませんでしたが,うどんを生成できました(?)

まとめ

今回生成したうどんはまだまだうどんには程遠いため,これからも精進してうどん職人を名乗れるようになりたいです.まずは,データをもっと集めたいと考えています.(あとWGAN...)