tmori’s blog

公開メモ帳くらいの感覚で書いています。技術系多め。日常少なめ。

【実験】人間でGANの画像生成を(できる限り)再現してみた。【ネタ】

本記事はFUN Advent Calendar 201920日目の記事です。
昨日はやまけんの 【AOSP】ビルドしたAndroidOSを実機に入れる - Qiita でした。

注意事項

  • ネタ記事
  • タイトルにある通りできる限りです

以上を踏まえた上で読んでください!

はじめに

こんにちは、Tmoriです。

世間では、AI(人工知能)の話題が連日のように報道されています。私自身も研究のアプローチとしてディープラーニングを使用しています。皆さんが普段耳にするニューラルネットワークは脳機能の特性を数理的モデルに置き換えたものと言われています。つまりAIは人間の一部を真似しているとも言えます。

AIが活躍した記事を読んでいると頭の片隅にこんなことを思います...。

「「AI、AI言ってるけど、人間の方がすげーーんだぞ(^o^) 人類舐めんなよ(^^)」」

f:id:tmoribanner:20191213220501p:plain
人間がAIにマウントを取る図

ということで今回はディープラーニング技術の1つであるGANの画像生成を人間で行います。2045年のシンギュラリティが起こってからでは遅いです。マウントを取るなら今しかありません。まずはGANについて簡単に説明します。

GAN とは

GANとは敵対的生成ネットワーク(Generative Adversarial Network)の略で、画像生成や音声変換など様々な分野で使用されています。 GANのオリジナル論文 で紹介されている損失関数を以下に示します。

f:id:tmoribanner:20191210222535j:plain
GANの損失関数

なにこれー。 ばななぁぁー」って感じなので今回は無視して大丈夫です。

GANを説明する際によく使われている例として「偽札を作る人と取り締まる警官」がよくあげられます。偽造者(Generator)が本物に近い偽札を作り、警官(Discriminator)が本物か偽物かを見抜く。この2つがお互いに学習し合うことで偽造者が本物に最も近い偽札が完成するといった流れです。

f:id:tmoribanner:20191213205505p:plain
GANのよくある図

それでは今回の実験について説明します。

被験者

画像生成担当のG君画像識別担当のD君に手伝ってもらいました!

実験の手順

実験の目標タスクは「画像生成」です。
1. D君に数枚のテーマ画像を見せる。(このときG君には画像を見せない)
2. G君に数枚の異なる絵を書いてもらう。
3. G君が書いた絵に対してD君が1.で見たテーマ画像との類似度を%で示す
4. D君が示した類似度を見て、G君は類似度が上がるような画像を数枚書く。
5. 類似度が一定を超えるまで3に戻る
6. 一定の類似度を超えたとき、G君の学習が終わる。このときの絵がテーマ画像を学習して描いた絵となる。

f:id:tmoribanner:20191214001846p:plain
実験の図

※ 本来のGANの学習だと1. でD君に見せるテーマ画像をG君にも見せるのですが、人間の場合だとテーマ画像との類似度が高い画像を一回で描けてしまうためG君には見せていません。見せないことによって試行回数に応じて学習する的なふるまいになればいいなと考えています。(人間は画像数枚見ただけでそれらの背景にあるテーマを読み解いて(学習して)、創造できるってすごくね。)

実験1の内容

今回のテーマ画像は「海にいる生物(魚とクジラなど)」です。著作権的な問題で実験とは違う画像を以下に示しますが、実験のときもだいたい似たような画像を4枚提示しました。

f:id:tmoribanner:20191213231835p:plain
実験1のデータセット(D君にだけ見せている)
実験者は海の新生物が誕生するのではないかとウキウキしながら実験をはじめました。(実験と言いつつ休憩時間にやったお遊びなのでかなり適当です( 一一))

実験1の結果

1エポック目

最初はヒントが何もないのでランダムにお絵描きしてもらいます。
結果がこちらです。

f:id:tmoribanner:20191214002903p:plain
1エポック目(実験1)

左上がお腹スーパーアーマーの彼ですが、気にしないことにします。1エポック目では右下のヨットが8%と高い数値となりました。この類似度をG君に見せて次のエポックに移ります。

2エポック目

f:id:tmoribanner:20191214003813p:plain
2エポック目(実験1)
1エポック目にヨットとの類似度が高かったのを見て、海関係だと絞ったようです。右上が75%とD君が評価していますが、僕的には99%ぐらいだと思っていました。これもG君の画力を考え、あえて少し評価を下げたのかも知れません。次のエポックに移ります。

3エポック目

f:id:tmoribanner:20191214215413p:plain
3エポック目(実験1)
ここで100%が出たので実験1を終了します。

実験1の考察(感想)

  • 新たな生物を生み出したというより既知の物体を描いて学習を進めた
  • D君の識別に学習的なふるまいが存在しない

以上を踏まえて、テーマ画像をG君とD君が知らないものにしようと考えました。次の実験に移りましょう。

実験2の内容

今回のテーマ画像はLoLのヨードル(Yordle)」です。実験の時に見せた画像と同じものを以下に示します。

f:id:tmoribanner:20191214221728p:plain
実験2のデータセット(D君にだけ見せている)

これについては読者の皆さんも知らない人が多いかと思います。オンラインゲームのLeague of Legendsの種族(?)の一つです。
特徴は

  • 2-3頭身
  • かわいいやつ、怖いそうなやつ、獣みたいなやつなど様々
  • 指が4本(確か公式設定)

実験前にG君とD君にヨードルを知らないことを確認してから実験を行いました。これなら可愛らしい新生物が誕生するはず!!!それでは実験に移りましょう!

実験2の結果

1エポック目

ヒントがないのでランダムお絵描きです。

f:id:tmoribanner:20191214223412p:plain
1エポック目(実験2)
右下のなし?ジャガイモ?みたいなやつが12%とD君が評価しました。ヨードルに似てなくもない....気がする....。この評価を見てG君は次に何を書くのでしょうか。

2エポック目

f:id:tmoribanner:20191214224230p:plain
2エポック目(実験2)
ここで2頭身のふな○しーと2頭身サンタクロースを書くファインプレー。僕的にはクリスマスツリーが35%と高い数字なのが :thinking face: ですが、D君の評価が絶対なので実験は継続します。

3エポック目

f:id:tmoribanner:20191214225159p:plain
3エポック目(実験2)
かなりパーティークリスマスになりました。 やはり未知のものをテーマ画像にすると学習回数が多くなるようです。 この後4,5エポックは迷走していたので飛ばします。

4, 5 エポック目

カット!!

6エポック目

f:id:tmoribanner:20191214225736p:plain
6エポック目(実験2)
このエポックで初めて70%を超えました。途中の学習でサンタ帽に高い点数が付いたこともあったので3/4がサンタ帽をかぶっています。おそらくD君が左上の「ルル(Lulu)」の帽子がサンタ帽に似ていると感じたからでしょうか。
f:id:tmoribanner:20191220104944p:plain
ヨードルのルル
どうやら知らない人が「ヨードル」を学習すると2頭身のサンタ帽をかぶったキャラクターが生成されるみたいです。

実験2の考察(感想)

  • 対象を未知のものにするとD君の評価が曖昧になり学習が進みづらくなった
  • 0から未知のものを描くというより、知っているものの組み合わせ(今回だと、キャラ+サンタ帽)で新しいものを描いた

まとめ

今回は人間でGANの画像生成を(できる限り)再現してみました。適当な実験にしては面白い結果が出たのではないでしょうか。「もっとこうしたらGANっぽくなる」と思う人がいるはずです。その時はぜひご自身で実験をしてみてください。新たに「人間でGANの画像生成を再現」してくれる人が現れることを期待しています。

明日はohayota君の「Processing系で描くジェネラティブアート」です。つまり明日は機械(プログラム)が絵を描いてくれるのではないでしょうか。とても楽しみです😊

最後はG君の傑作を載せて終わりにしたいと思います。

f:id:tmoribanner:20191214230928p:plain
傑作.png