表紙

AIに動物の画像を学習させて月の模様を判定させてみた

このところ、生活のあらゆる場面で人工知能(AI)という言葉を聞くようになりました。顔の認証や画像のタグ付け、さらには絵や写真に色をつける技術など、様々なところで人工知能が使われているようです。

そのおかげで、多くの参考書やプログラムも世に出回っており、今では比較的小さなネットワークを使うだけなら専門知識や高価なコンピューターがなくても手が出せるようになってきています。

人工知能とは無縁だった筆者も去年、入門書を買って、AIとはどういうものなのかを少し勉強してみることにしました。

一口にAIといっても様々な仕組みのものがありますが、参考書やインターネットの解説を見てみると、畳み込みニューラルネットワーク(CNN)というものが割とよく紹介されていることが分かりました。

畳み込みニューラルネットワークは画像認識で成果を上げているAIで、写っているものの形状や模様のパターンをコンピューターが学習することでそれが何かを判定します。よく例題として紹介されるのは、MNISTという手書き数字の判定です。

筆者はあまり詳しいことは知りませんが、手書きの字というのは書く人によって形が異なるため、機械が認識することは簡単ではないようです。しかし、ニューラルネットワークを用いれば、MNISTに含まれている0から9までの数字を99%くらいの精度で判定することができるのです。

筆者も参考書に載っていたサンプルプログラムを動かして、手書き数字の判別をやってみたのですが、なかなか面白くて、次第にこのネットワークを何か別のことに応用できないかと思うようになりました。しかし、人工知能の専門家ではない筆者には、新しいネットワークや計算手法を開発したりする能力はありません。

そこで、あれこれ考えた末、ニューラルネットワークに動物の画像を学習させて、月の模様を判定させたら面白いのではないかと思いました。

というのも、日本では月には「うさぎ」がいると考えられていますが、他の国ではカエルやライオン、カニなど、別の生き物が月の生き物になっているからです (JAXAのページにイラスト付きで詳しく紹介されています)。

諸説あってはっきりしたことは分からないのですが、日本の「月のうさぎ」はインドの思想に基づいていて、それが中国経由で日本に伝わったと思われます(詳しくは筆者のウェブサイトを参照して下さい)。つまり、月の模様が何に見えるかは、各地域の「文化」に大きく影響されているのです。では、文化や思想とは無縁のAIは、月の模様をどの生き物だと判断するのでしょうか。

いくつかのサイトを参考にしたところ、ニューラルネットワークの訓練にはKeras(https://keras.io/ja/)という無料のライブラリが初心者には使いやすいと評判のようで、筆者もこれを利用することにしました。インストールしてみて分かったのですが、Kerasにはいくつかのサンプルコードが含まれており、MNIST用の畳み込みニューラルネットワークもありました。とてもありがたいことです。

ということで、まず筆者が行ったのは訓練用の動物画像を集めることですが、月の模様は細かい特徴よりも、どちらかというと全体の輪郭が重要なので、今回は実際の写真ではなくシルエット画像を用いることにしました。シルエットのいいところは、白黒でかつ画像がシンプルなので手書き数字用の小さなネットワークでも判定可能な点です。

画像1

販売サイトから購入、またはフリー画像をダウンロードすることで、ウサギ、ライオン、カニのシルエット画像をそれぞれ、105枚、100枚、100枚用意しました(これが一番大変でした)。そして、この画像から、それぞれ80枚(計240枚)を訓練用の画像とし、残りの65枚をネットワークの精度を見積もるためのテスト画像にしました。

画像2

集めた画像を用いて、ネットワークの訓練を行ったところ、65枚のうち61枚の画像で3種類の動物を正しく判定することができました(だいたい94%の精度)。画像の枚数が少ないのであまり信用できるものではありませんが、本格的な研究開発というわけではないので、とりあえず良しとします。

次に、この訓練したネットワークに月の模様の画像を入力して、それぞれの動物である確率を出力します。月の画像も細かい模様の影響を取り除くため、おおざっぱな輪郭のシルエットを使いました。人間も細かい部分ではなく全体的な輪郭を見て生き物を連想しているので、このあたりは問題ないのではないかと思います。

画像3

結果は以下のようになりました。

画像4

確率はライオン、ウサギ、カニの順番に高くなっています。よって、筆者が用意した画像で学習したネットワークは、月の模様をライオンとみなしたようです。月の画像を回転させて試してもみましたが、ライオンの確率が一番大きくなることに変化はありませんでした。

次に、模様の一部を切り取ったらどうなるのかと思い、「氷の海」と呼ばれる帯状の部分を取り除いた月の画像を試してみました。すると今度は、ウサギの確率が一番高くなりました。

画像5

はっきりとした理由はよく分かりませんが、どうやらネットワークは氷の海の部分をライオンの尻尾だとみなしたようです。そのため、氷の海がない月の画像では、ライオンよりもウサギの方が妥当だと判定したのでしょう。

また、どちらの月の画像を用いても、カニである確率は低いと判定されました。おそらく、訓練に用いたカニの画像には足があったのに対し、月の模様にはカニの足に当たる部分がなかったためだと思われます。

今回はシンプルなネットワークと少ない枚数のシルエット画像を使って、月の模様判定を行いました。もし複雑なネットワークや本物の動物の写真を使ったらどうなるのかということが今後の課題です。

人間の場合、月に何を見るかは単に模様がどの生き物に似ているかというだけでなく、月や生き物にどのような「意味」を込めるかも重要な要素となっています。

例えば、多くの地域で月は豊穣や再生のシンボルとなっています。月の満ち欠けの繰り返しが、枯れては再び生えてくるという植物の生育と関連づけられたことが原因のようです。月とウサギが結びついたのも、繁殖力の強いウサギが月と同じく豊穣のシンボルになったためだという説があります。

だとすると、形の類似性に加えて、”消えて現れる”や”増える”というような、「動き」のパターン(時間"変化量"?)でも学習や認識(「ウサギ」「月」というような物体のタグ付けだけでなく、「豊穣」「再生」のように動きに対するタグ付け)が可能な点が人とAIの違いなのでしょうか。このへんのことは難しくてよく分かりません。


いいなと思ったら応援しよう!