Exportación de Ambarella CVflow para modelos Ultralytics YOLO#
Desplegar modelos de Ultralytics YOLO en Ambarella SoC requiere compilar los modelos con las herramientas de compilación de Ambarella; además, los modelos optimizados para la arquitectura CVflow ofrecen un mejor rendimiento durante la inferencia. Esta bifurcación de Ultralytics integra el kit de herramientas de compresión SpongeTorch de Ambarella directamente en el flujo de entrenamiento, validación y exportación, lo que permite a los desarrolladores generar modelos optimizados para desplegarlos de forma eficiente en hardware de Ambarella.
Esta guía abarca el flujo de trabajo actual para desplegar detección de objetos, desde el entrenamiento con compresión hasta la inferencia en el dispositivo (consulta la descripción general del flujo de trabajo para ver el proceso completo).
El formato de punto de control AmbaPB es una extensión específica de Ambarella de la especificación ONNX IR, compatible con las primitivas computacionales de CVflow y que empaqueta los artefactos generados por las herramientas del SDK. Es el artefacto del lado del host que se usa para validar la precisión del modelo compilado antes del despliegue; el binario Cavalry independiente, generado para el dispositivo de destino, es el que se ejecuta en la placa.
Este flujo de trabajo depende de componentes propietarios del SDK de Ambarella que no están disponibles en PyPI. Para obtener los paquetes del SDK necesarios, regístrate en Ambarella Developer Zone y solicita acceso a través de Cooper™ Developer Platform.
Ambarella mantiene esta integración. Comunica los problemas relacionados con la bifurcación, SpongeTorch o el SDK al equipo de asistencia de Ambarella.
¿Qué es Ambarella?#
Ambarella, con sede en Santa Clara, California, es una empresa de semiconductores que diseña SoC de IA en el borde. Sus procesadores combinan procesamiento de señales de imagen, codificación de vídeo y computación de IA en el chip, y se utilizan en dispositivos de seguridad, automoción, robótica, industria y consumo.
¿Qué es CVflow?#
CVflow es la arquitectura de procesamiento de visión de Ambarella. Utiliza un motor de visión dedicado, independiente de la CPU y la GPU, para ejecutar cargas de trabajo de visión artificial y redes neuronales. Los modelos entrenados con frameworks como PyTorch se compilan al formato nativo de CVflow con el SDK de Ambarella antes de ejecutarse en el motor.
Familias de SoC CVflow actuales y sus aplicaciones habituales:
| Familia de SoC | Aplicaciones habituales |
|---|---|
| CV72 / CV75 | Cámaras de seguridad con IA 4K, cámaras inteligentes y visión industrial |
| CV5 / CV52 | Drones, cámaras de acción, robótica y sistemas multicámara |
| N1-655 | Dispositivos locales de IA generativa y análisis de vídeo multicanal |
¿Por qué desplegar YOLO en Ambarella?#
- Rendimiento por vatio: Los SoC CVflow están diseñados para la IA en el borde siempre activa y ejecutan detección de objetos en tiempo real dentro de los límites de consumo energético de las cámaras.
- Entrenamiento con compresión: SpongeTorch aplica poda durante el entrenamiento para ayudar al modelo a conservar su precisión mientras se vuelve más disperso y eficiente para desplegarlo en CVflow.
- Flujo de cámara integrado: Los SoC de Ambarella combinan un procesador de señal de imagen (ISP), codificación de vídeo de ultraalta definición y CVflow para admitir diversos sistemas de cámara con un consumo reducido; así, un único SoC de Ambarella gestiona todo el flujo de IA de la cámara.
Descripción general del flujo de trabajo#
El proceso consta de seis etapas:
- Entrenamiento con compresión — entrena con una configuración de SpongeKit (
amba_config) para que SpongeTorch aplique progresivamente la poda no estructurada durante el entrenamiento. Si la precisión de la cuantización posterior al entrenamiento (PTQ) no es aceptable, SpongeTorch también admite el entrenamiento con conciencia de cuantización (QAT), pero esta opción aún no está integrada en esta integración de Ultralytics y está prevista para una versión futura. - Exportación a ONNX — exporta el punto de control comprimido con la misma configuración
amba_configpara conservar la estructura de compresión en el grafo ONNX. - Compilación — compila el modelo ONNX en un punto de control AmbaPB con las herramientas de compilación del SDK, que aplican PTQ para el motor CVflow.
- Validación en el host — ejecuta el modelo compilado
*.ambapb.ckpt.onnxmediante Ultralyticspredict/vala través del backend AmbaPB para verificar la precisión antes del despliegue. - Conversión a Cavalry — convierte el punto de control AmbaPB validado en un binario Cavalry con las herramientas del SDK.
- Ejecución en el dispositivo — ejecuta el binario Cavalry en el dispositivo con la biblioteca de ejecución del SDK de Ambarella.
El flujo de entrenamiento y exportación de SpongeTorch es opcional y se puede sustituir por una exportación ONNX estándar (consulta Exportar sin SpongeTorch).
Requisitos previos#
Instalación#
Instala esta bifurcación de Ultralytics y, después, configura el SDK de Ambarella CVflow —que incluye las herramientas de compilación y la biblioteca cvflowbackend— e instala el paquete wheel de spongetorch distribuido junto con él:
# 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 localiza cvflowbackend mediante el comando tv2 (tv2 -libpath cvflowbackend) de las herramientas de compilación del SDK; por tanto, estas herramientas deben estar instaladas y en tu PATH antes de ejecutar la inferencia o la validación con modelos compilados.
Archivo de configuración de SpongeKit#
SpongeTorch utiliza un archivo de configuración de SpongeKit (formato de texto protobuf, .prototxt) que define las pasadas de poda, incluidos los objetivos de dispersión y el programa de compresión. Obtén configuraciones de ejemplo y la documentación del esquema correspondiente de tu versión del SDK de Ambarella. Para mantener la coherencia entre el entrenamiento, la validación y el despliegue, usa la configuración de entrenamiento siempre que la validación necesite volver a preparar el modelo y utiliza siempre la misma configuración al exportar un punto de control comprimido.
Argumentos de 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 que se pasa a spongetorch.prepare(). Activa el entrenamiento con compresión y la exportación compatible con SpongeTorch. |
amba_chipset | str | None | Nombre del chipset de destino que se pasa a spongetorch.set_target_chipset(); por ejemplo, CV72. |
La bifurcación también añade un argumento de exportación general:
| Argumento | Tipo | Predeterminado | Descripción |
|---|---|---|---|
export_file | str | None | Ruta o nombre de salida personalizado para la exportación; por ejemplo, '/tmp/model.onnx' o 'model.onnx'. |
Entrenamiento con compresión#
Entrena o ajusta tu modelo con la compresión de SpongeTorch activada:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
model.train(
data="coco8.yaml",
epochs=100,
amba_config="config.prototxt",
amba_chipset="CV72",
)Cuando se establece amba_config, el entrenador integra el modelo y el optimizador con spongetorch.prepare() durante la configuración. La compresión se aplica progresivamente según un programa por pasos, para que la red aprenda a mantener la precisión mientras se vuelve dispersa. El punto de control entrenado almacena el estado disperso de SpongeTorch (tensores _orig/_mask), que se necesitará más adelante durante la exportación. El archivo de configuración se copia en el directorio de ejecución como amba_config.prototxt para garantizar la reproducibilidad.
best.pt y last.pt no se guardan intencionadamente hasta que el programa de compresión de SpongeTorch alcanza su end_step: un punto de control a medio comprimir no sería utilizable. Asegúrate de que epochs tenga una duración suficiente para completar el programa de tu configuración; el registro indica cuándo empieza a guardarse el punto de control. Si el entrenamiento termina antes de que se complete el programa, se guardará igualmente la última época con una advertencia, pero no se debe desplegar ese punto de control.
Para obtener la mejor precisión, primero entrena el modelo con normalidad (o parte de un punto de control preentrenado) y, después, realiza un ajuste más breve con compresión, usando amba_config sobre los pesos entrenados.
Validación del punto de control comprimido#
Valida la precisión antes de compilar y usa 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 conservar la estructura de compresión. Compara mAP con el valor de referencia sin comprimir; si la pérdida 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 la misma configuración amba_config que usaste durante 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, carga de nuevo los pesos dispersos del punto de control en la estructura preparada y genera el trazado a ONNX con la fusión de Conv+BN desactivada; así produce un grafo con el formato exacto que esperan las herramientas de compilación del SDK.
Conservación de los metadatos del modelo#
La exportación a ONNX integra la tarea del modelo, los nombres de las clases, el stride y el tamaño de entrada en el archivo ONNX, mientras que el backend AmbaPB lee esta información de un archivo auxiliar metadata.yaml situado junto al modelo compilado. Si las herramientas de compilación de tu SDK no crean este archivo auxiliar, extráelo del modelo ONNX antes de compilar:
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})Guarda metadata.yaml en el mismo directorio que el archivo compilado *.ambapb.ckpt.onnx o *.ambapb.fastckpt.onnx.
- El checkpoint debe incluir el estado de compresión de SpongeTorch. Si intentas exportar un checkpoint sin comprimir con
amba_configconfigurado, se produce este error: "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. Si usas otra configuración, es posible que los pesos del checkpoint no se carguen correctamente.
Compilar con SDK Tools#
Compila el modelo ONNX exportado para el chipset de destino con las herramientas de compilación del SDK, siguiendo la guía de compilación del SDK. Las herramientas asignan el grafo al motor de IA CVflow —aplican PTQ, planifican la ejecución y gestionan la memoria— y generan el checkpoint AmbaPB para la validación en el host.
PTQ aplica cuantización INT8 mediante imágenes de calibración (preparadas según se describe en la guía de compilación del SDK), y las herramientas de compilación equilibran la precisión con la latencia de ejecución: asignar más operaciones a INT8 reduce la latencia, pero puede disminuir la precisión, mientras que mantener más operaciones en FP16 conserva la precisión con una latencia mayor. Cuando PTQ no puede alcanzar el objetivo de precisión con el nivel INT8 requerido por tu presupuesto de latencia, QAT con SpongeTorch es la solución prevista: entrena el modelo para que tolere una cuantización INT8 más agresiva y recupere precisión con una latencia menor. QAT aún no está disponible en esta integración y está previsto para una versión futura.
Para que Ultralytics reconozca el modelo compilado, el nombre del archivo debe terminar en .ambapb.ckpt.onnx o .ambapb.fastckpt.onnx.
Ejecutar inferencias con el modelo compilado#
El modelo AmbaPB compilado se carga directamente mediante la API de Ultralytics: AutoBackend detecta el sufijo .ambapb y dirige la inferencia a través de cvflowbackend, ejecutando el modelo tal y como funcionará 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 final de precisión antes de implementar el modelo en el hardware e incluye todos los efectos de la cuantización del compilador. Si hay un archivo metadata.yaml junto al modelo compilado, el backend lee de ese archivo los nombres de las clases, el stride y la información de la tarea. De forma predeterminada, el backend utiliza el modo de inferencia CVflow acinf; configura la variable de entorno ULTRALYTICS_AMBAPB_DEBUG=1 para registrar los detalles de entrada y salida y facilitar la depuración.
Convertir a un binario Cavalry#
Cuando el checkpoint AmbaPB supere la validación en el host, usa las herramientas de compilación del SDK para convertirlo en un binario Cavalry para el dispositivo de destino, siguiendo la guía de compilación del SDK. El binario Cavalry es el formato que ejecuta la biblioteca de ejecución del SDK en la placa.
Implementar en la placa#
Carga el binario Cavalry en tu dispositivo Ambarella con el entorno de ejecución del SDK de Ambarella. El preprocesamiento y el posprocesamiento deben coincidir con lo previsto al compilar el modelo de detección: entrada RGB con letterboxing en el rango 0–255 y decodificación estándar de detecciones YOLO en las salidas. Consulta la documentación de implementación del SDK para ver las API de ejecución.
Exportar sin SpongeTorch#
Si no necesitas la poda durante el entrenamiento de SpongeTorch, el flujo estándar de Ultralytics también genera un modelo que las herramientas del SDK pueden compilar:
yolo export model=yolo26n.pt format=onnxCompila el ONNX resultante con las herramientas de compilación del SDK, que realizan por sí mismas la cuantización posterior al entrenamiento. Este método sacrifica algo de rendimiento durante la ejecución y de precisión cuantizada a cambio de un flujo de trabajo más sencillo, sin depender de spongetorch durante el entrenamiento.
Aplicaciones en el mundo real#
Los modelos Ultralytics YOLO en los SoC Ambarella CVflow permiten ofrecer visión permanente en el edge:
- Cámaras de seguridad con IA: detección de personas y vehículos en tiempo real con cámaras IP 4K dentro de un presupuesto energético inferior a 3 W.
- Drones y robótica: detección y seguimiento de objetos a bordo para navegación, inspección y reparto en chips de la clase CV5.
- Analítica industrial y comercial: recuento de personas en varios flujos, detección de EPI y supervisión de estanterías en dispositivos edge.
Resumen#
Esta guía ha descrito el flujo de trabajo actual para implementar modelos Ultralytics YOLO en los SoC Ambarella CVflow: entrenamiento con SpongeTorch teniendo en cuenta la compresión (amba_config/amba_chipset), exportación ONNX del checkpoint comprimido, compilación sin conexión a un checkpoint AmbaPB con las herramientas del SDK, validación en el host mediante Ultralytics y conversión a un binario Cavalry para la implementación en el dispositivo con el SDK de Ambarella.
Para otros destinos de IA edge, consulta las guías relacionadas de Hailo, Rockchip RKNN, Sony IMX500, Qualcomm QNN, DEEPX y Axelera. Para ver la lista completa de formatos de exportación, visita la documentación del modo de exportación y la página de integraciones.
Preguntas frecuentes#
No. No existe un destino
format="ambarella". Exporta a ONNX (opcionalmente con compresión SpongeTorch medianteamba_config) y, después, compila sin conexión el modelo ONNX a AmbaPB con las herramientas de compilación del SDK de Ambarella.Puedes usar cualquier SoC basado en CVflow compatible con las herramientas de compilación de tu SDK, incluidas las familias CV72/CV75 para cámaras con IA y CV5/CV52 para drones y robótica. El argumento
amba_chipsetconfigura el destino de optimización de SpongeTorch; selecciona el destino correspondiente por separado al compilar. Las cadenas de chipset aceptadas y su disponibilidad dependen de la versión instalada del SDK.SpongeTorch es la variante para PyTorch de la biblioteca de compresión de modelos SpongeKit de Ambarella (que también tiene variantes para Caffe y TensorFlow), integrada en la bifurcación de Ultralytics de Ambarella para la poda no estructurada durante el entrenamiento (la cuantización consciente del entrenamiento está prevista para una versión futura). Es opcional: también puedes compilar una exportación ONNX estándar de Ultralytics con las herramientas de compilación del SDK, que realizan la cuantización por sí mismas, aunque con cierto coste en el rendimiento durante la ejecución y en la precisión cuantizada.
Son propietarios y no están en PyPI. Regístrate en Ambarella Developer Zone para solicitar acceso al SDK; el SDK incluye las herramientas de compilación (con
cvflowbackend) y el wheelspongetorch, que se distribuye por separado, se proporciona junto con él.Ejecuta
yolo val model=model.ambapb.ckpt.onnx data=your_data.yamlcon la bifurcación de Ambarella instalada. El backend AmbaPB ejecuta el modelo compilado tal y como se ejecutará en el motor de IA CVflow, por lo que el mAP indicado incluye todos los efectos de la cuantización del compilador.