CV / YOLOv7

YOLOv7

reComputer R Series (CM5 + Hailo-10H)

reComputer RK3576 と RK3588 上で、RKNN により YOLOv7 の COCO 物体検出を高速化します。また、Hailo-10H を搭載した reComputer R Series 上では HailoRT 経由でも同じ COCO 物体検出を実行できます。

49 ダウンロード
サイズ
9.2 MB
精度
RKNN / Hailo HEF

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

はじめる

デプロイ
sudo docker run --rm \
  --name cm5-hailo10h-yolov7_tiny \
  --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/yolov7_tiny:latest \
  python web_detection.py --model_path model/yolov7_tiny.hef --video_path video/test.mp4

REST API

REST API を使用して推論を実行します。以下のコマンドをコピーしてください。

Curl
curl http://localhost:8080/v1/chat/completions -d '{
  "model": "yolov7-rknn",
  "messages": [{"role": "user", "content": "Hello"}]
}'
Python
import requests

resp = requests.post(
    "http://localhost:8080/v1/chat/completions",
    json={"model": "yolov7-rknn", "messages": [{"role": "user", "content": "Hello"}]},
)
print(resp.json())

モデル詳細

reComputer R Series (CM5 + Hailo-10H)

YOLOv7 on reComputer R Series (CM5 + Hailo-10H)

YOLOv7 / YOLOv7-tiny / YOLOv7e6 / YOLOv7x は HailoRT 経由で Hailo-10H 上で COCO 80 クラス物体検出を実行します。コンパイル済み HEF はオンチップで NMS を実行し(HPP、meta_arch=yolov5、クラスごとに最大 80 ボックス)、アプリは HailoRT 5.1.1 が返すクラスごとのコンパクトな 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 です。

同梱デモ映像での実行

YOLOv7:

bash
sudo docker run --rm \
  --name cm5-hailo10h-yolov7 \
  --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/yolov7:latest \
  python web_detection.py --model_path model/yolov7.hef --video_path video/test.mp4

YOLOv7-tiny:

bash
sudo docker run --rm \
  --name cm5-hailo10h-yolov7_tiny \
  --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/yolov7_tiny:latest \
  python web_detection.py --model_path model/yolov7_tiny.hef --video_path video/test.mp4

YOLOv7e6:

bash
sudo docker run --rm \
  --name cm5-hailo10h-yolov7e6 \
  --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/yolov7e6:latest \
  python web_detection.py --model_path model/yolov7e6.hef --video_path video/test.mp4

YOLOv7x:

bash
sudo docker run --rm \
  --name cm5-hailo10h-yolov7x \
  --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/yolov7x:latest \
  python web_detection.py --model_path model/yolov7x.hef --video_path video/test.mp4

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

USB カメラモード

bash
sudo docker run --rm \
  --name cm5-hailo10h-yolov7 \
  --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/yolov7:latest \
  python web_detection.py --model_path model/yolov7.hef --camera_id 0

別のバリアントを使う場合は yolov7 を yolov7_tiny、yolov7e6 または yolov7x に置き換えます。

HEF ファイル

モデル入力サイズ備考
yolov7.hef640x640x328,106,752 (28.1 MB)パラメータ 36.91M、演算量 104.51G、ハードウェア mAP 48.8、63.6 FPS
yolov7_tiny.hef640x640x39,199,616 (9.2 MB)パラメータ 6.22M、演算量 13.74G、ハードウェア mAP 36.3、288 FPS
yolov7e6.hef1280x1280x373,072,640 (73.1 MB)パラメータ 97.20M、演算量 515.12G、ハードウェア mAP 53.1、16.4 FPS
yolov7x.hef640x640x356,406,016 (56.4 MB)パラメータ 71.46M、演算量 189.68G、ハードウェア mAP 51.0、34.7 FPS

4 つのバリアントはいずれも Hailo Model Zoo v5.4.0 の Hailo-10H ビルドです。mAP と FPS は Model Zoo が公開している Hailo-10H の値です。

Source: https://hailo-model-zoo.s3.eu-west-2.amazonaws.com/ModelZoo/Compiled/v5.4.0/hailo10h/yolov7.hef (yolov7_tiny.hef, yolov7e6.hef, yolov7x.hef in the same directory).

REST API

各バリアントには専用のエンドポイントがあります:

バリアントエンドポイント
YOLOv7POST /api/models/yolov7/predict
YOLOv7-tinyPOST /api/models/yolov7_tiny/predict
YOLOv7e6POST /api/models/yolov7e6/predict
YOLOv7xPOST /api/models/yolov7x/predict
bash
curl -X POST "http://<Board_IP>:8000/api/models/yolov7/predict" \
  -F "file=@bus.jpg" -F "conf=0.25"

レスポンスには class、confidence、box フィールドを持つ predictions エントリが含まれます。

実装メモ

  • ALLS のレシピは change_output_activation(sigmoid) と nms_postprocess(<model>_nms_config.json, meta_arch=yolov5, engine=cpu) です。NMS 設定は nms_scores_th 0.2、nms_iou_th 0.6、max_proposals_per_class 80 を使用するため、ホストはボックスデコードも NMS も実行しません。
  • HailoRT 5.1.1 の HPP 出力はフラットでコンパクトなクラスごとの NMS バッファです(クラスごとに検出数の整数が 1 つ、それに続いてその数だけ [ymin, xmin, ymax, xmax, score] 行が並び、すべて [0, 1] に正規化されています)。固定ストライドで読み取ると最初のクラス以降がすべてずれます。パーサーは最初の不自然なヘッダーで停止し、ragged NMS-by-score と dense な (1,C,5,D) / (1,C,D,5) レイアウトのハンドラーも保持しています。
  • yolov7e6 は 1280x1280x3 入力で、残りの 3 つは 640x640x3 です。アプリは起動時に HEF から入力サイズを読み取ります。
  • 前処理では HEF の入力サイズに合わせてグレー(114)でレターボックスし、BGR を RGB に変換して生の uint8 を入力します。/255 正規化は HEF にコンパイル済みです。
  • クラス ID 0..79 は標準の COCO クラス表を直接索引します。
  • 初回推論の診断は本番では無効です(_OUTPUT_LOGGED = True)。新しい HEF を検証する際は web_detection.py でこれを False に設定すると、生の出力の型、形状、値の範囲、クラスごとの行がダンプされます。

開発メモ

  • ソースモジュール:reComputer-Hailo10H-CV リポジトリの src/hailo10h_yolov7/、src/hailo10h_yolov7_tiny/、src/hailo10h_yolov7e6/、src/hailo10h_yolov7x/
  • イメージ:ghcr.io/seeed-projects/recomputer-hailo10h-cv/yolov7{,_tiny,e6,x}:latest
  • Hailo Model Zoo は 4 つのバリアントすべての Hailo-8 ビルド(v2.19.0 / v2.20.0)も公開していますが、本リポジトリで公開しているのは現時点で Hailo-10H モジュールのみです。
  • モデルライセンス:GPL-3.0(上流 WongKinYiu/yolov7)。

入力と出力

Input: image, video frame, or camera frame. Output: COCO classes, confidence scores, and boxes.