Усі статті

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

Xuban

SuperGradients була бібліотекою Deci з відкритим кодом для навчання і домівкою YOLO-NAS, одного з найточніших детекторів реального часу з-поміж будь-коли випущених. У травні 2024 року NVIDIA придбала Deci, і SuperGradients затих. Останній випуск, 3.7.1, вийшов 8 квітня 2024 року. Документація на supergradients.com зникла. Близько 120 питань залишаються відкритими, а на питання з назвою «Цей проєкт мертвий?» супровідники не відповіли. Це саме по собі теж відповідь.

Репозиторій не архівовано, тому на перший погляд він здається активним. Насправді покинутість відчувається одразу під час встановлення: 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