Link to this sectionЭкспорт Ambarella CVflow для моделей Ultralytics YOLO#
Это руководство является ранней версией и пока не завершено или не проверено компанией Ambarella. Команды, детали совместимости и шаги рабочего процесса могут измениться по мере получения отзывов от поставщика. В настоящее время не существует цели экспорта format="ambarella"; рабочий процесс использует стандартный экспорт ONNX (format="onnx") в сочетании с аргументами amba_config/amba_chipset, после чего полученная модель ONNX компилируется в формат AmbaPB, пригодный для развертывания, в автономном режиме с помощью инструментария CVflow от Ambarella.
Развертывание моделей Ultralytics YOLO на SoC Ambarella требует формата модели, оптимизированного для AI-движка CVflow®. Этот форк Ultralytics интегрирует инструментарий сжатия SpongeTorch от Ambarella непосредственно в конвейер обучения, проверки и экспорта, поэтому ты можешь создавать оптимизированные путем прунинга и квантования модели, которые эффективно работают на оборудовании Ambarella. В этом руководстве описан текущий рабочий процесс обнаружения объектов: обучение с учетом сжатия, экспорт в ONNX, компиляция с помощью инструментария CVflow и инференс с использованием скомпилированной модели AmbaPB.
Для этого рабочего процесса требуются проприетарные компоненты инструментария Ambarella (spongetorch, компилятор CVflow и cvflowbackend), которые недоступны в PyPI. Зарегистрируйся в Ambarella Developer Zone, чтобы получить доступ к SDK через платформу разработчика Cooper™.
Link to this sectionЧто такое Ambarella CVflow?#
Ambarella — это полупроводниковая компания из Санта-Клары, известная своими энергоэффективными SoC для AI-видеоаналитики, которые широко используются в IP-камерах безопасности, видеорегистраторах, дронах, робототехнике и автомобильных системах. Их чипы построены на базе CVflow®, специализированной архитектуры векторных нейронных вычислений (встроенный AI-ускоритель или NPU), которая обеспечивает высокую пропускную способность инференса при очень низком энергопотреблении — CV72S выполняет рабочие нагрузки AI для камер безопасности 4K менее чем при 3 Вт. Модели, обученные в стандартных фреймворках, таких как PyTorch, перед развертыванием компилируются в нативный формат CVflow с помощью автономного инструментария Ambarella.
Текущие семейства SoC CVflow и их типичные области применения:
| Семейство SoC | Типичные области применения |
|---|---|
| CV72 / CV75 | 4K AI-камеры безопасности, умные камеры, промышленное зрение |
| CV5 / CV52 | Дроны, экшн-камеры, робототехника, многокамерные системы |
| CV3-AD | Автомобильные ADAS и контроллеры доменов автономного вождения |
| N1 | Локальные устройства для генеративного AI и многопотоковой видеоаналитики |
Link to this sectionЗачем развертывать YOLO на Ambarella?#
- Производительность на ватт: SoC CVflow разработаны для постоянно работающего Edge AI, выполняя обнаружение объектов в режиме реального времени в рамках бюджета мощности, характерного для камер.
- Обучение с учетом сжатия: SpongeTorch применяет прунинг и оптимизацию с учетом квантования во время обучения, поэтому модель учится оставаться точной, становясь при этом дружелюбной к NPU.
- Битовая проверка на хосте: скомпилированная модель AmbaPB проходит через
predict/valв Ultralytics на твоей рабочей станции в точности так, как она будет выполняться на чипе, поэтому ты можешь измерить квантованный mAP перед тем, как прикасаться к аппаратному обеспечению. - Интегрированный конвейер камеры: SoC Ambarella объединяют AI-движок с ISP и видеокодировщиками, делая их однокристальным решением для AI-камер.
Link to this sectionОбзор рабочего процесса#
Конвейер состоит из четырех этапов:
- Обучение с учетом сжатия — обучаешь с конфигурацией SpongeKit (
amba_config), чтобы SpongeTorch применял прунинг/квантование постепенно во время обучения. - Экспорт ONNX — экспортируешь сжатый чекпоинт с той же конфигурацией
amba_config, сохраняя структуру сжатия в графе ONNX. - Компиляция CVflow — компилируешь модель ONNX в артефакт AmbaPB с помощью инструментария CVflow.
- Инференс и проверка — запускаешь скомпилированную модель
*.ambapb.ckpt.onnxчерезpredict/valв Ultralytics с использованием бэкенда AmbaPB, затем развертываешь на плате.
Обучение SpongeTorch и экспорт с учетом SpongeTorch можно заменить обычным экспортом ONNX, если тебе не нужны оптимизации SpongeTorch во время обучения (смотри Экспорт без SpongeTorch).
Link to this sectionПредварительные требования#
Link to this sectionУстановка#
Установи этот форк Ultralytics, затем установи колеса (wheels) инструментария Ambarella из дистрибутива SDK:
!!! 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-*.whlБэкенд инференса AmbaPB находит cvflowbackend через команду tv2 инструментария CVflow (tv2 -libpath cvflowbackend), поэтому инструментарий должен быть установлен и добавлен в твой PATH перед запуском инференса или проверки со скомпилированными моделями.
Link to this sectionФайл конфигурации SpongeKit#
SpongeTorch управляется файлом конфигурации SpongeKit (в формате protobuf-text, .prototxt), который определяет применяемые проходы сжатия: цели разреженности прунинга, настройки квантования и график сжатия. Получи примеры конфигураций и соответствующую документацию по схеме из релиза твоего SDK Ambarella. Используй конфигурацию обучения, когда при проверке нужно подготовить неподготовленную модель, и всегда используй одну и ту же конфигурацию при экспорте сжатого чекпоинта.
Link to this sectionАргументы Amba#
Два аргумента управляют интеграцией SpongeTorch в режимах train, val и export:
| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
amba_config | str | None | Путь к конфигурации SpongeKit, передаваемой в spongetorch.prepare(). Включает обучение с учетом сжатия и экспорт с учетом 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 sectionЭкспорт в 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() с твоей конфигурацией, перезагружает веса разреженного чекпоинта в подготовленную структуру и трассирует в ONNX с отключенным слиянием Conv+BN — создавая граф в точности в том виде, который ожидает компилятор CVflow.
Link to this sectionСохранение метаданных модели#
Экспорт ONNX внедряет задачу модели, имена классов, шаг (stride) и размер входных данных в файл 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 sectionКомпиляция с помощью инструментария CVflow#
Скомпилируй экспортированную модель ONNX для своего целевого чипсета с помощью компилятора CVflow из SDK, следуя руководству по компиляции SDK. Компилятор проецирует граф на AI-движок CVflow (квантование, планирование, распределение памяти) и создает развертываемый артефакт AmbaPB.
Чтобы Ultralytics распознал скомпилированную модель, имя ее файла должно заканчиваться на .ambapb.ckpt.onnx или .ambapb.fastckpt.onnx.
Link to this sectionЗапуск инференса со скомпилированной моделью#
Скомпилированная модель AmbaPB загружается напрямую через API Ultralytics — 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. Препроцессинг и постпроцессинг должны соответствовать тому, для чего была скомпилирована модель обнаружения: RGB-ввод с letterbox в диапазоне 0–255 (бэкенд Ultralytics AmbaPB подает на скомпилированную модель RGB 0–255) и стандартная декодировка обнаружения YOLO на выходах. Обратись к документации по развертыванию SDK для получения информации о рантайм-API.
Link to this sectionЭкспорт без SpongeTorch#
Если тебе не нужны прунинг во время обучения и оптимизации с учетом квантования от SpongeTorch, стандартный конвейер Ultralytics также создает модель, пригодную для компиляции в CVflow:
yolo export model=yolo26n.pt format=onnxСкомпилируй полученный ONNX с помощью инструментария CVflow, который сам выполняет пост-тренировочное квантование. Этот путь жертвует некоторой производительностью NPU и квантованной точностью ради более простого рабочего процесса без зависимости от spongetorch во время обучения.
Link to this sectionПрименение в реальных условиях#
Модели Ultralytics YOLO на SoC Ambarella CVflow обеспечивают постоянно работающее зрение на границе сети (at the edge):
- AI-камеры безопасности: обнаружение людей и транспортных средств в реальном времени на 4K IP-камерах в рамках бюджета мощности менее 3 Вт.
- Дроны и робототехника: бортовое обнаружение и отслеживание объектов для навигации, инспекции и доставки на чипах класса CV5.
- Автомобили: рабочие нагрузки восприятия ADAS, такие как обнаружение пешеходов и транспортных средств на контроллерах доменов CV3-AD.
- Промышленная и розничная аналитика: многопотоковый подсчет людей, обнаружение СИЗ и мониторинг полок на граничных устройствах.
Link to this sectionРезюме#
Это предварительное руководство описывает текущий рабочий процесс развертывания моделей Ultralytics YOLO на SoC Ambarella CVflow: обучение с учетом сжатия с помощью SpongeTorch (amba_config/amba_chipset), экспорт сжатого чекпоинта в ONNX, автономная компиляция в AmbaPB с помощью инструментария CVflow и побитовая проверка скомпилированной модели через Ultralytics перед развертыванием на плате.
Для других целей Edge AI смотри соответствующие руководства по Hailo, Rockchip RKNN, Sony IMX500, Qualcomm QNN, DEEPX и Axelera. Полный список форматов экспорта смотри в документации режима экспорта и на странице интеграций.
Link to this sectionFAQ#
Link to this sectionМогу ли я экспортировать модель YOLO напрямую в формат Ambarella с помощью model.export()?#
Нет. Нет цели format="ambarella". Экспортируй в ONNX (опционально со сжатием SpongeTorch через amba_config), затем скомпилируй модель ONNX в AmbaPB автономно с помощью инструментария CVflow от Ambarella из состава SDK.
Link to this sectionКакие чипы Ambarella могут запускать модели Ultralytics YOLO?#
Может быть выбран любой SoC на базе CVflow, поддерживаемый твоим инструментарием CVflow, включая семейства CV72/CV75 для AI-камер, CV5/CV52 для дронов и робототехники и CV3-AD для автомобилей. Аргумент amba_chipset настраивает целевую оптимизацию SpongeTorch; выбери соответствующую цель отдельно при компиляции. Допустимые строки чипсетов и доступность зависят от установленного релиза SDK.
Link to this sectionЧто такое SpongeTorch и нужен ли он мне?#
SpongeTorch — это инструментарий сжатия моделей Ambarella, интегрированный в форк Ultralytics от Ambarella для прунинга и обучения с учетом квантования. Он опционален: обычный экспорт ONNX из Ultralytics также может быть скомпилирован с помощью инструментария CVflow с использованием пост-тренировочного квантования, с некоторыми потерями в производительности NPU и квантованной точности.
Link to this sectionГде получить SDK Ambarella, SpongeTorch и инструментарий CVflow?#
Они являются проприетарными и отсутствуют в PyPI. Зарегистрируйся в Ambarella Developer Zone, чтобы запросить доступ к SDK; колеса spongetorch и cvflowbackend, а также компилятор CVflow поставляются в составе дистрибутива SDK.
Link to this sectionКак проверить точность скомпилированной модели перед развертыванием?#
Запусти yolo val model=model.ambapb.ckpt.onnx data=your_data.yaml с установленным форком Ambarella. Бэкенд AmbaPB выполняет скомпилированную модель побитово так же, как она работает на AI-движке CVflow, поэтому указанный mAP включает все эффекты квантования компилятора.