LoginSignup
8
10

Raspberry Pi AI Kit で遊ぼう♪

Last updated at Posted at 2024-06-24

この記事は?

Raspberry Pi AI Kit を、Python や C++ で遊べるようにしましょう♪

・初期設定
・サンプル
・自分で試したコード

 など、導線をまとめました。

Raspberry Pi AI Kit

Hailo 8L という機械学習モデル実行が けっこう速い モジュールキットです。
ラズパイ5 で遊べます。13 TOPS 性能。

image.png

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 アプリ概要

image.png

・TAPPAS は上位ライブラリ。
 推論~その後の処理とかうまくやってくれるみたいです。
 (Template Applications And Solutions の略)

・HailoRT は、モデル読込、推論、テンソル出力、など基本的な使い方ができます。
 便利な各種コマンドも。

・Dataflow Compiler は、ホスト PC でモデル変換(onnx など)や作成などができるソフトです。

・なお、gstreamer は便利な動画ストリーミング系アプリ。コマンドの引数で色々できます。
 カメラ映像を取り込んで描画して rtsp 配信とか。

トレーニング済み学習モデル

*.hef → Hailo 用のモデルファイルです。今回は Hailo 8L 用を使います。(Hailo 8 ではない)

image.png

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/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 もできるかもしれない?

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

を実行してからじゃないとできない

参考

利用例

自分のツイートスレッド

試したサンプルコードを置いておきます

以上です。
読んでいただき、ありがとうございます♪

8
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
10