今回はRaspberry Piベースのスパイダーロボット、PiCrawlerにGoogleの機械学習ライブラリTensorFlow Liteを実装して物体認識をしてみましたので、その手順を記事にしたいと思います。
ロボットは無くても、Raspberry Piとカメラモジュールだけあれば同じ環境を構築、動作させられます。
Raspberry Pi(ラズベリーパイ)とは
Raspberry Pi 5は、Raspberry Pi財団が開発した最新のシングルボードコンピュータで、従来モデルよりも大幅な性能向上を実現しています。

搭載される64ビットクアッドコアプロセッサは、クロック速度が最大2.4GHzに達し、前世代よりも処理速度が格段に向上しました。また、4GBまたは8GBのRAMを選択できるため、教育用途からリソースを必要とするプロジェクトまで幅広く対応可能です。
グラフィックス性能も強化され、4K解像度でのデュアルディスプレイ出力をサポートしています。さらに、新たにPCIeインターフェイスが追加され、外部ストレージや高速デバイスとの接続が容易になりました。Wi-Fi 6やBluetooth 5.2の導入により、無線通信も高速かつ安定。
教育、IoT、AI開発、メディア再生など、多様な用途に対応するRaspberry Pi 5は、初心者から上級者まで幅広いユーザーにとって魅力的な選択肢となっています。
Raspberry Piでできることについては以下の記事で解説していますので、あわせてご覧ください。


TensorFlow Liteとは
TensorFlow Liteは、Googleの機械学習ライブラリTensorFlowを、マイコンなどのエッジデバイスで高速に推論できるよう最適化されたツールセットです。TensorFlowで学習したモデルを、TensorFlow Lite用ファイル(.tflite)に変換することで、TensorFlow Liteで推論処理を実行することができます。

環境
ハードウェア:Raspberry Pi 3 ModelB
OS:Raspbian 10.11
OpenCV:4.1.0.25
カメラ:OV5647
TensorflowLite-bin:2.5.0

OpenCVのインストール
カメラモジュールへのアクセス、画像処理のためRaspberry PiにOpenCVをインストールします。手順は過去にブログで記載していますので、以下の記事ををご覧ください。


使用するTensorFlow学習済みライブラリ
今回はPINTO0309さんが公開されているTensorFlow LiteのGitHubリポジトリ「TensorFlow Lite-bin」を使用させて頂くことにしました。推論エンジンも軽量、高速化のために最適化されているようです。
インストール手順
実際にTensorFlowLiteをインストールしていきます。
インストールするバージョンについて、最新を導入したい方は↓の補足をご覧ください。
Raspberry Pi OS(Raspbian)で以下のコマンドを実行してください。
sudo apt install swig libjpeg-dev zlib1g-dev python3-dev \
unzip wget python3-pip curl git cmake make
sudo pip3 install numpy==1.20.3
wget "https://raw.githubusercontent.com/PINTO0309/TensorflowLite-bin/main/2.5.0/download_tflite_runtime-2.5.0-cp37-none-linux_armv7l.whl.sh"
chmod 755 download_tflite_runtime-2.5.0-cp37-none-linux_armv7l.whl.sh
./download_tflite_runtime-2.5.0-cp37-none-linux_armv7l.whl.sh
sudo pip3 install --upgrade tflite_runtime-2.5.0-cp37-none-linux_armv7l.whl
以上でセットアップは完了です。
※補足 最新バージョンのインストールについて
尚、私が参考にさせて頂いたサイトの情報が少し前のものだったので、最新のバージョンではありません。これからインストールされる方はPINTO0309さんのリポジトリで公開されている最新のバージョンをインストールされると良いと思います。
2022/02/04現在の最新のバージョンは2.8.0のようです。
リポジトリの「README.md」ファイルを開くと、「**Python3.7 – Buster**」と書かれている項目のところにある手順に従ってインストールしてみてください。

動作テスト
まずは静止画を使って推論ができるかを確認してみます。以下のコマンドを実行してください。
cd && git clone https://github.com/PINTO0309/TensorflowLite-bin
cd ~/TensorflowLite-bin
python3 mobilenetv2ssd.py
TensorFlow Liteが正しく動作していれば以下のようなログが出力されます。
INFO: Created TensorFlow Lite XNNPACK delegate for CPU.
time: 0.18894076347351074
[[(124, 231), (315, 544), 0.97265625, 'dog'], [(114, 132), (564, 429), 0.953125, 'bicycle'], [(461, 81), (696, 172), 0.87890625, 'car']]
coordinates: (124, 231) (315, 544). class: "dog". confidence: 0.97
coordinates: (114, 132) (564, 429). class: "bicycle". confidence: 0.95
coordinates: (461, 81) (696, 172). class: "car". confidence: 0.88
また、以下のようにPythonのソースコードがあるディレクトリ内に以下のようなJPEGファイルが生成されています。

写真に写ってる犬や自転車が正しく判別できていることが確認でしました。

カメラモジュールを使ってリアルタイム推論処理
実際にカメラで撮影した動画をリアルタイムに推論してみます。Raspberry Piのカメラモジュールを使用する場合はPythonを実行する際”raspi_cam”と指定します。
cd ~/TensorflowLite-bin
python3 mobilenetv2ssd-sync-usbcam.py --camera_type="raspi_cam"
実際に動作させている動画
ロボットに搭載したRaspberry Piで、実際にTensorFlow Lite-Binで推論してみた動画です。
リアルタイムに「ラップトップ」、「キーボード」などの物体認識ができているのが見て頂けるかと思います。

まとめ
いかがだったでしょうか?
PINTO0309さんが公開されているリポジトリを使用することで、3時間もあればリアルタイム推論環境が構築できてしまいました。エッジデバイスに最適化されているため、カメラに映った物体を非常に高速に識別でき、私のロボットの用途では十分すぎるパフォーマンスでした。
TensorflowLite-binを使って検出したオブジェクトの画面上の座標を取得するプログラムを以下の記事で解説しています。

機械学習のおすすめの参考書を以下の記事にまとめています。

機械学習を効率よく学びたい方には、自分のペースで動画で学べるUdemyの以下の講座がおすすめです。数学的な理論からPythonでの実装までを習得できます。(私自身もこの講座を受講しています)

また、以下の記事で効率的にPythonのプログラミングスキルを学べるプログラミングスクールの選び方について解説しています。最近ではほとんどのスクールがオンラインで授業を受けられるようになり、仕事をしながらでも自宅で自分のペースで学習できるようになりました。
スキルアップや副業にぜひ活用してみてください。

スクールではなく、自分でPythonを習得したい方には、いつでもどこでも学べる動画学習プラットフォームのUdemyがおすすめです。
講座単位で購入できるため、スクールに比べ非常に安価(セール時1200円程度~)に学ぶことができます。私も受講しているおすすめの講座を以下の記事でまとめていますので、ぜひ参考にしてみてください。

それでは、また次の記事でお会いしましょう。


\ 機械学習を学びたい人には自宅で学べるUdemyがおすすめ! /
講座単位で購入できます!
おすすめ記事



参考

コメント