YOLO Vision 2026:

Экспорт моделей Ultralytics YOLO в Ambarella CVflow#

Развертывание моделей Ultralytics YOLO на однокристальных системах Ambarella требует компиляции моделей с помощью инструментов компиляции Ambarella, а модели, оптимизированные для архитектуры CVflow, работают лучше во время инференса. Этот форк Ultralytics интегрирует инструментарий сжатия SpongeTorch от Ambarella непосредственно в конвейер обучения, валидации и экспорта, позволяя разработчикам создавать оптимизированные модели для эффективного развертывания на оборудовании Ambarella.

Это руководство охватывает текущий рабочий процесс развертывания для обнаружения объектов, начиная с обучения с учетом сжатия и заканчивая инференсом на устройстве (см. Обзор рабочего процесса для полного конвейера).

Формат чекпоинта AmbaPB является специфическим для Ambarella расширением спецификации ONNX IR, которое поддерживает вычислительные примитивы CVflow и упаковывает артефакты, созданные инструментами SDK. Это артефакт на стороне хоста, используемый для проверки точности скомпилированной модели перед развертыванием; отдельный двоичный файл Cavalry, созданный для целевого устройства, — это то, что запускается на плате.

Примечание

Этот рабочий процесс зависит от проприетарных компонентов SDK Ambarella, которые недоступны на PyPI. Чтобы получить необходимые пакеты SDK, зарегистрируйся в зоне разработчиков Ambarella и запроси доступ через платформу для разработчиков Cooper™.

Поддержка

Эта интеграция поддерживается Ambarella. Сообщай о проблемах с форком, SpongeTorch или SDK в службу поддержки Ambarella.

Кто такая Ambarella?#

Ambarella со штаб-квартирой в Санта-Кларе, Калифорния, — это полупроводниковая компания, которая разрабатывает краевые однокристальные системы ИИ. Ее процессоры объединяют обработку сигналов изображения, кодирование видео и граничные вычисления ИИ и используются в устройствах безопасности, автомобилестроения, робототехники, промышленности и потребительской электроники.

Что такое CVflow?#

CVflow — это архитектура обработки зрения Ambarella. Она использует выделенный визуальный движок, отдельный от центрального и графического процессоров, для выполнения рабочих нагрузок компьютерного зрения и нейронных сетей. Модели, обученные в таких фреймворках, как PyTorch, компилируются в собственный формат CVflow с помощью SDK Ambarella перед их запуском на движке.

Текущие семейства SoC CVflow и их типичные применения:

Семейство SoCТипичные применения
CV72 / CV75AI-камеры видеонаблюдения 4K, интеллектуальные камеры, промышленное компьютерное зрение
CV5 / CV52Дроны, экшн-камеры, робототехника, многокамерные системы
N1-655Устройства для локального генеративного AI и многопоточной аналитики видео

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

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

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

Конвейер состоит из шести этапов:

  1. Обучение с учетом сжатия — обучайте с конфигурацией SpongeKit (amba_config), чтобы SpongeTorch применял неструктурированный прунинг постепенно во время обучения. Там, где точность квантования после обучения (PTQ) неприемлема, SpongeTorch также поддерживает обучение с учетом квантования (QAT), но этот путь еще не встроен в эту интеграцию Ultralytics и запланирован для будущего релиза.
  2. Экспорт ONNX — экспортируй сжатый чекпойнт с тем же amba_config, сохраняя структуру сжатия в графе ONNX.
  3. Компиляция — скомпилируйте модель ONNX в чекпоинт AmbaPB с помощью инструментов компиляции SDK, которые применяют PTQ для движка CVflow.
  4. Проверка на хосте — запустите скомпилированную модель *.ambapb.ckpt.onnx через Ultralytics predict/val с помощью бэкенда AmbaPB для проверки точности перед развертыванием.
  5. Преобразование в Cavalry — преобразуйте проверенный чекпоинт AmbaPB в двоичный файл Cavalry с помощью инструментов SDK.
  6. Запуск на устройстве — запустите двоичный файл Cavalry на устройстве с помощью библиотеки среды выполнения SDK Ambarella.

Рабочий процесс обучения и экспорта SpongeTorch является необязательным и может быть заменен обычным экспортом ONNX (см. Экспорт без SpongeTorch).

Предварительные требования#

Установка#

Установи этот форк Ultralytics, затем настрой SDK Ambarella CVflow, который включает в себя инструменты компиляции и библиотеку cvflowbackend, и установи wheel-пакет spongetorch, распространяемый вместе с ним:

Установка
# 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-*.whl

AutoBackend находит cvflowbackend через команду tv2 (tv2 -libpath cvflowbackend) инструментов компиляции SDK, поэтому инструменты компиляции SDK должны быть установлены и находиться в вашей переменной 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 достаточно велико, чтобы расписание из твоей конфигурации успело завершиться; в журнале указывается момент начала сохранения чекпойнтов. Если обучение завершится до окончания расписания, последний этап всё равно будет сохранён с предупреждением, но такой чекпойнт не следует развёртывать.

Дообучение вместо обучения с нуля

Для наилучшей точности сначала обучи модель обычным способом (или начни с предварительно обученного чекпойнта), затем выполни более короткое дообучение со сжатием, указав 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, создавая граф в точно том виде, который ожидают инструменты компиляции SDK.

Сохранение метаданных модели#

Экспорт ONNX внедряет задачу модели, имена классов, шаг и размер входа в файл ONNX, в то время как бэкенд AmbaPB считывает эту информацию из сопутствующего файла metadata.yaml рядом со скомпилированной моделью. Если твои инструменты компиляции SDK не создают этот сопутствующий файл, извлеки его из модели 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 вызывает ошибку: "Чекпоинт не имеет состояния прунинга SpongeTorch... Используйте сжатый чекпоинт из обучения amba перед экспортом."
  • Конфигурация должна соответствовать конфигурации, использовавшейся во время обучения. Использование другой конфигурации может помешать правильной загрузке весов чекпоинта.

Компиляция с помощью инструментов SDK#

Скомпилируйте экспортированную модель ONNX для вашего целевого чипсета с помощью инструментов компиляции SDK, следуя руководству по компиляции SDK. Инструменты сопоставляют граф с ИИ-движком CVflow — применяя PTQ, планирование и распределение памяти — и создают чекпоинт AmbaPB для проверки на хосте.

PTQ применяет квантование INT8 с использованием изображений калибровки (подготовленных так, как описано в руководстве по компиляции SDK), а инструменты компиляции балансируют точность с задержкой выполнения: сопоставление большего числа операций с INT8 снижает задержку, но может уменьшить точность, в то время как сохранение большего числа операций в FP16 сохраняет точность при более высокой задержке. Когда PTQ не может достичь вашей цели по точности на уровне INT8, необходимом для вашего бюджета задержки, QAT со SpongeTorch является предполагаемым средством правовой защиты — оно обучает модель толерантности к более агрессивному квантованию INT8, восстанавливая точность в рабочей точке с более низкой задержкой. QAT еще недоступна в этой интеграции и запланирована для будущего релиза.

Примечание

Чтобы 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, чтобы регистрировать сведения о входных и выходных данных для отладки.

Преобразование в двоичный файл Cavalry#

После того как чекпоинт AmbaPB пройдет проверку на хосте, используйте инструменты компиляции SDK для его преобразования в двоичный файл Cavalry для вашего целевого устройства, следуя руководству по компиляции SDK. Двоичный файл Cavalry — это форма, выполняемая библиотекой среды выполнения SDK на плате.

Развёртывание на плате#

Загрузите двоичный файл Cavalry на ваше устройство Ambarella, используя среду выполнения SDK Ambarella. Предобработка и постобработка должны соответствовать тому, для чего была скомпилирована модель обнаружения: RGB-вход с letterbox в диапазоне 0–255 и стандартное декодирование обнаружения YOLO на выходах. Обратитесь к документации по развертыванию SDK для получения информации об API среды выполнения.

Экспорт без SpongeTorch#

Если вам не нужен прунинг во время обучения от SpongeTorch, стандартный конвейер Ultralytics также производит модель, которую инструменты SDK могут скомпилировать:

Использование
yolo export model=yolo26n.pt format=onnx

Скомпилируйте полученный ONNX с помощью инструментов компиляции SDK, которые сами выполняют квантование после обучения. Этот путь жертвует некоторой производительностью во время выполнения и квантованной точностью ради более простого рабочего процесса без зависимости от spongetorch во время обучения.

Практические применения#

Модели Ultralytics YOLO на SoC Ambarella CVflow обеспечивают постоянно работающее компьютерное зрение на периферии:

  • AI-камеры видеонаблюдения: обнаружение людей и транспортных средств в реальном времени на IP-камерах 4K при энергопотреблении менее 3 Вт.
  • Дроны и робототехника: бортовое обнаружение и отслеживание объектов для навигации, инспекции и доставки на чипах класса CV5.
  • Промышленная и розничная аналитика: подсчёт людей в нескольких потоках, обнаружение средств индивидуальной защиты и мониторинг полок на периферийных устройствах.

Итоги#

Это руководство обрисовало текущий рабочий процесс развертывания моделей Ultralytics YOLO на однокристальных системах Ambarella CVflow: обучение с учетом сжатия с помощью SpongeTorch (amba_config/amba_chipset), экспорт сжатого чекпоинта в ONNX, офлайн-компиляция в чекпоинт AmbaPB с помощью инструментов SDK, проверка на хосте через Ultralytics и преобразование в двоичный файл Cavalry для развертывания на устройстве с помощью SDK Ambarella.

О других периферийных AI-платформах см. руководства по Hailo, Rockchip RKNN, Sony IMX500, Qualcomm QNN, DEEPX и Axelera. Полный список форматов экспорта см. в документации по режиму экспорта и на странице интеграций.

Часто задаваемые вопросы#

  • Нет. Цели format="ambarella" не существует. Экспортируйте в ONNX (опционально со сжатием SpongeTorch через amba_config), затем скомпилируйте модель ONNX в AmbaPB офлайн с помощью инструментов компиляции SDK Ambarella.

  • Любая однокристальная система на базе CVflow, поддерживаемая вашими инструментами компиляции SDK, может быть целевой, включая семейств CV72/CV75 для камер ИИ и CV5/CV52 для дронов и робототехники. Аргумент amba_chipset настраивает целевой объект оптимизации SpongeTorch; выберите соответствующую цель отдельно при компиляции. Принятые строки чипсетов и доступность зависят от установленного релиза SDK.

  • SpongeTorch — это версия библиотеки сжатия моделей SpongeKit от Ambarella для PyTorch (которая также имеет варианты для Caffe и TensorFlow), интегрированная в форк Ultralytics от Ambarella для неструктурированного прунинга во время обучения (обучение с учетом квантования запланировано для будущего релиза). Это необязательно: обычный экспорт Ultralytics в ONNX также может быть скомпилирован с помощью инструментов компиляции SDK, которые сами выполняют квантование, ценой некоторого снижения производительности во время выполнения и квантованной точности.

  • Они являются проприетарными и отсутствуют на PyPI. Зарегистрируйтесь в зоне разработчиков Ambarella, чтобы запросить доступ к SDK; SDK включает в себя инструменты компиляции (с cvflowbackend), а отдельно распространяемый wheel-пакет spongetorch поставляется вместе с ним.

  • Запустите yolo val model=model.ambapb.ckpt.onnx data=your_data.yaml с установленным форком Ambarella. Бэкенд AmbaPB выполняет скомпилированную модель так же, как она работает на ИИ-движке CVflow, поэтому отображаемый показатель mAP включает все эффекты квантования компилятора.

Комментарии