Raspberry PiでSSD_Kerasを使った物体検出にチャレンジ!!

物体検出をラズパイでも試してみよう

こんにちは。

AI coordinatorの清水秀樹です。

Ai coordinator独自のロボットを開発する上で、欠かすことのできない物体検出技術。

ロボットの視覚の機能に当たる部分ですね。

当記事は、ラズパイでも物体検出ができるように環境のセットアップを行ったので、その内容の紹介になります。

 

物体検出には、「Single Shot MultiBox Detector」を使うことにしました。

これには理由があって、後々説明していきます。

 

以下の手順通り進めて頂ければ、SSD_Kerasを使うことができる環境構築は問題なくできるかと思います。

ただし、トータル5時間くらい環境準備に時間を使いました。(大変でした・・・)

 

筆者はインストール作業中によくラズパイがフリーズしたため、えらくインストールに苦労しましたが、原因はSwapのメモリ不足によるものと考えています。

この原因に気づかず環境構築作業に取り掛かっていたため、ラズパイがフリーズするたびにイライラしながら強制的にコンセントから電源を引っこ抜くような荒いインストール作業を何度もやっていました。

(ラズパイが壊れなくて良かった)

 

これから環境構築にチャレンジする方は、このSwapメモリを最大2048メガまで増やしてから実施しましょう。

Swapメモリの増強を実施してからインストール作業を始めれば、おそらくフリーズせずに物体検出用の環境がラズパイで実装できるかと思います。

 

問題なくインストールできるならば、3時間ぐらいで環境準備ができるかと思います。

 

それではまずはSwapメモリの増強から

以下の記事を参考にさせて頂きました。

簡単にSwapメモリを増強できます。

お忘れなく実施ましょう。

 

Raspberry PiにOpenCVをインストールしよう(所要時間3時間)

macやubuntuと違ってanacondaが無いRaspberry Pi。

そのため、OpenCVを一発コマンドでRaspberry Piにインストールするというわけにはいきませんでした。

ただ、Raspberry Piでも物体検出等にチャレンジしていきたいと考えているため、どうしてもOpenCVをインストールしたく、色々なサイトを参考にOpenCVのインストールにチャレンジしてみました。

その中でも、以下のサイトで紹介されているやり方が一番無難にインストールできるかと思います。

Install guide: Raspberry Pi 3 + Raspbian Jessie + OpenCV 3

記事で紹介されている通りに、単純にコマンド入力していくだけでインストールできるかと思いますが、筆者のRaspberry Piでは、OpenCVインストール時の20%付近で、

「Makefile:160: ターゲット ‘all’ のレシピで失敗しました」

というようなエラーメッセージが吐き出され、インストール出来ませんでした。

これは、OpenCV 3.1をインストールすると発生することがあるエラーのようで、OpenCV 3.2をインストールすれば該当箇所でエラーが発生しなくなります。(記事はOpenCV 3.1で紹介されています。)

コマンド指定部分で3.1を単純に3.2に変更するだけでインストールできます。

インストールには3時間ぐらい掛かると思って、どっしり構えながらインストールしたほうが良いです。

よく途中でフリーズしました。(Swapメモリを増強していなかったためと思われる。)

そのときは問答無用でコンセントから電源を引っこ抜き再起動してました。

3、4回失敗しましたね。

この辺は、もはや運かと思います。

 

実は、このOpenCVのインストールが一番苦労しました。

ここを突破できれば、あとは何とかなるかと思います。

 

tensorflowのインストール(所要時間10分)

ラズパイに正式対応していないtensorflow。

さて困ったという感じですが、世の中には神のような方がいます。

githubでtensorflowのインストールを可能とするリポジトリを紹介してくださっている方がいたので、そちらを活用させて頂きました。

そして、ここでもトラブル発生です。

個人的にはpython3を使いたかったのですが、なんとpython3.4バージョンでないとインストールできないことが発覚。

筆者のラズパイ環境はすでにpython3.5になっていたので、単純にインストールできませんでした。

色々と手段はありそうでしたが、結局python2.7で実施。

まずはなんでも良いので、ラズパイで物体検出ができることを確認したかったため、バージョンの違いは割り切りました。

SSD_Kerasはpython2.7でも動くことをPepperでも確認済みでしたので、その辺は問題ないことは確認済みでした。

 

実はこれが、SSD_Kerasを使う理由となりました。

yolo v2はpython3でしたので、今回は見送っています。

 

python依存ライブラリのインストール(所要時間10分)

筆者はこの段階でKerasのインストールを実施ましたが、scipyをインストール中に必ずフリーズしたため、先にkerasをインストールする前にscipy等のpython依存ライブラリーをインストールすることにしました。(フリーズ理由は恐らく、これもSwapメモリ不足によるものだったと考えています。)

scipyとh5pyのインストールはapt-getでインストールしましょう。

$ sudo apt-get install python3-scipy
$ sudo apt-get install python3-h5py

 

最後にKerasのインストール(所要時間20分)

こちらは以下のコマンドで単純にインストールできます。

sudo pip install keras==1.2.2

Kerasのバージョンを1.2.2としましょう。

バージョンを指定しないとバージョン2がインストールされます。

Kerasはtensorflowとのバージョンに相性があるため、すでにSSD_kerasを動かす実績があるバージョンを選択しました。

ここまで実施できれば環境構築は終了です。

 

OpenCVはラズパイ純正カメラを認識できない。

また、問題発生です。

表題の通りです。

webカメラをOpenCVで使うときによく利用するpythonソースコードに、

cv2.VideoCapture(0)

を使用しますが、なんと!ラズパイ純正カメラをOpenCVは認識できないではありませんか・・・。

これはかなり予想外でした。

色々ググってみると、OpenCVにラズパイ純正カメラを認識させる方法はありそうでしたが、今回は見送ることにしました。(とりあえずSSD_Kerasを動かしたかったため。)

代わりに動画を使った物体検出を実施することにしました。

 

いよいよSSD_kerasで物体検出が可能に

いよいよSSD_Kerasを動かします。

ソースコードと、学習モデルは以下の記事を参考に入手してください。

 

無事動かすことができれば、以下の画像のように物体検出動画が表示されるはずです。

滅茶苦茶遅いですが・・・。

これは仕方ありませんね。

近いうち、Movidiusで高速化にチャレンジします。

 

ロボットの目にもなるUSBカメラで試してみる

最終ゴールはここです。

これができないと話になりません。

というわけで、別途ロボットに搭載するであろうUSBカメラを準備して、SSD_Kerasによる物体検出を試してみました。

画像は載せていませんが、USBカメラでも単純にラズパイにUSB接続するだけで物体検出ができました。

 

かなり苦労しましたが、とりあえずロボットの視覚部分に当たる機能はなんとか実装できそうです。

 

めでたしめでたし。

 

それではまた。

 

その他のPROTECT KIDS開発記事はこちら

あなたにオススメの記事

コメント

  1. この記事へのコメントはありません。

  1. 2018年 4月 14日
    トラックバック:AI参考ページ – Z Labo.
PAGE TOP