Все статьи

Альтернатива SuperGradients для компьютерного зрения в реальном времени

Xuban

SuperGradients была библиотекой Deci с открытым исходным кодом для обучения и основной платформой для YOLO-NAS — одного из самых точных когда-либо выпущенных детекторов реального времени. В мае 2024 года NVIDIA приобрела Deci, и SuperGradients затих. Последний релиз, 3.7.1, вышел 8 апреля 2024 года. Документация на supergradients.com стала недоступна. Открыты около 120 issues, а на issue с заголовком «Этот проект умер?» никто из сопровождающих не ответил. Это тоже своего рода ответ.

Репозиторий не архивирован, поэтому на первый взгляд кажется живым. На деле последствия отсутствия поддержки ощущаются сразу при установке: super-gradients фиксирует torchmetrics==0.8, конфликтующий с современными стеками PyTorch, и заодно подтягивает hydra, omegaconf, boto3 и tensorboard. С каждым месяцем эти зафиксированные версии всё хуже сочетаются с остальным окружением, и исправления не будет.

Но YOLO-NAS от этого не становится хуже. Большой вариант по-прежнему показывает 52.2 mAP на COCO с реальной скоростью работы. С моделью всё в порядке; сгорел её дом.

Те же веса в LibreYOLO

LibreYOLO напрямую загружает чекпойнты YOLO-NAS с CDN Deci через тот же API, который используется для всех остальных семейств моделей. Не нужно писать конфигурации hydra и распаковывать обёртку для предсказаний:

from libreyolo import LibreYOLO

model = LibreYOLO("LibreYOLONASs.pt")  # auto-downloads on first run
results = model("image.jpg", save=True)
print(results[0].boxes.xyxy)
print(results[0].boxes.conf)

Работают все варианты детекции S, M и L, а также оценка позы: замените файл на LibreYOLONASs-pose.pt, и получите ключевые точки COCO. Поскольку каждое семейство возвращает один и тот же объект Results, сравнить YOLO-NAS с RF-DETR или D-FINE на собственных данных можно одной строкой, без второй кодовой базы.

Обучение и экспорт, а не только инференс

В первую очередь SuperGradients была библиотекой для обучения, поэтому настоящая альтернатива должна поддерживать обучение. LibreYOLO дообучает YOLO-NAS на вашем датасете тем же вызовом, что и для всех остальных моделей:

from libreyolo import LibreYOLO

model = LibreYOLO("LibreYOLONASs.pt")
model.train(data="my-dataset.yaml", epochs=100, imgsz=640, batch=16)

Можно также обучить модель со случайной инициализацией, что важно для лицензирования (подробнее об этом ниже). Валидация возвращает метрики mAP для любого датасета в вашем формате, а экспорт поддерживает ONNX, TorchScript, OpenVINO, NCNN и TFLite. Это более широкий набор форматов экспорта, чем когда-либо поддерживала исходная библиотека для YOLO-NAS. Подробности приведены на странице документации YOLO-NAS, а более короткая заметка рассказывает, что YOLO-NAS по-прежнему поддерживается.

Когда старый репозиторий всё ещё подходит

Раздел без прикрас. Три случая, когда SuperGradients стоит оставить установленным:

CoreML. LibreYOLO не экспортирует YOLO-NAS в CoreML. Если вы выпускаете ПО для устройств Apple и вам нужен файл .mlpackage, в SuperGradients по-прежнему есть работающий путь.

TensorRT. SuperGradients документировала и тестировала процесс работы с TensorRT для YOLO-NAS, включая все нюансы размера батча. Поддержка TensorRT для этого семейства в LibreYOLO не протестирована.

Рецепты обучения с учётом квантизации. YOLO-NAS проектировали для INT8, а SuperGradients поставляла рецепты QAT, благодаря которым модель показывала себя особенно хорошо. LibreYOLO экспортирует модели с квантизацией INT8 и FP16, но аналогичных рецептов обучения в ней нет.

Репозиторий всё ещё работает, если закрепить окружение уровня 2024 года. Просто не стоит строить что-то новое на фундаменте, который никто не поддерживает.

О весах

Предобученные веса YOLO-NAS принадлежат Deci и выпущены под лицензией, запрещающей коммерческое использование. Эта лицензия следует за весами в любую библиотеку, которая их загружает. LibreYOLO не размещает и не зеркалирует эти веса: они скачиваются с общедоступного CDN Deci, а перед началом загрузки выводятся условия Deci. Для исследований и некоммерческой работы подойдёт любой из вариантов.

Если вам нужна YOLO-NAS для коммерческого использования, теперь есть понятный путь: сама архитектура распространяется под разрешительной лицензией, поэтому обучение с нуля на собственных данных создаёт модель, которая не основана ни на одном чекпойнте Deci. LibreYOLO поддерживает именно такой вариант: LibreYOLONAS(None, size="s").

Попробуйте

pip install libreyolo
from libreyolo import LibreYOLO

model = LibreYOLO("LibreYOLONASl.pt")
results = model("image.jpg", save=True)

LibreYOLO распространяется под лицензией MIT, работает в Linux, Mac и Windows, а также на GPU, Apple Silicon и обычном CPU без изменений кода. Один API охватывает YOLO-NAS, RF-DETR, D-FINE, DEIM, YOLOX, RTMDet и многие другие модели для детекции, сегментации, оценки позы, классификации, оценки глубины и трекинга.

Поставьте звезду на GitHub: github.com/LibreYOLO/libreyolo | Документация: libreyolo.com/docs