Ultralytics YOLOモデルのHailo向けエクスポート#
Hailo AIアクセラレーターは、Raspberry Pi AI HAT+やAI HAT+ 2などのエッジデバイス上で、コンパイル済みのHailo Executable Format(HEF)モデルを実行します。Ultralyticsは、Hailo Dataflow Compiler(DFC)を使用して、YOLOの検出、セグメンテーション、セマンティックセグメンテーション、深度推定、分類、姿勢推定、OBBモデルをHEFに直接エクスポートします。
Hailoへのデプロイは、カメラ、ロボット、産業システム、ゲートウェイなど、すべてのフレームをクラウドに送信せずにローカルで物体検出を行う必要があるデバイス向けのエッジコンピュータビジョンを目的としています。コンパイル済みのHEFには、選択したアクセラレータに必要な量子化済みネットワーク、ハードウェア割り当て、スケジューリング、オプションのHailoRT後処理が含まれます。
Ultralytics YOLOをHailoにデプロイする理由#
Ultralytics YOLOとHailoニューラル処理ユニット(NPU)を組み合わせることで、モデルのトレーニングからエッジAI推論までの実用的な経路を実現できます。一般的なユースケースは次のとおりです。
- スマートカメラと映像分析:セキュリティ、小売、交通、占有状況の把握に利用するリアルタイム物体検出を、カメラの近くで実行します。
- ロボティクスと自律システム:常時クラウドに接続することなく、人、車両、荷物、工具、障害物を検出します。
- 産業用コンピュータビジョン:検査、計数、安全監視、品質管理向けにカスタムYOLOモデルをデプロイします。
- Raspberry Pi AIプロジェクト:AI HAT+またはAI HAT+ 2を使用して、Raspberry Piシステムに高速化されたビジョン推論を追加します。
- エッジゲートウェイとAI PC:帯域幅とクラウドコンピューティングの要件を抑えながら、複数の映像またはセンサーストリームをローカルで処理します。
画像がデプロイ先デバイス内にとどまるため、ローカル推論によってプライバシーと応答時間を改善できます。実際のスループット、レイテンシ、消費電力は、YOLOモデルのサイズ、入力解像度、Hailoアーキテクチャ、ホストシステム、アプリケーションパイプラインによって異なります。
Hailoエクスポートの仕組み#
Ultralyticsは、format="hailo"を支えるエクスポートワークフロー全体を管理します。
YOLO (.pt) -> ONNX -> Hailo parse -> INT8 optimization -> HEF compileエクスポーターは、次のステージを自動的に実行します。
- コンパイラ互換の設定で静的なONNXグラフをエクスポートします。
- モデルアーキテクチャに応じてヘッドの出力を選択します。
- 正規化、活性化、後処理のディレクティブを生成します。
- 代表的なキャリブレーションストリームを作成し、モデルをINT8に量子化します。
- 選択したHailoアクセラレータ向けに最適化済みグラフをコンパイルします。
- Ultralyticsメタデータを含むHEFを保存し、中間ONNXファイルを削除します。
YOLOv8およびYOLO11の検出モデルは、コンパイル済みパイプラインでHailoRT YOLO NMSを使用します。YOLO26は生の検出ヘッドテンソルをコンパイルします。Ultralyticsは、デフォルトのone-to-many出力にNMSを適用するか、nms=FalseでNMS不要のone-to-one出力をデコードします。YOLOv8/YOLO11のセグメンテーション、ポーズ、OBBは生のヘッドテンソルをコンパイルし、Ultralyticsが推論時にデコードします。また、YOLOv8/YOLO11/YOLO26の分類ではチップ上でsoftmaxを実行するため、HEFからクラス確率が直接返されます。YOLO26のセマンティックセグメンテーションでは、エクスポーターがアクセラレータに応じた処理を行います。Hailo-8/8L(DFC v3.x)は、ホスト側でアップサンプリングとリダクションを行うための分類器ロジットを返します。一方、Hailo-10H/15(DFC v5.x)はマルチクラスArgMaxヘッドをチップ上でコンパイルし、コンパクトなクラスマップを返します。シングルクラスヘッドではArgMaxではなくしきい値が必要なため、すべてのターゲットでホスト側ロジット経路を使用します。YOLO26の深度モデルは、a16で密なロジット畳み込みをコンパイルし、ホスト側でメートル単位の深度マップを再構築します(ヘッドの後に続くclamp/expと学習済みのlog-affineキャリブレーションを実行します)。そのため、量子化器は生のロジットに対して最大範囲を維持します。ユーザーがONNXの終端ノードを探したり、Hailoモデルスクリプト(.alls)を記述したり、NMS JSONを手動で作成したりする必要はありません。
インストール#
Ultralyticsをインストールし、Hailo Developer Zoneから対象ハードウェア用のDFC wheelをダウンロードします(無料登録が必要です)。
pip install ultralytics
pip install /path/to/hailo_dataflow_compiler-*.whlHailoのコンパイルにはLinux x86_64が必要です。サポート対象のワークステーションでモデルをコンパイルし、出力ディレクトリをターゲットデバイスにコピーしてください。推論にはDFCは必要ありません。
Hailo-8とHailo-8LはDFC v3.xを使用します。Hailo-10HとHailo-15はDFC v5.xを使用します。対象アクセラレータに合った世代のコンパイラをインストールしてください。
Ultralytics Platformでは、マネージドHailoエクスポートを利用できるため、ローカルのHailoアカウントやDFCのインストールは必要ありません。
Hailo HEFモデルをエクスポートする#
format="hailo"を使用し、nameで対象アクセラレータを選択します。
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
output = model.export(format="hailo", name="hailo8")
print(output) # yolo11n_hailo_model/同等のCLIコマンドは次のとおりです。
yolo export model=yolo11n.pt format=hailo name=hailo8HailoエクスポートはINT8のみをサポートします。dataが指定されていない場合、Ultralyticsはタスク固有のキャリブレーションデータセットを自動的にダウンロードします。カスタムモデルでは、代表的なトレーニング画像または検証画像を使用してください。
UltralyticsはDFCの最適化レベルを2に固定し、実際のキャリブレーションデータセットのサイズに合わせてファインチューニングを設定します。Hailoは多様な画像を少なくとも1,024枚使用することを推奨しています。組み込みの軽量データセットはレベル2でコンパイルできますが、本番環境のドメインを適切に表さない可能性があります。本番用HEFをエクスポートする場合は、data="path/to/dataset.yaml"で代表的なデータセットを指定してください。
model.export(format="hailo", name="hailo8", data="path/to/dataset.yaml")コンパイルでは入力形状が固定されます。デバイスで使用する解像度をimgszに設定してください。
model.export(format="hailo", name="hailo8", imgsz=640)サポート対象のモデルとハードウェア#
Hailoエコシステムは幅広いコンピュータビジョンワークロードに対応していますが、Ultralyticsのformat="hailo"エクスポーターが現在検証しているのは、標準的なYOLOの検出、セグメンテーション、セマンティックセグメンテーション、深度推定、分類、ポーズ、OBBの各ヘッドです。タスク表には利用可能なエクスポート経路を記載し、ハードウェアの検証状況は以下に別途記載しています。
| Ultralyticsのタスク | Hailoへの直接エクスポート | サポート対象のモデルファミリー | 備考 |
|---|---|---|---|
| 物体検出 | ✅ | YOLOv8、YOLO11、YOLO26 | カスタムモデルを含む標準的なUltralyticsのDetectヘッド |
| インスタンスセグメンテーション | ✅ | YOLOv8、YOLO11 | 生のヘッドテンソルを推論時にUltralyticsがデコードします。YOLO26-segは現在サポートされていません |
| セマンティックセグメンテーション | ✅ | YOLO26 | Hailo-8/8Lとシングルクラスヘッドはロジットを返します。Hailo-10H/15はマルチクラスマップを組み込みます |
| 深度推定 | ✅ | YOLO26 | a16で密なロジットをコンパイルし、推論時にUltralyticsがメートル単位の深度マップを再構築します |
| 画像分類 | ✅ | YOLOv8、YOLO11、YOLO26 | チップ上でsoftmaxを実行し、HEFからクラス確率を直接返します |
| ポーズ推定 | ✅ | YOLOv8、YOLO11 | 生のヘッドテンソルを推論時にUltralyticsがデコードします。YOLO26-poseは現在サポートされていません |
| 方向付き物体検出 | ✅ | YOLOv8、YOLO11 | 生のヘッドテンソルを推論時にUltralyticsがデコードします。YOLO26-OBBは現在サポートされていません |
YOLOv10、YOLO-World、YOLOE、RT-DETRなどの特殊な検出モデルファミリーは、現在Ultralyticsのformat="hailo"経路では❌サポートされていません。未検証のHEFを生成するのではなく、コンパイル前にこれらのタスクとモデルファミリーをUltralyticsが拒否します。
| モデルファミリー | Hailo-8 / Hailo-8L | Hailo-10H / Hailo-15 | 出力 |
|---|---|---|---|
| YOLOv8 / YOLO11の検出 | ✅ | ✅ | HailoRT YOLO NMSを含むHEF |
| YOLO26の検出 | ✅ | ✅ | 生の検出テンソル。デフォルトではホスト側NMSを使用し、nms=FalseでNMS不要にできます |
| YOLOv8-seg / YOLO11-seg | ✅ | ✅ | 生のセグメンテーションテンソルを、推論時にUltralyticsがデコードします |
| YOLOv8-pose / YOLO11-pose | Hailo-8Lで検証済み | 未検証 | 生のポーズテンソルを、推論時にUltralyticsがデコードします |
| YOLOv8-obb / YOLO11-obb | Hailo-8Lで検証済み | 未検証 | 生のOBBテンソルを、推論時にUltralyticsがデコードします |
| YOLOv8-cls / YOLO11-cls / YOLO26-cls | Hailo-8Lで検証済み | 未検証 | チップ上のsoftmax処理。HEFからクラス確率を返します |
| YOLO26-sem | Hailo-8Lで検証済み | 未検証 | ロジット、またはHailo-10H/15上の組み込み済みマルチクラスマップ |
| YOLO26-depth | Hailo-8Lで検証済み | 未検証 | 密なロジット。メートル単位の深度マップをUltralyticsがデコードします |
ポーズ、OBB、分類、YOLO26のセマンティックセグメンテーション、YOLO26の深度推定(Hailo-8/8L経路)は、HailoRT 4.23およびDFC 3.33を使用してHailo-8Lで検証されています。エクスポーターは他に記載したターゲットも受け付けますが、これらの新しいタスク経路を本番環境で使用する前に、対応するコンパイラとデバイスで検証する必要があります。
次のnameの値から1つ選択します。
name | 対象アクセラレータ |
|---|---|
hailo8 | Hailo-8 |
hailo8l | Hailo-8L |
hailo10h | Hailo-10H |
hailo15h | Hailo-15H |
hailo15l | Hailo-15L |
nameを省略した場合、デフォルトとしてhailo8lが使用されます。デプロイ先のアクセラレータをnameに設定してください。選択したターゲットに合った世代のDFCをインストールしてください。
HailoのハードウェアとSDKの世代#
Hailoアクセラレータの各ファミリーでは、異なる世代のコンパイラを使用します。生成されるHEFは対象ハードウェアに適合している必要があるため、エクスポートを実行するマシンではなく、推論を実行するデバイスに合わせてnameを選択してください。
| ハードウェアファミリー | DFCの世代 |
|---|---|
| Hailo-8 / Hailo-8L | DFC v3.x |
| Hailo-10H | DFC v5.x |
| Hailo-15H / Hailo-15L | DFC v5.x |
コンパイラはLinux x86_64で動作し、生成されたHEFはHailoRTを介してHailoデバイス上で実行されます。この分離により、ワークステーションまたはUltralytics Platformでコンパイルし、小さなランタイムアーティファクトをARMまたはx86のエッジホストにデプロイできます。
互換性に関する注意事項#
Hailoのコンパイルはハードウェア固有であり、入力形状が固定されています。次の制約に注意してください。
- 選択した
nameは、デプロイ先のアクセラレータに適合している必要があります。 - キャリブレーション画像には、本番環境で想定される照明、視点、物体、背景を反映させてください。
- 各HEFは固定の
imgsz向けにコンパイルされます。複数の解像度に対応するには、ホスト側でフレームをコンパイル済みのサイズに変更するか、解像度ごとに別のHEFをコンパイルしてください。 - Ultralyticsがモデルメタデータから後処理設定を生成するため、カスタムのクラス数もサポートされます。
- 標準的なUltralyticsの
Detectヘッドを持つ検出モデル、YOLOv8/YOLO11のセグメンテーション、ポーズ、OBBモデル、YOLOv8/YOLO11/YOLO26の分類モデル、YOLO26のセマンティックセグメンテーションおよび深度推定モデルがサポートされています。YOLO26のインスタンスセグメンテーション、ポーズ、方向付きバウンディングボックスに加え、YOLO-World、YOLOE、YOLOv10、RT-DETRのエクスポートは現在サポートされていません。 - Hailo-8/8LとHailo-10H/15のアーティファクトは異なる世代のDFCでコンパイルされるため、相互に使用できません。
キャリブレーションとINT8量子化#
Hailo HEFエクスポートでは、YOLOネットワークをアクセラレータに効率よくマッピングするためにINT8量子化を使用します。キャリブレーションデータセットは活性化の範囲を推定するものであり、モデルを再トレーニングするものではありません。また、コンパイル時にラベルは必要ありません。
HailoハードウェアとDataflow Compilerは、INT4、INT8、INT16の精度をサポートしています。Ultralyticsのformat="hailo"パスはINT8でコンパイルし、タスクでより広いダイナミックレンジが必要な場合は16ビットアクティベーション(a16)を適用します。
dataを省略すると、Ultralyticsはタスクに応じた軽量なキャリブレーションデータセットを使用します。たとえば、物体検出にはCOCO128、セマンティックセグメンテーションにはcityscapes8、深度推定にはdepth8を使用します。高密度な深度ヘッドは、キャリブレーションのドメインに特に敏感です。関連性のない物体検出画像で深度モデルをキャリブレーションすると、予測マップが平坦化しますが、ドメイン内のデータセットを大きくすると忠実度が向上します。カスタムコンピュータービジョンモデルの場合は、dataにデータセットのYAMLを指定し、コンパイラーが実際のデプロイドメインを代表する画像を参照するようにします。
model.export(format="hailo", name="hailo8", data="my_dataset.yaml")fractionは、キャリブレーションに使用する割合または画像数を指定します。[train, val, test]のリストは各分割の上限を指定し、2項目のリストではtestが全件のままになり、0はテストをスキップします。画像を増やすことで効果が得られるのは、デプロイドメインを代表する画像の場合に限られます。ドメイン外の画像は量子化精度を低下させ、最適化時間を増加させる可能性があります。INT8 HEFの精度が元のPyTorchモデルを下回る場合は、モデルやランタイムの設定を変更する前に、まずキャリブレーションデータを改善してください。
モデルファミリー別の精度の目安#
ドメイン内のキャリブレーション(COCO128、128枚)を使用し、Hailo-8Lで測定しました。同じ評価プロトコルで比較した場合、INT8 HEFエクスポートはPyTorchのmAP50に対して以下の割合を維持します。
| モデル | mAP50の維持率 | 備考 |
|---|---|---|
| YOLOv8n | ~100% | オンチップNMSを備えたDFLヘッド |
| YOLO11n | ~96% | バックボーンのAttentionブロックはINT8の影響を受けやすい |
| YOLO26n | ~93% | エンドツーエンドヘッドとAttention。信頼度に関する注記を参照してください |
維持率は、両方のモデルを同じ信頼度しきい値で比較した値です。YOLOv8およびYOLO11のHEFでは、エクスポート時のconf(デフォルトは0.25)がオンチップNMSに組み込まれます。そのため、デフォルトの低いしきい値を使用したPyTorchベースラインと比較すると、適合率‐再現率曲線のより広い範囲が集計され、量子化による差が実際より大きく見積もられます。
物体検出以外に、セグメンテーション、姿勢推定、OBB、分類のエクスポートパスも、同じHailo-8L(DFC 3.33、HailoRT 4.23)で検証しました。各INT8 HEFを、ドメイン内のキャリブレーションを使用して、同じ検証分割上のPyTorchチェックポイントと比較しました。
| タスク | 指標(検証分割) | YOLOv8n | YOLO11n |
|---|---|---|---|
| インスタンスセグメンテーション | マスクmAP50維持率(COCO128-seg) | 98.0% | 93.6% |
| 姿勢推定 | ボックスmAP50維持率(COCO8-pose) | 98.1% | 90.8% |
| 方向付きバウンディングボックス | mAP50維持率(DOTA128) | ~100% | 96.9% |
| 分類 | top-1維持率(ImageNet val) | 92.6% | 95.4% |
セグメンテーション、姿勢推定、OBBは各タスクのデフォルトのドメイン内セット(COCO128-seg、COCO8-pose、DOTA128)でキャリブレーションし、分類はImageNet100でキャリブレーションしました。これらのデフォルト設定には2つの注意点があります。COCO8-poseはわずか8枚なので、姿勢推定の結果は参考値として扱い、本番環境ではより大きなdata=を指定してください。また、DOTA8では両モデルのmAP50がほぼ100%に達するため、OBBの評価にはDOTA128を使用しています。YOLO11の維持率がYOLOv8を上回るのは分類だけです。それ以外のタスクでは、YOLO11のAttentionバックボーンの方がINT8の影響を受けやすくなります。
デバイス上での測定から、実践的なルールが3つ導かれます。
- 必ずドメイン内でキャリブレーションしてください。ドメイン外の画像を使ったファインチューニングは、ファインチューニングをまったく行わないのと同じ結果になります。1,238枚のドメイン外画像でキャリブレーションしたYOLO26nの精度(85.7%)は、ファインチューニングなしでコンパイルした場合と同じです。ドメイン外の大量の画像より、ドメイン内の少量の画像の方が効果的です。
- YOLO26のデプロイでは、
confを約0.05下げてください。量子化によってYOLO26のスコアは平均で約0.05低下するため、PyTorchで調整したしきい値を使うと、HEF上で有効な検出が除外されます。デバイス上でconf=0.20を使用すると、conf=0.25におけるPyTorchの検出数と一致します。さらに少し下げて(約conf=0.15)低信頼度の検出が増えることを許容すれば、残りのmAP50の差をほぼすべて解消できます。量子化によって検出結果の約20%の順位も入れ替わります。この並べ替えはしきい値を変えても元に戻せませんが、しきい値を下げれば、こうした順位変動があってもmAP50を回復できます。 - Hailo-8/8L(DFC 3.33)では、Attentionによる精度低下は構造上避けられません。Attentionブロックは、コンパイラーが提供するどのモードでもINT8アクティベーション入力を維持する
matmul演算にコンパイルされます。このグラフでは16ビット出力モードの割り当てに失敗します。また、周辺レイヤーの精度を上げても効果はありません。matmulが入力をINT8に再量子化するためです(深さ方向畳み込みと出力畳み込みを16ビットで保護しても、テストではmAPに変化がありませんでした)。精度を優先し、モデルを選択できる場合、現時点ではYOLO11の方がYOLO26より良好に量子化されます。新しいHailo世代(DFC 5.x)では混合精度の選択肢が増えており、結果が異なる可能性があります。
エクスポート成果物#
エクスポートすると、デプロイ可能なHEFとUltralyticsのメタデータを含むディレクトリが作成されます。
yolo11n_hailo_model/
├── yolo11n.hef
├── metadata.yaml
└── nms_config.json*.hefは、HailoRTによって読み込まれるコンパイル済みモデルです。metadata.yamlには、モデル名、タスク、入力サイズ、ストライド、Hailoターゲット情報が保存されます。nms_config.jsonには、YOLOv8およびYOLO11の物体検出モデル向けに生成されたHailoRT NMS設定が記録されます。YOLO26の物体検出と、物体検出以外のすべてのタスク(セグメンテーション、セマンティックセグメンテーション、深度推定、分類、姿勢推定、OBB)では、このファイルを使用しません。
中間ONNXグラフはコンパイル後に削除されます。
Hailoハードウェアで推論を実行する#
ターゲットデバイスにHailoRTをインストールします。Raspberry Pi AI HAT+およびAI HAT+ 2を使用する場合は、Raspberry Pi AIソフトウェアガイドを参照してください。Raspberry Pi OSでは、2種類のパッケージセットを同時にインストールできないため、ハードウェアに合ったブロックのみを実行してから再起動してください。
AI HAT+(Hailo-8 / Hailo-8L)の場合:
sudo apt install dkms
sudo apt install hailo-all
sudo rebootAI HAT+ 2(Hailo-10H、Raspberry Pi OS Trixie以降)の場合:
sudo apt install dkms
sudo apt install hailo-h10-all
sudo reboot再起動後、アクセラレーターが検出されていることを確認します。
hailortcli fw-control identifyhailo-allおよびhailo-h10-allパッケージがHailoRTをインストールするのは、Raspberry Pi OSのみです。それ以外のホストでは、DFCと同じ入手先であるHailo Developer ZoneからHailoRTパッケージをダウンロードしてインストールしてください。
エクスポートディレクトリ全体をデバイスにコピーし、metadata.yamlがHEFと同じ場所に残るようにします。UltralyticsはHailoRTを使用して、エクスポートディレクトリ上でpredictとvalを直接実行します。
from ultralytics import YOLO
model = YOLO("yolo11n_hailo_model")
results = model.predict("path/to/image.jpg")物体検出モデルの場合、バックエンドはYOLOv8/YOLO11のHailoRT NMS出力を変換し、YOLO26のいずれのヘッドも自動的にデコードします。デフォルトのone-to-many出力は、predictorのNMSを通過します。セグメンテーション、姿勢推定、OBBの生テンソルをデコードし、オンチップの分類確率を返します。また、Hailo-8/8Lではホスト側の集約処理によってセマンティッククラスマップを生成し、Hailo-10H/15では、単一クラスのすべてのヘッドに対して同様に処理するか、マルチクラスヘッドに対してオンチップArgMaxを使用します。アプリケーション固有のパイプラインでは、TAPPAS、GStreamer、Raspberry Piのpicamera2.devices.Hailoヘルパーも引き続き使用できます。
GStreamerでデプロイする場合は、HEFをhailonetに渡します。
gst-launch-1.0 filesrc location=video.mp4 ! decodebin ! videoconvert ! \
hailonet hef-path=yolo11n_hailo_model/yolo11n.hef ! \
hailofilter function-name=yolov8 ! hailooverlay ! autovideosinkHailoのデプロイオプション#
HEFは、複数のHailoランタイムインターフェースで共通して使用できるデプロイ可能なモデル成果物です。アプリケーションに適したインターフェースを選択してください。
| ランタイムオプション | 最適な用途 |
|---|---|
| HailoRTのPythonまたはC/C++ API | カスタムアプリケーションと推論の直接制御 |
Raspberry Piのpicamera2.devices.Hailo | Raspberry PiでのCamera Moduleプロジェクト |
| GStreamerとHailoアプリケーション | リアルタイム動画ストリームとマルチステージパイプライン |
hailortcli | デバイスの確認、HEFの検査、ベンチマーク |
アプリケーションでUltralyticsのクラス名、入力サイズ、ストライド、その他のモデル情報が必要な場合は、metadata.yamlをHEFと一緒に保持してください。HEF自体は、カメラ映像の取り込み、可視化、トラッキング、アラート、ストレージに関するアプリケーションレベルのロジックを置き換えるものではありません。
HailoデバイスとHEFを確認する#
カメラや動画パイプラインを統合する前に、ランタイムとアクセラレーターを個別に確認してください。
hailortcli fw-control identify
hailortcli parse-hef yolo11n_hailo_model/yolo11n.hefデバイス単体の性能測定では、動画デコード、画像リサイズ、描画、アプリケーションI/OからHailo推論を切り分けられます。エンドツーエンドのレイテンシやフレームレートを見積もる場合は、アプリケーション全体を別途測定してください。
ベンチマーク#
UltralyticsチームはYOLO26モデルのベンチマークを実施し、PyTorchとHailoの速度と精度を比較しました。
| モデル | 形式 | ステータス | サイズ(MB) | metrics/mAP50-95(B) | 推論時間(ms/im) |
|---|---|---|---|---|---|
| YOLO26n | PyTorch | ✅ | 5.3 | 0.477 | 364.6 |
| YOLO26n | Hailo | ✅ | 7.3 | 0.455 | 21.7 |
| モデル | 形式 | ステータス | サイズ(MB) | metrics/mIoU | 推論時間(ms/im) |
|---|---|---|---|---|---|
| YOLO26n-sem | PyTorch | ✅ | 3.3 | 0.611 | 831.2 |
| YOLO26n-sem | Hailo | ✅ | 6.2 | 0.611 | 34.8 |
| モデル | 形式 | ステータス | サイズ(MB) | metrics/delta1 | metrics/abs_rel | metrics/rmse | 推論時間(ms/im) |
|---|---|---|---|---|---|---|---|
| YOLO26n-depth | PyTorch | ✅ | 12.4 | 0.8535 | 0.0983 | 0.2047 | 2133.4 |
| YOLO26n-depth | Hailo | ✅ | 9.9 | 0.8241 | 0.1232 | 0.2554 | 29.6 |
| モデル | 形式 | ステータス | サイズ(MB) | 精度(top1) | 精度(top5) | 推論時間(ms/im) |
|---|---|---|---|---|---|---|
| YOLO26n-cls | PyTorch | ✅ | 5.5 | 0.431 | 0.716 | 33.8 |
| YOLO26n-cls | Hailo | ✅ | 3.5 | 0.441 | 0.716 | 2.0 |
上記のベンチマークの検証には、検出にCOCO128、セマンティックセグメンテーションにCityscapes8、深度推定にDepth8、分類にImageNet100を使用しました。Cityscapes8とDepth8には検証画像がそれぞれ4枚しか含まれていないため、これらのセマンティックセグメンテーションと深度精度の値は精度維持の測定値ではなく、スモークテストの結果として扱ってください。精度について結論を出す前に、CityscapesやNYU Depth V2などのフルデータセットで検証してください。推論時間には前処理と後処理は含まれません。
Hailoとその他のYOLOエクスポート形式の比較#
モデルを実行するハードウェアに基づいてエクスポート形式を選択してください。HEFはハードウェア固有の形式であり、最終デバイスにHailoアクセラレーターが搭載されている場合に選択してください。汎用形式や、常に最速であるとは限らないエッジ形式として選択するものではありません。
| デプロイ先または優先事項 | 推奨されるUltralytics形式 | Hailoとの比較 |
|---|---|---|
| 既存のHailo NPUまたはRaspberry Pi HAT | Hailo HEF(format="hailo") | インストール済みのHailoアクセラレーターとHailoRTスタックを使用します |
| 新規の省電力M.2またはSBC NPU | DeepX | YOLOの性能とワットあたりの性能を高めたい場合は、まずこちらを検討してください |
| 高スループットのマルチストリームエッジNPU | Axelera | 新しいアクセラレーターハードウェアで、より多くのストリームと高いスループットを実現する場合に評価してください |
| NVIDIA GPU | TensorRT | 別個のNPUではなく、FP16およびINT8オプションを備えたNVIDIA GPUカーネルを使用します |
| Intel CPU、GPU、またはNPU | OpenVINO | Intelシステムにすでに統合されているアクセラレーターを対象とします |
| Appleハードウェア | CoreML | Appleのネイティブランタイムを介して、Apple Neural Engine、GPU、CPUを使用します |
| Qualcomm Snapdragon NPU | QNN | 外部アクセラレーターを必要とせず、QualcommのオンデバイスNPU向けにコンパイルします |
| Rockchip NPU | RKNN | 手頃な価格のSBCや組み込みシステムで広く使用されています |
| Huawei Ascend NPU | Ascend | AtlasボードおよびOrangePi AIPro向けに、Ascend AI Core用のCANN .omモデルをコンパイルします |
| Google Coral Edge TPU | Edge TPU | Hailoモジュールの代わりに、Coralアクセラレーター上でINT8 LiteRTモデルを実行します |
| Ambarella CVflow SoC | Ambarella | Ambarellaのカメラおよび組み込みビジョンSoC向けにコンパイルします |
| Raspberry Pi AI Camera | Sony IMX500 | ホスト接続型のHailoアクセラレーターを介さず、カメラセンサー内でネットワークを実行します |
| モバイルまたは組み込みのCPU/GPU | NCNN | 専用の対応NPUを利用できない場合に、軽量でポータブルなランタイムを提供します |
| ポータブルなクロスランタイムデプロイ | ONNX | ランタイム間のポータビリティを維持します。HailoRTでONNXを実行するには、事前にHEFへコンパイルする必要があります |
NPUであるという理由だけで、Hailoの方が高速または電力効率に優れていると考えないでください。新規のM.2デプロイでは、YOLOの性能とワットあたりの性能を高める有力候補はDeepXです。一方、Axeleraは大幅に高いマルチストリームスループットを対象としています。RockchipはSBCや組み込みシステムで人気のある低コストの選択肢です。ベンダーが公表するTOPSや消費電力の数値は、アプリケーションのベンチマークとして直接比較できません。ハードウェアを購入する前に、候補デバイス上で同じYOLOチェックポイント、入力サイズ、精度、ホスト、動画パイプライン全体を使って検証してください。
Hailoでコンピュータービジョンの性能を最適化する#
モデルやパイプラインの選択は、多くの場合、コンパイラーフラグよりも重要です。
- 小さなYOLOモデルから始め、精度上必要な場合にのみモデルサイズを大きくしてください。
- アプリケーションにとって重要な物体を維持できる範囲で、最も低い固定の
imgszを選択してください。 - 可能であれば、実際のカメラや環境から取得したキャリブレーション画像を使用してください。
- 推論のたびにHEFを開き直すのではなく、フレーム間でHailoネットワークをアクティブな状態に保ってください。
- デバイスの推論時間を、前処理、動画デコード、後処理、可視化、ネットワークI/Oから切り分けてください。
- 継続的な動画処理には、GStreamerなどのストリーミングパイプラインを使用してください。
- 本番環境で使用するアクセラレーターとHailoRTのバージョンで、エクスポートしたHEFを検証してください。
エクスポート引数#
| 引数 | 種類 | デフォルト | 説明 |
|---|---|---|---|
name | str | hailo8l | 対象となるHailoアクセラレーターのアーキテクチャ |
imgsz | int, list | 640 | 固定モデル入力サイズ |
data | str | None | キャリブレーションデータセットのYAMLファイルです。分類タスクでは、代わりにデータセットディレクトリまたは組み込みデータセット名を指定します。省略した場合、Ultralyticsがタスクに応じたキャリブレーションデータセットを選択します。 |
fraction | float、int、またはlist | 1.0 | キャリブレーション用サブセットを、比率、画像数、または[train, val, test]の比率/件数として指定します。2項目のリストではtestがすべて含まれ、0では除外されます。 |
quantize | int | 8 | HailoへのエクスポートではINT8量子化が使用されます |
simplify | bool | True | 中間ONNXグラフを簡略化します |
conf | float | 0.25 | YOLOv8/YOLO11 HailoRT NMSの信頼度しきい値 |
iou | float | 0.7 | YOLOv8/YOLO11 HailoRT NMSのIoUしきい値 |
device | str | None | 中間ONNXエクスポート手順で使用するデバイスです。デフォルトはCPU(device=cpu)です。Dataflow Compilerの各手順では使用されません。 |
YOLOv8/YOLO11の検出エクスポートでは、HailoRT NMSが使用されます。YOLO26は、ホスト側のNMS向けにデフォルトで生のone-to-many出力を使用します。nms=Falseを指定すると、NMSを使用しないone-to-one出力になります。セグメンテーション、姿勢推定、OBBでは生のヘッドテンソルが使用され、分類ではチップ上の確率が返されます。セマンティックセグメンテーションでは、Hailo-8/8Lおよびすべての単一クラスヘッドで生のロジットが返され、マルチクラスのHailo-10H/15ヘッドでは焼き込み済みのクラスマップが返されます。深度推定では生の深度ロジットが返され、推論時にUltralyticsがメートル単位の深度マップにデコードします。動的シェイプ、組み込みのUltralytics NMS、FP16、FP32はサポートされていません。
Hailoエクスポートのトラブルシューティング#
Hailo Dataflow Compilerのインポートエラー#
エクスポート時にhailo_sdk_clientが見つからないというエラーが表示される場合は、対象ハードウェア世代向けのDFCホイールを、Ultralyticsと同じPython環境にインストールしてください。Hailo-8/8LとHailo-10H/15では、異なる世代のコンパイラーが必要です。
サポート対象外のオペレーティングシステムまたはアーキテクチャ#
HEFのコンパイルはLinux x86_64でサポートされています。使用中のコンピューターがmacOS、Windows、Raspberry Pi、またはその他のARMシステムの場合は、Ultralytics Platform経由でエクスポートするか、互換性のあるワークステーションを使用してください。
エクスポートに時間がかかる#
DFCの最適化は、最も計算コストの高い段階です。コンパイル時間は、モデルのサイズ、入力解像度、キャリブレーションデータに応じて長くなります。サポート対象のGPUを使うと最適化を高速化できますが、CPUのみのコンパイルでは大幅に時間がかかることがあります。
量子化モデルの精度が低下する#
本番環境の入力に似ており、重要な物体、スケール、照明条件、背景を含むキャリブレーション画像を使用してください。デプロイ前に、同じ検証セットで元のPyTorchモデルとエクスポートしたHEFを比較してください。適切にキャリブレーションしても、モデルファミリーによってはある程度の精度差が残ります。測定済みのベースラインについては、モデルファミリー別の精度の目安を参照してください。
デバイスでHEFを読み込めない#
nameが実際のHailoアーキテクチャと一致していること、およびデバイスドライバー、ファームウェア、HailoRTパッケージに互換性があることを確認してください。hailortcli parse-hefでアーティファクトを検査し、hailortcli fw-control identifyでアクセラレーターを確認してください。
出力の解析が正しくない#
Ultralyticsが対応するYOLOv8、YOLO11、またはYOLO26の後処理パスを選択できるよう、metadata.yamlをHEFと同じ場所に置いてください。カスタムHailoRTアプリケーションでも、後処理をエクスポートしたモデルファミリーに合わせる必要があります。
概要#
UltralyticsのHailoエクスポートを使用すると、学習済みYOLOモデルからデプロイ可能なHEFを直接作成できます。
- YOLOv8、YOLO11、またはYOLO26の検出モデルまたは分類モデル、YOLOv8/YOLO11のセグメンテーション、姿勢推定、またはOBBモデル、あるいはYOLO26のセマンティックセグメンテーションまたは深度推定モデルを読み込みます。
format="hailo"でエクスポートし、対象アーキテクチャを選択します。- 対応するDFCを使用してローカルでキャリブレーションとコンパイルを行うか、Ultralytics Platformのマネージドエクスポートを使用します。
- HEFと
metadata.yamlをHailo搭載のエッジデバイスにコピーします。 - HailoRT、Raspberry Pi Picamera2、またはGStreamer動画パイプラインを使用して推論を実行します。
その他のコンピュータービジョン向けデプロイ先については、エクスポートモード、ベンチマークモード、およびインテグレーションガイドを参照してください。関連するハードウェアガイドには、DeepX、Axelera、ONNX、OpenVINO、TensorRT、NCNN、RKNN、Sony IMX500、Qualcomm QNNがあります。
よくある質問#
いいえ。サポート対象のLinux x86_64システムでDFCを実行し、生成されたHEFをRaspberry Piにデプロイしてください。
サポート対象のGPUを使用すると、DFCの最適化時間を大幅に短縮できます。CPUでのコンパイルも可能ですが、かなり時間がかかることがあります。
標準のYOLOv8、YOLO11、またはYOLO26検出ヘッドを備えた検出モデル、YOLOv8/YOLO11のセグメンテーション、姿勢推定、OBBモデル、およびYOLOv8/YOLO11/YOLO26の分類モデルを直接エクスポートできます。これらの標準アーキテクチャを基に構築されたカスタム学習モデルも含まれます。YOLO26のセマンティックセグメンテーションモデルと深度推定モデルもサポートされています。YOLO26のインスタンスセグメンテーション、姿勢推定、OBBに加え、YOLOv10、YOLO-World、YOLOE、RT-DETRは、未検証のHEFが生成されないよう、エクスポート時に拒否されます。
はい。カスタムの
.pt重みを指定して同じformat="hailo"コマンドを使用し、代表的なINT8キャリブレーション用に、学習データセットのYAMLをdataで渡してください。クラス名とクラス数はモデルのメタデータから読み込まれます。各HEFは固定入力シェイプでコンパイルされるため、単一のHEFのサイズを動的に変更することはできません。実際には、ホスト側で入力をコンパイル済みサイズにリサイズするか、必要な解像度ごとに複数のHEFをコンパイルできます。デプロイパイプラインに合わせて、エクスポート時に
imgszを選択してください。YOLO26ではDFLを使用しないボックス回帰を採用しているため、両方のヘッドはYOLOv8形式のHailoRT NMSパイプラインではなく、生のテンソルにコンパイルされます。UltralyticsはテンソルをデコードしてデフォルトでNMSを適用します。または、
nms=Falseを指定してエクスポートすると、NMSを適用しない検出結果を返します。Hailo Dataflow Compilerは、Linux x86_64のビルドマシン上でモデルを変換・量子化し、ハードウェア固有のHEFを生成します。HailoRTは、対象デバイスでそのHEFを読み込んで実行します。
コンパイル済みのHEFをHailoランタイムにデプロイしてください。ONNXはエクスポート時に使用する中間表現であり、コンパイルに成功すると削除されます。
Hailo Developer Zoneから、ハードウェア世代に対応するコンパイラーホイールをダウンロードしてください。コンパイラーが必要なのはHEFの作成時のみで、対象アクセラレーターではHailoRTが実行を担います。