YOLO Vision 2026:

Esportazione Ambarella CVflow per modelli Ultralytics YOLO#

Guida in anteprima — non ancora verificata dal fornitore

Questa guida è un'anteprima preliminare e non è ancora completa o verificata da Ambarella. Comandi, dettagli di compatibilità e passaggi del flusso di lavoro potrebbero cambiare man mano che i feedback del fornitore diventano disponibili. Al momento non esiste una destinazione di esportazione format="ambarella"; il flusso di lavoro utilizza l'esportazione ONNX standard (format="onnx") combinata con gli argomenti amba_config/amba_chipset, quindi compila offline il modello ONNX risultante nel formato distribuibile AmbaPB utilizzando la toolchain CVflow di Ambarella.

La distribuzione dei modelli Ultralytics YOLO sui SoC Ambarella richiede un formato di modello ottimizzato per il motore di IA CVflow®. Questo fork di Ultralytics integra il toolkit di compressione SpongeTorch di Ambarella direttamente nella pipeline di addestramento, validazione ed esportazione, consentendoti di produrre modelli potati e ottimizzati per la quantizzazione che vengono eseguiti in modo efficiente sull'hardware Ambarella. Questa guida descrive il flusso di lavoro corrente per il rilevamento di oggetti: addestramento consapevole della compressione, esportazione ONNX, compilazione con la toolchain CVflow e inferenza con il modello AmbaPB compilato.

Nota

Questo flusso di lavoro richiede componenti proprietari della toolchain Ambarella (spongetorch, il compilatore CVflow e cvflowbackend) che non sono disponibili su PyPI. Registrati sulla Ambarella Developer Zone per ottenere l'accesso all'SDK tramite la piattaforma per sviluppatori Cooper™.

Che cos'è Ambarella CVflow?#

Ambarella è un'azienda di semiconduttori con sede a Santa Clara nota per i suoi SoC di visione IA a basso consumo, ampiamente utilizzati in telecamere di sicurezza IP, dash cam, droni, robotica e sistemi automobilistici. I suoi chip sono basati su CVflow®, un'architettura di elaborazione vettoriale neurale dedicata (l'acceleratore IA on-chip o NPU) che offre una velocità di throughput di inferenza elevata a consumi molto ridotti — il CV72S esegue carichi di lavoro di IA per telecamere di sicurezza 4K a meno di 3 W. I modelli addestrati in framework standard come PyTorch vengono compilati nel formato nativo di CVflow con la toolchain offline di Ambarella prima della distribuzione.

Famiglie di SoC CVflow attuali e le loro applicazioni tipiche:

Famiglia SoCApplicazioni tipiche
CV72 / CV75Telecamere di sicurezza 4K AI, smart camera, visione industriale
CV5 / CV52Droni, action cam, robotica, sistemi multi-camera
CV3-ADADAS automobilistici e controller di dominio per la guida autonoma
N1Apparecchiature on-premise per AI generativa e analisi video multi-flusso

Perché distribuire YOLO su Ambarella?#

  • Prestazioni per watt: i SoC CVflow sono progettati per l'IA edge sempre attiva, eseguendo il rilevamento di oggetti in tempo reale entro budget energetici tipici delle telecamere.
  • Addestramento consapevole della compressione: SpongeTorch applica l'ottimizzazione basata su pruning e quantizzazione durante l'addestramento, in modo che il modello impari a mantenere l'accuratezza pur diventando compatibile con la NPU.
  • Validazione host bit-exact: il modello AmbaPB compilato viene eseguito tramite Ultralytics predict/val sulla tua workstation esattamente come verrà eseguito sul chip, permettendoti di misurare l'mAP quantizzato prima di toccare l'hardware.
  • Pipeline telecamera integrata: i SoC Ambarella combinano il motore AI con un ISP e codificatori video, rendendoli una soluzione a chip singolo per telecamere AI.

Panoramica del flusso di lavoro#

La pipeline ha quattro fasi:

  1. Addestramento consapevole della compressione — addestra con una configurazione SpongeKit (amba_config) in modo che SpongeTorch applichi pruning e quantizzazione in modo progressivo durante l'addestramento.
  2. Esportazione ONNX — esporta il checkpoint compresso con lo stesso amba_config, preservando la struttura di compressione nel grafo ONNX.
  3. Compilazione CVflow — compila il modello ONNX in un artefatto AmbaPB con la toolchain CVflow.
  4. Inferenza e validazione — esegui il modello compilato *.ambapb.ckpt.onnx tramite Ultralytics predict/val utilizzando il backend AmbaPB, quindi effettua il deployment sulla scheda.

L'addestramento con SpongeTorch e l'esportazione con consapevolezza di SpongeTorch possono essere sostituiti da una semplice esportazione ONNX se non hai bisogno delle ottimizzazioni in fase di addestramento di SpongeTorch (vedi Esportazione senza SpongeTorch).

Prerequisiti#

Installazione#

Installa questo fork di Ultralytics, quindi installa le wheel della toolchain Ambarella dalla distribuzione dell'SDK:

!!! Tip "Installazione"

# 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-*.whl

Il backend di inferenza AmbaPB individua cvflowbackend tramite il comando tv2 della toolchain CVflow (tv2 -libpath cvflowbackend), pertanto la toolchain deve essere installata e presente nel tuo PATH prima di eseguire l'inferenza o la validazione con i modelli compilati.

File di configurazione SpongeKit#

SpongeTorch è guidato da un file di configurazione SpongeKit (formato protobuf-text, .prototxt) che definisce i passaggi di compressione da applicare: obiettivi di sparsità del pruning, impostazioni di quantizzazione e programmazione della compressione. Ottieni configurazioni di esempio e la documentazione dello schema corrispondente dalla tua release dell'SDK Ambarella. Usa la configurazione di addestramento ogni volta che la validazione deve preparare un modello non preparato e usa sempre la stessa configurazione quando esporti un checkpoint compresso.

Argomenti Amba#

Due argomenti controllano l'integrazione di SpongeTorch nelle modalità train, val e export:

ArgomentoTipoPredefinitoDescrizione
amba_configstrNonePercorso del file di configurazione SpongeKit passato a spongetorch.prepare(). Abilita l'addestramento consapevole della compressione e l'esportazione consapevole di SpongeTorch.
amba_chipsetstrNoneNome del chipset di destinazione passato a spongetorch.set_target_chipset(), ad esempio CV72.

Il fork aggiunge anche un argomento generale di esportazione:

ArgomentoTipoPredefinitoDescrizione
export_filestrNonePercorso/nome di output personalizzato dell'esportazione, ad esempio '/tmp/model.onnx' o 'model.onnx'.

Addestramento consapevole della compressione#

Addestra (o perfeziona) il tuo modello con la compressione SpongeTorch abilitata:

Utilizzo
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.train(
    data="coco8.yaml",
    epochs=100,
    amba_config="config.prototxt",
    amba_chipset="CV72",
)

Quando amba_config è impostato, il trainer racchiude il modello e l'ottimizzatore con spongetorch.prepare() durante la configurazione. La compressione viene applicata progressivamente secondo una pianificazione a step, in modo che la rete impari a rimanere accurata pur diventando sparsa e favorevole alla quantizzazione. Il checkpoint addestrato memorizza lo stato sparso di SpongeTorch (tensor _orig/_mask), richiesto successivamente dalla fase di esportazione. Il file di configurazione viene copiato nella directory di esecuzione come amba_config.prototxt per garantire la riproducibilità.

Gating del checkpoint

best.pt e last.pt non vengono intenzionalmente salvati finché la pianificazione della compressione di SpongeTorch non supera il suo end_step; un checkpoint parzialmente compresso non sarebbe utilizzabile. Assicurati che epochs sia sufficientemente lungo da permettere il completamento della pianificazione nella tua configurazione; il log segnala l'inizio del salvataggio del checkpoint. Se l'addestramento termina prima del completamento della pianificazione, l'epoca finale viene comunque salvata con un avviso, ma un tale checkpoint non dovrebbe essere distribuito.

Perfezionamento invece dell'addestramento da zero

Per ottenere la massima accuratezza, prima addestra il modello normalmente (o parti da un checkpoint pre-addestrato), quindi esegui un fine-tuning di compressione più breve con amba_config sui pesi addestrati.

Validazione del checkpoint compresso#

Valida l'accuratezza prima della compilazione, usando la stessa configurazione:

Utilizzo
yolo val model=runs/detect/train/weights/best.pt data=coco8.yaml \
  amba_config=config.prototxt amba_chipset=CV72

Il validatore riapplica spongetorch.prepare() quando necessario e disabilita la fusione Conv+BN in modo da preservare la struttura di compressione. Confronta l'mAP rispetto alla tua baseline non compressa; se il calo di accuratezza è eccessivo, regola la configurazione SpongeKit ed esegui nuovamente l'addestramento.

Esportazione in ONNX#

Esporta il checkpoint compresso con lo stesso amba_config utilizzato durante l'addestramento:

Utilizzo
from ultralytics import YOLO

model = YOLO("runs/detect/train/weights/best.pt")
model.export(
    format="onnx",
    amba_config="config.prototxt",
    amba_chipset="CV72",
)

L'esportatore ricostruisce il modello, riapplica spongetorch.prepare() con la tua configurazione, ricarica i pesi del checkpoint sparso nella struttura preparata ed esegue il tracing in ONNX con la fusione Conv+BN disabilitata, producendo un grafo nella forma esatta attesa dal compilatore CVflow.

Preservazione dei metadati del modello#

L'esportazione ONNX incorpora il task del modello, i nomi delle classi, lo stride e la dimensione di input nel file ONNX, mentre il backend AmbaPB legge queste informazioni da un file sidecar metadata.yaml accanto al modello compilato. A meno che il tuo compilatore CVflow non crei questo sidecar, estrailo dal modello ONNX prima della compilazione:

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})

Mantieni metadata.yaml nella stessa directory del file compilato *.ambapb.ckpt.onnx o *.ambapb.fastckpt.onnx.

Avviso
  • Il checkpoint deve contenere lo stato di compressione di SpongeTorch. L'esportazione di un checkpoint normale con amba_config impostato genera l'errore: "Checkpoint has no SpongeTorch pruning state... Use a compressed checkpoint from amba training before export."
  • La configurazione deve corrispondere a quella utilizzata durante l'addestramento, altrimenti il ricaricamento dei pesi fallisce.

Compilazione con la toolchain CVflow#

Compila il modello ONNX esportato per il tuo chipset di destinazione utilizzando il compilatore CVflow dall'SDK, seguendo la guida alla compilazione dell'SDK. Il compilatore mappa il grafo sul motore AI CVflow (quantizzazione, pianificazione, pianificazione della memoria) e produce l'artefatto distribuibile AmbaPB.

Nota

Affinché Ultralytics riconosca il modello compilato, il nome del file deve terminare con .ambapb.ckpt.onnx o .ambapb.fastckpt.onnx.

Esecuzione dell'inferenza con il modello compilato#

Il modello AmbaPB compilato si carica direttamente tramite l'API di Ultralytics: AutoBackend rileva il suffisso .ambapb e instrada l'inferenza attraverso cvflowbackend, eseguendo il modello con precisione bit-exact esattamente come girerà sul motore di IA:

Utilizzo
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")

Questo è il controllo finale di accuratezza prima della distribuzione sull'hardware, inclusi tutti gli effetti di quantizzazione del compilatore. Se un file metadata.yaml si trova accanto al modello compilato, il backend legge da esso i nomi delle classi, lo stride e le informazioni sul task. Per impostazione predefinita, il backend utilizza la modalità di inferenza CVflow acinf; imposta la variabile d'ambiente ULTRALYTICS_AMBAPB_DEBUG=1 per registrare i dettagli di input/output a fini di debug.

Distribuzione sulla scheda#

Carica il modello compilato sul tuo dispositivo Ambarella utilizzando il runtime dell'SDK Ambarella. La pre-elaborazione e la post-elaborazione devono corrispondere a quelle per cui il modello di rilevamento è stato compilato: input RGB letterboxed nell'intervallo 0–255 (il backend Ultralytics AmbaPB fornisce al modello compilato RGB 0–255) e decodifica di rilevamento YOLO standard sugli output. Fai riferimento alla documentazione di deployment dell'SDK per le API di runtime.

Esportazione senza SpongeTorch#

Se non hai bisogno delle ottimizzazioni di potatura e quantizzazione in fase di addestramento di SpongeTorch, la pipeline standard di Ultralytics produce anche un modello compilabile da CVflow:

Utilizzo
yolo export model=yolo26n.pt format=onnx

Compila il file ONNX risultante con la toolchain CVflow, che esegue autonomamente la quantizzazione post-addestramento. Questo percorso sacrifica alcune prestazioni della NPU e l'accuratezza quantizzata in cambio di un flusso di lavoro più semplice senza alcuna dipendenza da spongetorch in fase di addestramento.

Applicazioni nel mondo reale#

I modelli Ultralytics YOLO su SoC Ambarella CVflow alimentano la visione sempre attiva all'edge:

  • Telecamere di sicurezza AI: rilevamento di persone e veicoli in tempo reale su telecamere IP 4K entro un budget energetico inferiore a 3 W.
  • Droni e robotica: rilevamento e tracciamento di oggetti a bordo per navigazione, ispezione e consegna su chip di classe CV5.
  • Automobilistico: carichi di lavoro di percezione ADAS come il rilevamento di pedoni e veicoli su controller di dominio CV3-AD.
  • Analisi industriale e al dettaglio: conteggio persone multi-flusso, rilevamento DPI e monitoraggio degli scaffali su apparecchiature edge.

Questa guida preliminare ha illustrato il flusso di lavoro attuale per distribuire i modelli Ultralytics YOLO sui SoC Ambarella CVflow: addestramento consapevole della compressione con SpongeTorch (amba_config/amba_chipset), esportazione ONNX del checkpoint compresso, compilazione offline in AmbaPB con la toolchain CVflow e validazione bit-exact del modello compilato tramite Ultralytics prima della distribuzione sulla scheda.

Per altri target di IA edge, consulta le guide correlate su Hailo, Rockchip RKNN, Sony IMX500, Qualcomm QNN, DEEPX e Axelera. Per l'elenco completo dei formati di esportazione, visita la documentazione della modalità di esportazione e la pagina delle integrazioni.

FAQ#

  • No. Non esiste una destinazione format="ambarella". Esporta in ONNX (facoltativamente con la compressione SpongeTorch tramite amba_config), quindi compila il modello ONNX in AmbaPB offline utilizzando la toolchain CVflow di Ambarella dall'SDK.

  • È possibile prendere di mira qualsiasi SoC basato su CVflow supportato dalla propria toolchain CVflow, incluse le famiglie CV72/CV75 per telecamere di IA, CV5/CV52 per droni e robotica, e CV3-AD per l'automotive. L'argomento amba_chipset configura l'obiettivo di ottimizzazione di SpongeTorch; seleziona separatamente il target corrispondente durante la compilazione. Le stringhe di chipset accettate e la disponibilità dipendono dalla versione dell'SDK installata.

  • SpongeTorch è il toolkit di compressione dei modelli di Ambarella, integrato nel fork Ambarella di Ultralytics per la potatura e l'addestramento consapevole della quantizzazione. È facoltativo: un'esportazione ONNX standard di Ultralytics può anche essere compilata con la toolchain CVflow utilizzando la quantizzazione post-addestramento, a un certo costo in termini di prestazioni NPU e precisione quantizzata.

  • Sono proprietari e non si trovano su PyPI. Registrati sulla Ambarella Developer Zone per richiedere l'accesso all'SDK; le wheel spongetorch e cvflowbackend e il compilatore CVflow sono inclusi nella distribuzione dell'SDK.

  • Esegui yolo val model=model.ambapb.ckpt.onnx data=your_data.yaml con il fork Ambarella installato. Il backend AmbaPB esegue il modello compilato con precisione bit-exact esattamente come gira sul motore di IA CVflow, quindi l'mAP riportato include tutti gli effetti di quantizzazione del compilatore.

Collaboratori

Commenti