Meet YOLO26: next-gen vision AI.

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 / CV754K 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Обзор рабочего процесса#

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

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

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

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

Авторы

Комментарии