libreyolo val

Ocenia jeden model na jednym splicie zbioru danych i wypisuje metryki. Zestaw metryk zależy od zadania modelu, a liczby są tymi samymi, z których powstaje wiersz benchmarku.

Polecenie
libreyolo val
Wymagane
model, data
Wyjście
Metryki na stdout. Wykresy i COCO JSON w runs/val/exp, jeśli zostaną zażądane

Składnia

bash
libreyolo val model=<name|path> data=<dataset.yaml> [key=value ...]

Argumenty to pary key=value, działa też forma POSIX, więc batch=8 i --batch 8 to ten sam argument.

Argumenty

ArgumentDomyślnieZnaczenie
modelŚcieżka do wag modelu lub nazwa CLI. Wymagane
dataŚcieżka do pliku YAML zbioru danych (format YOLO, np. coco8.yaml). Wymagane
data_dirBezpośredni katalog zbioru danych, z pominięciem ścieżki z pliku YAML
splitvalSplit zbioru danych: val, test, train
batch16Rozmiar batcha
imgszRozmiar obrazu: 640 (kwadrat) lub 480x640 (HxW). Gdy nie jest ustawiony, własny rozmiar wejścia modelu
conf0.001Próg pewności
iou0.6Próg IoU dla NMS
max_det300Maksymalna liczba predykcji na obraz po NMS
eval_max_detLimit ewaluatora COCO. Gdy nie jest ustawiony, konwencja AP@100 z pycocotools
faster_coco_evaltrueUżycie szybszego backendu C++ faster-coco-eval do metryk COCO, jeśli jest zainstalowany; w przeciwnym razie pycocotools
halffalseInferencja w FP16
amp_dtypefloat16Typ autocast CUDA przy half=true: float16 lub bfloat16
save_jsonfalseZapis wyników JSON w formacie COCO
save_plotsfalseZapis wykresów walidacji: metryki, AP dla poszczególnych klas, macierz pomyłek, próbki
workers4Wątki robocze dataloadera
deviceautoUrządzenie
projectruns/valKatalog główny wyjścia
nameexpNazwa eksperymentu
exist_okfalsePonowne użycie katalogu wyjściowego
allow_download_scriptsfalseZezwolenie na osadzony kod Pythona w blokach download w pliku YAML zbioru danych
jsonfalseWyjście JSON na stdout
quietfalseWyciszenie stderr
verbosetrueSzczegółowe wyjście
help_jsonfalseWypisanie schematu polecenia jako JSON i zakończenie

Przykłady

Podstawowe wywołanie
libreyolo val model=LibreYOLO9s.pt data=coco8.yaml
Wykresy i COCO JSON
libreyolo val model=LibreYOLO9s.pt data=coco8.yaml \  imgsz=640 batch=8 save_json=true save_plots=true \  project=runs/val name=yolo9s-coco8 exist_ok=true
Format maszynowy
libreyolo val model=LibreYOLO9s.pt data=coco8.yaml json=true quiet=true

Uwagi

Czym są te metryki

Wypisywany zestaw zależy od zadania modelu, a wyjście JSON używa tych samych kluczy.

Detekcja, segmentacja i obrócone ramki zwracają mAP50, mAP50_95, precision i recall. Gdy model przewiduje więcej niż jeden rodzaj wyjścia, obok pojawiają się grupy dla poszczególnych rodzajów: box_metrics, mask_metrics i obb_metrics, każda z tymi samymi czterema kluczami.

Klasyfikacja zwraca accuracy_top1 i accuracy_top5. Detekcja punktowa zwraca precision, recall, f1, MLE, MAE, RMSE i mAP_sweep. Estymacja głębi zwraca abs_rel, rmse, delta1, delta2 i delta3. Segmentacja semantyczna zwraca mIoU i pixel_accuracy. Restauracja obrazu zwraca PSNR i SSIM.

Wynik JSON zawiera też eval_backend, czyli nazwę i wersję biblioteki ewaluacyjnej COCO, która wyliczyła te liczby, dzięki czemu przy porównywaniu dwóch uruchomień wiadomo, czy oba zostały ocenione tym samym backendem.

Progi

Wartości domyślne są tutaj wartościami dla ewaluacji, a nie dla predykcji: conf wynosi 0.001, a iou 0.6, podczas gdy libreyolo predict używa 0.25 i 0.45. Podniesienie conf do progu wyświetlania obniża recall, a wraz z nim mAP, więc liczba uzyskana w ten sposób nie jest porównywalna z liczbą publikowaną.

imgsz domyślnie nie jest ustawiony, co oznacza własny rozmiar wejścia modelu. Ustawienie go powoduje ewaluację w podanym rozmiarze, i tak właśnie mierzy się checkpoint poza jego natywną rozdzielczością.

Zbiory danych, które się pobierają

Plik YAML zbioru danych, którego pole download jest adresem URL, pobiera dane przy pierwszym użyciu bez dodatkowego zezwolenia. Taki, który zawiera osadzony skrypt pobierający w Pythonie, wymaga allow_download_scripts=true, a polecenie ostrzega na stderr, że wykonywanie lokalnego kodu zostało włączone. Dołączone pliki coco8.yaml i coco128.yaml opierają się na adresach URL, więc nie wymagają niczego.

Wyjście i kody wyjścia

Metryki trafiają na stdout, a postęp na stderr. json=true wypisuje jeden obiekt z polem schema_version, a quiet=true wycisza stderr.

Kod wyjścia to 0 przy powodzeniu, 2 przy błędzie użycia lub konfiguracji, 3 gdy nie można znaleźć zbioru danych, 4 gdy nie można wczytać modelu, i 1 przy pozostałych błędach w trakcie działania.

Powiązane: libreyolo train, które uruchamia tę samą ewaluację według własnego harmonogramu przez eval_interval.

Zweryfikowano z LibreYOLO v1.5.0.