Link to this sectionUltralytics 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へのアクセス権を取得してください。
Link to this sectionAmbarella CVflowとは?#
Ambarellaはカリフォルニア州サンタクララに拠点を置く半導体企業で、IPセキュリティカメラ、ドライブレコーダー、ドローン、ロボティクス、自動車システムなどで広く使用されている低消費電力のAIビジョンSoCで知られています。同社のチップは、専用のニューラルベクトル処理アーキテクチャ(オンチップAIアクセラレータ、またはNPU)である**CVflow®**を中心に構築されており、非常に低い消費電力で高い推論スループットを実現します。例えば、CV72Sは3W未満で4KセキュリティカメラのAIワークロードを処理します。PyTorchなどの標準フレームワークでトレーニングされたモデルは、デプロイ前にAmbarellaのオフラインツールチェーンを使用してCVflowのネイティブ形式にコンパイルされます。
現在のCVflow SoCファミリーと主な用途:
| SoCファミリー | 主な用途 |
|---|---|
| CV72 / CV75 | 4K AIセキュリティカメラ、スマートカメラ、産業用ビジョン |
| CV5 / CV52 | ドローン、アクションカメラ、ロボティクス、マルチカメラシステム |
| CV3-AD | 自動車用ADASおよび自動運転ドメインコントローラ |
| N1 | オンプレミス型生成AIおよびマルチストリームビデオ解析アプライアンス |
Link to this sectionYOLOをAmbarellaにデプロイする理由#
- ワット当たりのパフォーマンス:CVflow SoCは常時稼働のエッジAI向けに設計されており、カメラグレードの電力予算内でリアルタイムのオブジェクト検出を実行します。
- 圧縮対応トレーニング:SpongeTorchはトレーニング中にプルーニングおよび量子化を考慮した最適化を適用するため、モデルは精度を維持しながらNPUに適した状態を学習します。
- ビット精度でのホスト検証:コンパイルされたAmbaPBモデルは、ワークステーション上でUltralyticsの
predict/valを使用して、チップ上で実行される際と全く同じ結果を生成します。そのため、ハードウェアに移行する前に量子化されたmAPを測定できます。 - 統合カメラパイプライン:Ambarella SoCはAIエンジンとISPおよびビデオエンコーダを統合しているため、AIカメラ向けのシングルチップソリューションとなります。
Link to this sectionワークフローの概要#
パイプラインには4つのステージがあります:
- 圧縮対応トレーニング — SpongeKit設定(
amba_config)を使用してトレーニングを行い、SpongeTorchがトレーニング中にプルーニングや量子化を段階的に適用します。 - ONNXエクスポート — 同じ
amba_configを使用して圧縮されたチェックポイントをエクスポートし、ONNXグラフ内の圧縮構造を保持します。 - CVflowコンパイル — CVflowツールチェーンを使用して、ONNXモデルをAmbaPBアーティファクトにコンパイルします。
- 推論と検証 — コンパイルされた
*.ambapb.ckpt.onnxモデルを、AmbaPBバックエンドを介してUltralyticspredict/valで実行し、ボード上にデプロイします。
SpongeTorchによるトレーニング時の最適化が不要な場合は、SpongeTorchトレーニングおよびSpongeTorch対応エクスポートを単純なONNXエクスポートに置き換えることができます(SpongeTorchを使用しないエクスポートを参照)。
Link to this section前提条件#
Link to this sectionインストール#
このUltralyticsフォークをインストールした後、SDK配布物からAmbarellaツールチェーンのwheelをインストールします:
!!! 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-*.whlThe AmbaPB inference backend locates cvflowbackend through the CVflow toolchain's tv2 command (tv2 -libpath cvflowbackend), so the toolchain must be installed and on your PATH before running inference or validation with compiled models.
Link to this sectionSpongeKit設定ファイル#
SpongeTorchは、適用する圧縮処理(プルーニングのスパース性ターゲット、量子化設定、圧縮スケジュール)を定義するSpongeKit設定ファイル(protobufテキスト形式、.prototxt)によって制御されます。サンプル設定と対応するスキーマドキュメントは、Ambarella SDKリリースから入手してください。検証で未準備のモデルを準備する必要がある場合は常にトレーニング設定を使用し、圧縮されたチェックポイントをエクスポートする際も必ず同じ設定を使用してください。
Link to this sectionAmbaの引数#
以下の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')。 |
Link to this section圧縮対応トレーニング#
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を使用して短時間の圧縮ファインチューニングを実行してください。
Link to this section圧縮されたチェックポイントの検証#
同じ設定を使用して、コンパイル前に精度を検証します:
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設定を調整して再トレーニングしてください。
Link to this sectionONNXへのエクスポート#
トレーニング時に使用したものと同じ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コンパイラが期待する形式のグラフを生成します。
Link to this sectionモデルメタデータの保持#
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."*というエラーが発生します。 - 設定はトレーニング時に使用したものと一致している必要があります。一致しない場合、重みのロードに失敗します。
Link to this sectionCVflowツールチェーンでコンパイルする#
SDKのコンパイルガイドに従い、SDKに含まれるCVflowコンパイラを使用して、ターゲットチップセット用にエクスポートされたONNXモデルをコンパイルします。コンパイラはグラフをCVflow AIエンジンにマッピングし(量子化、スケジューリング、メモリ計画)、デプロイ可能なAmbaPBアーティファクトを生成します。
Ultralyticsでコンパイル済みモデルを認識させるには、ファイル名の末尾が.ambapb.ckpt.onnxまたは.ambapb.fastckpt.onnxである必要があります。
Link to this sectionコンパイル済みモデルで推論を実行する#
コンパイルされた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を設定してください。
Link to this sectionボードへのデプロイ#
Ambarella SDKランタイムを使用して、Ambarellaデバイスにコンパイル済みモデルをロードします。前処理と後処理は、モデルがコンパイルされた内容と一致している必要があります。入力は0–255範囲のレターボックス処理済みRGB(Ultralytics AmbaPBバックエンドはコンパイルされたモデルに0–255のRGBを入力します)、出力は標準のYOLO検出デコードとなります。ランタイムAPIについてはSDKのデプロイガイドを参照してください。
Link to this sectionSpongeTorchを使用しないエクスポート#
SpongeTorchのトレーニング時プルーニングや量子化対応最適化が不要な場合は、標準のUltralyticsパイプラインでもCVflow互換のモデルを作成できます:
yolo export model=yolo26n.pt format=onnx生成されたONNXをCVflowツールチェーンでコンパイルします。このツールチェーンはそれ自体で学習後の量子化を実行します。この手法を選択すると、トレーニング時のspongetorch依存関係がないシンプルなワークフローになりますが、NPUパフォーマンスと量子化精度が低下する場合があります。
Link to this section実際のアプリケーション#
Ambarella CVflow SoC上のUltralytics YOLOモデルは、エッジでの常時稼働ビジョンを実現します:
- AIセキュリティカメラ:3W未満の消費電力で、4K IPカメラ上で人物や車両をリアルタイム検出。
- ドローンおよびロボティクス:CV5クラスのチップ上で、ナビゲーション、検査、配送のためのオンボードオブジェクト検出と追跡を実行。
- 自動車:CV3-ADドメインコントローラ上で、歩行者や車両検出などのADAS認識ワークロードを実行。
- 産業および小売解析:エッジアプライアンス上で、マルチストリームの人数カウント、PPE検出、棚監視などを実行。
Link to this section要約#
このプレビューガイドでは、Ultralytics YOLOモデルをAmbarella CVflow SoCにデプロイするための現在のワークフローについて説明しました。これには、SpongeTorchを使用した圧縮対応トレーニング(amba_config / amba_chipset)、圧縮チェックポイントのONNXエクスポート、CVflowツールチェーンによるAmbaPBへのオフラインコンパイル、およびボードデプロイ前のUltralyticsを通じたコンパイル済みモデルのビット精度検証が含まれます。
その他のエッジAIターゲットについては、関連するHailo、Rockchip RKNN、Sony IMX500、Qualcomm QNN、DEEPX、Axeleraの各ガイドを参照してください。エクスポート形式の完全なリストについては、Exportモードのドキュメントおよびインテグレーションページを参照してください。
Link to this sectionよくある質問 (FAQ)#
Link to this sectionYOLOモデルをmodel.export()で直接Ambarella形式にエクスポートできますか?#
いいえ。format="ambarella"ターゲットはありません。ONNXにエクスポートしてから(amba_configを介してSpongeTorch圧縮を任意で使用)、SDKに含まれるAmbarellaのCVflowツールチェーンを使用してオフラインでAmbaPBにコンパイルしてください。
Link to this sectionどのAmbarellaチップでUltralytics YOLOモデルを実行できますか?#
お使いのCVflowツールチェーンでサポートされているすべてのCVflowベースSoCがターゲットとなります。これにはAIカメラ用のCV72/CV75ファミリー、ドローン・ロボティクス用のCV5/CV52、自動車用のCV3-ADなどが含まれます。amba_chipset引数はSpongeTorchの最適化ターゲットを設定します。コンパイル時は、対応するターゲットを別途選択してください。利用可能なチップセット文字列と可用性は、インストールされたSDKリリースによって異なります。
Link to this sectionSpongeTorchとは何ですか?それが必要ですか?#
SpongeTorchはAmbarellaのモデル圧縮ツールキットであり、プルーニングおよび量子化対応トレーニングのためにUltralyticsのAmbarellaフォークに統合されています。これはオプションです。通常のUltralytics ONNXエクスポートを使用して、学習後の量子化を適用しつつCVflowツールチェーンでコンパイルすることも可能ですが、NPUのパフォーマンスと量子化精度に影響が出る場合があります。
Link to this sectionAmbarella SDK、SpongeTorch、およびCVflowツールチェーンはどこで入手できますか?#
これらは独自技術であり、PyPIでは公開されていません。Ambarella Developer Zoneに登録してSDKへのアクセスを申請してください。spongetorchおよびcvflowbackendのwheelとCVflowコンパイラはSDK配布物に含まれています。
Link to this sectionデプロイ前にコンパイル済みモデルの精度を確認するにはどうすればよいですか?#
Ambarellaフォークをインストールした状態でyolo val model=model.ambapb.ckpt.onnx data=your_data.yamlを実行してください。AmbaPBバックエンドはコンパイルされたモデルをCVflow AIエンジン上で実行されるのと全く同じビット精度で実行するため、報告されるmAPにはコンパイラによる量子化の影響がすべて含まれます。