CV / YOLOv10

YOLOv10

reComputer R Series (CM5 + Hailo-10H)

YOLOv10n/s/b/x物体検出モデル。reComputer RK3588/RK3576(RKNN)とreComputer Rシリーズ + Hailo-8 / Hailo-10Hに対応。

80 ダウンロード
サイズ
7.36 MB
メモリ
4GB+
精度
RKNN / Hailo HEF

使用しているデバイスを選択してください。セットアップガイドとドキュメントがそれに応じて更新されます。

はじめる

デプロイ
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
コンテナ内 Python3.13, aarch64

ホストに Hailo-10H パッケージをインストールし、コンテナ起動前にドライバーとデバイスを確認します:

bash
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:

bash
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

YOLOv10s:

bash
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.mp4

YOLOv10b:

bash
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.mp4

YOLOv10x:

bash
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.mp4

http://<Board_IP>:8000 を開くと Web プレビューが表示されます。

USB カメラモード

bash
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.hef5,230,592 (5.0 MB)パラメータ 2.3M、演算量 6.8G、mAP 38.5(全精度)
yolov10s.hef10,182,656 (9.7 MB)パラメータ 7.2M、演算量 21.7G、mAP 45.85(全精度)
yolov10b.hef19,619,840 (18.7 MB)パラメータ 20.15M、演算量 92.09G、mAP 52.0(全精度)
yolov10x.hef26,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

text
POST http://<Board_IP>:8000/api/models/yolov10n/predict
bash
curl -X POST "http://<Board_IP>:8000/api/models/yolov10n/predict" \
  -F "file=@test.jpg"
エンドポイントメソッド用途
/GETWeb プレビュー UI
/api/models/yolov10{n,s,b,x}/predictPOST検出結果(JSON)
/api/video_feedGETMJPEG プレビュー配信

実装メモ

  • 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プレビュー。