Экспорт Ultralytics YOLO для Ambarella CVflow#
Для развертывания моделей Ultralytics YOLO на SoC Ambarella требуется компиляция моделей с помощью инструментов Ambarella; модели, оптимизированные для архитектуры CVflow, работают эффективнее во время инференса. Эта версия Ultralytics напрямую интегрирует инструментарий сжатия SpongeTorch от Ambarella в конвейер обучения, валидации и экспорта, позволяя разработчикам создавать оптимизированные модели для эффективного развертывания на оборудовании Ambarella.
В этом руководстве описан текущий процесс развертывания моделей обнаружения объектов: от обучения с учетом сжатия до инференса на устройстве (полный конвейер см. в разделе Обзор процесса).
Формат контрольных точек AmbaPB — это специфичное для Ambarella расширение спецификации ONNX IR, которое поддерживает вычислительные примитивы CVflow и упаковывает артефакты, созданные инструментами SDK. Это артефакт на стороне хоста, который используется для проверки точности скомпилированной модели перед развертыванием; отдельный двоичный файл Cavalry, созданный для целевого устройства, запускается на плате.
Этот процесс зависит от проприетарных компонентов SDK Ambarella, которые недоступны на PyPI. Чтобы получить необходимые пакеты SDK, зарегистрируйся в Ambarella Developer Zone и запроси доступ через платформу Cooper™ Developer Platform.
За эту интеграцию отвечает Ambarella. Сообщай о проблемах с версией, SpongeTorch или SDK в службу поддержки Ambarella.
Что такое Ambarella?#
Ambarella — компания по производству полупроводников со штаб-квартирой в Санта-Кларе, штат Калифорния. Она разрабатывает периферийные SoC для ИИ. Ее процессоры объединяют обработку сигналов изображения, кодирование видео и вычисления ИИ на кристалле и используются в системах безопасности, автомобилях, робототехнике, промышленном и потребительском оборудовании.
Что такое CVflow?#
CVflow — это архитектура обработки компьютерного зрения от Ambarella. Она использует специализированный вычислительный модуль для обработки изображений, отдельный от CPU и GPU, чтобы выполнять задачи компьютерного зрения и нейронных сетей. Модели, обученные с помощью таких фреймворков, как PyTorch, перед запуском на вычислительном модуле компилируются в собственный формат CVflow с помощью SDK Ambarella.
Текущие семейства SoC CVflow и типичные области их применения:
| Семейство SoC | Типичные области применения |
|---|---|
| CV72 / CV75 | Камеры видеонаблюдения с ИИ и разрешением 4K, умные камеры, промышленное компьютерное зрение |
| CV5 / CV52 | Дроны, экшн-камеры, робототехника, системы с несколькими камерами |
| N1-655 | Устройства для локального генеративного ИИ и многопоточной видеоаналитики |
Зачем развертывать YOLO на Ambarella?#
- Производительность на ватт: SoC CVflow предназначены для постоянно работающего периферийного ИИ и выполняют обнаружение объектов в реальном времени обнаружение объектов в пределах энергопотребления, доступного камерам.
- Обучение с учетом сжатия: SpongeTorch выполняет прореживание во время обучения, помогая модели сохранять точность и одновременно становиться более разреженной и эффективной для развертывания на CVflow.
- Интегрированный конвейер камеры: SoC Ambarella объединяют процессор обработки сигналов изображения (ISP), кодирование видео сверхвысокой четкости и CVflow, обеспечивая работу различных камерных систем с низким энергопотреблением. Таким образом, одна SoC Ambarella обрабатывает весь конвейер камеры с ИИ.
Обзор процесса#
Конвейер состоит из шести этапов:
- Обучение с учетом сжатия — обучай модель с конфигурацией SpongeKit (
amba_config), чтобы SpongeTorch постепенно выполнял неструктурированное прореживание во время обучения. Если точность посттренировочной квантования (PTQ) недостаточна, SpongeTorch также поддерживает квантование с учетом обучения (QAT), но этот процесс пока не интегрирован в Ultralytics и планируется к выпуску в будущем. - Экспорт ONNX — экспортируй сжатую контрольную точку с той же конфигурацией
amba_config, сохранив структуру сжатия в графе ONNX. - Компиляция — скомпилируй модель ONNX в контрольную точку AmbaPB с помощью инструментов компиляции SDK, которые выполняют PTQ для вычислительного модуля CVflow.
- Проверка на хосте — запусти скомпилированную модель
*.ambapb.ckpt.onnxчерез Ultralyticspredict/valс помощью бэкенда AmbaPB, чтобы проверить точность перед развертыванием. - Преобразование в Cavalry — преобразуй проверенную контрольную точку AmbaPB в двоичный файл Cavalry с помощью инструментов SDK.
- Запуск на устройстве — запусти двоичный файл Cavalry на устройстве с помощью библиотеки среды выполнения SDK Ambarella.
Процесс обучения и экспорта с SpongeTorch необязателен: его можно заменить обычным экспортом ONNX (см. раздел Экспорт без SpongeTorch).
Предварительные требования#
Установка#
Установи эту версию Ultralytics, затем настрой Ambarella CVflow SDK, включающий инструменты компиляции и библиотеку 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-*.whlAutoBackend находит cvflowbackend с помощью команды tv2 инструментов компиляции SDK (tv2 -libpath cvflowbackend), поэтому инструменты компиляции SDK должны быть установлены и находиться в PATH до запуска инференса или валидации скомпилированных моделей.
Файл конфигурации SpongeKit#
Работа SpongeTorch задается файлом конфигурации SpongeKit (формат protobuf-text, .prototxt), определяющим этапы прореживания, включая целевые значения разреженности и график сжатия. Примеры конфигураций и соответствующую документацию по схеме можно получить в выпуске Ambarella SDK. Чтобы обеспечить согласованность обучения, валидации и развертывания, используй конфигурацию обучения, если во время валидации требуется повторно подготовить модель, и всегда применяй ту же конфигурацию при экспорте сжатой контрольной точки.
Аргументы 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 достаточно велико, чтобы расписание из конфигурации завершилось; в журнале появится сообщение о начале сохранения контрольных точек. Если обучение завершится до окончания расписания, последняя эпоха все равно будет сохранена с предупреждением, но такую контрольную точку не следует развертывать.
Для достижения наилучшей точности сначала обучи модель обычным способом (или начни с предварительно обученной контрольной точки), а затем выполни короткое дообучение с компрессией, указав 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. Информацию об API среды выполнения см. в документации SDK по развертыванию.
Экспорт без SpongeTorch#
Если тебе не нужно прореживание SpongeTorch во время обучения, стандартный конвейер Ultralytics тоже позволяет получить модель, которую смогут скомпилировать инструменты SDK:
yolo export model=yolo26n.pt format=onnxСкомпилируй полученную модель ONNX с помощью инструментов компиляции SDK, которые самостоятельно выполняют посттренировочное квантование. Такой вариант упрощает процесс и не требует spongetorch во время обучения, но несколько снижает производительность во время выполнения и точность после квантования.
Применение в реальных условиях#
Модели Ultralytics YOLO на SoC Ambarella CVflow обеспечивают постоянно работающие системы компьютерного зрения на периферии:
- Камеры видеонаблюдения с ИИ: обнаружение людей и транспортных средств в реальном времени на IP-камерах 4K при энергопотреблении менее 3 Вт.
- Дроны и робототехника: обнаружение и отслеживание объектов на борту для навигации, инспекции и доставки на микросхемах класса CV5.
- Промышленная аналитика и аналитика в рознице: подсчет людей в нескольких видеопотоках, обнаружение средств индивидуальной защиты и мониторинг полок на периферийных устройствах.
Итоги#
В этом руководстве описан текущий процесс развертывания моделей Ultralytics YOLO на SoC Ambarella CVflow: обучение с учетом сжатия с помощью SpongeTorch (amba_config/amba_chipset), экспорт сжатой контрольной точки в ONNX, автономная компиляция в контрольную точку AmbaPB с помощью инструментов SDK, проверка на хосте через Ultralytics и преобразование в двоичный файл Cavalry для развертывания на устройстве с помощью SDK Ambarella.
О других целевых платформах периферийного ИИ см. руководства по Hailo, Rockchip RKNN, Sony IMX500, Qualcomm QNN, DEEPX и Axelera. Полный список форматов экспорта см. в документации по режиму экспорта и на странице интеграций.
Часто задаваемые вопросы#
Нет. Целевого формата
format="ambarella"не существует. Экспортируй модель в ONNX (при желании используй сжатие SpongeTorch черезamba_config), а затем скомпилируй модель ONNX в AmbaPB в автономном режиме с помощью инструментов компиляции SDK Ambarella.Можно использовать любую SoC на базе CVflow, поддерживаемую инструментами компиляции SDK, включая семейства CV72/CV75 для камер с ИИ и CV5/CV52 для дронов и робототехники. Аргумент
amba_chipsetзадает целевую платформу оптимизации SpongeTorch; при компиляции выбери соответствующую целевую платформу отдельно. Допустимые строки названий микросхем и доступность зависят от установленной версии SDK.SpongeTorch — это версия библиотеки сжатия моделей SpongeKit от Ambarella для PyTorch (у библиотеки также есть варианты для Caffe и TensorFlow). Она интегрирована в версию Ultralytics от Ambarella для неструктурированного прореживания во время обучения (квантование с учетом обучения планируется выпустить в будущем). Использовать ее необязательно: обычный экспорт Ultralytics в ONNX тоже можно скомпилировать с помощью инструментов компиляции SDK, которые сами выполняют квантование, хотя это несколько снижает производительность во время выполнения и точность после квантования.
Они являются проприетарными и недоступны на PyPI. Зарегистрируйся в Ambarella Developer Zone, чтобы запросить доступ к SDK. SDK включает инструменты компиляции (с
cvflowbackend), а отдельно распространяемый wheel-пакетspongetorchпоставляется вместе с ним.Запусти
yolo val model=model.ambapb.ckpt.onnx data=your_data.yamlс установленной версией Ultralytics от Ambarella. Бэкенд AmbaPB выполняет скомпилированную модель так, как она будет работать на вычислительном модуле CVflow, поэтому рассчитанное значение mAP учитывает все эффекты квантования компилятором.