Ultralytics YOLO27: Запишись в список ожидания.
Get Started

Экспорт моделей 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, затем настрой SDK Ambarella CVflow, в который входят инструменты компиляции и библиотека cvflowbackend, и установи распространяемый вместе с ним пакет 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), поэтому перед запуском инференса или валидации скомпилированных моделей эти инструменты должны быть установлены и находиться в 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 Tools#

Скомпилируй экспортированную модель ONNX для целевого чипсета с помощью инструментов компиляции SDK, следуя руководству по компиляции SDK. Инструменты сопоставляют граф с AI-движком 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, выполняя модель так, как она будет работать на 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, бэкенд считывает из него имена классов, stride и сведения о задаче. По умолчанию бэкенд использует режим инференса CVflow acinf; чтобы записывать сведения о входных и выходных данных для отладки, задай переменную окружения ULTRALYTICS_AMBAPB_DEBUG=1.

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

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

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

Загрузи бинарный файл Cavalry на устройство Ambarella с помощью среды выполнения Ambarella SDK. Предварительная и последующая обработка должны соответствовать параметрам, для которых была скомпилирована модель обнаружения: входные данные 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 обеспечивают постоянно работающий компьютерный анализ на периферии:

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

Итоги#

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

Руководства по другим целевым платформам для периферийного AI смотри здесь: Hailo, Rockchip RKNN, Sony IMX500, Qualcomm QNN, DEEPX и Axelera. Полный список форматов экспорта смотри в документации по режиму Export и на странице интеграций.

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

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

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

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

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

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

Комментарии