Ultralytics YOLOモデル向けAmbarella CVflowエクスポート#
Ultralytics YOLO モデルを Ambarella SoC にデプロイするには、Ambarella のコンパイルツールを使用したモデルのコンパイルが必要であり、CVflow アーキテクチャ向けに最適化されたモデルは推論時のパフォーマンスが向上します。Ultralytics のこのフォークは、Ambarella の SpongeTorch 圧縮ツールキットを学習、検証、エクスポートのパイプラインに直接統合し、開発者が Ambarella ハードウェア上で効率的にデプロイするための最適化されたモデルを生成できるようにします。
このガイドでは、圧縮対応学習からデバイス上の推論に至るまでの現在のオブジェクト検出デプロイメントワークフローについて説明します(完全なパイプラインについては、ワークフローの概要を参照してください)。
AmbaPB チェックポイントフォーマットは、CVflow の計算プリミティブをサポートし、SDK ツールによって生成された成果物をパッケージ化する ONNX IR 仕様の Ambarella 固有の拡張です。これは、デプロイ前にコンパイル済みモデルの精度を検証するために使用されるホスト側の成果物であり、ターゲットデバイス用に生成された個別の Cavalry バイナリがボード上で実行されるものです。
このワークフローは、PyPI では入手できない独自の Ambarella SDK コンポーネントに依存しています。必要な SDK パッケージを取得するには、Ambarella Developer Zone に登録し、Cooper™ Developer Platform を通じてアクセスをリクエストしてください。
この統合は Ambarella によって保守されています。フォーク、SpongeTorch、または SDK に関する問題は、Ambarella サポートに報告してください。
Ambarella とは#
カリフォルニア州サンタクララに本社を置く Ambarella は、エッジ AI SoC を設計する半導体企業です。同社のプロセッサは、画像信号処理、ビデオエンコーディング、およびオンチップ AI コンピューティングを統合しており、セキュリティ、自動車、ロボット工学、産業、および民生用デバイスで使用されています。
CVflow とは#
CVflow は、Ambarella のビジョン処理アーキテクチャです。CPU および GPU とは別の専用ビジョンエンジンを使用して、コンピュータビジョンおよびニューラルネットワークのワークロードを実行します。PyTorchなどのフレームワークで学習されたモデルは、エンジン上で実行される前に、Ambarella SDK を使用して CVflow のネイティブフォーマットにコンパイルされます。
現在のCVflow SoCファミリーと主な用途:
| SoCファミリー | 主な用途 |
|---|---|
| CV72 / CV75 | 4K AIセキュリティカメラ、スマートカメラ、産業用ビジョン |
| CV5 / CV52 | ドローン、アクションカメラ、ロボティクス、マルチカメラシステム |
| N1-655 | オンプレミス生成AIおよびマルチストリーム動画分析アプライアンス |
AmbarellaにYOLOをデプロイする理由#
- ワットあたりの性能:CVflow SoCは常時稼働するエッジAI向けに設計されており、カメラ向けの電力予算内でリアルタイムの物体検出を実行します。
- 圧縮対応学習: SpongeTorch は、学習中にプルーニングを適用し、モデルが精度を維持しながら、CVflow デプロイメントに向けてよりスパースで効率的になるのを支援します。
- 統合カメラパイプライン: Ambarella SoC は、画像信号プロセッサ(ISP)、ウルトラ HD ビデオエンコーディング、および CVflow を統合して、低消費電力でさまざまなカメラシステムを実現するため、単一の Ambarella SoC が完全な AI カメラパイプラインを処理します。
ワークフローの概要#
パイプラインには 6 つのステージがあります:
- 圧縮対応学習 — SpongeTorch が学習中にプログレッシブに非構造化プルーニングを適用するように、SpongeKit 設定(
amba_config)で学習します。後学習量子化(PTQ)の精度が許容できない場合、SpongeTorch は量子化対応学習(QAT)もサポートしていますが、そのパスはこの Ultralytics 統合にはまだ組み込まれておらず、将来のリリースで予定されています。 - ONNXエクスポート — 同じ
amba_configを使用して圧縮済みチェックポイントをエクスポートし、ONNXグラフ内の圧縮構造を保持します。 - コンパイル — CVflow エンジン用の PTQ を適用する SDK コンパイルツールを使用して、ONNX モデルを AmbaPB チェックポイントにコンパイルします。
- ホスト検証 — デプロイ前に精度を検証するため、AmbaPB バックエンドを介して Ultralytics の
predict/valを使用して、コンパイル済みの*.ambapb.ckpt.onnxモデルを実行します。 - Cavalry 変換 — SDK ツールを使用して、検証済みの AmbaPB チェックポイントを Cavalry バイナリに変換します。
- デバイスでの実行 — Ambarella の SDK ランタイムライブラリを使用して、デバイス上で Cavalry バイナリを実行します。
SpongeTorch の学習およびエクスポートワークフローはオプショナルであり、通常の ONNX エクスポートに置き換えることができます(SpongeTorch なしでのエクスポートを参照してください)。
前提条件#
インストール#
Ultralytics のこのフォークをインストールし、コンパイルツールと cvflowbackend ライブラリを含む Ambarella CVflow SDK をセットアップしてから、その傍らに配布されている spongetorch ホイールをインストールします:
# 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 .
# Access and set up the Ambarella SDK compilation tools
# After the environment is ready, install the spongetorch library
pip install /path/to/spongetorch-*.whlAutoBackend は、SDK コンパイルツールの tv2 コマンド(tv2 -libpath cvflowbackend)を介して cvflowbackend を特定するため、コンパイル済みモデルで推論や検証を実行する前に、SDK コンパイルツールをインストールし、PATH に配置する必要があります。
SpongeKit設定ファイル#
SpongeTorch は、プルーニングパス(スパース性ターゲットや圧縮スケジュールを含む)を定義する SpongeKit 設定ファイル(プロトバフテキスト形式、.prototxt)によって駆動されます。Ambarella SDK のリリースから、設定のサンプルと一致するスキーマドキュメントを取得してください。学習、検証、およびデプロイメント間の整合性を維持するために、検証でモデルの再準備が必要な場合は常に学習設定を使用し、圧縮されたチェックポイントをエクスポートする際にも常に同じ設定を使用してください。
Amba引数#
train、val、exportモード全体でSpongeTorch統合を制御する2つの引数があります:
| 引数 | 型 | デフォルト | 説明 |
|---|---|---|---|
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 にトレースします。これにより、SDK コンパイルツールが期待する正確な形式のグラフが生成されます。
モデルメタデータの保持#
ONNX エクスポートでは、モデルタスク、クラス名、ストライド、および入力サイズが ONNX ファイルに埋め込まれ、一方 AmbaPB バックエンドはこの情報をコンパイル済みモデルの隣にある metadata.yaml サイドカーから読み取ります。SDK コンパイルツールがこのサイドカーを作成しない限り、コンパイル前に 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})コンパイル済みの*.ambapb.ckpt.onnxまたは*.ambapb.fastckpt.onnxファイルと同じディレクトリにmetadata.yamlを置いてください。
- チェックポイントには、SpongeTorch の圧縮状態が含まれている必要があります。
amba_configを設定して未圧縮のチェックポイントをエクスポートしようとすると、*「チェックポイントに SpongeTorch のプルーニング状態がありません... エクスポートの前に amba 学習からの圧縮済みチェックポイントを使用してください。」*というエラーが発生します。 - 設定は、学習時に使用された設定と一致している必要があります。異なる設定を使用すると、チェックポイントウェイトが正しくロードされない場合があります。
SDK ツールでのコンパイル#
SDK のコンパイルガイドに従って、SDK コンパイルツールを使用してターゲットチップセット用にエクスポートされた ONNX モデルをコンパイルします。ツールはグラフを CVflow AI エンジンにマッピングし(PTQ、スケジュール、およびメモリプランニングの適用)、ホスト検証用の AmbaPB チェックポイントを生成します。
PTQ は、キャリブレーション画像(SDK のコンパイルガイドで説明されているように準備)を使用して INT8 量子化を適用し、コンパイルツールは精度と実行時レイテンシのバランスを取ります。より多くのオペレーションを INT8 にマッピングするとレイテンシが低下しますが精度が低下する可能性があり、一方より多くのオペレーションを FP16 に維持すると高レイテンシで精度が維持されます。レイテンシ予算に必要な INT8 レベルで PTQ が精度ターゲットに到達できない場合、SpongeTorch を使用した QAT が意図された救済策であり、よりアグレッシブな INT8 量子化に耐えるようにモデルを学習させ、低レイテンシの動作点で精度を回復します。QAT はこの統合ではまだ利用できず、将来のリリースで予定されています。
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を設定してください。
Cavalry バイナリへの変換#
AmbaPB チェックポイントがホスト検証を通過したら、SDK のコンパイルガイドに従って、SDK コンパイルツールを使用してターゲットデバイス用の Cavalry バイナリに変換します。Cavalry バイナリは、ボード上の SDK ランタイムライブラリによって実行される形式です。
ボードにデプロイする#
Ambarella SDK ランタイムを使用して、Ambarella デバイスに Cavalry バイナリをロードします。前処理と後処理は、検出モデルがコンパイルされた対象と一致している必要があります(0–255 範囲内のレターボックス処理された RGB 入力、および出力に対する標準的な YOLO 検出デコード)。ランタイム API については、SDK のデプロイメントドキュメントを参照してください。
SpongeTorchを使用しないエクスポート#
SpongeTorch の学習時プルーニングが必要ない場合、標準の Ultralytics パイプラインでも SDK ツールがコンパイルできるモデルが生成されます:
yolo export model=yolo26n.pt format=onnx結果として得られた ONNX を SDK コンパイルツールでコンパイルします。これにより、それ自体で後学習量子化が実行されます。このパスは、学習時に spongetorch の依存関係がない、よりシンプルなワークフローの代わりに、実行時パフォーマンスと量子化された精度をいくらか犠牲にします。
実世界での用途#
Ambarella CVflow SoC上のUltralytics YOLOモデルは、エッジで常時稼働するビジョン処理を実現します:
- AIセキュリティカメラ:4K IPカメラ上で、3 W未満の電力予算内で人物および車両をリアルタイムに検出します。
- ドローンとロボティクス:CV5クラスのチップ上で、ナビゲーション、検査、配送向けのオンボード物体検出およびトラッキングを実行します。
- 産業および小売分析:エッジアプライアンス上で、マルチストリームの人数カウント、PPE検出、棚監視を実行します。
まとめ#
このガイドでは、Ambarella CVflow SoC に Ultralytics YOLO モデルをデプロイするための現在のワークフローについて説明しました。SpongeTorch を使用した圧縮対応学習(amba_config/amba_chipset)、圧縮されたチェックポイントの ONNX エクスポート、SDK ツールを使用した AmbaPB へのオフラインコンパイル、Ultralytics を介したホスト検証、および Ambarella SDK を使用したデバイス上デプロイメントのための Cavalry バイナリへの変換が含まれます。
その他のエッジAIターゲットについては、関連するHailo、Rockchip RKNN、Sony IMX500、Qualcomm QNN、DEEPX、Axeleraのガイドを参照してください。エクスポート形式の完全な一覧については、Export modeドキュメントと統合ページをご覧ください。
FAQ#
いいえ、
format="ambarella"ターゲットはありません。ONNX にエクスポートし(必要に応じてamba_configを介した SpongeTorch 圧縮を使用)、その後 Ambarella SDK コンパイルツールを使用してオフラインで ONNX モデルを AmbaPB にコンパイルします。SDK コンパイルツールでサポートされている CVflow ベースの SoC はすべてターゲットにでき、AI カメラ向けの CV72/CV75 ファミリーや、ドローンおよびロボット工学向けの CV5/CV52 が含まれます。
amba_chipset引数は SpongeTorch の最適化ターゲットを設定します。コンパイル時に一致するターゲットを個別に選択してください。受け入れられるチップセット文字列と可用性は、インストールされている SDK リリースによって異なります。SpongeTorch は、学習時の非構造化プルーニング(量子化対応学習は将来のリリースで予定されています)のために Ambarella の Ultralytics フォークに統合された、Ambarella の SpongeKit モデル圧縮ライブラリ(Caffe および TensorFlow のバリアントもあります)の PyTorch フレーバーです。これはオプショナルです。通常の Ultralytics ONNX エクスポートも SDK コンパイルツールでコンパイルでき、ツール自体が量子化を実行しますが、実行時パフォーマンスと量子化された精度がいくらか犠牲になります。
これらはプロプライエタリであり、PyPI にはありません。Ambarella Developer Zone に登録して SDK アクセスをリクエストしてください。SDK にはコンパイルツール(
cvflowbackendを含む)が含まれており、個別に配布されるspongetorchホイールがその傍らに同梱されています。Ambarella フォークをインストールした状態で
yolo val model=model.ambapb.ckpt.onnx data=your_data.yamlを実行します。AmbaPB バックエンドは CVflow AI エンジン上で実行される通りにコンパイル済みモデルを実行するため、報告される mAP にはすべてのコンパイラ量子化効果が含まれます。