YOLO Vision 2026:

Экспорт 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 / CV754K AI-камеры безопасности, умные камеры, промышленное зрение
CV5 / CV52Дроны, экшн-камеры, робототехника, многокамерные системы
CV3-ADАвтомобильные ADAS и контроллеры доменов автономного вождения
N1Локальные устройства для генеративного AI и многопотоковой видеоаналитики

Зачем развертывать YOLO на Ambarella?#

  • Производительность на ватт: SoC с CVflow разработаны для постоянно работающего периферийного ИИ и выполняют обнаружение объектов в реальном времени в пределах ограничений энергопотребления, характерных для камер.
  • Обучение с учетом сжатия: SpongeTorch применяет прюнинг (прореживание) и оптимизацию с учетом квантования в процессе обучения, благодаря чему модель сохраняет точность и становится удобной для NPU.
  • Побитово точная валидация на хосте: скомпилированная модель AmbaPB запускается через Ultralytics predict/val на твоей рабочей станции точно так же, как она будет выполняться на чипе, что позволяет измерить квантованный mAP до взаимодействия с физическим оборудованием.
  • Интегрированный конвейер камеры: SoC Ambarella объединяют AI-движок с ISP и видеокодировщиками, делая их однокристальным решением для AI-камер.

Обзор рабочего процесса#

Конвейер состоит из четырех этапов:

  1. Обучение с учетом сжатия — обучение с конфигурацией SpongeKit (amba_config), чтобы SpongeTorch применял прореживание/квантование постепенно в ходе обучения.
  2. Экспорт в ONNX — экспорт сжатой контрольной точки (чекпоинта) с тем же аргументом amba_config, сохраняющим структуру сжатия в графе ONNX.
  3. Компиляция CVflow — компилируешь модель ONNX в артефакт AmbaPB с помощью инструментария CVflow.
  4. Инференс и валидация — запуск скомпилированной модели *.ambapb.ckpt.onnx через Ultralytics predict/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_configstrNoneПуть к конфигурации SpongeKit, передаваемый в spongetorch.prepare(). Включает обучение с учетом сжатия и экспорт с учетом SpongeTorch.
amba_chipsetstrNoneИмя целевого чипсета, передаваемое в spongetorch.set_target_chipset(), например CV72.

Форк также добавляет общий аргумент экспорта:

АргументТипПо умолчаниюОписание
export_filestrNoneПользовательский путь/имя выходного файла экспорта, например '/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 учитывает все эффекты квантования компилятора.

Участники

Комментарии