Ultralytics YOLOモデル用のAmbarella CVflowエクスポート#
このガイドは初期プレビューであり、Ambarellaによる完全な検証や完了はまだ行われていません。ベンダーからのフィードバックに応じて、コマンド、互換性の詳細、およびワークフローの手順が変更される可能性があります。現在、format="ambarella"のエクスポートターゲットはありません。このワークフローでは、標準のONNXエクスポート(format="onnx")とamba_config/amba_chipsetの引数を組み合わせ、生成されたONNXモデルをAmbarellaのCVflowツールチェーンを使用してオフラインでデプロイ可能なAmbaPB形式にコンパイルします。
Ultralytics YOLO モデルを Ambarella SoC にデプロイするには、CVflow® AI エンジン用に最適化されたモデルフォーマットが必要です。この Ultralytics のフォークは、Ambarella の SpongeTorch 圧縮ツールキットを学習、検証、エクスポートのパイプラインに直接統合しているため、Ambarella ハードウェア上で効率的に実行できるプルーニングおよび量子化最適化済みのモデルを生成できます。このガイドでは、現在の物体検出ワークフロー(圧縮認識トレーニング、ONNX エクスポート、CVflow ツールチェーンによるコンパイル、コンパイル済み AmbaPB モデルによる推論)の概要を説明します。
このワークフローでは、PyPIで利用できない独自のAmbarellaツールチェーンコンポーネント(spongetorch、CVflowコンパイラ、およびcvflowbackend)が必要です。Ambarella Developer Zoneに登録し、Cooper™ Developer Platformを通じてSDKへのアクセスを取得してください。
Ambarella CVflowとは?#
Ambarellaは、IPセキュリティカメラ、ドライブレコーダー、ドローン、ロボット工学、および自動車システムで広く使用されている、低電力AIビジョンSoCで知られるサンタクララの半導体企業です。そのチップは、非常に低い電力で高い推論スループットを提供する専用のニューラルベクトル処理アーキテクチャ(オンチップAIアクセラレータ、つまりNPU)である**CVflow®**を中心に構築されています(CV72Sは4KセキュリティカメラのAIワークロードを3W未満で実行します)。PyTorchなどの標準フレームワークでトレーニングされたモデルは、デプロイ前にAmbarellaのオフラインツールチェーンを使用してCVflowのネイティブ形式にコンパイルされます。
現在のCVflow SoCファミリーと主な用途:
| SoCファミリー | 主な用途 |
|---|---|
| CV72 / CV75 | 4K AIセキュリティカメラ、スマートカメラ、産業用ビジョン |
| CV5 / CV52 | ドローン、アクションカメラ、ロボティクス、マルチカメラシステム |
| CV3-AD | 自動車用ADASおよび自動運転ドメインコントローラ |
| N1 | オンプレミス型生成AIおよびマルチストリームビデオ解析アプライアンス |
YOLOをAmbarellaにデプロイする理由#
- ワットあたりのパフォーマンス: CVflow SoCは常時稼働のエッジAI向けに設計されており、カメラグレードの電力バジェット内でリアルタイムの物体検出を実行します。
- 圧縮認識トレーニング: SpongeTorchは、トレーニング中にプルーニングと量子化認識最適化を適用するため、モデルはNPUに優しい状態になりながら精度を維持することを学習します。
- ビット正確なホスト検証: コンパイルされたAmbaPB modelは、チップ上で実行されるのとまったく同じようにワークステーション上でUltralyticsの
predict/valを介して実行されるため、ハードウェアに触れる前に量子化されたmAPを測定できます。 - 統合カメラパイプライン:Ambarella SoCはAIエンジンとISPおよびビデオエンコーダを統合しているため、AIカメラ向けのシングルチップソリューションとなります。
ワークフローの概要#
パイプラインには4つのステージがあります:
- 圧縮認識トレーニング — SpongeKit設定(
amba_config)を使用してトレーニングを行い、トレーニング中にSpongeTorchがプルーニング/量子化を段階的に適用するようにします。 - ONNXエクスポート — 同じ
amba_configを使用して圧縮チェックポイントをエクスポートし、ONNXグラフ内の圧縮構造を保持します。 - CVflowコンパイル — CVflowツールチェーンを使用して、ONNXモデルをAmbaPBアーティファクトにコンパイルします。
- 推論と検証 — AmbaPB バックエンドを介して Ultralytics の
predict/valでコンパイル済み*.ambapb.ckpt.onnxモデルを実行し、ボードにデプロイします。
SpongeTorchのトレーニング時の最適化が必要ない場合は、SpongeTorchのトレーニングおよびSpongeTorch認識エクスポートを通常のONNXエクスポートに置き換えることができます(SpongeTorchなしでのエクスポートを参照してください)。
前提条件#
インストール#
このUltralyticsフォークをインストールし、SDKディストリビューションからAmbarellaツールチェーンのホイールをインストールします。
!!! Tip "インストール"
# Install this Ultralytics fork from source
git clone https://github.com/Ambarella-Inc/ultralytics
cd ultralytics
git checkout amba_v8.4.46
pip install -e .
# Install Ambarella toolchain wheels from the SDK
pip install /path/to/spongetorch-*.whl
pip install /path/to/cvflowbackend-*.whlAmbaPB 推論バックエンドは、CVflow ツールチェーンの tv2 コマンド (tv2 -libpath cvflowbackend) を通じて cvflowbackend を特定するため、コンパイル済みモデルで推論または検証を実行する前に、ツールチェーンがインストールされており、PATH に通っている必要があります。
SpongeKit設定ファイル#
SpongeTorchは、適用する圧縮パス(プルーニングのスパース性ターゲット、量子化設定、圧縮スケジュール)を定義するSpongeKit設定ファイル(プロトバッファテキスト形式、.prototxt)によって駆動されます。Ambarella SDKリリースから設定のサンプルと一致するスキーマドキュメントを取得してください。検証で未準備のモデルを準備する必要がある場合は常にトレーニング設定を使用し、圧縮されたチェックポイントをエクスポートするときは常に同じ設定を使用してください。
Ambaの引数#
2つの引数が、train、val、およびexportモード全体のSpongeTorch統合を制御します。
| 引数 | タイプ | デフォルト | 説明 |
|---|---|---|---|
amba_config | str | None | spongetorch.prepare()に渡されるSpongeKit設定へのパス。圧縮認識トレーニングとSpongeTorch認識エクスポートを有効にします。 |
amba_chipset | str | None | spongetorch.set_target_chipset()に渡されるターゲットチップセット名(例:CV72)。 |
このフォークでは、一般的なエクスポート引数も追加されています:
| 引数 | タイプ | デフォルト | 説明 |
|---|---|---|---|
export_file | str | None | カスタムエクスポート出力パス/名前(例:'/tmp/model.onnx'または'model.onnx')。 |
圧縮対応トレーニング#
SpongeTorch圧縮を有効にしてモデルをトレーニング(またはファインチューニング)します:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
model.train(
data="coco8.yaml",
epochs=100,
amba_config="config.prototxt",
amba_chipset="CV72",
)amba_configが設定されている場合、トレーナーはセットアップ時にモデルとオプティマイザをspongetorch.prepare()でラップします。圧縮はステップスケジュールに従って段階的に適用されるため、ネットワークはスパースかつ量子化に適したものになりながら精度を維持することを学習します。トレーニングされたチェックポイントは、SpongeTorchのスパース状態(_orig/_maskテンソル)を保存し、後のエクスポートステップで必要になります。再現性を確保するために、設定ファイルはamba_config.prototxtとして実行ディレクトリにコピーされます。
best.pt と last.pt は、SpongeTorch 圧縮スケジュールが end_step を超えるまでは意図的に保存されません(半分圧縮されたチェックポイントは使用できないため)。設定内のスケジュールが完了するのに十分な長さ epochs があることを確認してください。チェックポイントの保存が開始されるとログにレポートされます。スケジュールが完了する前にトレーニングが終了した場合でも、最終エポックは警告付きで保存されますが、そのようなチェックポイントはデプロイすべきではありません。
最高の精度を得るには、最初にモデルを通常通りにトレーニングするか(または事前トレーニング済みチェックポイントから開始)、トレーニングされた重みに対してamba_configを使用して短い圧縮ファインチューニングを実行します。
圧縮されたチェックポイントの検証#
同じ設定を使用して、コンパイル前に精度を検証します:
yolo val model=runs/detect/train/weights/best.pt data=coco8.yaml \
amba_config=config.prototxt amba_chipset=CV72バリデータは、必要な場合にspongetorch.prepare()を再適用し、圧縮構造が保持されるようにConv+BN融合を無効にします。mAPを非圧縮ベースラインと比較し、精度の低下が大きすぎる場合は、SpongeKitの設定を調整して再トレーニングします。
ONNXへのエクスポート#
トレーニングで使用した同じamba_configを使用して、圧縮されたチェックポイントをエクスポートします。
from ultralytics import YOLO
model = YOLO("runs/detect/train/weights/best.pt")
model.export(
format="onnx",
amba_config="config.prototxt",
amba_chipset="CV72",
)エクスポーターはモデルを再構築し、設定を使用してspongetorch.prepare()を再適用し、スパースなチェックポイントの重みを準備された構造に再読み込みし、Conv+BN融合を無効にしてONNXにトレースします。これにより、CVflowコンパイラが期待する正確な形式のグラフが生成されます。
モデルメタデータの保持#
ONNXエクスポートは、モデルのタスク、クラス名、ストライド、および入力サイズをONNXファイルに埋め込みますが、AmbaPBバックエンドはこの情報をコンパイル済みモデルの隣にあるmetadata.yamlサイドカーから読み取ります。CVflowコンパイラがこのサイドカーを作成しない限り、コンパイル前にONNXモデルから抽出してください。
import onnx
from ultralytics.utils import YAML
model = onnx.load("model.onnx")
YAML.save("metadata.yaml", {item.key: item.value for item in model.metadata_props})metadata.yamlをコンパイルされた*.ambapb.ckpt.onnxまたは*.ambapb.fastckpt.onnxファイルと同じディレクトリに配置します。
- チェックポイントには、SpongeTorchの圧縮状態が含まれている必要があります。
amba_configを設定して通常のチェックポイントをエクスポートすると、次のエラーが発生します: "Checkpoint has no SpongeTorch pruning state... Use a compressed checkpoint from amba training before export." - 設定はトレーニング時に使用したものと一致している必要があります。一致しない場合、重みのロードに失敗します。
CVflowツールチェーンでコンパイルする#
SDKのコンパイルガイドに従い、SDKに含まれるCVflowコンパイラを使用して、ターゲットチップセット用にエクスポートされたONNXモデルをコンパイルします。コンパイラはグラフをCVflow AIエンジンにマッピングし(量子化、スケジューリング、メモリ計画)、デプロイ可能なAmbaPBアーティファクトを生成します。
Ultralyticsがコンパイル済みモデルを認識するには、ファイル名が.ambapb.ckpt.onnxまたは.ambapb.fastckpt.onnxで終わる必要があります。
コンパイル済みモデルで推論を実行する#
コンパイルされたAmbaPBモデルは、Ultralytics APIを介して直接読み込まれます。AutoBackendは.ambapbのサフィックスを検出し、cvflowbackendを介して推論をルーティングし、AIエンジンで実行されるのとまったく同じようにビット単位でモデルを実行します。
from ultralytics import YOLO
model = YOLO("model.ambapb.ckpt.onnx")
# Inference
results = model("https://ultralytics.com/images/bus.jpg")
# Validation
metrics = model.val(data="coco8.yaml")これは、ハードウェアデプロイ前の最終的な精度チェックであり、すべてのコンパイラの量子化効果が含まれます。コンパイル済みモデルの隣にmetadata.yamlファイルがある場合、バックエンドはそこからクラス名、ストライド、およびタスク情報を読み取ります。バックエンドはデフォルトでCVflow推論モードacinfを使用します。デバッグのために入力/出力の詳細をログに記録するには、環境変数ULTRALYTICS_AMBAPB_DEBUG=1を設定します。
ボードへのデプロイ#
Ambarella SDKランタイムを使用して、Ambarellaデバイスにコンパイル済みモデルを読み込みます。前処理と後処理は、検出モデルがコンパイルされた対象と一致している必要があります。0–255範囲のレターボックス化されたRGB入力(Ultralytics AmbaPBバックエンドはコンパイル済みモデルに0–255 RGBを供給します)、および出力に対する標準のYOLO検出デコーディングです。ランタイムAPIについては、SDKのデプロイメントドキュメントを参照してください。
SpongeTorchを使用しないエクスポート#
SpongeTorchのトレーニング時プルーニングや量子化対応最適化が不要な場合は、標準のUltralyticsパイプラインでもCVflow互換のモデルを作成できます:
yolo export model=yolo26n.pt format=onnxトレーニング時にspongetorchの依存関係なしで、よりシンプルなワークフローのためにNPUのパフォーマンスと量子化された精度の一部をトレードオフする、トレーニング後の量子化自体を実行するCVflowツールチェーンで結果のONNXをコンパイルします。
実際のアプリケーション#
Ambarella CVflow SoC上のUltralytics YOLOモデルは、エッジでの常時稼働ビジョンを実現します:
- AIセキュリティカメラ:3W未満の消費電力で、4K IPカメラ上で人物や車両をリアルタイム検出。
- ドローンおよびロボティクス:CV5クラスのチップ上で、ナビゲーション、検査、配送のためのオンボードオブジェクト検出と追跡を実行。
- 自動車:CV3-ADドメインコントローラ上で、歩行者や車両検出などのADAS認識ワークロードを実行。
- 産業および小売解析:エッジアプライアンス上で、マルチストリームの人数カウント、PPE検出、棚監視などを実行。
要約#
このプレビューガイドでは、Ambarella CVflow SoC上でUltralytics YOLOモデルをデプロイするための現在のワークフローの概要を説明しました。SpongeTorch(amba_config/amba_chipset)による圧縮認識トレーニング、圧縮されたチェックポイントのONNXエクスポート、CVflowツールチェーンを使用したAmbaPBへのオフラインコンパイル、およびボードデプロイ前のUltralyticsを介したコンパイル済みモデルのビット単位の正確な検証です。
その他のエッジAIターゲットについては、関連するHailo、Rockchip RKNN、Sony IMX500、Qualcomm QNN、DEEPX、およびAxeleraのガイドを参照してください。サポートされているすべてのエクスポート形式のリストについては、エクスポートモードのドキュメントと統合ページをご覧ください。
よくある質問 (FAQ)#
いいえ。
format="ambarella"ターゲットはありません。ONNXにエクスポートし(amba_configを介したSpongeTorch圧縮をオプションで使用)、その後SDKのAmbarellaのCVflowツールチェーンを使用してオフラインでONNXモデルをAmbaPBにコンパイルします。AIカメラ用のCV72/CV75ファミリー、ドローンやロボット工学用のCV5/CV52、および自動車用のCV3-ADなど、CVflowツールチェーンでサポートされているCVflowベースのSoCをターゲットにすることができます。
amba_chipset引数はSpongeTorchの最適化ターゲットを設定します。コンパイル時に一致するターゲットを個別に選択してください。受け入れられるチップセットの文字列と可用性は、インストールされているSDKリリースによって異なります。SpongeTorchはAmbarellaのモデル圧縮ツールキットであり、プルーニングおよび量子化対応トレーニングのためにUltralyticsのAmbarellaフォークに統合されています。これはオプションです。通常のUltralytics ONNXエクスポートを使用して、学習後の量子化を適用しつつCVflowツールチェーンでコンパイルすることも可能ですが、NPUのパフォーマンスと量子化精度に影響が出る場合があります。
それらは独自のものであり、PyPIにはありません。Ambarella Developer Zoneに登録してSDKアクセスのリクエストを行ってください。
spongetorchおよびcvflowbackendのホイールとCVflowコンパイラはSDKディストリビューションに付属しています。Ambarellaフォークをインストールした状態で
yolo val model=model.ambapb.ckpt.onnx data=your_data.yamlを実行します。AmbaPBバックエンドは、CVflow AIエンジンで実行されるのとまったく同じようにビット単位でコンパイルされたモデルを実行するため、報告されるmAPにはすべてのコンパイラの量子化効果が含まれます。