« 夏の連休だし30歳を過ぎたシャープX1Fを立ち上げてみた | トップページ | 心拍数連動型”アホ毛”爆誕!? »

2016年8月17日 (水)

人工知能ライブラリ”TensorFlow”をRaspberry Pi 3に入れていろいろなものを画像認識させてみた

私にとって夏といえば”チャレンジ”の季節。

例年、いろいろなことにチャレンジしてますけど。

今年はずばり

”人工知能”

です。

といっても、その分野のプロというわけではないので、お手軽に使えてしかも高精度なものはないものかと探した結果。

ありました。

最強(?)の人工知能ライブラリが。

それが今回紹介する、Googleが公開している人工知能ライブラリ”TensorFlow”です。

誤解のないように補足すると、TensorFlow自体は行列の高速計算などを行うライブラリであり、機械学習など人工知能を構築する上で必要な計算機能を集約したものです。これを呼び出せばいきなり人工知能ができるわけではありません。使いこなそうと思ったら数学的な知識は必要。

が、TensorFlowを使った画像認識コードなどはすでにネット上にいろいろあって、これらを使えば比較的お手軽に”人工知能”というものに触れることができるというわけです。

これをRaspberry Pi 3で動かしてみました。

まずはインストールから。参考にしたサイトは以下。

TensorFlowをRaspberryPIにインストールする手順 - Qiita

まずはRaspberry Pi用の”TensorFlow”を持ってきます。

wget https://github.com/samjabrahams/tensorflow-on-raspberry-pi/blob/master/archive/tensorflow-0.8.0rc0-cp27-none-linux_armv7l.whl?raw=true

これを以下のようにインストールします。

mv tensorflow-0.8.0rc0-cp27-none-linux_armv7l.whl\?raw\=true tensorflow-0.8.0rc0-cp27-none-linux_armv7l.whl

sudo pip install tensorflow-0.8.0rc0-cp27-none-linux_armv7l.whl

これで完了。簡単ですね。

しかし相手は人工知能

画像認識をさせようと思ったら、機械学習用の画像を入手し学習させ・・・などと面倒な作業が必要・・・

と思ったらこのTensorFlow、インストールした時点でいきなり「写真の中の物体を言い当てる」ことができるコードがおまけでついてきます。

インストールした時のディレクトリに”tensorflow”というディレクトリがあるはずですが、その中にある”classify_image.py”というソースコードを使います。

作業ディレクトリにコピーします。

cp ~/tensorflow/tensorflow/models/image/imagenet/classify_image.py ~

では早速”classify_image.py”を実行。

python classify_image.py

するとなにやら”inception-2015-12-05.tgz”というファイルをダウンロードし始めます。大体90MB程度。

しばらくすると、以下のようなメッセージが。

giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca (score = 0.89233)
indri, indris, Indri indri, Indri brevicaudatus (score = 0.00859)
lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens (score = 0.00264)
custard apple (score = 0.00141)
earthstar (score = 0.00107)

デフォルトでジャイアントパンダの画像を認識させてるようです。的中率89%ほどでパンダだといってますね。

これ以降、電源を落とさない限り”inception~”というファイルはダウンロードしませんが、再起動すると消えてしまうためまたダウンロードから開始

このデータは”/tmp/imagenet”というところに保管されるため、起動するたびに消される模様。

なので、電源を落とす前にあらかじめバックアップを取っておきます。

mkdir incep

cp /tmp/imagenet/* incep

で、Raspberry Piを起動して再び”classify_image.py”を実行する前に

cp -r incep /tmp/imagenet

と実行すれば、ダウンロードの時間は節約できます。

本題に戻ります。

適当な画像ファイルを認識させてみます。

以下のようなコマンドを実行すると、任意の画像を読み込ませることが可能。

python classify_image.py --image_file (画像ファイル名)

では早速、いろいろな画像を放り込んでみた。

Img_0007

まずはこれ。我が家のファミリーカー、ポルテです。

結果は以下。

minivan (score = 0.93771)
minibus (score = 0.03950)
moving van (score = 0.00300)
car wheel (score = 0.00188)
pickup, pickup truck (score = 0.00113)

”ミニバン”(的中率94%)だそうです。

・・・まあ、ミニバンといえばミニバンにみえますが。若干微妙ですが、形的には正解かな?

Dsc_0898

続いてこちら。安城デンパークに咲いてた蓮の花(Lotus flower)。

daisy (score = 0.55783)
pinwheel (score = 0.14034)
pot, flowerpot (score = 0.02841)
earthstar (score = 0.01275)
bee (score = 0.00356)

結果は56%の確率で”デイジー”。

まあ、花だってところは間違ってません。

Dsc_0822

この風車(Windmill)はどうでしょう?

crane (score = 0.29572)
picket fence, paling (score = 0.28344)
worm fence, snake fence, snake-rail fence, Virginia fence (score = 0.04334)
suspension bridge (score = 0.03664)
drilling platform, offshore rig (score = 0.03579)

結果は30%くらい”クレーン”でした。

ちょっと、難しかったですかね?

Img_0978

では、これはいかがでしょう?

desktop computer (score = 0.13997)
radio, wireless (score = 0.12890)
loudspeaker, speaker, speaker unit, loudspeaker system, speaker system (score = 0.08322)
iPod (score = 0.05562)
space bar (score = 0.05526)

結果は”デスクトップ コンピュータ”。

間違ってませんが、的中率は14%。控えめですね。ちょっと古すぎました?

最後にこちら。

Imj_2223

結果は

iPod (score = 0.82823)
cellular telephone, cellular phone, cellphone, cell, mobile phone (score = 0.08753)
hand-held computer, hand-held microcomputer (score = 0.02536)
remote control, remote (score = 0.01901)
lighter, light, igniter, ignitor (score = 0.00620)

わりと”iPod”でした。的中率83%。

まあ、どちらかというと”iPhone”なんですけどね。

とはいえ、高々90MB程度の学習データのわりに高精度な回答。

Raspberry Piとこの学習データを組み合わせるだけで、目の不自由な人のために目の前にあるものを音声で知らせてくれるというプログラムが作れそうですが・・・そういうスマホ用アプリ、すでにありそうですけど。

とまあ、TensorFlowを使ってみたわけですが。

これは「TensorFlowを使った」というより、ただ単にそのコードと学習データを使っただけ

もっとマニアックなもの、限定的な画像認識を作ろうと思ったら独自の機械学習データが必要になります。

それを作ろうと思ったら、結構大変なことになりそうで・・・

この辺りを読んで、ただいま学習中です。

TensorFlow : Tutorials : 畳み込み ニューラルネットワーク – TensorFlow

「畳み込み」とは?「ニューラルネットワーク」とは何ぞや?から勉強しなきゃいけませんけど、なんとなく面白そうな気もします。

うまく使いこなせるようになったら仕事でも何か使えそうだし、まったりと学習してみるつもりです。

TensorFlowはじめました 実践!最新Googleマシンラーニング (NextPublishing)

« 夏の連休だし30歳を過ぎたシャープX1Fを立ち上げてみた | トップページ | 心拍数連動型”アホ毛”爆誕!? »

Raspberry Pi・Arduino・電子工作」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« 夏の連休だし30歳を過ぎたシャープX1Fを立ち上げてみた | トップページ | 心拍数連動型”アホ毛”爆誕!? »

無料ブログはココログ

スポンサード リンク

ブログ村