YOLO-NAS

Detektor konwolucyjny, którego backbone i moduł neck powstały w wyniku wyszukiwania architektury przez Deci.AI, zbudowany z bloków RepVGG świadomych kwantyzacji. Jego wagi należą do Deci.AI i są licencjonowane wyłącznie do użytku niekomercyjnego. LibreYOLO nie publikuje żadnej z nich.

Zadania
detection, pose
Rozmiary
s, m, l at 640 px
Instalacja
pip install libreyolo
Poziom obsługi
Główny, od wersji v1.1.0. Główne trenowalne detektory: otrzymują funkcje po modelach flagowych w tej samej fali wydań.
Projekt źródłowy
YOLO-NAS, autorzy: Deci.AI, licencja: Deci.AI proprietary, non-commercial. Publikacja, kod źródłowy
Licencje
Kod: Apache-2.0, wagi: Deci.AI proprietary, non-commercial. Użycie komercyjne

Instalacja

YOLO-NAS nie wymaga niczego poza pakietem podstawowym.

bash
pip install libreyolo

Predykcja

Punkt kontrolny, którego nazwy nie ma jeszcze na dysku, jest pobierany z publicznego CDN Deci, a nie z organizacji LibreYOLO, która nie udostępnia żadnych z tych wag. Przed rozpoczęciem transferu biblioteka raz na proces wyświetla warunki licencji Deci, a przed otwarciem pobranego pliku jego SHA-256 jest porównywane z przypiętą wartością. Dozwolone zastosowania opisano w sekcji licencjonowanie.

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Nazwa, której nie ma jeszcze na dysku, jest pobierana z CDN Deci. Przed# pobraniem wyświetlane są warunki licencji Deci; pobranie pliku je akceptuje.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
Poza
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Przyrostek -pose wybiera głowicę pozy i jej własny zestaw wag.model = LibreYOLO("LibreYOLONASs-pose.pt")result = model(SAMPLE_IMAGE) print(result.keypoints.xy)

Zwracany obiekt Results jest taki sam dla każdej rodziny, więc zamiana na inny detektor wymaga zmiany jednego wiersza. Parametr conf ustawia próg pewności, a iou próg NMS. Informacje o źródłach, strumieniowaniu i obsłudze wyników znajdziesz w sekcji predykcja.

Warianty

Detekcja i estymacja pozy korzystają z tej samej architektury z różnymi głowicami i przyjmują te same argumenty. Rozmiary w poniższej tabeli dotyczą detekcji. Estymacja pozy jest dostępna w tych rozmiarach oraz w jednym mniejszym. Głowica pozy przewiduje zestaw punktów kluczowych COCO.

Checkpoint modeluWejście (px)mAP 50-95Parametry (mln)
LibreYOLONASl64056.366.98
LibreYOLONASm64055.451.18
LibreYOLONASs64051.819.05

COCO val2017, 500 images. Wyniki zmierzono za pomocą zestawu benchmarkowego LibreYOLO i opublikowano w Vision Analysis, gdzie porównywane są opóźnienia na różnych urządzeniach i w różnych środowiskach uruchomieniowych oraz znajdują się pełne zapisy przebiegów.

Trenowanie

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
Od podstaw
from libreyolo import LibreYOLONAS # Nie są używane punkty kontrolne Deci: model zaczyna od losowych wag,# więc wynik trenowania pochodzi wyłącznie z własnych danych.model = LibreYOLONAS(None, size="s")model.train(data="my-dataset.yaml", imgsz=640, batch=16)

Gdy epochs, lr0 i amp nie zostaną podane, są ustalane osobno dla każdego zadania, więc przebieg estymacji pozy rozpoczyna się z innymi wartościami domyślnymi niż przebieg detekcji. Domyślnym optymalizatorem jest AdamW. Liczba klas pochodzi z pliku YAML zbioru danych, a głowica jest przebudowywana przed pierwszą epoką. W głowicy pozy liczba punktów kluczowych jest obsługiwana tak samo, więc punkt kontrolny pozy COCO można dostroić do szkieletu o innej liczbie punktów.

Dostrajanie zaczyna się od wag Deci, których dotyczy licencja Deci. Trenowanie losowo zainicjalizowanego modelu nie korzysta z żadnego punktu kontrolnego Deci, jak pokazuje trzeci fragment powyżej.

Informacje o zbiorach danych, augmentacji, wielu GPU i loggerach znajdziesz w sekcji trenowanie.

Walidacja

Metoda val() zwraca słownik kluczy metrics/ obejmujących precyzję, czułość, mAP 50 i mAP 50-95, mierzone na dowolnym zbiorze danych w formacie użytym do trenowania.

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
Walidacja na COCO
# Dołączony plik yaml COCO zawiera osadzony skrypt pobierania, dlatego wymaga# jawnego zezwolenia, chyba że zbiór danych jest już dostępny lokalnie.libreyolo val model=LibreYOLONASl.pt data=coco.yaml imgsz=640 \  allow_download_scripts=True

Eksport

ZadanieONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
DetectionDetection to ONNX: obsługiwaneDetection to TorchScript: obsługiwaneDetection to ExecuTorch: obsługiwaneDetection to TensorRT: obsługiwaneDetection to OpenVINO: obsługiwaneDetection to Paddle: obsługiwaneDetection to MNN: obsługiwaneDetection to RKNN: obsługiwaneDetection to ncnn: obsługiwaneDetection to TFLite: obsługiwaneDetection to CoreML: brak obsługiDetection to Core AI: obsługiwane
PosePose to ONNX: obsługiwanePose to TorchScript: obsługiwanePose to ExecuTorch: obsługiwanePose to TensorRT: obsługiwanePose to OpenVINO: obsługiwanePose to Paddle: obsługiwanePose to MNN: brak obsługiPose to RKNN: brak obsługiPose to ncnn: obsługiwanePose to TFLite: brak obsługiPose to CoreML: brak obsługiPose to Core AI: brak obsługi

Wyeksportowany artefakt jest ponownie ładowany przez LibreYOLO() na podstawie rozszerzenia pliku, więc plik .onnx lub .engine zachowuje się jak punkt kontrolny i zwraca ten sam obiekt Results. Obsługiwane jest także uruchamianie grafu w samym środowisku uruchomieniowym bez zainstalowanego LibreYOLO, ale wówczas samodzielnie trzeba zaimplementować przetwarzanie wstępne i końcowe. Każdy format instaluje inny dodatek i przyjmuje kilka własnych argumentów. Obie informacje znajdują się na stronie danego formatu.

Eksport jest kolejną kopią tych samych wag w innym kontenerze. Eksportowanie punktu kontrolnego Deci nie zmienia ani pochodzenia wag, ani obejmującej je licencji.

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
Użycie wyeksportowanego pliku
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Fabryka wybiera ścieżkę na podstawie rozszerzenia pliku, dlatego# artefakt ładuje się jak punkt kontrolny i zwraca ten sam obiekt Results.model = LibreYOLO("LibreYOLONASs.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

Punkty kontrolne

Nie ma żadnych do wyświetlenia. Licencja Deci zabrania redystrybucji, dlatego organizacja LibreYOLO nie publikuje żadnych wag YOLO-NAS, a pobieranie jest kierowane gdzie indziej. Nazwa w postaci LibreYOLONAS<size>.pt albo LibreYOLONAS<size>-pose.pt dla estymacji pozy jest mapowana na odpowiedni obiekt w publicznym CDN Deci.

W ten sposób można pobierać tylko punkty kontrolne, których SHA-256 jest przypięte w bibliotece. Każdy inny przypadek jest bezpiecznie odrzucany zamiast otwierania niezweryfikowanego pliku pickle innej firmy. Taki plik trzeba pobrać ręcznie i przekazać jako ścieżkę. Plik znajdujący się już na dysku jest ładowany ze swojej ścieżki, bez pobierania i kontroli sumy. Dotyczy to również pliku .pth Deci pod oryginalną nazwą, który jest rozpoznawany przez moduł ładujący.

Licencjonowanie

Sprawdź licencję w repozytorium konkretnych pobieranych wag na Hugging Face. Każdy checkpoint w organizacji LibreYOLO ma licencję, która nie zawsze jest taka sama w całej rodzinie. To repozytorium jest źródłem rozstrzygającym, a poniższe podsumowanie opisuje stan z chwili ostatniej weryfikacji tej strony.

To opis obowiązujących licencji, a nie porada prawna. Jeśli odpowiedź ma znaczenie komercyjne, przeczytaj licencje i zasięgnij własnej porady prawnej.

Oryginalna praca
YOLO-NAS, Deci.AI
Licencja projektu źródłowego
Deci.AI proprietary, non-commercial
Kod źródłowy projektu
github.com/Deci-AI/super-gradients
Kod LibreYOLO
MIT
Wagi
Deci.AI proprietary, non-commercial, rozpowszechniane przez autorów. LibreYOLO ich nie hostuje ani nie udostępnia kopii.
Interpretacja
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 nie udostępnia ani nie tworzy kopii lustrzanych tych wag. W organizacji LibreYOLO w Hugging Face nie ma niczego dla tej rodziny. Każde automatyczne pobieranie jest zamiast tego kierowane do publicznego CDN Deci, przed rozpoczęciem raz na proces wyświetla warunki Deci, a przed otwarciem pliku sprawdza go względem przypiętej sumy SHA-256.

Alternatywą jest trenowanie losowo zainicjalizowanego modelu. Architektura ma licencję Apache-2.0 w projekcie źródłowym i MIT tutaj, więc model wytrenowany w ten sposób na własnych danych nie pochodzi z żadnego punktu kontrolnego Deci.

Cytowanie

YOLO-NAS został opublikowany bez artykułu naukowego. Poniższa pozycja jest tą, o której cytowanie proszą jego autorzy, i dotyczy SuperGradients, biblioteki, w której model został wydany.

@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},
}

Skopiowano z bloku cytowania autorów w github.com/Deci-AI/super-gradients#citing.

Zweryfikowano z LibreYOLO v1.5.0. Tabele obsługi, checkpointy i wyniki benchmarków na tej stronie są generowane na podstawie wydanej biblioteki i opublikowanych wag, a nie wpisywane ręcznie.