プログラミングの勉強を始めるときによく出てくるものの一つとして迷路があります。
その解き方として、深さ優先探索、幅優先探索、強化学習など様々な方法があります。
しかし、これら全てに共通する問題点としまして、『迷路盤面をメモリ上に再現しないといけない』というものがあります。
今回は、この問題点が生じない、『迷路盤面が描かれた画像そのものを用いて、迷路の正解ルートの画像を生成するAIモデルを作成』を投稿者が自己学習として行ったときの内容をご紹介いたします。
補足ですが、このタスクでは、他の迷路を解くアルゴリズムと異なり、AIモデルにスタートやゴールなどの迷路のルールは一切こちらからは教えていない点がポイントです。
今回は、GAN(Generative Adversarial Network:敵対的生成ネットワーク)のうちの一つであるPix2Pixを用いました。
GANとは?
GANは、生成器(Generator)と識別器(Discriminator)という2つのニューラルネットワークを競わせることで、リアルなデータを生成することができます。
生成器(Generator)
潜在変数と呼ばれるものを入力として受け取り、それを元にデータ(例えば画像)を生成します。
目標は、識別器を騙すようなリアルなデータを生成することです。
識別器(Discriminator)
本物のデータと生成器が生成したデータを入力として受け取り、それが本物か偽物かを判別します。
目標は、生成器が生成した偽物のデータを正確に識別することです。
学習プロセス
生成器は、識別器を騙すようなデータを生成するように学習します。
識別器は、生成器が生成したデータを正確に識別するように学習します。
このように、生成器と識別器が互いに競い合うことで、生成ネットワークはリアルなデータを生成できるようになります。
↓例:Sky株式会社のロゴを生成するAIモデルの開発のイメージ図
Pix2Pixとは?
続いて、今回の手法であるPix2Pixについて説明いたします。
生成器
先ほど入力が潜在変数だったのに対し、Pix2Pixでは画像を入力します。
その画像を受け取り、目標画像に変換する役割を担います。
目的はGANと同様に識別器を騙すようなリアルなデータを生成することです。
識別器
元画像と生成画像のペア、元画像と正解画像のペアを入力として受け取り、それが本物か偽物かを判別します。
目的はGANと同様に生成器が生成した偽物のデータを正確に識別することです。
このように元画像を条件として学習することで、元画像に対してリアルな目標画像を生成することができるようになります。
↓例:Sky株式会社のロゴにリアルな影を追加するAIモデルの開発のイメージ図
データセット
下記のような9x9の迷路盤面とそれに対する正解画像を5000ペア用意するコードを作成しました。
今回は、左上と右下に必ず終点があるような迷路を作成しております。
学習結果
まずは、生成器がまだ上手くは学習できていない時の生成画像を紹介いたします。
スタート付近やゴール付近は綺麗に塗ることができていますが、ルートが一本には繋がっていないですし、何やら黒いノイズが大量にあります。
しかし、ここから学習を続けることで以下のように正解ルートを塗ることができる生成器を作成することができました。
このように、学習を進めていく中で、生成器がどうすれば識別器を騙す、つまりリアルな画像を生成できるかを学習することができたことがわかります。
まとめ
今回は、迷路画像そのものを用いて、正解ルート付きの迷路画像を生成するAIモデルの開発に成功したものを紹介いたしました。 最後まで読んでいただき、ありがとうございます。