はじめに
こんにちは!
ネクスティエレクトロニクス開発部員です。
普段の業務では各種エッジAIデバイスの技術サポートを担当しています。
このコラムではRadxa社のシングルボードコンピュータROCK 5 Model BでエッジAIアクセラレータHailo-8を動作させる例をご紹介します。
OSのダウンロード時間を除けば、1時間かからずに試すことができます。ぜひチャレンジしてみてください。
Hailo-8はRaspberry PiのAI HAT+にも搭載されているAIアクセラレータです。
最大26 TOPSと高い演算性能がありさまざまな画像系のAIモデルを動作させることができます。
ベースボードとして利用するROCK 5 Model BはRaspberry Pi 5と同じCortex-A76コアを4つ搭載しています。
またM.2コネクタ(M-Key)が標準で搭載されているためSSDやHailo-8 M.2モジュールなどが接続しやすくなっています。
推奨の電源はUSB-C PD 12V/3Aです。
このコラムではROCK 5 Model BとHailo-8を組み合わせて人物姿勢推定のデモを実行する手順を紹介します。
Hailo-8による人物姿勢推定の実行例
製品リンク
ROCK 5 Model Bの準備
Armbianのインストール
この記事ではOSとしてArmbianを利用します。
以下のリンクからROCK 5 Model B用のイメージをダウンロードしてください。
今回のように画像処理の場合はデスクトップ環境をインストールすると良いでしょう。
ただし、GUI環境は必須ではなくHailo-8はヘッドレス環境で問題なく動作します。用途に応じて選択してください。
またArmbianのバージョンによってはカーネルヘッダーの不整合などでPCIeドライバーがインストールできない場合があります。本記事ではArmbian 25.11.1 Noble GNOME Desktopを利用しましたが、ビルドが通らない場合は他のイメージを試してみてください。
ファイルがダウンロードできたら、ホストPCでSDカードに書き込みます。書き込みはWindows、Linuxのどちらでも行うことができます。
今回はホストPCにLinux(Ubuntu)を利用して、以下のコマンドで書き込みました。
もしも、xzが見つからない場合はsudo apt install xz-utilsを実行してインストールします。
# SDカードのドライブを確認。今回は/dev/sdcとして認識された
$ lsblk
...
sdc 8:32 1 28.9G 0 disk
┗━sdc1 8:33 1 28.5G 0 part /media/armbi_root
# 書き込み先をof=/dev/sdcに指定。間違えると書き込み先のデータがすべて消去されるので注意!
$ xz --decompress --stdout Armbian_25.11.1_Rock-5b_noble_vendor_6.1.115_gnome_desktop.img.xz | sudo dd of=/dev/sdc bs=4M status=progress conv=fsync
# SDカードを取り外す前に同期します
$ sync
これ以降の作業はROCK 5 Model Bで行います。
Hailo-8実行環境の準備
ブラウザの起動
1. ROCK 5 Model BにOSを書き込んだSDカードとHailo-8 M.2モジュールを差し込み、ネットワークケーブルを接続します。準備ができたら電源を入れます。
初回の起動時は新しいルートパスワード、ユーザー名などを聞かれるので入力してください。設定が終わるとArmbian LinuxのGUI環境が起動します。
2. 左上のアプリケーションメニューボタン(白い角丸長方形)を押すと、画面下にメニューが表示されます。
右端のShow Applications(白い9つの点のアイコン)を押します。
3. Chromium Web Browserを起動します。
Hailo-8実行環境ファイルのダウンロード
Hailo-8 M.2モジュールを動作させるにはPCIeドライバー、実行環境をインストールする必要があります。
1. Chromium Web Browserのアドレスバーにhttps://hailo.aiを入力しHailo社のサイトへ移動します。未登録の場合は、ユーザー登録を行ってください。
2. ログインするとDeveloper Zoneへアクセスできるようになります。
3. 画面上部のSW Downloadsをクリックします。以下の画像のように選択してください。
4. リストから次の2つのパッケージをダウンロードします(本記事執筆時点で最新版は4.23.0)
- HailoRT - PCIe driver Ubuntu package (deb)
- HailoRT - Ubuntu package (deb) for arm64
ファイルがダウンロードされない場合は、ブラウザ右上のダウンロードアイコン(下矢印)をクリックします。Recent download historyに"Unverified download blocked"と表示されていたら、その項目をクリックしてダウンロードを許可してください。
5. ターミナルソフトを起動し、ファイルがダウンロードされていることを確認します。
$ cd Downloads
$ ls
hailort-pcie-driver_4.23.0_all.deb hailort_4.23.0_arm64.deb
Hailo-8実行環境のインストール
1. 以下のコマンドを実行してPCIeドライバー、実行環境をインストールします。Do you wish to use DKMS?には、すべて Y を入力します。hailortサービスについても聞かれますが有効にしておくとよいでしょう。
# 依存するツールの導入
$ sudo apt update
$ sudo apt install -y dkms build-essential linux-headers-vendor-rk35xx
# Hailo-8実行環境のインストール
$ sudo dpkg -i hailort-pcie-driver_4.23.0_all.deb
$ sudo dpkg -i hailort_4.23.0_arm64.deb
# 再起動
$ sudo reboot
2. OSを再起動したらターミナルを起動し、以下のコマンドを入力します。デバイスが認識されて以下のように表示されれば成功です。
$ hailortcli scan
Hailo Devices:
[-] Device: 0000:01:00.0
サンプルコードの実行
ソースコードの取得
1. ターミナルで適当なフォルダへ移動し、以下を実行します。
$ git clone https://github.com/hailo-ai/Hailo-Application-Code-Examples.git
# 本ドキュメント執筆時のバージョンに切り替えます
$ cd Hailo-Application-Code-Examples
$ git checkout 55c64bf
2. ソースコードの取得が完了したらHailo-Application-Code-Examples/runtime/hailo-8/cppへ移動します。次のようなサンプルが用意されています。
| アプリケーション | 解説 |
|---|---|
| zero_shot_classification | CLIPによるゼロショット画像分類 |
| classifier | ImageNetによる画像分類 |
| depth_estimation | scdepthv3またはstereonetによる深度推定 |
| onnxruntime | ONNX Runtimeによる推論・後処理 |
| instance_segmentation | YOLOv5、YOLOv8によるインスタンスセグメンテーション |
| object_detection | 物体検出 |
| pose_estimation | YOLOv8による人物姿勢推定 |
| semantic_segmentation | ResNet-18によるセマンティックセグメンテーション |
今回はpose_estimationをビルドしてみます。
ツール・ライブラリのインストール
1. ビルドに必要なツールやライブラリをインストールします
$ sudo apt install -y git cmake g++ make pkg-config libopencv-dev
2. ディレクトリを移動して、get_sources.shを実行してHailo-8向けにコンパイルされたYOLOv8モデルをダウンロードします。
$ cd Hailo-Application-Code-Examples/runtime/hailo-8/cpp/pose_estimation/yolov8_pose
$ ./get_sources.sh
コードの修正
サンプルコードはテンソル演算ライブラリxtensor, xtlに依存しています。最近のバージョンではインクルードパスが異なるため修正が必要です。また、Armbian Linuxにインストールされているgccのバージョンによってはエラーや警告が発生することがあります。適宜、下記のように修正します。
CMakeLists.txt
xtlライブラリのインストール先変更
# 修正前(xtl_DIRのパスからx86_64を削除)
ExternalProject_Add(xtensor-test
GIT_REPOSITORY https://github.com/xtensor-stack/xtensor
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTERNAL_INSTALL_LOCATION} -Dxtl_DIR=${BASE_DIR}/build/x86_64/external/share/cmake/xtl/)
# 修正後
ExternalProject_Add(xtensor-test
GIT_REPOSITORY https://github.com/xtensor-stack/xtensor
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTERNAL_INSTALL_LOCATION} -Dxtl_DIR=${BASE_DIR}/build/external/share/cmake/xtl/)
std::move()に関する警告がエラー扱いされるのを抑制
# 修正前
target_compile_options(${PROJECT_NAME} PRIVATE ${COMPILE_OPTIONS} -fconcepts)
# 修正後
target_compile_options(${PROJECT_NAME} PRIVATE ${COMPILE_OPTIONS} -fconcepts -Wno-error=pessimizing-move)
yolov8pose_postprocess.hpp
// 修正前
#include <xtensor/xview.hpp>
#include <xtensor/xsort.hpp>
// 修正後
#include <xtensor/views/xview.hpp>
#include <xtensor/misc/xsort.hpp>
common/math.hpp
// 修正前
#include "xtensor/xarray.hpp"
#include "xtensor/xeval.hpp"
#include "xtensor/xsort.hpp"
#include "xtensor/xview.hpp"
#include "xtensor/xio.hpp"
// 修正後
#include "xtensor/containers/xarray.hpp"
#include "xtensor/core/xeval.hpp"
#include "xtensor/misc/xsort.hpp"
#include "xtensor/views/xview.hpp"
#include "xtensor/io/xio.hpp"
common/tensors.hpp
// 修正前
#include "xtensor/xarray.hpp"
// 修正後
#include "xtensor/containers/xarray.hpp"
ビルド&実行
1. ビルドします。成功するとbuild/vstream_yolov8pose_example_cppが生成されます。
$ cmake -S. -B build -DCMAKE_BUILD_TYPE=Release
$ cmake --build build
$ ls build
2. vstream_yolov8pose_example_cppを実行するとoutput_image.jpgに検出した結果が出力されます。
また、実行時の平均 FPS などが表示されます。
| オプション | 解説 |
|---|---|
| -hef | HEFファイル |
| -input | 入力画像 |
| -num | 繰り返し回数 |
-hefにはget_sources.shでダウンロードしたyolov8s_pose.hefを指定します。
実行例
$ ./build/vstream_yolov8pose_example_cpp -hef=./yolov8s_pose.hef -input=person.jpg -num=100
-
person.jpg(入力)
-
output_image.jpg(出力)
人物の目、耳、鼻、肩、肘、手、股関節、膝、足首の計17カ所を検出できています。
手元で計測したところ、100回実行時の平均 FPS は97.23でした。
まとめ
本コラムではHailo-8を利用して画像AIモデルを高速に実行する例を紹介しました。今回紹介したモデル以外にもHailo-8向けに最適化されたさまざまなモデルが提供されているため、高性能なAI処理を手軽に行うことができます。モデルは以下のHailo Model Explorer Visionからダウンロードすることができます。
また無償で提供されているHailo Dataflow Compilerを使えばカタログにない任意のモデルを変換することも可能です。Dataflow CompilerはONNXフォーマット、TensorFlow Lite (TFLite) フォーマットに対応しています。
Hailo-Application-Code-Examplesをはじめ、豊富なサンプルが提供されているためお客様の独自アプリケーションを短期間で作成することができると思います。ぜひ、Hailo-8を利用してエッジAIの世界に踏み出してみてください!
また、ネクスティ エレクトロニクス開発部では NXP社の i.MX シリーズを使用した製品開発や技術サポートを行っています。
i.MX 8やi.MX 95とHailo-8、Hailo-10Hを組み合わせた動作事例などお客様の要望に合わせた様々な製品のご紹介ができますので、お気軽にお問い合わせください。
参考リンク
お問い合わせ
関連技術コラム
関連製品情報

NXPの車載マイコンS32K1の魅力を徹底解説
NXPの車載マイコンS32K1シリーズは、ARM Cortex-M0+およびM4Fコアを搭載し、高い処理能力と低消費電力を実現します。その魅力と特徴を徹底解説します。
- NXP Semiconductors N.V.
- NEXT Mobility

CO2センサーデモシステム
当社開発のCO2センサーデモシステムは、測定したCO2測定値をBLE経由で専用のAndroidアプリへ送信し、測定結果をグラフ表示可能です。
- Infineon Technologies AG
- ICT・インダストリアル
- スマートファクトリー・ロボティクス

CodeMeter クラウドによるユーザアカウントライセンス制御
クラウドベースのライセンス管理で、ソフトウェアの保護とライセンシングを効率化します。柔軟なライセンス運用と強固なセキュリティを実現します。
- WIBU-SYSTEMS AG
- ICT・インダストリアル
- スマートファクトリー・ロボティクス
- ソフトウェア

AURIX™ 車載・産業用途に最適。高信頼・高性能を誇るマイコン~ASIL-D対応、安全・セキュアなシステム構築を支援~
AURIX™は高性能TriCore™マルチコアマイコンでASIL-D対応の安全機能と豊富な通信I/Fを備え車載・産業用途に最適です。
- Infineon Technologies AG
- NEXT Mobility

ミリ波レーダーを活用した在室検知 簡易デモシステム
高精度・低消費電力の在室検知デモシステムです。プライバシーに配慮した人物検知で、会議室の利用状況把握やバス置き去り防止に貢献します。
- Acconeer AB
- NEXT Mobility
- ICT・インダストリアル

エッジAI向け、AIアクセラレータ搭載の低消費電力MCU
MAX78000シリーズは、低電力なエッジデバイス側でのAI処理で、マシンビジョンやオーディオ、顔認識などのアプリケーションをリアルタイムで処理できます。
- Analog Devices, Inc.
- NEXT Mobility
- ICT・インダストリアル
- スマートファクトリー・ロボティクス




