CV / YOLOv7
YOLOv7
reComputer R Series (CM5 + Hailo-10H)
reComputer RK3576 と RK3588 上で、RKNN により YOLOv7 の COCO 物体検出を高速化します。また、Hailo-10H を搭載した reComputer R Series 上では HailoRT 経由でも同じ COCO 物体検出を実行できます。
使用しているデバイスを選択してください。セットアップガイドとドキュメントがそれに応じて更新されます。
はじめる
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.mp4REST API
REST API を使用して推論を実行します。以下のコマンドをコピーしてください。
curl http://localhost:8080/v1/chat/completions -d '{
"model": "yolov7-rknn",
"messages": [{"role": "user", "content": "Hello"}]
}'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 |
| コンテナ内 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 です。
同梱デモ映像での実行
YOLOv7:
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.mp4YOLOv7-tiny:
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.mp4YOLOv7e6:
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.mp4YOLOv7x:
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.mp4http://<Board_IP>:8000 を開くと Web プレビューが表示されます。
USB カメラモード
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.hef | 640x640x3 | 28,106,752 (28.1 MB) | パラメータ 36.91M、演算量 104.51G、ハードウェア mAP 48.8、63.6 FPS |
yolov7_tiny.hef | 640x640x3 | 9,199,616 (9.2 MB) | パラメータ 6.22M、演算量 13.74G、ハードウェア mAP 36.3、288 FPS |
yolov7e6.hef | 1280x1280x3 | 73,072,640 (73.1 MB) | パラメータ 97.20M、演算量 515.12G、ハードウェア mAP 53.1、16.4 FPS |
yolov7x.hef | 640x640x3 | 56,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
各バリアントには専用のエンドポイントがあります:
| バリアント | エンドポイント |
|---|---|
| YOLOv7 | POST /api/models/yolov7/predict |
| YOLOv7-tiny | POST /api/models/yolov7_tiny/predict |
| YOLOv7e6 | POST /api/models/yolov7e6/predict |
| YOLOv7x | POST /api/models/yolov7x/predict |
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.