Ultralytics YOLO27:

Экспорт 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 обрабатывает весь конвейер камеры с ИИ.

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

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

  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, затем настрой 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-*.whl

AutoBackend находит cvflowbackend с помощью команды tv2 инструментов компиляции SDK (tv2 -libpath cvflowbackend), поэтому инструменты компиляции SDK должны быть установлены и находиться в PATH до запуска инференса или валидации скомпилированных моделей.

Файл конфигурации SpongeKit#

Работа SpongeTorch задается файлом конфигурации SpongeKit (формат protobuf-text, .prototxt), определяющим этапы прореживания, включая целевые значения разреженности и график сжатия. Примеры конфигураций и соответствующую документацию по схеме можно получить в выпуске Ambarella SDK. Чтобы обеспечить согласованность обучения, валидации и развертывания, используй конфигурацию обучения, если во время валидации требуется повторно подготовить модель, и всегда применяй ту же конфигурацию при экспорте сжатой контрольной точки.

Аргументы 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. Информацию об 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 учитывает все эффекты квантования компилятором.

Комментарии