人工知能にまだ興味深々丸です
「時代は人工知能だ!とにかくやってみるっきゃない!」と宣言して、以下記事のように本読んでちょっとサンプル動かして放置という人工知能にわか丸出し状態のからあげです。
このままじゃいかん!ということで、一念発起(勃起ではない)して、再チャレンジすることにしました。
とりあえず色々本を読んで自分なりに分かったのは以下3つくらいです。たった3つかよという感じですが、そもそもこの3つでさえ間違っているかもしれません。はっきりいってふむふむ分からんです。
- 「Deep Learning = 人工知能」ではないような気がするしそんな気もする
- Deep Learningは大量のデータから勝手に分類するのが得意で凄い
- Deep Learningは学習には膨大な計算量が必要だが学習した結果を使用した分類は非力なマシンでも動く
Deep Learning = 人工知能ではないような気がするしそんな気もする
自分なりの結論はそもそも知能というものの定義が難しいのでYesともNoともいえないのじゃないかなというところ。男女間に友情は存在するのか?的問いに似ていますね。友情の定義が人によってばらばらだから結論出ないんですよね。
もっとちゃんと知りたいという人は下記記事読むのがよいと思います。
kazoo04.hatenablog.com
Deep Learningは大量のデータから勝手に分類するのが得意で凄い
Deep Learningの凄いところは、人間が処理しきれないような膨大なデータを元に、勝手に特徴を見つけ出してよい感じに分類してくれるというところみたいです。でもなんでもデータ放り込めばよいわけじゃなくて、人間がしっかり前処理するのが重要みたいですね。
Deep Learningを使うと知的な作業ができるし、人間の脳のアナロジを用いた技術なんだけど、これを使うと
Deep Learningは学習には膨大な計算量が必要だが学習した結果を使用した分類は非力なマシンでも動く
結果を使うだけなら非力なマシンでもOKみたいです。あの教育用の小型PCであるRaspberry Piでも余裕で動いちゃうとか。そしたらやるっきゃないでしょ!
Raspberry Pi+Deep Learningで画像認識
こいつでDeep Learningだ!
今回はDeepBeliefSDK
というソフトを使いました。Raspberry Piをはじめ、iOS, Linuxと様々なOS上で動きます。
セットアップに関しては興味が無い方も多そうなので、最後にこそっと書いておきます。気になる人は試してみて下さい。
画像認識結果
早速気になる認識結果です。
ロンスタさん
もはやリファレンスとなっているフリー素材。ろんすた (id:lonestartx) さんいつもありがとうございます。
0.137841 horizontal bar 0.088009 kimono 0.012647 suit 0.520930 shoji 0.014808 feather boa 0.014413 stethoscope 0.018758 prison 0.068814 pajama 0.029971 sarong Classification took 3737 milliseconds
気になる結果は、50%の確率で障子(shoji)!たしかに!間違いない!あとは、牢屋(prison)とかパジャマとか着物とか、まあなるほどという結果。認識時間は3.7秒
ラーメン
美味しそうなラーメン
0.022354 spaghetti squash 0.077879 chambered nautilus 0.015964 plate 0.340358 soup bowl 0.021325 mixing bowl 0.059504 acorn squash 0.021479 mushroom 0.062339 carbonara 0.029215 hot pot 0.011043 butternut squash 0.030455 potpie 0.013218 wooden spoon 0.011179 consomme 0.012731 pretzel 0.010026 nacho 0.042974 bagel 0.090078 clam Classification took 3698 milliseconds
スープボールとか、スパゲッティとか、それっぽい単語が並んでいます。今回は付属してきた米国での学習データを用いているので、アジア系のものの認識は厳しいですが、なんとなく気持ちが伝わってきますね。
からあげ
からあげ!
0.078835 spaghetti squash 0.017365 pudding 0.046958 ice cream 0.120962 plate 0.048611 mashed potato 0.026075 French loaf 0.044984 acorn squash 0.041915 hotdog 0.016362 butternut squash 0.155392 meat loaf 0.086183 burrito 0.158076 nacho 0.018138 cheeseburger 0.061287 cauliflower Classification took 3726 milliseconds
ラーメンとにたような感じですね。
カメラ
フィルムカメラ
0.082851 Polaroid camera 0.139260 cassette player 0.047332 reflex camera 0.087592 flash 0.090130 radio 0.013063 tape player 0.059873 loudspeaker 0.442477 projector Classification took 3701 milliseconds
おお、ポラロイドカメラとかレフレックスカメラとかありますね。プロジェクタが一番スコア高いですが、まあ分かる気はしますね。
パンダ
パンダ
0.999887 giant panda Classification took 3696 milliseconds
99%パンダ!
まとめ
最初の方は、Deep Learning大したことねぇなと思っていたのですが、パンダでちょっとびっくりしました。ただ、Deep Learningという技術はデータを与えれば特徴を捉えて分類するという非常に知的な振る舞いをするし、人間の脳の働きのアナロジを用いた技術ではあるのですが、この延長線上に人間のもつ知性とか知能に繋がるかというと、多分そうじゃなくてまだまだ何段もブレイクスルーが必要なのだろうなというのを感じました。研究している人は多分もっと分かっていると思いますが。
それと同時に、大量のデータを分類するという作業は、だいたい自動化できてしまうのだなというのが分かりました。子供には大量のデータを元に分類するような仕事を選ばないように注意しようと思います。でも結構多いですよね、そういう仕事。弁護士とか、医者とか…
とりあえず、はてなブログのカテゴリはそのうち勝手に分類してくれるようになりそうですね。あとは面白いブログも勝手に書いてくれたら最高ですね。ちなみにこのブログは誰が書いているんでしょうね、ふふふ。
関連記事
Flickrの自動分類機能ではパンダは難しかったはずなのですが…学習データの違いなのですかね。
お待ちかねのセットアップ方法。読みたい人だけ続きをごらんください。
DeepBelief on Raspberry Pi セットアップ方法
セットアップ方法です。基本は下記サイトに書いてある通りやればできるのですが、一部はまりそうな箇所あったので残しておきます。
事前準備
まずは下記記事を参考にRaspberry PiにRaspbian Jessieをインストールします。
続いてビルドするための下準備です。Raspberry Piをネットワークに接続した状態で起動して、以下のコマンドを順に入力していきましょう。git clone
とかhg clone
とかapt-get install
などで結構待ち時間があるので完了までに20分くらいかかります。
$ mkdir ~/projects $ cd ~/projects $ git clone https://github.com/jetpacapp/DeepBeliefSDK.git $ sudo apt-get install -y mercurial $ hg clone https://bitbucket.org/eigen/eigen $ ln -s ~/projects/eigen ~/projects/DeepBeliefSDK/eigen $ cd ~/projects/DeepBeliefSDK/source $ make clean $ sudo apt-get install gcc-4.8 g++-4.8 $ sudo rm -rf /usr/bin/gcc $ sudo rm -rf /usr/bin/g++ $ sudo ln -s /usr/bin/gcc-4.8 /usr/bin/gcc $ sudo ln -s /usr/bin/g++-4.8 /usr/bin/g++
ビルド
ビルドの前に参考サイトの情報を元に~/projects/DeepBeliefSDK/source/src/lib/pi/mailbox.cpp
を下記コマンドで修正します。
$ sudo vi src/lib/pi/mailbox.cpp
変更前 #define MAJOR_NUM 100 変更後 #define MAJOR_NUM 249
次に以下コマンドでビルド
$ make GEMM=eigen TARGET=pi2
その後、参考サイト情報を元にファイルコピー
sudo cp libjpcnn.so /usr/lib/ sudo cp src/include/libjpcnn.h /usr/include/
テスト
完了したら、以下コマンドでテスト。
./jpcnn -i data/dog.jpg -n ../networks/jetpac.ntwk -t -m s -d
以下のように認識できればOK。
0.015300 soccer ball 0.020866 standard poodle 0.169138 boxer 0.038990 corgi 0.213237 Staffordshire bullterrier 0.024005 greyhound 0.012390 English setter 0.013972 miniature poodle 0.016022 tennis ball 0.025065 dalmatian 0.394529 golden retriever Classification took 3778 milliseconds
data/dog.jpg
のファイルを差し替えれば好きな写真を認識できます。