Exportación a Ambarella CVflow para modelos Ultralytics YOLO#
Esta guía es una vista previa temprana y aún no está completa ni verificada por Ambarella. Los comandos, los detalles de compatibilidad y los pasos del flujo de trabajo pueden cambiar a medida que se disponga de los comentarios del proveedor. Actualmente no existe un destino de exportación format="ambarella"; el flujo de trabajo utiliza la exportación estándar de ONNX (format="onnx") combinada con los argumentos amba_config/amba_chipset, y luego compila el modelo ONNX resultante en el formato desplegable AmbaPB sin conexión con la cadena de herramientas CVflow de Ambarella.
Implementar modelos de Ultralytics YOLO en SoC de Ambarella requiere un formato de modelo optimizado para el motor de IA CVflow®. Esta bifurcación de Ultralytics integra el kit de herramientas de compresión SpongeTorch de Ambarella directamente en el canal de entrenamiento, validación y exportación, para que puedas producir modelos podados y optimizados por cuantización que se ejecuten de manera eficiente en el hardware de Ambarella. Esta guía describe el flujo de trabajo actual de detección de objetos: entrenamiento consciente de la compresión, exportación a ONNX, compilación con la cadena de herramientas CVflow e inferencia con el modelo AmbaPB compilado.
Este flujo de trabajo requiere componentes propietarios de la cadena de herramientas de Ambarella (spongetorch, el compilador CVflow y cvflowbackend) que no están disponibles en PyPI. Regístrate en la Zona de Desarrolladores de Ambarella para obtener acceso al SDK a través de la Plataforma de Desarrolladores Cooper™.
¿Qué es Ambarella CVflow?#
Ambarella es una empresa de semiconductores con sede en Santa Clara conocida por sus SoC de visión de IA de bajo consumo, ampliamente utilizados en cámaras de seguridad IP, cámaras de tablero, drones, robótica y sistemas de automoción. Sus chips están construidos alrededor de CVflow®, una arquitectura de procesamiento vectorial neuronal dedicada (el acelerador de IA en el chip o NPU) que ofrece un alto rendimiento de inferencia con muy poca energía —el CV72S ejecuta cargas de trabajo de IA para cámaras de seguridad 4K a menos de 3 W—. Los modelos entrenados en marcos estándar como PyTorch se compilan al formato nativo de CVflow con la cadena de herramientas fuera de línea de Ambarella antes de su implementación.
Familias actuales de SoCs CVflow y sus aplicaciones típicas:
| Familia de SoC | Aplicaciones típicas |
|---|---|
| CV72 / CV75 | Cámaras de seguridad 4K con IA, cámaras inteligentes, visión industrial |
| CV5 / CV52 | Drones, cámaras de acción, robótica, sistemas multicámara |
| CV3-AD | ADAS automotriz y controladores de dominio para conducción autónoma |
| N1 | IA generativa local y dispositivos de análisis de video de múltiples flujos |
¿Por qué desplegar YOLO en Ambarella?#
- Rendimiento por vatio: los SoC CVflow están diseñados para IA de borde siempre activa, ejecutando detección de objetos en tiempo real dentro de los presupuestos de energía de grado de cámara.
- Entrenamiento consciente de la compresión: SpongeTorch aplica optimización consciente de la poda y la cuantización durante el entrenamiento, por lo que el modelo aprende a mantener la precisión mientras se vuelve compatible con la NPU.
- Validación de host bit a bit exacta: el modelo AmbaPB compilado se ejecuta a través de
predict/valde Ultralytics en tu estación de trabajo exactamente como se ejecutará en el chip, para que puedas medir el mAP cuantizado antes de tocar el hardware. - Flujo de trabajo de cámara integrado: Los SoCs Ambarella combinan el motor de IA con un ISP y codificadores de video, convirtiéndolos en una solución de chip único para cámaras con IA.
Resumen del flujo de trabajo#
El pipeline tiene cuatro etapas:
- Entrenamiento consciente de la compresión: entrena con una configuración de SpongeKit (
amba_config) para que SpongeTorch aplique la poda/cuantización de forma progresiva durante el entrenamiento. - Exportación a ONNX: exporta el punto de control comprimido con el mismo
amba_config, preservando la estructura de compresión en el gráfico de ONNX. - Compilación CVflow — compila el modelo ONNX a un artefacto AmbaPB con la cadena de herramientas CVflow.
- Inferencia y validación: ejecuta el modelo
*.ambapb.ckpt.onnxcompilado a través depredict/valde Ultralytics mediante el backend de AmbaPB, y luego despliega en la placa.
El entrenamiento de SpongeTorch y la exportación compatible con SpongeTorch se pueden reemplazar por una exportación a ONNX normal si no necesitas las optimizaciones en el tiempo de entrenamiento de SpongeTorch (consulta Exportar sin SpongeTorch).
Requisitos previos#
Instalación#
Instala esta bifurcación de Ultralytics y, a continuación, instala los archivos wheel de la cadena de herramientas de Ambarella desde la distribución del SDK:
!!! Tip "Instalación"
# 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-*.whlEl backend de inferencia AmbaPB localiza cvflowbackend a través del comando tv2 (tv2 -libpath cvflowbackend) de la cadena de herramientas CVflow, por lo que la cadena de herramientas debe estar instalada y en tu PATH antes de ejecutar la inferencia o validación con modelos compilados.
Archivo de configuración de SpongeKit#
SpongeTorch se controla mediante un archivo de configuración de SpongeKit (formato de texto protobuf, .prototxt) que define los pasos de compresión a aplicar: objetivos de escasez de poda, ajustes de cuantización y el programa de compresión. Obtiene configuraciones de ejemplo y la documentación de esquema correspondiente de tu lanzamiento del SDK de Ambarella. Utiliza la configuración de entrenamiento siempre que la validación deba preparar un modelo no preparado, y utiliza siempre la misma configuración al exportar un punto de control comprimido.
Argumentos Amba#
Dos argumentos controlan la integración de SpongeTorch en los modos train, val y export:
| Argumento | Tipo | Predeterminado | Descripción |
|---|---|---|---|
amba_config | str | None | Ruta a la configuración de SpongeKit pasada a spongetorch.prepare(). Habilita el entrenamiento consciente de la compresión y la exportación compatible con SpongeTorch. |
amba_chipset | str | None | Nombre del conjunto de chips de destino pasado a spongetorch.set_target_chipset(), p. ej., CV72. |
La bifurcación también añade un argumento general de exportación:
| Argumento | Tipo | Predeterminado | Descripción |
|---|---|---|---|
export_file | str | None | Ruta/nombre de salida de exportación personalizada, p. ej., '/tmp/model.onnx' u 'model.onnx'. |
Entrenamiento con compresión#
Entrena (o ajusta) tu modelo con la compresión SpongeTorch habilitada:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
model.train(
data="coco8.yaml",
epochs=100,
amba_config="config.prototxt",
amba_chipset="CV72",
)Cuando amba_config está configurado, el entrenador envuelve el modelo y el optimizador con spongetorch.prepare() en la configuración. La compresión se aplica progresivamente en un programa de pasos, por lo que la red aprende a mantenerse precisa mientras se vuelve dispersa y amigable con la cuantización. El punto de control entrenado almacena el estado disperso de SpongeTorch (tensores _orig/_mask), que el paso de exportación requiere más adelante. El archivo de configuración se copia en el directorio de ejecución como amba_config.prototxt para su reproducibilidad.
best.pt y last.pt intencionadamente no se guardan hasta que el programa de compresión de SpongeTorch supera su end_step; un punto de control parcialmente comprimido no sería utilizable. Asegúrate de que epochs sea lo suficientemente largo para que se complete el programa en tu configuración; el registro informa cuándo comienza el guardado de puntos de control. Si el entrenamiento finaliza antes de que se complete el programa, la época final se guarda de todos modos con una advertencia, pero dicho punto de control no debe implementarse.
Para obtener la mejor precisión, entrena primero tu modelo normalmente (o comienza desde un punto de control preentrenado) y luego ejecuta un ajuste fino de compresión más corto con amba_config en los pesos entrenados.
Validación del punto de control comprimido#
Valida la precisión antes de compilar, utilizando la misma configuración:
yolo val model=runs/detect/train/weights/best.pt data=coco8.yaml \
amba_config=config.prototxt amba_chipset=CV72El validador vuelve a aplicar spongetorch.prepare() cuando es necesario y desactiva la fusión de Conv+BN para que se preserve la estructura de compresión. Compara el mAP con tu línea base sin comprimir; si la caída de precisión es demasiado grande, ajusta la configuración de SpongeKit y vuelve a entrenar.
Exportar a ONNX#
Exporta el punto de control comprimido con el mismo amba_config utilizado en el entrenamiento:
from ultralytics import YOLO
model = YOLO("runs/detect/train/weights/best.pt")
model.export(
format="onnx",
amba_config="config.prototxt",
amba_chipset="CV72",
)El exportador reconstruye el modelo, vuelve a aplicar spongetorch.prepare() con tu configuración, vuelve a cargar los pesos del punto de control disperso en la estructura preparada y realiza un seguimiento a ONNX con la fusión Conv+BN deshabilitada, produciendo un gráfico en la forma exacta que espera el compilador CVflow.
Preservar metadatos del modelo#
La exportación a ONNX incrusta la tarea del modelo, los nombres de las clases, el paso (stride) y el tamaño de entrada en el archivo ONNX, mientras que el backend de AmbaPB lee esta información de un archivo adjunto (metadata.yaml) junto al modelo compilado. A menos que tu compilador CVflow cree este archivo adjunto, extráelo del modelo ONNX antes de la compilación:
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})Mantén metadata.yaml en el mismo directorio que el archivo *.ambapb.ckpt.onnx o *.ambapb.fastckpt.onnx compilado.
- El punto de control debe contener el estado de compresión de SpongeTorch. Exportar un punto de control plano con
amba_configconfigurado genera: "Checkpoint has no SpongeTorch pruning state... Use a compressed checkpoint from amba training before export." - La configuración debe coincidir con la utilizada durante el entrenamiento, o la recarga de pesos fallará.
Compilación con la cadena de herramientas CVflow#
Compila el modelo ONNX exportado para tu chipset de destino utilizando el compilador CVflow del SDK, siguiendo la guía de compilación del SDK. El compilador mapea el gráfico en el motor de IA CVflow (cuantización, programación, planificación de memoria) y produce el artefacto AmbaPB desplegable.
Para que Ultralytics reconozca el modelo compilado, su nombre de archivo debe terminar con .ambapb.ckpt.onnx o .ambapb.fastckpt.onnx.
Ejecutar inferencia con el modelo compilado#
El modelo AmbaPB compilado se carga directamente a través de la API de Ultralytics: AutoBackend detecta el sufijo .ambapb y enruta la inferencia a través de cvflowbackend, ejecutando el modelo de manera exacta bit por bit como se ejecutará en el motor de IA:
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")Esta es la comprobación de precisión final antes de la implementación del hardware, incluidos todos los efectos de cuantización del compilador. Si hay un archivo metadata.yaml junto al modelo compilado, el backend lee de él los nombres de las clases, el paso (stride) y la información de la tarea. El backend utiliza el modo de inferencia CVflow acinf de forma predeterminada; configura la variable de entorno ULTRALYTICS_AMBAPB_DEBUG=1 para registrar los detalles de entrada/salida para la depuración.
Desplegar en la placa#
Carga el modelo compilado en tu dispositivo Ambarella utilizando el tiempo de ejecución del SDK de Ambarella. El preprocesamiento y el posprocesamiento deben coincidir con los parámetros para los que se compiló el modelo de detección: entrada RGB con letterbox en el rango 0–255 (el backend de Ultralytics AmbaPB alimenta al modelo compilado con RGB 0–255), y decodificación de detección YOLO estándar en las salidas. Consulta la documentación de implementación del SDK para ver las API de tiempo de ejecución.
Exportación sin SpongeTorch#
Si no necesitas las optimizaciones de poda y cuantización durante el entrenamiento de SpongeTorch, el flujo de trabajo estándar de Ultralytics también produce un modelo compilable por CVflow:
yolo export model=yolo26n.pt format=onnxCompila el ONNX resultante con la cadena de herramientas CVflow, que realiza la cuantización posterior al entrenamiento por sí misma. Esta ruta sacrifica algo de rendimiento de la NPU y precisión cuantizada a cambio de un flujo de trabajo más sencillo sin dependencia de spongetorch en el momento del entrenamiento.
Aplicaciones en el mundo real#
Los modelos Ultralytics YOLO en SoCs Ambarella CVflow potencian la visión siempre activa en el borde:
- Cámaras de seguridad con IA: detección de personas y vehículos en tiempo real en cámaras IP 4K con un presupuesto de energía inferior a 3 W.
- Drones y robótica: detección y seguimiento de objetos a bordo para navegación, inspección y entrega en chips de la clase CV5.
- Automotriz: cargas de trabajo de percepción ADAS como la detección de peatones y vehículos en controladores de dominio CV3-AD.
- Análisis industrial y minorista: conteo de personas, detección de EPIs y monitoreo de estantes en múltiples flujos en dispositivos de borde.
Resumen#
Esta guía de vista previa describió el flujo de trabajo actual para implementar modelos de Ultralytics YOLO en SoC Ambarella CVflow: entrenamiento consciente de la compresión con SpongeTorch (amba_config/amba_chipset), exportación a ONNX del punto de control comprimido, compilación sin conexión a AmbaPB con la cadena de herramientas CVflow y validación exacta bit por bit del modelo compilado a través de Ultralytics antes de la implementación en placa.
Para otros destinos de IA de borde, consulta las guías relacionadas de Hailo, Rockchip RKNN, Sony IMX500, Qualcomm QNN, DEEPX y Axelera. Para obtener la lista completa de formatos de exportación, visita la documentación del modo de exportación y la página de integraciones.
FAQ#
No. No hay ningún destino
format="ambarella". Exporta a ONNX (opcionalmente con compresión SpongeTorch medianteamba_config), luego compila el modelo ONNX a AmbaPB sin conexión con la cadena de herramientas CVflow de Ambarella desde el SDK.Cualquier SoC basado en CVflow compatible con tu cadena de herramientas CVflow puede ser un objetivo, incluidas las familias CV72/CV75 para cámaras de IA, CV5/CV52 para drones y robótica, y CV3-AD para automoción. El argumento
amba_chipsetconfigura el objetivo de optimización de SpongeTorch; selecciona el objetivo correspondiente por separado al compilar. Las cadenas de chipset aceptadas y la disponibilidad dependen de la versión del SDK instalada.SpongeTorch es el kit de herramientas de compresión de modelos de Ambarella, integrado en la bifurcación de Ambarella de Ultralytics para la poda y el entrenamiento consciente de la cuantización. Es opcional: una exportación ONNX simple de Ultralytics también puede compilarse con la cadena de herramientas CVflow mediante cuantización posterior al entrenamiento, con cierto costo en el rendimiento de la NPU y la precisión cuantizada.
Son propietarios y no están en PyPI. Regístrate en la Zona de Desarrolladores de Ambarella para solicitar acceso al SDK; los archivos wheel
spongetorchycvflowbackendy el compilador CVflow se entregan con la distribución del SDK.Ejecuta
yolo val model=model.ambapb.ckpt.onnx data=your_data.yamlcon la bifurcación de Ambarella instalada. El backend de AmbaPB ejecuta el modelo compilado de manera exacta bit por bit tal como se ejecuta en el motor de IA CVflow, por lo que el mAP informado incluye todos los efectos de cuantización del compilador.