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

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

ラズパイ5・最新OSでのセットアップ記事を追記しました

 最新のラズパイ5や最新OSでの環境構築は、以下記事も合わせて参照ください。

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

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


 ラズパイ4が2つ

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

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

 これ以降、ラズパイのディープラーニング環境構築含めたセットアップ記事を書いていきます。ちなみにラズパイ4でセットアップしましたが、ラズパイ3でも同じ要領でセットアップ可能です(電源コネクタ、HDMIコネクタのタイプのみ注意ください)。

環境構築の前提条件

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

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

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

必要なハードウェア

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

Raspberry Pi 4 モデルB

 当たり前ですが、必須ですね。

 以下のようにケースや変換アダプタ、HDMIケーブルついているキットを買うのも良いですが、私が購入したキットが今は発売していないようなので、今回は本体のみを買った前提で説明します。


 キット

 Amazonの購入先のリンクは以下となります。

注:Amazonのラズパイ、あまりに価格が高騰しているのでSwitch Scienceさんのリンクに切り替えました。

Raspberry Pi 4 Model B / 4GBwww.switch-science.com

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

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

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

キーボード・マウス

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

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

モニタ・HDMIケーブル

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

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

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

電源

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

 私が動作確認できて、Amazonで手頃に購入できるものは以下です。3Aが出力できます。

 以下は2.4Aまでですが、2portあって便利です。私の環境ではラズパイ4動作しました。

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

カメラモジュール

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

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

ラズパイの環境構築

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

環境構築の流れ

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

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

ラズパイ用のSD作成

 ラズパイのSDを作成します。SDの書き込みに関しては「Raspberry Pi Imager」という公式の大変便利なソフトがあるのでこちらを使いましょう。使い方の詳細は、以下記事参照ください。

 バージョンは「Raspbian Buster with desktop」の「2019-09-26」「Raspberry Pi OS(32-bit)」の「2020-08-20」版を使用しました。

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

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

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

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

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

Raspbian初期設定

 Raspibianの初期設定です。

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

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

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

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

TensorFlow/OpenCVセットアップ

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

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

$ git clone https://github.com/karaage0703/raspberry-pi-setup
$ cd raspberry-pi-setup && ./setup-ai.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にすれば動くと思います。

 TensorFlow Liteで軽量化モデルを使って高速化したい場合は、以下記事を参照にしてみて下さい。

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

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

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

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

その他のセットアップ

SDカードのバックアップ

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

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

 最初のアップデートや必要なソフトのセットアップを自動化したい方は、以下記事参照下さい。

 以下コマンドを実行すると、自動でアップデートされて、必要なソフトがインストールされます。

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

リモート接続(VNC)

 Mac標準のリモート接続でラズパイに繋ぎたい場合は、以下記事参照下さい。

Raspberry Pi OSを64bit化する

 以下コマンドを実行するだけでOKです。ちなみに、私には体感では全然違い分かりません(笑)

$ sudo sh -c "echo 'arm_64bit=1' >> /boot/config.txt"

 確認するには以下コマンド実行してください。

$ uname -r

 結果が5.4.35-v8+と末尾がv8になっていれば64bit化されています(32bitだとv7です)。ただ、ハードウェアによっては対応していないので注意してください。Cortex-A53を搭載したラズパイのみとなります。詳細は以下リンク先を参照ください。

RaspberryPiのCPU比較 どれが64bitで動くの?

 64bit化の設定詳細に関しては、以下の記事を参照ください。

いまさら触ったラズピッピ4とかでできるやつ2つ - あっきぃ日誌

VS Codeのインストール

 以下Qiita記事を参照ください。

まとめ

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

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

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

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

 Amazonでの購入先

[asin:B07TC2BK1X:detail]

書籍の宣伝「からあげ先生のとにかく楽しいAI自作教室」

 AIの初心者向け本「からあげ先生のとにかく楽しいAI自作教室」を執筆しました。

 文系でAI素人の私の妻も、実践できて理解を深められるような、初学者向けの内容になっています。Raspberry Piを用いたエッジコンピューティングに関しても、まるまる1章解説しています。以下に紹介記事を書いていますので、興味ある方は是非ごらんください。

関連記事

変更履歴

  • 2024/02/18 ラズパイ5に対応
  • 2022/04/03 最新Raspberry Pi OSでの環境構築に関して追記
  • 2020/12/20 AI書籍の執筆に関して追記
  • 2020/10/30 Raspberry Pi OS 2020-08-20版での動作確認
  • 2020/09/12 VS Codeのセットアップに関して追記
  • 2020/06/25 微修正・誤記訂正
  • 2020/06/04 Raspberry Pi 4の購入先に関して修正
  • 2020/05/12 Raspbian 64bit化に関して追記
  • 2020/04/16 SD書き込みに関して「Raspberry Pi Imager」を使用した書き込み方法に修正
  • 2020/04/15 TensorFlow Liteに関する記事へのリンク追加
  • 2020/02/07 関連記事追加
  • 2020/01/26 商品のリンク切れを修正・追加
  • 2020/01/24 リモート接続に関して記事を追加