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