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.
pip install libreyoloPredykcja
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.
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)libreyolo predict model=LibreYOLONASs.pt save=True \ source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpgfrom 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 modelu | Wejście (px) | mAP 50-95 | Parametry (mln) |
|---|---|---|---|
| LibreYOLONASl | 640 | 56.3 | 66.98 |
| LibreYOLONASm | 640 | 55.4 | 51.18 |
| LibreYOLONASs | 640 | 51.8 | 19.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
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLONASs.pt")model.train(data="my-dataset.yaml", epochs=100, imgsz=640, batch=16)libreyolo train model=LibreYOLONASs.pt data=my-dataset.yaml \ epochs=100 imgsz=640 batch=16from 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.
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLONASs.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])libreyolo val model=LibreYOLONASs.pt data=my-dataset.yaml# 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=TrueEksport
| Zadanie | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Detection | Detection to ONNX: obsługiwane | Detection to TorchScript: obsługiwane | Detection to ExecuTorch: obsługiwane | Detection to TensorRT: obsługiwane | Detection to OpenVINO: obsługiwane | Detection to Paddle: obsługiwane | Detection to MNN: obsługiwane | Detection to RKNN: obsługiwane | Detection to ncnn: obsługiwane | Detection to TFLite: obsługiwane | Detection to CoreML: brak obsługi | Detection to Core AI: obsługiwane |
| Pose | Pose to ONNX: obsługiwane | Pose to TorchScript: obsługiwane | Pose to ExecuTorch: obsługiwane | Pose to TensorRT: obsługiwane | Pose to OpenVINO: obsługiwane | Pose to Paddle: obsługiwane | Pose to MNN: brak obsługi | Pose to RKNN: brak obsługi | Pose to ncnn: obsługiwane | Pose to TFLite: brak obsługi | Pose to CoreML: brak obsługi | Pose 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.
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLONASs.pt")model.export(format="onnx", imgsz=640)libreyolo export model=LibreYOLONASs.pt format=onnx imgsz=640from 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.