libreyolo doctor

Uruchamia zestaw kontroli kondycji zbioru danych do detekcji i zgłasza to, co zaszkodziłoby trenowaniu: brakujące pliki, błędne etykiety, uszkodzone obrazy, wyciek między podziałami i nierównowagę klas.

Polecenie
libreyolo doctor
Wymagane
data
Wyjście
Raport wykrytych problemów na stdout. Kod wyjścia 1, gdy znaleziono błędy

Składnia

bash
libreyolo doctor <data.yaml> [key=value ...]

Zbiór danych jest argumentem pozycyjnym, a data=<path> jest akceptowane jako alternatywa. Podanie obu z różnymi wartościami kończy się błędem config_conflict. Wszystko inne to pary key=value, a forma POSIX również działa, więc imgsz=1024 i --imgsz 1024 to ten sam argument.

Argumenty

ArgumentDomyślnieZnaczenie
dataPozycyjny. Plik YAML zbioru danych w formacie detekcji YOLO, np. coco8.yaml. Wymagany
imgsz640Rozmiar obrazu treningowego używany w kontrolach opartych na pikselach, takich jak drobne obiekty
fastfalsePomija dekodowanie obrazów, co usuwa kontrole uszkodzeń, duplikatów i wycieku
skipRozdzielone przecinkami identyfikatory kontroli lub rodziny do pominięcia, np. images,labels.tiny_object
onlyRozdzielone przecinkami identyfikatory kontroli lub rodziny do wyłącznego uruchomienia
strictfalseOstrzeżenia również powodują niezerowy kod wyjścia, na potrzeby bramek CI
downloadfalseZezwala na pobranie zbioru danych z adresu URL, jeśli go brakuje. Nigdy skryptów
jsonfalseWynik w formacie JSON na stdout
quietfalseWycisza stderr
help_jsonfalseWypisuje schemat polecenia jako JSON i kończy działanie

Rodziny kontroli

skip i only przyjmują pełny identyfikator kontroli albo prefiks rodziny, więc images wybiera każdą kontrolę images.*.

RodzinaObejmuje
configSam plik YAML zbioru danych: brakujące names, nc niezgodne z names, brakujące podziały, nierozwiązywalna ścieżka path, zduplikowane nazwy klas
filesParowanie obrazów i etykiet: brakujące etykiety, brakujące obrazy, osierocone etykiety, nieobsługiwane rozszerzenia, kolizje wielkości liter
labelsZawartość etykiet: składnia, linie wielokątów, identyfikatory klas poza zakresem, współrzędne poza zakresem, zdegenerowane ramki, drobne obiekty, ogromne ramki, ekstremalne proporcje, zduplikowane ramki, zatłoczone obrazy, identyczne pliki
imagesDane pikselowe: uszkodzone pliki, orientacja EXIF, nietypowe tryby kolorów, drobne lub ekstremalne wymiary, jednolite obrazy, duplikaty dokładne i przybliżone
splitsWyciek między podziałami, dokładny i przybliżony
balanceRozkład klas: klasy bez instancji lub z niewielką ich liczbą, nierównowaga, pokrycie podziałów, udział tła, skośność podziałów

Przykłady

Podstawowe użycie
# download=true pozwala dołączonemu coco8.yaml pobrać obrazy, jeśli ich brakuje.libreyolo doctor coco8.yaml download=true
Szybki przebieg, bez dekodowania obrazów
libreyolo doctor coco8.yaml download=true fast=true
Bramka CI na wybranych kontrolach
libreyolo doctor coco8.yaml download=true strict=true json=true \  only=labels,files,config

Uwagi

Kody wyjścia

0, gdy nie znaleziono błędów, 1, gdy którykolwiek z wykrytych problemów jest błędem. Przy strict=true ostrzeżenia również podnoszą kod wyjścia do 1, co jest ustawieniem odpowiednim dla bramki CI.

Problemy z użyciem mają własne kody: 2 dla nieznanego identyfikatora kontroli lub rodziny w skip albo only, 3, gdy nie można odnaleźć zbioru danych, oraz 3, gdy zbiór danych nie ma struktury detekcyjnej.

Wybór jest rozstrzygany przed skanowaniem

skip i only są rozstrzygane względem rejestru kontroli, zanim cokolwiek zostanie odczytane z dysku, więc literówka powoduje błąd natychmiast, a nie po długim przebiegu przez obrazy. Selektor, który niczego nie dopasowuje, jest błędem, a komunikat wymienia znane rodziny.

Jeśli kombinacja skip, only i fast nie pozostawia żadnych kontroli do uruchomienia, jest to również błąd, a nie ciche przejście.

Pobieranie

Zbiór danych nie jest pobierany, dopóki nie ustawiono download=true, i wykonywane są wyłącznie pobrania z adresów URL. Osadzony w pliku YAML zbioru danych skrypt pobierania w Pythonie nigdy nie jest uruchamiany przez to polecenie, niezależnie od flagi.

Zakres

Kontrole są napisane dla zbiorów danych do detekcji. Zbiór danych, którego etykiety mają strukturę pozy, segmentacji lub obróconych ramek, jest rozpoznawany i odrzucany z data_invalid, zamiast być oceniany według niewłaściwych reguł.

Wynik

Raport dla człowieka trafia na stdout, a json=true zastępuje go strukturalnym obiektem zawierającym liczby zbiorcze, statystyki zbioru danych, każdy wykryty problem oraz listę pominiętych kontroli.

Powiązane: libreyolo train, uruchomienie, przed którym to polecenie ma być wykonywane.

Zweryfikowano z LibreYOLO v1.5.0.