Deep Learning - 学習済みモデルをラズベリーパイ上で動かす
以前、からあげさんのチュートリアルに沿って学習済みのディープラーニングモデルをローカルPC上で動かし、推論を行いました。
今回は同じ学習済みモデルをラズベリーパイ上で動かしてみました。
ラズベリーパイはこちらのキットを購入しました。
別途マイクロSDカード(16GB以上)が必要ですのでご注意ください。
ラズベリーパイの環境設定
ラズパイの初期設定方法はいろいろなところで紹介されているので写真等の詳しい説明は省略します。
以下のサイトが写真付きで分かりやすいです。
実際の実施内容は以下の通り
1.SDカードフォーマッターでSDカードをフォーマットします。形式はFAT32。
SDメモリカードフォーマッター - SD Association
2.以下のサイトからNOOBSをダウンロードし、解凍します。
Download NOOBS for Raspberry Pi
3.解凍したフォルダの中身をSDカードにすべてコピーします。
4.ラズパイにSDカード、USBマウス、キーボード、ディスプレイ(HDMI接続)を挿し、電源を入れます。
5.NOOBSが起動するので、Rasbianをインストールします。キーボード設定は日本語にしました。インストールには30分ほどかかります。
6.インストールが完了するとRasbianが自動で立ち上がります。
7.GUIに沿って言語、タイムゾーン、パスワード、WiFiの設定を行います。
8.左上のRaspberry Piマークのアイコンをクリックし、「設定」→「Raspberry Piの設定」に入る。「インターフェース」タブをクリックし、SSHを有効にします。
これでラズベリーパイにPCからリモート接続できるようになります。ラズベリーパイ専用のディスプレイがない場合は便利です。
9.ターミナルを起動します。
10.以下のコマンドを入力し、システムをアップデートする。
$ sudo apt-get update $ sudo apt-get upgrade
11.以下のコマンドを実行し、ラズパイにOpenCV、TensorFlow、Kerasをインストールします。
$ wget https://github.com/mt08xx/files/raw/master/opencv-rpi/libopencv3_3.4.0-20180115.1_armhf.deb $ sudo apt install -y ./libopencv3_3.4.0-20180115.1_armhf.deb $ sudo ldconfig $ pip3 install numpy==1.13 $ sudo apt-get install libblas-dev liblapack-dev python3-dev libatlas-base-dev gfortran python3-setuptools $ sudo pip3 install https://github.com/lhelontra/tensorflow-on-arm/releases/download/v1.8.0/tensorflow-1.8.0-cp35-none-linux_armv7l.whl $ sudo apt-get install python3-h5py $ sudo pip3 install keras==2.1.6
これで初期設定は完了です。
学習済みモデルのダウンロード
からあげさんのチュートリアルの中のリンクから入手できるkeras-piをダウンロードし、zipファイルを解凍します。
解凍したkeras-pi-master内のmodelディレクトリの中に自分で学習して作成したモデルデータ、ラベル、重みデータを上書きします。
※以下はWindowsの画面ですが、Rasbian上でも同様です。
Webカメラの映像でリアルタイム識別
Webカメラをラズベリーパイに接続し、ターミナル上でinspect_camera_pi.pyを実行すると、カメラの映像がディスプレイに出力され、判定結果がターミナル上に表示されます。
PC上での結果と同じようにラズベリーパイでリアルタイム識別できます。
ラズベリーパイの処理能力でもフレーム落ちなどなく、十分に識別できていました。
SSDをラズベリーパイ上で動かす
以前、SSDをPC上で動かしてみたのですが、これをラズベリーパイ上で動かしてみました。
このブログの手順通りにラズベリーパイ上で学習済みモデル、重みのダウンロード、 ssd.py, testing_utils/videotest.pyのコードの修正を行います。
Webカメラをラズベリーパイに接続後、以下のコマンドを実行します。
$ cd testing_utils/ $ python3 videotest_example.py
すると、Web cameraの映像が立ち上がり、検知結果のバウンディングボックスが表示されます。ですが、PC上で動作させたときと比べると激重でなかなか映像が更新されませんでした。
keras-piの計算量よりSSDの方が計算量が多く、ラズベリーパイの能力では処理時間がかかりすぎるようです。
まとめ、感想
学習済みモデルをラズベリーパイで動作させることにトライしてみましたが、軽いネットワークにしないと、ラズベリーパイの処理能力では実用的なリアルタイム識別は難しそうだと感じました。
こちらの記事だとTiny-Yolov2であれば約1fpsが出ているようです。
ラズベリーパイで本格的な画像認識をやりたい場合はMovidiusのNCSが必要なようです。 機会があればMovidiusでアクセラレートさせた画像認識もやってみたいと思います。