CV / YOLOv10
YOLOv10
reComputer R Series (CM5 + Hailo-10H)
YOLOv10n/s/b/x物体検出モデル。reComputer RK3588/RK3576(RKNN)とreComputer Rシリーズ + Hailo-8 / Hailo-10Hに対応。
使用しているデバイスを選択してください。セットアップガイドとドキュメントがそれに応じて更新されます。
はじめる
sudo docker run --rm \
--name cm5-hailo10h-yolov10n \
--privileged \
--net=host \
-e PYTHONUNBUFFERED=1 \
--device /dev/hailo0:/dev/hailo0 \
-v /usr/lib/libhailort.so.5.1.1:/usr/lib/libhailort.so.5.1.1:ro \
-v /usr/lib/libhailort.so:/usr/lib/libhailort.so:ro \
ghcr.io/seeed-projects/recomputer-hailo10h-cv/yolov10n:latest \
python web_detection.py --model_path model/yolov10n.hef --video_path video/test.mp4モデル詳細
reComputer R Series (CM5 + Hailo-10H)YOLOv10 on reComputer R Series (CM5 + Hailo-10H)
YOLOv10n / YOLOv10s / YOLOv10b / YOLOv10x は HailoRT 経由で Hailo-10H 上で COCO 80 クラス物体検出を実行します。コンパイル済み HEF は one2one ヘッドでオンチップ NMS(HPP)を実行するため、ホストは post-NMS の結果を解析するだけで、ボックスをデコードしたり NMS を実行したりすることはありません。
本ページは PCIe Hailo-10H アクセラレータを搭載した reComputer R Series (CM5 + Hailo-10H) を対象とします。
ハードウェアとホスト設定
| 項目 | 値 |
|---|---|
| ボード | reComputer R Series(Raspberry Pi CM5 搭載) |
| アクセラレータ | PCIe 接続の Hailo-10H(/dev/hailo0) |
| ランタイム | HailoRT 5.1.1 |
| コンテナ内 Python | 3.13, aarch64 |
ホストに Hailo-10H パッケージをインストールし、コンテナ起動前にドライバーとデバイスを確認します:
sudo apt update
sudo apt install hailo-h10-all -y
sudo reboot
# After reboot
hailortcli --version
hailortcli fw-control identify
ls -l /dev/hailo0これらのイメージに必要な HailoRT バージョンは 5.1.1 です。
同梱デモ映像での実行
YOLOv10n:
sudo docker run --rm \
--name cm5-hailo10h-yolov10n \
--privileged \
--net=host \
-e PYTHONUNBUFFERED=1 \
--device /dev/hailo0:/dev/hailo0 \
-v /usr/lib/libhailort.so.5.1.1:/usr/lib/libhailort.so.5.1.1:ro \
-v /usr/lib/libhailort.so:/usr/lib/libhailort.so:ro \
ghcr.io/seeed-projects/recomputer-hailo10h-cv/yolov10n:latest \
python web_detection.py --model_path model/yolov10n.hef --video_path video/test.mp4YOLOv10s:
sudo docker run --rm \
--name cm5-hailo10h-yolov10s \
--privileged \
--net=host \
-e PYTHONUNBUFFERED=1 \
--device /dev/hailo0:/dev/hailo0 \
-v /usr/lib/libhailort.so.5.1.1:/usr/lib/libhailort.so.5.1.1:ro \
-v /usr/lib/libhailort.so:/usr/lib/libhailort.so:ro \
ghcr.io/seeed-projects/recomputer-hailo10h-cv/yolov10s:latest \
python web_detection.py --model_path model/yolov10s.hef --video_path video/test.mp4YOLOv10b:
sudo docker run --rm \
--name cm5-hailo10h-yolov10b \
--privileged \
--net=host \
-e PYTHONUNBUFFERED=1 \
--device /dev/hailo0:/dev/hailo0 \
-v /usr/lib/libhailort.so.5.1.1:/usr/lib/libhailort.so.5.1.1:ro \
-v /usr/lib/libhailort.so:/usr/lib/libhailort.so:ro \
ghcr.io/seeed-projects/recomputer-hailo10h-cv/yolov10b:latest \
python web_detection.py --model_path model/yolov10b.hef --video_path video/test.mp4YOLOv10x:
sudo docker run --rm \
--name cm5-hailo10h-yolov10x \
--privileged \
--net=host \
-e PYTHONUNBUFFERED=1 \
--device /dev/hailo0:/dev/hailo0 \
-v /usr/lib/libhailort.so.5.1.1:/usr/lib/libhailort.so.5.1.1:ro \
-v /usr/lib/libhailort.so:/usr/lib/libhailort.so:ro \
ghcr.io/seeed-projects/recomputer-hailo10h-cv/yolov10x:latest \
python web_detection.py --model_path model/yolov10x.hef --video_path video/test.mp4http://<Board_IP>:8000 を開くと Web プレビューが表示されます。
USB カメラモード
sudo docker run --rm \
--name cm5-hailo10h-yolov10n \
--privileged \
--net=host \
-e PYTHONUNBUFFERED=1 \
--device /dev/hailo0:/dev/hailo0 \
--device /dev/video0:/dev/video0 \
-v /usr/lib/libhailort.so.5.1.1:/usr/lib/libhailort.so.5.1.1:ro \
-v /usr/lib/libhailort.so:/usr/lib/libhailort.so:ro \
ghcr.io/seeed-projects/recomputer-hailo10h-cv/yolov10n:latest \
python web_detection.py --model_path model/yolov10n.hef --camera_id 0別のバリアントを使う場合は yolov10n を yolov10s、yolov10b または yolov10x に置き換えます。
HEF ファイル
| モデル | サイズ | 備考 |
|---|---|---|
yolov10n.hef | 5,230,592 (5.0 MB) | パラメータ 2.3M、演算量 6.8G、mAP 38.5(全精度) |
yolov10s.hef | 10,182,656 (9.7 MB) | パラメータ 7.2M、演算量 21.7G、mAP 45.85(全精度) |
yolov10b.hef | 19,619,840 (18.7 MB) | パラメータ 20.15M、演算量 92.09G、mAP 52.0(全精度) |
yolov10x.hef | 26,251,264 (25.0 MB) | パラメータ 31.72M、演算量 160.56G、mAP 53.7(全精度) |
4 つのバリアントはいずれも同じ THU-MIG YOLOv10 ファミリーの Hailo Model Zoo v5.4.0 Hailo-10H ビルドです。
Source: https://hailo-model-zoo.s3.eu-west-2.amazonaws.com/ModelZoo/Compiled/v5.4.0/hailo10h/yolov10n.hef (yolov10s.hef, yolov10b.hef, yolov10x.hef in the same directory).
REST API
POST http://<Board_IP>:8000/api/models/yolov10n/predictcurl -X POST "http://<Board_IP>:8000/api/models/yolov10n/predict" \
-F "file=@test.jpg"| エンドポイント | メソッド | 用途 |
|---|---|---|
/ | GET | Web プレビュー UI |
/api/models/yolov10{n,s,b,x}/predict | POST | 検出結果(JSON) |
/api/video_feed | GET | MJPEG プレビュー配信 |
実装メモ
- Model Zoo
base/yolov10.yamlはhpp=true、device_pre_post_layers.nms=true、meta_arch=yolov8を使用し、3 つの one2one クラス畳み込みに sigmoid を適用し、info.output_shape: 80x5x100(80 クラス、クラスごとに最大 100 ボックス)を記載しています。 - パーサーノードは one2one ヘッド(
/model.23/one2one_cv2.{0,1,2}/Convがボックス、/model.23/one2one_cv3.{0,1,2}/Convがクラス)です。セルごとに 1 予測でアンカーはありません。ホスト側では何もデコードされず、NMS も実行されません。 - HailoRT 5.1.1 は NMS-by-class の生バッファを、コンパクトなレイアウトのフラットな 1 次元 FLOAT32 配列として返します。クラスごとに整数値の検出数が 1 つ、それに続いてその数だけの
[ymin, xmin, ymax, xmax, score]行が並び、値は [0, 1] に正規化されています。パーサーは最初の不自然なクラスヘッダーで停止するため、最悪ケースのパディング末尾がデータとして読み込まれることはありません。ragged NMS-by-score と dense な(1,C,5,D)/(1,C,D,5)レイアウトにも引き続き対応しています。 - IOU スライダーは効果がありません(NMS はオンチップ)。confidence スライダーは解析された検出結果をフィルタリングします。
- HEF には
normalize_in_net(mean 0 / std 255)とpadding_color=114が内蔵されています。アプリはグレー(114)でレターボックスし、生の uint8 RGB ピクセルを入力します。手動での正規化は不要です。 - クラス ID 0..79 は標準の COCO クラス表を直接索引します。
- 初回推論の診断は本番では無効です(
_OUTPUT_LOGGED = True)。新しい HEF を検証する際はweb_detection.pyでこれをFalseに設定すると、生の出力の型、形状、値の範囲、クラスごとの行がダンプされます。
開発メモ
- ソースモジュール:
reComputer-Hailo10H-CVリポジトリのsrc/hailo10h_yolov10{n,s,b,x}/ - イメージ:
ghcr.io/seeed-projects/recomputer-hailo10h-cv/yolov10{n,s,b,x}:latest - Hailo-8(R20 デモ)では n/b/x のみが公開されています。Hailo-10H ビルドは 4 つのバリアントすべてをカバーします。
- モデルライセンス:AGPL-3.0(上流 THU-MIG/yolov10)。
入力と出力
入力: 画像、動画、またはUSBカメラフレーム。出力: 検出ボックス、クラス、信頼度、および注釈付きMJPEGプレビュー。