Raspberry Pi 4のディープラーニングで画像認識する環境をゼロから1時間で構築する方法

f:id:karaage:20191201114449j:plain:w640

Raspberry Pi Advent Calendar 2019」の3日目記事です。

ラズパイ4を入手しました

 ラズパイ4を入手しました。色々事情があり(後述します)、ポケットに入れて叩いたら2台に増えてしまいました。

f:id:karaage:20191201110304j:plain:w640
 ラズパイ4が2つ

 手に入ったものは仕方ないので、恒例のセットアップと洒落込みたいと思います。ラズパイ4からラズパイ始める人もいるかもしれませんしね。そして今までラズパイ使っていたユーザーとして、4でCPU・メモリが大幅にスペックアップしているので、せっかくならそれらを体感できて役に立ちそうなアプリを動かしてみることにしました。

 というわけで、ほどよく処理が重く、役に立ちそう(?)なディープラーニングを使った画像認識(正確には物体検出)を試したいと思います。物体検出に関して、詳しくは以下記事参照下さい。

 これ以降、ラズパイのディープラーニング環境構築含めたセットアップ記事を書いていきます。ちなみにラズパイ4と書いてありますが、ラズパイ3でも同じことができます。

環境構築の前提条件

 一応前提条件があります、以下となりますので確認下さい。私はMacでセットアップしましたが、基本的にどのOSでも同じ要領でセットアップできます。

  • SDカード作成用のPC(Mac/Linux/Windows等)
  • ラズパイ4及び最低限必要なハードウェア(詳細は次に書きます)
  • ネットワーク環境がある(有線でもWiFiでもOK)
  • コマンドラインの最低限の知識がある
  • ラズパイへの愛がある
  • 1時間で構築できなくても怒らない広い心

 特に最後の大事です。愛が大事。

必要なハードウェア

 最初に必要なハードウェアです。

Raspberry Pi 4 モデルB

f:id:karaage:20191129100131j:plain:w640

f:id:karaage:20191129100151j:plain:w640

 当たり前ですが、必須ですね。KSYさんが、一番安くて安心ですね。私もここから買いました。

 キットが、以下のようにケースや変換アダプタ、HDMIケーブルついてて良い感じですが、今回は本体のみを買った前提で説明します。あと、ケースは、カメラ接続やGPIOヘッダは全部塞がれちゃうタイプなので注意です。

f:id:karaage:20191129100237j:plain:w640
 キット

 共立エレショップさんはちょい高。

 Amazonは、現時点ではぼったくり価格のもの多数なのと、技適がいまいち怪しいので個人的にはオススメできないです。なので、リンクも貼りませんのでご自身で判断して購入下さい。

マイクロSDカード・SDカードリーダー

f:id:karaage:20191202090631j:plain:w640

 ラズパイのOSやデータを格納するマイクロSDカードが必須です。カードリーダーも必要に応じて買いましょう。SDカードは大量に買いましょう(私は30枚くらい持ってます)。

 マイクロSDカードは、たくさん買うことになるのでカードケースもあると良いです。

キーボード・マウス

 好きなものをどうぞ。普段の開発には厳しいですが、持ち運び用には以下のようなモバイルの無線キーボードが便利です。

 詳細は以下記事参照下さい。

モニタ・HDMIケーブル

 こちらも好きなものをどうぞといいたいところですが、ハマりどころ(自分はハマりました)なので注意です。結構ラズパイ4は、モニタとの相性が厳しいようです。私もモニタを変えたり、設定を変えたりしないとダメでした。具体的にやったことは、以下のQiita記事にまとめましたので、参照下さい。

 持ち運びに便利な以下小型モニタをよく使っているのですが、ラズパイ4だとデフォルト設定だと映りません。上記記事を参考に設定変更すれば映りました。

 もし映らなかったら、家にあるモニタを色々試してみて下さい。あと、ラズパイ4はマイクロHDMI端子なので、変換コネクタも忘れずに

HORIC HDMIマイクロ変換アダプタ 7cm タイプAメス-タイプDオス シルバー HDM07-042ADS

HORIC HDMIマイクロ変換アダプタ 7cm タイプAメス-タイプDオス シルバー HDM07-042ADS

  • 出版社/メーカー: ホーリック
  • 発売日: 2011/07/26
  • メディア: エレクトロニクス

電源

f:id:karaage:20191202090400j:plain:w640

 ラズパイ4は、電源での問題がある噂があったので心配していましたが、とりあえず普通に家にある2.4A出力可能な電源であれば動作しました。3A出せるやつが安心ですが、あんまり手頃にAmazonで買えるものはない感じです(もしあったら教えて下さい)。

 私が動作確認できて、Amazonで手頃に変えるやつは以下です。

 あと、ケーブルはUSB-Cなので間違えないようにしましょう。

カメラモジュール

 画像認識といえばカメラということで、カメラモジュールを買いましょう。今回の記事は、カメラモジュールを前提としています。

 USBカメラでも多分大丈夫ですが、特に確認はしていません。

ラズパイの環境構築

 環境構築をしていきます。

環境構築の流れ

 以下のような流れで、愛があれば1時間程度でセットアップできるはずです。

  • ラズパイ用のSD作成(10分)
  • ハードウェアのセットアップ(10分)
  • Raspbianセッティング(10分)
  • TensorFlow/OpenCVセットアップ(10分)
  • Object Detection Toolsセットアップ(10分)
  • ラズパイへの感謝の儀・SNSアップ(10分)

ラズパイ用のSD作成

 ラズパイのSDを作成します。

 まずは、以下サイトでラズパイの標準OSのRaspbianをダウンロードします。

 「Raspbian Buster with desktop」の「2019-09-26」をダウンロードした前提です。「Download ZIP」をクリックします。

 あまりに公式が遅い場合は、以下ミラーサイトを利用しましょう。

Raspbianダウンロードミラーサイト

 続いて、イメージファイルをSDカードに書き込みます。こちらに関しては、以下のJetson Nanoの書き込み方法と同じなので、以下記事のSDカードの書き込み方法というところから下を参照下さい。

 Macでddを使ったSD書き込みとかを知りたい人は、多少古いですが以下記事参照下さい。

ハードウェアのセットアップ

 ラズパイと周辺機器、ネットワークを以下のように繋げましょう。

 もちろん、SDカードは先ほど作成したSDカードを挿入して下さい。

f:id:karaage:20191202090249j:plain:w640

 最後に電源を繋げば、ラズパイが起動します。

Raspbianセッティング

 Raspibianのセッティングです。

 最初に、メニュー画面から「setting」->「Raspberry Piの設定」を選択します。

f:id:karaage:20191202084937p:plain:w640

 あとは、日本での設定なら、以下の画面の通りの設定でOKです。起動一発目は、画面が英語だと思いますが、よしなに読み替えて下さい。

f:id:karaage:20191202085141p:plain:w640

f:id:karaage:20191202085117p:plain:w640

f:id:karaage:20191202085123p:plain:w640

f:id:karaage:20191202085129p:plain:w640

f:id:karaage:20191202085134p:plain:w640

 セッティング後は再起動をしましょう。

 起動後、「Ctrl + Alt + t」を押すとターミナル(黒い画面)が起動するので、以下はその画面でコマンドを打ち込んでいってください。

TensorFlow/OpenCVセットアップ

 ディープラーニングを使った画像認識に必要なライブラリ、TensorFlowとOpenCVをセットアップします。セットアップはだいぶ簡単になったのですが、PCに比べると少し大変です。特にビルドしようとすると数時間とかかかってしまうので、パッケージをインストールするのがオススメです。

 今回は、最低限必要なライブラリを簡単にセットアップできるように、スクリプトを作成しました。以下3行のスクリプトを実行すれば、ネットワークの状況にもよりますが10分程度でセットアップができると思います。

$ git clone https://github.com/karaage0703/raspberry-pi-setup
$ cd raspberry-pi-setup
$ ./setup-opencv-raspbian-buster.sh
$ ./setup-tensorflow-raspbian-buster.sh

Object Detection Toolsセットアップ

 ディープラーニングでの物体検出を手軽に試せる自作ツール「Object Detection Tools」をセットアップします。ツールの詳細は以下参照下さい。

 とりあえず動かしたい場合は、以下5行をターミナルで入力すればOKです。

$ cd && git clone https://github.com/karaage0703/object_detection_tools
$ cd ~/object_detection_tools/models
$ ./get_ssdlite_mobilenet_v2_coco_model.sh
$ cd ~/object_detection_tools
$ python3 scripts/object_detection.py -l='models/coco-labels-paper.txt' -m='models/ssdlite_mobilenet_v2_coco_2018_05_09/frozen_inference_graph.pb' -d='raspi_cam'

 USBカメラを使う場合は、最後のコマンドの-dオプションを-d=normal_camにすれば動くと思います。

ラズパイへの感謝の儀・SNSアップ

 うまく動いたら、ラズパイに感謝を伝えましょう。ディープキスをしてもOKです(熱いので火傷に注意)。

 インスタなどへのSNSアップも忘れずに。私の場合は、以下のような感じで2fps以上の速度で物体検出に成功しました(速度は、認識にかかった時間のみで、カメラ表示時間は含んでいません)。

 ラズパイ3の2倍程度の速度です。

その他のセットアップ

SDカードのバックアップ

 環境を丸ごとバックアップしたい場合は、以下記事を参照下さい。最近はゼロから環境構築しちゃうことの方が多いですが。

その他のソフトインストール

 Vimエディタなどセットアップしたい方は、以下記事参照下さい。

まとめ

 ラズパイ4を買ったので、ディープラーニング環境をセットアップして画像認識(物体検出)までやってみました。ラズパイ4から入門する人も多いかもということで、久しぶりに自分にしては丁寧にセットアップ記事書いたら結構疲れました。もしよろしければ参考にしてみて下さい。

 ラズパイ4は、電源とか熱とか結構ネガティブな情報があったので、しばらく様子見かなと思っていたのですが、謎の力(?)で結局速攻で入手して有休とってセットアップしてしまいました(笑)ディープラーニングも軽いモデルなら、そのままでもそこそこ走りそうです。小型のマイコンボードでディープラーニング使うなら、Jetson Nano1強でしたが、ラズパイもまた選択肢に上がってくること多くなりそうだなと感じました(Jetson Nanoよりかなり小さいですしね)。

 普通に使っていても、あきらかにラズパイ3より快適ですし、ラズパイ4使ってまた色々作ってみたいなとか思いました。

 なお、今回はディープラーニングを使った物体検出を行いました。ディープラーニングで、画像の判別(画像が何かを判断する)の学習から推論までやってみたいという方は、有料noteでチュートリアル公開していますので、よろしければこちらもどうぞ。

関連記事