こんばんわ。
WCDI Advent Calendar 17日目。
今回は巷で噂の人工知能に関する記事を投稿しようと思います。
前書き
皆さんはMovidiusという物をご存知でしょうか?
このMovidiusというものを使用する機会があったのでせっかくなら記事にしたいと思い学習していました。
最初の頃は「なんか結構簡単にAI作れるらしーぞ!」くらいにしか思っていなかったのですが、
そううまくは行きませんでした。
結構いろいろなところで躓いてしまったのでそのうちリベンジしたいと思っております。
本文
今回の目標
何人か人の顔を学習して、カメラに映った人を判定する
というものを作りたかったです。
完成には至りませんでしたのでご了承ください。
今回はGoogle画像検索で芸能人の顔写真を収集して学習させようとおもいます。
ちなみに
法律の事に関してはあまり詳しくないのですが、
第四十七条の七
著作物は、電子計算機による情報解析(多数の著作物その他の大量の情報から、当該情報を構成する言語、音、影像その他の要素に係る情報を抽出し、比較、分類その他の統計的な解析を行うことをいう。以下この条において同じ。)を行うことを目的とする場合には、
必要と認められる限度において、記録媒体への記録又は翻案(これにより創作した二次的著作物の記録を含む。)を行うことができる。
ただし、情報解析を行う者の用に供するために作成されたデータベースの著作物については、この限りでない。
というものがあるようです。
環境構築
今回使用するものは
- ラズベリーパイ
- Movidius
- USBカメラ
の3つとなっております。
ラズベリーパイにUSBカメラとMovidiusを接続したら起動します。
$ git clone git@github.com:movidius/ncsdk.git
をしてgithubからncsdk
をcloneしてきます。
$ cd ncsdk
$ make install
として、インストールしましょう。
sudo
を付けていなくても大丈夫です。
パスワードを確認されるので、入力しましょう。
これは結構時間がかかります。
ちなみに、なぜかOpenCVのところで失敗してmakeが途中で止まりますが、どうやらほかの方も同じように失敗するようです。
OpenCVはあとで手動で入れるとして、makeの続きをやっていきましょう。
もう1度make installを実行すると、前回失敗したところから再開してくれるので、もう1度
$ make install
をします。
完了したら、先ほど失敗したOpenCVを入れていきます。
OpenCVを入れる方法はいくつかありますが、今回はapt
を使用して入れます。楽なので。
//TODO:OpenCVのinstall忘れたので、あとで治します
sudo apt install libdc1394-22 libdc1394-22-dev libilmbase-dev libilmbase12 libopencv-calib3d-dev libopencv-calib3d2.4v5 libopencv-contrib2.4v5 libopencv-core-dev libopencv-core2.4v5 libopencv-features2d-dev libopencv-features2d2.4v5 libopencv-flann-dev libopencv-flann2.4v5 libopencv-gpu-dev libopencv-gpu2.4v5 libopencv-highgui2.4-deb0 libopencv-imgproc-dev libopencv-imgproc2.4v5 libopencv-legacy2.4v5 libopencv-ml-dev libopencv-ml2.4v5 libopencv-objdetect2.4v5 libopencv-ocl2.4v5 libopencv-photo-dev libopencv-photo2.4v5 libopencv-stitching-dev libopencv-stitching2.4v5 libopencv-superres2.4v5 libopencv-ts-dev libopencv-ts2.4v5 libopencv-video-dev libopencv-video2.4v5 libopencv-videostab2.4v5 libopencv2.4-java libopencv2.4-jni libopenexr-dev libopenexr22 libpng12-0 libraw1394-11 libraw1394-dev libraw1394-tools opencv-data
ではサンプルプログラムを実行するために、
$ make examples
をします。
これまたちょっと時間がかかります。
完了したら、ncsdk/examples/caffe/GoogLeNet/run.py
を実行してみましょう。
$ cd examples/caffe/GoogLeNet/
$ python run.py
すると
Device 0 Address: 1.4 - VID/PID 03e7:2150
Starting wait for connect with 2000ms timeout
Found Address: 1.4 - VID/PID 03e7:2150
Found EP 0x81 : max packet size is 512 bytes
Found EP 0x01 : max packet size is 512 bytes
Found and opened device
Performing bulk write of 865724 bytes...
Successfully sent 865724 bytes of data in 161.902802 ms (5.099472 MB/s)
Boot successful, device address 1.4
Found Address: 1.4 - VID/PID 03e7:f63b
done
Booted 1.4 -> VSC
------- predictions --------
prediction 0 (probability 0.99609) is n03272010 electric guitar label index is: 546
prediction 1 (probability 0.0035095) is n02676566 acoustic guitar label index is: 402
prediction 2 (probability 0.0) is n02396427 wild boar, boar, Sus scrofa label index is: 342
prediction 3 (probability 0.0) is n02391049 zebra label index is: 340
prediction 4 (probability 0.0) is n02389026 sorrel label index is: 339
このように表示されればとりあえずはOKです。
解説
先ほどのサンプルプログラムは何なのかまだよくわからないと思いますので、解説をしようと思います。
GoogLeNetとは
GoogleNetとは、2014年に行われた画像認識技術コンテスト(ILSVRC)で優勝したチームの人工知能のモデル名です。
優勝したチームはグーグルで、モデルとは第1回目のときに説明した「モデルと重み」の「モデル」です。
他にも2012年の優勝モデルAlexNetや、2015年の優勝モデルResNetなどが有名です。
ncsdk/examples/data/images/
の中にいろいろな画像が入っていて、
その中のnps_electric_guitar.png
という画像が何なのかを判別する
というものになっているようです。
ちなみに、nps_electric_guitar.png
は下の画像です。
先ほどの実行結果の下の方にあった
------- predictions --------
prediction 0 (probability 0.99609) is n03272010 electric guitar label index is: 546
prediction 1 (probability 0.0035095) is n02676566 acoustic guitar label index is: 402
prediction 2 (probability 0.0) is n02396427 wild boar, boar, Sus scrofa label index is: 342
prediction 3 (probability 0.0) is n02391049 zebra label index is: 340
prediction 4 (probability 0.0) is n02389026 sorrel label index is: 339
というのが推論の実行結果です。
どうやら、99.609%の確立でnps_electric_guitar.png
はelectric guitar
のようですね。
正しい結果です!おめでとうございます!
もうおわり。
はい。
あとがきとなります。
内容がほとんどないぺらっぺらな物になってしまいました、申し訳ない。
Movidiusが使える期間が短く、環境構築に無駄に時間を使用してしまい、モデルを作成するまでに至りませんでした・・・。
これからも続けていくつもりですので、随時更新していきます。
今後の活躍にご期待ください。
コメントを残す