YOLO-NAS

Згортковий детектор, бекбон і neck якого створено пошуком архітектури Deci.AI та побудовано з блоків RepVGG, пристосованих до квантування. Ваги належать Deci.AI, ліцензовані лише для некомерційного використання, і LibreYOLO не публікує жодних із них.

Задачі
detection, pose
Розміри
s, m, l at 640 px
Встановлення
pip install libreyolo
Рівень підтримки
Основний, починаючи з v1.1.0. Основні придатні до навчання детектори: функції з'являються після флагманських моделей у тій самій хвилі випуску.
Першоджерело
YOLO-NAS, автори: Deci.AI, ліцензія Deci.AI proprietary, non-commercial. Стаття, джерело
Ліцензії
Код: Apache-2.0, ваги: Deci.AI proprietary, non-commercial. Комерційне використання

Установлення

YOLO-NAS не потребує нічого додаткового до базового пакета.

bash
pip install libreyolo

Передбачення

Якщо контрольної точки із заданою назвою ще немає на диску, вона завантажується з публічного CDN Deci, а не з організації LibreYOLO, де ці ваги не розміщено. Перед початком передавання бібліотека один раз за процес виводить умови ліцензії Deci, а перед відкриттям завантаженого файла перевіряє його SHA-256 за закріпленим значенням. Дозволи за цими умовами описано в розділі ліцензування.

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Назва, якої ще немає на диску, завантажується з CDN Deci. Спочатку# виводяться умови ліцензії Deci; завантаження файла означає їх прийняття.model = LibreYOLO("LibreYOLONASs.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
CLI
libreyolo predict model=LibreYOLONASs.pt save=True \  source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg
Поза
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Суфікс -pose вибирає голову пози та її власний набір ваг.model = LibreYOLO("LibreYOLONASs-pose.pt")result = model(SAMPLE_IMAGE) print(result.keypoints.xy)

Повернений об'єкт Results однаковий для всіх сімейств, тому для переходу на інший детектор достатньо змінити один рядок. conf задає поріг упевненості, а iou задає поріг NMS. Докладніше про джерела, потокове оброблення та роботу з результатами дивіться в розділі передбачення.

Варіанти

Виявлення об'єктів та оцінювання пози використовують ту саму архітектуру з різними головами й приймають однакові аргументи. Розміри в таблиці нижче стосуються виявлення; модель пози опубліковано в цих розмірах і ще в одному меншому. Голова пози передбачає набір ключових точок COCO.

Контрольна точкаВхід (пікс.)mAP 50-95Параметри (млн)
LibreYOLONASl64056.366.98
LibreYOLONASm64055.451.18
LibreYOLONASs64051.819.05

COCO val2017, 500 images. Виміряно засобами бенчмарку LibreYOLO й опубліковано на сторінці Vision Analysis, де порівнюють затримку на різному обладнанні та в різних середовищах виконання, а також зберігають повні записи запусків.

Навчання

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLONASs.pt")model.train(data="my-dataset.yaml", epochs=100, imgsz=640, batch=16)
CLI
libreyolo train model=LibreYOLONASs.pt data=my-dataset.yaml \  epochs=100 imgsz=640 batch=16
З нуля
from libreyolo import LibreYOLONAS # Контрольна точка Deci не використовується: модель починає з випадкових ваг,# тому результат запуску походить лише з ваших даних.model = LibreYOLONAS(None, size="s")model.train(data="my-dataset.yaml", imgsz=640, batch=16)

Якщо epochs, lr0 та amp не задано, їх значення визначаються окремо для кожного завдання, тому запуск оцінювання пози починається з інших типових значень, ніж запуск виявлення. Типово оптимізатором є AdamW. Кількість класів береться з YAML датасету, а голову перебудовано відповідно до неї перед першою епохою. Для голови пози кількість ключових точок обробляється так само, тому контрольну точку пози COCO можна донавчити на скелеті іншого розміру.

Донавчання починається з ваг Deci, на які поширюється ліцензія Deci. Навчання випадково ініціалізованої моделі взагалі не залучає контрольної точки Deci, як показано в третьому фрагменті вище.

Докладніше про датасети, аугментацію, кілька GPU та засоби журналювання дивіться в розділі навчання.

Валідація

val() повертає словник ключів metrics/, що охоплюють точність, повноту, mAP 50 і mAP 50-95, виміряні на будь-якому датасеті у форматі, на якому проводилося навчання.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLONASs.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])
CLI
libreyolo val model=LibreYOLONASs.pt data=my-dataset.yaml
На COCO
# Вбудований файл COCO yaml містить убудований скрипт завантаження, тому# потрібен явний дозвіл, якщо датасету ще немає локально.libreyolo val model=LibreYOLONASl.pt data=coco.yaml imgsz=640 \  allow_download_scripts=True

Експорт

ЗадачаONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
DetectionDetection to ONNX: підтримуєтьсяDetection to TorchScript: підтримуєтьсяDetection to ExecuTorch: підтримуєтьсяDetection to TensorRT: підтримуєтьсяDetection to OpenVINO: підтримуєтьсяDetection to Paddle: підтримуєтьсяDetection to MNN: підтримуєтьсяDetection to RKNN: підтримуєтьсяDetection to ncnn: підтримуєтьсяDetection to TFLite: підтримуєтьсяDetection to CoreML: не підтримуєтьсяDetection to Core AI: підтримується
PosePose to ONNX: підтримуєтьсяPose to TorchScript: підтримуєтьсяPose to ExecuTorch: підтримуєтьсяPose to TensorRT: підтримуєтьсяPose to OpenVINO: підтримуєтьсяPose to Paddle: підтримуєтьсяPose to MNN: не підтримуєтьсяPose to RKNN: не підтримуєтьсяPose to ncnn: підтримуєтьсяPose to TFLite: не підтримуєтьсяPose to CoreML: не підтримуєтьсяPose to Core AI: не підтримується

Експортований артефакт завантажується назад через LibreYOLO() за суфіксом файла, тому файл .onnx або .engine поводиться як контрольна точка й повертає той самий об'єкт Results. Також підтримується запуск графа в чистому середовищі виконання без установленої LibreYOLO, але тоді попереднє та подальше оброблення потрібно реалізувати самостійно. Кожен формат установлює окремий додатковий пакет і приймає кілька власних аргументів. Обидва аспекти описано на сторінці цього формату.

Експорт створює ще одну копію тих самих ваг в іншому контейнері. Експорт контрольної точки Deci не змінює ні походження ваг, ні ліцензію, що на них поширюється.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLONASs.pt")model.export(format="onnx", imgsz=640)
CLI
libreyolo export model=LibreYOLONASs.pt format=onnx imgsz=640
Використання експортованого файла
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Фабрика визначає маршрут за суфіксом файла, тому експортований артефакт# завантажується як будь-яка контрольна точка й повертає той самий об'єкт Results.model = LibreYOLO("LibreYOLONASs.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

Контрольні точки

Перелік порожній. Ліцензія Deci забороняє повторне розповсюдження, тому організація LibreYOLO не публікує ваг YOLO-NAS, а завантаження відбувається з іншого джерела: назва у формі LibreYOLONAS<size>.pt або LibreYOLONAS<size>-pose.pt для пози відповідає об'єкту в публічному CDN Deci.

Так можна отримати лише контрольні точки, SHA-256 яких закріплено в бібліотеці. Для всього іншого операцію відхилено без відкриття неперевіреного стороннього pickle. Такий файл потрібно завантажити вручну й передати як шлях. Файл, який уже є на диску, завантажується за своїм шляхом без завантаження з мережі й перевірки контрольної суми. Це також стосується файла Deci .pth під початковою назвою, яку розпізнає завантажувач.

Ліцензування

Перевіряйте ліцензію в репозиторії Hugging Face конкретних ваг, які завантажуєте. Кожна контрольна точка в організації LibreYOLO має ліцензію, і вона не завжди однакова для всього сімейства. Цей репозиторій є авторитетним джерелом, а наведене нижче резюме описує умови на момент останньої перевірки сторінки.

Це опис відповідних ліцензій, а не юридична консультація. Якщо відповідь має комерційне значення, самостійно прочитайте ліцензії та зверніться по юридичну консультацію.

Оригінальна робота
YOLO-NAS, Deci.AI
Ліцензія першоджерела
Deci.AI proprietary, non-commercial
Джерело першоджерела
github.com/Deci-AI/super-gradients
Код LibreYOLO
MIT
Ваги
Deci.AI proprietary, non-commercial, поширюється авторами. LibreYOLO не розміщує й не дублює ці ваги.
Тлумачення
Two licenses apply here and they are not the same. The SuperGradients source this port follows is Apache-2.0 and LibreYOLO's own implementation is MIT, so nothing restricts the architecture or the training code. Deci's published checkpoints are a different matter: the YOLO-NAS license grants a revocable, non-transferable right to use them and nothing more. It forbids redistribution and sublicensing, forbids offering them as a managed or remote service, restricts modification and reverse engineering, and rules out commercial use, including any model running in a production environment, unless you hold a separate agreement with Deci. LibreYOLO therefore does not mirror them, and prints those terms once before the download starts. Weights trained from a randomly initialized model on your own data derive from no Deci checkpoint.

LibreYOLO не розміщує й не дзеркалює ці ваги: для цього сімейства в організації LibreYOLO на Hugging Face нічого немає. Кожне автоматичне завантаження натомість звертається до публічного CDN Deci, один раз за процес виводить умови Deci перед початком і перевіряється за закріпленим SHA-256 до відкриття файла.

Альтернативою є навчання випадково ініціалізованої моделі. Оригінальна архітектура має ліцензію Apache-2.0, а ця реалізація має ліцензію MIT, тому модель, навчена таким способом на ваших даних, не походить від контрольної точки Deci.

Цитування

YOLO-NAS випущено без статті. Нижче наведено запис, який просять використовувати автори; він стосується SuperGradients, бібліотеки, у складі якої випущено модель.

@misc{supergradients,
  doi = {10.5281/ZENODO.7789328},
  url = {https://zenodo.org/record/7789328},
  author = {Aharon,  Shay and {Louis-Dupont} and {Ofri Masad} and Yurkova,  Kate and {Lotem Fridman} and {Lkdci} and Khvedchenya,  Eugene and Rubin,  Ran and Bagrov,  Natan and Tymchenko,  Borys and Keren,  Tomer and Zhilko,  Alexander and {Eran-Deci}},
  title = {Super-Gradients},
  publisher = {GitHub},
  journal = {GitHub repository},
  year = {2021},
}

Скопійовано з блоку цитування авторів на сторінці github.com/Deci-AI/super-gradients#citing.

Перевірено з LibreYOLO v1.5.0. Таблиці підтримки, контрольні точки й результати бенчмарків на цій сторінці згенеровано з випущеної бібліотеки та опублікованих ваг, а не написано вручну.