Raspberry Pi 5とHailo-8L AIアクセラレータを組み合わせることで、組み込みAIシステムを手軽に構築できるようになりました。
本記事では、GitHubの hailo-rpi5-examples
リポジトリを用いて、Raspberry Pi 5 上でHailoのAI処理機能を実行するためのセットアップ手順と、基本的な物体検出やポーズ推定といったAIデモを紹介します。
初めてHailoを使用する方でも、簡単にデモを動作させ、Raspberry PiをAIプロセッシングデバイスとして活用できる方法を詳しく解説していきます。
Hailo-8L AIアクセラレータとRaspberry Pi AI Kitの概要
今回使用するハードウェアの概要は以下の通りです。
Hailo-8L AIアクセラレータとは
Hailo-8L AIアクセラレータは、エッジAI処理向けに設計されたAIチップで、13 TOPS(Tera Operations Per Second)の性能を誇り、Raspberry Pi 5のような小型デバイスでも高度なAI処理が可能です。このAIアクセラレータは、リアルタイムのAIビジョン処理に特化しており、物体検出、ポーズ推定、インスタンスセグメンテーションなど、さまざまなAIタスクを効率的に実行できます。
Hailo-8Lは、商業および産業用途に対応しており、エネルギー効率が非常に高いため、消費電力を抑えながらも強力なAI性能を提供します。
また、AIモデルの推論処理において、低遅延かつ高い精度で応答するため、組み込みシステムやロボット工学、スマートホーム、監視システムなど、多くの分野で利用されています。
Raspberry Pi AI Kitとは
Raspberry Pi AI Kitは、Raspberry Pi 5とHailo-8L AIアクセラレータをセットにしたパッケージで、AI開発をより手軽に始めるためのツールです。
このキットには、M.2フォームファクタのHailo-8L AIアクセラレータと、Raspberry Pi M.2 HAT+が含まれています。このセットアップにより、Raspberry Piが強力なAI推論デバイスへと変わり、リアルタイムでのAIビジョンアプリケーションが可能になります。
このAI Kitは、Raspberry Pi専用のカメラソフトウェアスタックと統合されており、Hailoのソフトウェアスイートやモデルライブラリ(Model Zoo)を活用することで、様々なAIアプリケーションを簡単に実行できます。
また、低消費電力かつ高パフォーマンスな特性から、個人のクリエイターやエンジニアにとっても魅力的な選択肢となっています。
環境
ハードウェア:Raspberry Pi 5 4GB
AIアクセラレータ:Hailo-8L AIアクセラレータ(Raspberry Pi AI Kit)
OS:Raspberry Pi OS
使用したケース
今回はRaspberry pi 5用高機能ケースPironman5の拡張SSDスロットにHailo-8L AIアクセラレータを装着して使用しました。
以下はAI Kit付属のHATから取り外したHailo-8L AIアクセラレータモジュールです。
以下の写真のようにケース内下部の拡張M.2 SSDスロットにそのまま接続して使用できます。
通信用のバスも公式のAI Kitと同様PCIe GEN3を使用して高速通信が可能です。大型のファン、ヒートシンクで冷却効率も大幅に向上します。
Raspberry pi 5用ケースPironman5については以下の記事で詳細を解説していますので、あわせてご覧ください。
事前準備
サンプルプロジェクトのを実行する前に以下のRaspberry Pi公式サイトで解説されている手順に従って、AI KitのインストールとPCIe GEN3の設定を済ませておいてください。
Raspberry Pi AI Kit解説ページ(Raspberry Pi公式サイト)
サンプルプロジェクト実行手順
ここからは実際にサンプルプロジェクトを動作させるための手順を解説します。
サンプルプロジェクトの概要
今回はHailo AIアクセラレータのテストのため「hailo-rpi5-examples」のプロジェクトを使用します。
hailo-rpi5-examples
GitHub リポジトリは、Raspberry Pi 5 上で Hailo-8L AI アクセラレータの機能を実証するための様々なサンプルを提供しています。このプロジェクトは、組み込みデバイスにおける AI の活用を学びたいユーザー向けに設計されています。
主な内容
- 基本パイプライン:
- リポジトリには、Python を使用した AI タスクの基本パイプラインが含まれています。これには次のようなタスクが含まれます:
- 物体検出: YOLOv6 などのモデルを使用した物体検出デモ。
- ポーズ推定: 人のポーズを検出するデモ。
- インスタンスセグメンテーション: 画像やビデオ内のオブジェクトのセグメンテーションを行うデモ。 これらのパイプラインは簡単に実行でき、Hailo のハードウェアでの AI アプリケーションの統合を始めるための出発点として設計されています。
- リポジトリには、Python を使用した AI タスクの基本パイプラインが含まれています。これには次のようなタスクが含まれます:
- Hailo Python API:
- Hailo-8L AI プロセッサを Python で操作できる API を提供しており、Raspberry Pi 上で高度な AI 処理を行うことが可能です。外部のコンピュータリソースを必要とせずに、Raspberry Pi 内で推論タスクを実行できます。
- ソフトウェアセットアップ:
- リポジトリには、Hailo-8L モジュールを Raspberry Pi 5 にセットアップするための詳細なインストール手順が含まれています。PCIe を Gen3 モードに設定してパフォーマンスを最適化し、HailoRT ミドルウェアやカメラ用のソフトウェアパッケージをインストールする方法が説明されています。また、
hailortcli
などのコマンドでハードウェアが正しく動作しているか確認する手順も含まれています。
- リポジトリには、Hailo-8L モジュールを Raspberry Pi 5 にセットアップするための詳細なインストール手順が含まれています。PCIe を Gen3 モードに設定してパフォーマンスを最適化し、HailoRT ミドルウェアやカメラ用のソフトウェアパッケージをインストールする方法が説明されています。また、
- 追加のサンプル:
- Hailo プロセッサを使用した AI 後処理を行うための、公式の Raspberry Pi カメラソフトウェア(
rpicam-apps
)との統合例も含まれています。これにより、Raspberry Pi カメラからの映像をリアルタイムで処理することが可能です。
- Hailo プロセッサを使用した AI 後処理を行うための、公式の Raspberry Pi カメラソフトウェア(
このリポジトリは、Hailo のハードウェアを使用した AI 開発を始めるためのリソースやサンプルを豊富に提供しており、物体検出、ポーズ推定、ビデオ処理など、さまざまな AI モデルの実験を行うことができます
サンプルプロジェクト環境構築手順
ここからは実際にサンプルプロジェクトを実行するための環境構築手順を解説します。
サンプルプロジェクトを取得
「hailo-rpi5-examples」のサンプルプロジェクトをクローンします。
git clone https://github.com/hailo-ai/hailo-rpi5-examples.git
cd hailo-rpi5-examples
実行権限の設定
ディレクトリに実行権限を付与します。
sudo chown -R pi:pi /home/xxxxx/hailo-rpi5-examples
依存ライブラリのインストール
Pythonのパッケージ管理ツールである pip
を使って、requirements.txt
ファイルにリストされている依存ライブラリを一括でインストールします。
requirements.txt
ファイルには、プロジェクトが依存するライブラリ(バージョンを含む)が記載されています。このファイルを使うことで、すべての依存ライブラリが一貫した状態でインストールされ、プロジェクトが他のシステムでも正常に動作するようにします。
pip install -r requirements.txt
以下のように表示されたらインストールが完了です。
install -r requirements.txt
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: numpy<2.0.0 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 1)) (1.24.2)
Collecting setproctitle
Downloading setproctitle-1.3.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (31 kB)
Collecting opencv-python
Downloading opencv_python-4.10.0.84-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (41.7 MB)
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq 41.7/41.7 MB 1.9 MB/s eta 0:00:00
Installing collected packages: setproctitle, opencv-python
Successfully installed opencv-python-4.10.0.84 setproctitle-1.3.3
スクリプトで仮想環境を作成
download_resources.sh
というシェルスクリプトを実行します。このスクリプトは、デモやサンプルを実行するために必要なリソース(例えば、モデルファイルやデータセット)をダウンロードするためのものです。
スクリプトファイルは、特定のタスクを自動化するためのもので、この場合は必要なリソースを自動的にダウンロードします。ファイルのダウンロードやセットアップを手動で行う手間が省けます。
./download_resources.sh
以下のように表示されたら取得完了です。
--2024-09-29 18:50:38-- https://hailo-csdata.s3.eu-west-2.amazonaws.com/resources/hefs/h8l_rpi/yolov5n_seg_h8l_mz.hef
Resolving hailo-csdata.s3.eu-west-2.amazonaws.com (hailo-csdata.s3.eu-west-2.amazonaws.com)... 3.5.246.110, 52.95.191.22, 52.95.191.70, ...
Connecting to hailo-csdata.s3.eu-west-2.amazonaws.com (hailo-csdata.s3.eu-west-2.amazonaws.com)|3.5.246.110|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7763282 (7.4M) [binary/octet-stream]
Saving to: ‘./resources/yolov5n_seg_h8l_mz.hef’
yolov5n_seg_h8l_mz. 100%[===================>] 7.40M 2.12MB/s in 3.5s
2024-09-29 18:50:42 (2.12 MB/s) - ‘./resources/yolov5n_seg_h8l_mz.hef’ saved [7763282/7763282]
--2024-09-29 18:50:42-- https://hailo-csdata.s3.eu-west-2.amazonaws.com/resources/hefs/h8l_rpi/yolov8s_pose_h8l_pi.hef
Resolving hailo-csdata.s3.eu-west-2.amazonaws.com (hailo-csdata.s3.eu-west-2.amazonaws.com)... 52.95.142.86, 52.95.148.6, 52.95.150.102, ...
Connecting to hailo-csdata.s3.eu-west-2.amazonaws.com (hailo-csdata.s3.eu-west-2.amazonaws.com)|52.95.142.86|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 24551115 (23M) [binary/octet-stream]
Saving to: ‘./resources/yolov8s_pose_h8l_pi.hef’
yolov8s_pose_h8l_pi 100%[===================>] 23.41M 3.27MB/s in 16s
2024-09-29 18:50:59 (1.49 MB/s) - ‘./resources/yolov8s_pose_h8l_pi.hef’ saved [24551115/24551115]
--2024-09-29 18:50:59-- https://hailo-csdata.s3.eu-west-2.amazonaws.com/resources/hefs/h8l_rpi/yolox_s_leaky_h8l_mz.hef
Resolving hailo-csdata.s3.eu-west-2.amazonaws.com (hailo-csdata.s3.eu-west-2.amazonaws.com)... 52.95.143.22, 52.95.148.174, 52.95.144.18, ...
Connecting to hailo-csdata.s3.eu-west-2.amazonaws.com (hailo-csdata.s3.eu-west-2.amazonaws.com)|52.95.143.22|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 22412459 (21M) [binary/octet-stream]
Saving to: ‘./resources/yolox_s_leaky_h8l_mz.hef’
yolox_s_leaky_h8l_m 100%[===================>] 21.37M 2.82MB/s in 16s
2024-09-29 18:51:16 (1.36 MB/s) - ‘./resources/yolox_s_leaky_h8l_mz.hef’ saved [22412459/22412459]
--2024-09-29 18:51:16-- https://hailo-csdata.s3.eu-west-2.amazonaws.com/resources/hefs/h8l_rpi/yolov6n.hef
Resolving hailo-csdata.s3.eu-west-2.amazonaws.com (hailo-csdata.s3.eu-west-2.amazonaws.com)... 52.95.142.42, 3.5.246.158, 52.95.191.50, ...
Connecting to hailo-csdata.s3.eu-west-2.amazonaws.com (hailo-csdata.s3.eu-west-2.amazonaws.com)|52.95.142.42|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 14574566 (14M) [binary/octet-stream]
Saving to: ‘./resources/yolov6n.hef’
yolov6n.hef 100%[===================>] 13.90M 2.01MB/s in 12s
2024-09-29 18:51:30 (1.17 MB/s) - ‘./resources/yolov6n.hef’ saved [14574566/14574566]
--2024-09-29 18:51:30-- https://hailo-csdata.s3.eu-west-2.amazonaws.com/resources/hefs/h8l_rpi/yolov8s_h8l.hef
Resolving hailo-csdata.s3.eu-west-2.amazonaws.com (hailo-csdata.s3.eu-west-2.amazonaws.com)... 52.95.144.10, 52.95.143.66, 52.95.191.46, ...
Connecting to hailo-csdata.s3.eu-west-2.amazonaws.com (hailo-csdata.s3.eu-west-2.amazonaws.com)|52.95.144.10|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 36591775 (35M) [binary/octet-stream]
Saving to: ‘./resources/yolov8s_h8l.hef’
yolov8s_h8l.hef 100%[===================>] 34.90M 3.22MB/s in 16s
2024-09-29 18:51:47 (2.20 MB/s) - ‘./resources/yolov8s_h8l.hef’ saved [36591775/36591775]
--2024-09-29 18:51:47-- https://hailo-csdata.s3.eu-west-2.amazonaws.com/resources/hefs/h8l_rpi/yolov8s-hailo8l-barcode.hef
Resolving hailo-csdata.s3.eu-west-2.amazonaws.com (hailo-csdata.s3.eu-west-2.amazonaws.com)... 52.95.149.118, 52.95.148.142, 3.5.246.238, ...
Connecting to hailo-csdata.s3.eu-west-2.amazonaws.com (hailo-csdata.s3.eu-west-2.amazonaws.com)|52.95.149.118|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 36475489 (35M) [binary/octet-stream]
Saving to: ‘./resources/yolov8s-hailo8l-barcode.hef’
yolov8s-hailo8l-bar 100%[===================>] 34.79M 772KB/s in 32s
2024-09-29 18:52:20 (1.10 MB/s) - ‘./resources/yolov8s-hailo8l-barcode.hef’ saved [36475489/36475489]
--2024-09-29 18:52:20-- https://hailo-csdata.s3.eu-west-2.amazonaws.com/resources/video/detection0.mp4
Resolving hailo-csdata.s3.eu-west-2.amazonaws.com (hailo-csdata.s3.eu-west-2.amazonaws.com)... 52.95.142.6, 52.95.144.14, 3.5.245.156, ...
Connecting to hailo-csdata.s3.eu-west-2.amazonaws.com (hailo-csdata.s3.eu-west-2.amazonaws.com)|52.95.142.6|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2372012 (2.3M)
Saving to: ‘./resources/detection0.mp4’
detection0.mp4 100%[===================>] 2.26M 416KB/s in 8.0s
2024-09-29 18:52:29 (289 KB/s) - ‘./resources/detection0.mp4’ saved [2372012/2372012]
仮想環境をアクティブにする
仮想環境がセットアップされている場合は、それをアクティブにします。通常、次のコマンドで仮想環境をアクティブにできます。
source venv_hailo_rpi5_examples/bin/activate
環境設定スクリプトを実行
setup_env.sh
というスクリプトを実行し、環境変数の設定や仮想環境の準備を行います。source
コマンドを使うことで、スクリプト内の変更(例えば環境変数の設定)が現在のシェルセッションに反映されます。この場合、TAPPAS_POST_PROC_DIR
や DEVICE_ARCHITECTURE
など、必要な設定を行います。
環境変数は、ソフトウェアやライブラリが正しく動作するための設定です。これが適切に設定されないと、プログラムが必要なファイルを見つけられないなどの問題が発生します。
source setup_env.sh
以下のように表示されたら実行完了です。
Setting up the environment...
Setting up the environment for hailo-tappas-core...
TAPPAS_VERSION is 3.29.1. Proceeding...
You are not in the venv_hailo_rpi5_examples virtual environment.
Virtual environment does not exist. Creating and activating...
TAPPAS_POST_PROC_DIR set to /usr/lib/aarch64-linux-gnu/hailo/tappas/post_processes
DEVICE_ARCHITECTURE is set to: HAILO8L
モジュールのインストール
仮想環境がアクティブになった状態で、setproctitle
モジュールをインストールします。
pip install setproctitle
出力ディスプレイの設定
DISPLAY
という環境変数を設定します。DISPLAY=:0
は、X Window System(GUI環境)がどのディスプレイに描画するかを指定します。:0
は、ローカルマシンの最初のディスプレイを指します。
export DISPLAY=:0
2回目以降の実行
仮想環境のディレクトリに移動します。
cd /XXX/hailo-rpi5-examples
2回目以降の実行はRaspberry Pi起動後に仮想環境の起動と環境設定スクリプトの実行のみを行ってください。
source venv_hailo_rpi5_examples/bin/activate
source setup_env.sh
実行結果
「hailo-rpi5-examples」のプロジェクトを使って実際に動作確認をします。
動画に対して推論を行うスクリプトを実行
以下のコマンドを実行してYOLOで人物を検出するプログラムを実行します。
引数には対象となる動画ファイルを指定します。
python basic_pipelines/detection.py --input resources/detection0.mp4
実行結果
以下のように動画内の人物をリアルタイムに推定で着ていることが確認できました。
まとめ
Hailo-8L AIアクセラレータを搭載したRaspberry Pi 5は、手軽に高度なAI処理を実現する強力なプラットフォームです。
今回紹介した hailo-rpi5-examples
リポジトリのサンプルコードと手順を活用することで、物体検出やポーズ推定などのAIアプリケーションをスムーズに導入できます。
組み込みAIの可能性を広げるこのシステムは、今後のプロジェクトにおける強力なツールとなるでしょう。これを機に、ぜひHailoを用いたAI開発に挑戦してみてください。
また今回使用したラズパイ用ケースPironman5はAmazonでも販売されています。
アマゾンで売り切れの場合はSunFounder公式サイトでも購入が可能のです。
入手方法や使い方については以下の記事で詳細を解説していますので、あわせてご覧ください。
それでは、また次の記事でお会いしましょう。
コメント