この記事は?
Raspberry Pi AI Kit を、Python や C++ で遊べるようにしましょう♪
・初期設定
・サンプル
・自分で試したコード
など、導線をまとめました。
Raspberry Pi AI Kit
Hailo 8L という機械学習モデル実行が けっこう速い モジュールキットです。
ラズパイ5 で遊べます。13 TOPS 性能。
KSY
スイッチサイエンス
用意するもの
・ラズパイ5
・5V / 5A ラズパイ用 Type-C 電源(推奨)
・Micro SD カード
・Raspberry Pi 5 用公式アクティブクーラー(推奨)
・公式 Raspberry Pi カメラ (例: Camera Module 3 等)
または USB カメラ
(下記セットアップは、Raspberry Pi カメラ前提で書かれています)
セットアップ
-> Raspberry Pi Bookworm 64bit をインストール (Raspi Imager, MicroSD)
-> Raspberry Pi AI Kit を装着
sudo apt update && sudo apt full-upgrade
sudo rpi-eeprom-update
(2023 年 12 月 6 日以降の ファームウェアなら OK、古ければ
sudo raspi-config
sudo rpi-eeprom-update -a
sudo reboot now
を実行 )
sudo reboot now
sudo apt install hailo-all
sudo reboot now
sudo raspi-config
-> Advanced Options
-> PCIe Speed
-> Yes (enable PCIe Gen 3 mode.)
-> Finish
sudo reboot now
動作確認
hailortcli fw-control identify
# (ここは Raspberry Pi カメラ前提です)
rpicam-hello -t 10s
git clone --depth 1 https://github.com/raspberrypi/rpicam-apps.git ~/rpicam-apps
# 物体検出
rpicam-hello -t 0 --post-process-file ~/rpicam-apps/assets/hailo_yolov6_inference.json --lores-width 640 --lores-height 640
# Yolov8
rpicam-hello -t 0 --post-process-file ~/rpicam-apps/assets/hailo_yolov8_inference.json --lores-width 640 --lores-height 640
# YoloX
rpicam-hello -t 0 --post-process-file ~/rpicam-apps/assets/hailo_yolox_inference.json --lores-width 640 --lores-height 640
# Yolov5 人物&顔検出
rpicam-hello -t 0 --post-process-file ~/rpicam-apps/assets/hailo_yolov5_personface.json --lores-width 640 --lores-height 640
# 画像セグメンテーション
rpicam-hello -t 0 --post-process-file ~/rpicam-apps/assets/hailo_yolov5_segmentation.json --lores-width 640 --lores-height 640 --framerate 20
# 姿勢推定
rpicam-hello -t 0 --post-process-file ~/rpicam-apps/assets/hailo_yolov8_pose.json --lores-width 640 --lores-height 640
Lチカ的な動作確認はこれで OK です。
簡単♪
ソフト、ドキュメント
Hailo 公式ガイドは、情報が良くまとまっています。
NPU チップメーカーが情報整えてくれているのは、とても好印象♪
Hailo Developer Zone
https://hailo.ai/developer-zone/
全体の流れをつかむ
https://hailo.ai/developer-zone/journey-develop-a-sw-for-hailo-8/
ソフト
https://hailo.ai/developer-zone/software-downloads/
PC (Ubuntu) では、docker イメージを利用すると全て入ってます。
→ Hailo AI Software Suite – Docker
ドキュメント
https://hailo.ai/developer-zone/documentation/
・Hailo AI Software Suite User Guide (PDF / HTML)
・Hailo TAPPAS User Guide (PDF / Github)
・HailoRT User Guide (PDF / HTML)
・Hailo Dataflow Compiler User Guide (PDF / HTML)
・Hailo Model Zoo User Guide (PDF / Github)
・Hailo Integration Tool User Guide (PDF)
ここで Tips
Hailo アプリ概要
・TAPPAS は上位ライブラリ。
推論~その後の処理とかうまくやってくれるみたいです。
(Template Applications And Solutions の略)
・HailoRT は、モデル読込、推論、テンソル出力、など基本的な使い方ができます。
便利な各種コマンドも。
・Dataflow Compiler は、ホスト PC でモデル変換(onnx など)や作成などができるソフトです。
・なお、gstreamer は便利な動画ストリーミング系アプリ。コマンドの引数で色々できます。
カメラ映像を取り込んで描画して rtsp 配信とか。
トレーニング済み学習モデル
*.hef → Hailo 用のモデルファイルです。今回は Hailo 8L 用を使います。(Hailo 8 ではない)
Hailo Model Zoo
# モデルの速度などいろいろ確認
hailortcli run mymodel.hef
# モデルの input / output 確認
hailo parse-hef mymodel.hef
# Hef モデル中身確認
#*.dot ファイル生成
hailortcli run mymodel.hef --dot http://out.dot
# モデル構造の SVG 生成
sudo apt install graphviz
dot -Tsvg http://out.dot -o dot.svg
①TAPPAS 上位ライブラリのコードで遊ぶ
下記の hailo-rpi5-examples/basic_pipelines/detection.py サンプルコードを見ると、
スクリプト前半で推論結果の座標を得られるコードが書いています。
コード: (各 README 参照)
Python
( import hailo → TAPPAS 呼び出し )
gstreamer / bash スクリプト
②HailoRT もう少しフレームワークぽく遊ぶ
ほかの TensorFlow や Pytorch、onnx などのように、モデルから読み取って推論というのは、どちらかというと TAPPAS よりもこちらの HailoRT の方が近い使い方になると思います。
コード: (各 README 参照)
Python
( import hailo_platform → HailoRT 呼び出し )
下記の 追加設定 をすると ラズパイ Python で使えるようになります。
チュートリアルもあります。
Python で HailoRT を使えるようにする追加設定
# pyenv + venv 設定
# HailoRT の pip パッケージ (*.whl) インストール
# ターミナル開く
git clone git://github.com/yyuu/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
exit
# 再度ターミナル開く
pyenv install 3.10.14
pyenv install --list
cd
mkdir playground
cd playground
python -m venv myenv310
cd ~/playground
python
>>> exit()
source myenv310/bin/activate
python
>>> exit()
# 公式サイトにログインし、
# HailoRT – Python package (whl) for Python 3.10, aarch64 - ver.4.17.0
# をダウンロード
# (Bookworm デフォルトの Python 3.11 用のパッケージはまだ無いみたいです。 2024/6/23 現在)
pip install hailort-4.17.0-cp310-cp310-linux_aarch64.whl
python
>>>import hailo_platform
>>> print(hailo_platform.__version__)
>>> exit()
# 仮想環境を抜けるときは
deactivate
# たしか opencv を利用するサンプル実行などのためには、
pip install opencv-python
など必要だったかと思います(失念)
チュートリアル
# チュートリアルが jupyter notebook で開きます。
hailo tutorial
試し書きしたコードです。
※ Python / Picamera2 (ラズパイカメラ利用したい場合) についてメモ
(2024/9/11 現在)
どうやら 7/1 に、Hailo-RT の Python 3.11 whl パッケージがアップされたようです!なので下記の 6/23 の記載は当てはまらないと思いますが、まだ試しておりません。
(2024/6/23 現在)
いまは HailoRT + Python では、ラズパイカメラより USB カメラの方が良いかも、という話。
(USB カメラを利用するならスルーで OK です)
HailoRT / Python パッケージは、公式サイトからラズパイ ARM64 用の pip (*.whl) パッケージを選んでダウンロードし、pyenv / venv 環境にインストールすることになりますが、これは Python 3.8/3.9/3.10 用しか今はない(2024/6/23 現在)みたいなので、pyenv / venv で仮想環境を利用します。
しかし、Bookworm ラズパイ OS における プレインストールされた Python 3.11 では、import Picamera2 は正しく動いて映像が読み込めますが、仮想環境の Python 3.8/3.9/3.10 では import Picamera 2 は PyQT5 のインストール?がうまくいかないせいか何なのか、ラズパイカメラからの画像を Python / OpenCV の GUI に表示する事ができませんでした。(自分のためした範囲で)
USB カメラ画像は普通に読み込み表示できるので、Python HailoRT ではひとまず USB カメラ使うのが良いかもです。hailo-rpi5-examples (TAPPAS サンプル) の README によれば、 Picamera2 対応は coming soon らしい ので、期待してしばし待とうと思います。
(あるいは opencv-python の Gstreamer オプションを有効にしてビルドして、仮想環境の方の Python にインストールして、gstreamer から ラズパイカメラの映像を読み込む方法でも良いかもしれない?)
なお、HailoRT + C++ なら現在も普通にラズパイカメラを使えると思います。
参考: (pyenv + virtualenv)
Raspberry Pi 5でHailo-8 AIアクセラレータを使用する
参考: (pyenv, venv 使い方)
pyenvとvenvで仮想環境を構築する
参考:
Using picamera2 in virtual environments
(pyenv Python 3.10 に Picamera2 インストール試すも、GUI は動かず)
C++
③自前で学習やカスタムモデル変換など(ホストPC→ラズパイ)
こちらの方の記事が参考になりました!感謝✨
(hailomz compile コマンドで変換されています。)
Raspberry Pi AI Kitでカスタムモデルを使う方法
Python コードで変換
(ホストPC Ubuntu に hailo の Docker イメージを使いました。)
参考:
チュートリアル
# チュートリアルが jupyter notebook で開きます。
#(ホストPC Ubuntu Docker 上で実行)
hailo tutorial
試し書きしたコードです。
onnx を hef に変換した Python スクリプトです。
以下はメモ
NVMe 2枚刺し
・NVMe 2枚刺しできる NVMe Base Duo for Raspberry Pi 5
これ使うと、MicroSD でなく、SSD + AI Kit もできるかもしれない?
(2024/10/22 追記)→ 起動できました。
gstreamer コマンド例
ラズパイ5 で Raspberry Pi Camera Module v3 の映像出せたコマンド
gst-launch-1.0 libcamerasrc name=src_0 auto-focus-mode=2 ! queue name=queue_src_scale max-size-buffers=3 max-size-bytes=0 max-size-time=0 ! videoscale ! 'video/x-raw,format=RGB,width=1024,height=768,framerate=30/1' ! videoconvert ! videoscale ! autovideosink
マルチプロセス推論のサンプル実行について
hairoRT ドキュメント p76 にあるように、
sudo systemctl enable --now hailort.service
を実行してからじゃないとできない
参考
利用例
自分のツイートスレッド
試したサンプルコードを置いておきます
以上です。
読んでいただき、ありがとうございます♪