今回はDeepLearningフレームワークのTensorFlowを使った小ネタについて紹介します!
可愛い小動物達の分類をしてみます。
人工知能はどこに注目して動物を見分けるのでしょうか。
Grad-CAM※という判断根拠が見える化できる手法も取り入れたのでより人工知能の気持ちになれるのではないでしょうか。
※Grad-CAM・・・Gradient weighted Class Activation Mapping:詳しくは後々まとめます。
右側の写真がGrad-CAM像ですが,100%ネコと認識し,画像の目や鼻に注目している事が分かります。
学習データが少ない+背景があるノイズの多いデータを使用しているため
余分なところにも反応してしまい精度はイマイチですが、小ネタとして楽しむ分には十分でしょうか。
それでは具体的な作業について説明していきます。
まず写真共有サイト「Flicker」のWebサイトから「ネコ」「イヌ」「ウサギ」の画像を集めます。
写真検索用のAPIを活用すれば膨大な画像を手軽に集めることができます。
今回は「ネコ」「イヌ」「ウサギ」で検索した画像を250枚集めました。
APIを使った画像のダウンロードについては以下を参考にしてください。
FlickerのWebサイト
より引用
画像をダウンロードしていくと全く関係ない写真が混ざってきます。(ウサギで検索したけれど人間が写っていたり・・・名前がウサギさん?)
そこでダウンロードした写真の中から関係のない写真や不鮮明な写真を削除していきます。(業界用語でクリーニングと呼ばれる作業)
このクリーニングにより「ネコ」「イヌ」「ウサギ」250枚の画像を→100枚へ厳選しました。
次に学習させていきます...(画像サイズは75×75pix メモリ8GBのPCで1時間以内くらい)
この時に学習に使う画像とは別に後で精度を確認する用の画像を分けておきます。今回は各5枚を確認用の画像としました。
このグラフは学習回数と正解率の推移を表すものです。
学習始めは勘と一緒の状態なので1/3ですね。(3種類の分類)
100回程で正解率が100%になった(学習に使った画像はほぼ正解できる状態)のでこの知能を使って確認してみます。
間違いもいくつかありましたが,画像の質が良ければそこそこ正解となりました.2番目のネコとイヌの間違いは背景部分を輪郭と間違えてしまったようです。
全体的な傾向としては顔のパーツと体の輪郭で小動物を認識しているといったところでしょうか。
特に顔が鮮明に写っているものについては目と鼻に注目し,遠目からの画像では体の輪郭で判断しているようにも見えます。
ようやく人工知能の世界の入口に入っていけたようでワクワクしてきました。
これからは新発見や実用的な人工知能を使ったネタを紹介できるように頑張ります。
また今回使用した細いプログラム技術のところについては随時更新していく予定です。
それではまた!