libreyolo train

Trenuje jeden model na jednym zbiorze danych i zapisuje checkpointy, metryki oraz logi w katalogu uruchomienia. Każdy argument poniżej ma wartość domyślną z definicji polecenia, którą może zastąpić własna konfiguracja trenowania rodziny modeli.

Polecenie
libreyolo train
Wymagany
data
Wynik
Checkpointy, metryki i logi w runs/train/exp

Składnia

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

Argumenty to pary key=value, działa też forma POSIX, więc epochs=50 i --epochs 50 to ten sam argument. Wartości logiczne przyjmują true i false: amp=false odpowiada --no-amp tam, gdzie flaga ma formę przeczącą.

Argumenty

Model i dane

ArgumentDomyślnieZnaczenie
dataŚcieżka do pliku YAML zbioru danych (format YOLO, np. coco8.yaml). Wymagany
modelyolox-sNazwa modelu lub ścieżka do wag
taskJawne nadpisanie zadania: detect, segment, semantic, pose, classify, gaze, obb, point, depth
pretrainedtrueUżycie wstępnie wytrenowanych wag. false buduje architekturę i trenuje od zera
allow_download_scriptsfalseZezwolenie na osadzony kod Pythona w blokach pobierania w pliku YAML zbioru danych

Pętla trenowania

ArgumentDomyślnieZnaczenie
epochs300Epoki trenowania
batch16Rozmiar batcha na urządzenie
imgsz640Rozmiar obrazu treningowego: 640 (kwadrat) lub 480x640 (HxW)
deviceautoUrządzenie: 0, cpu, mps, auto
workers4Procesy robocze dataloadera
cachefalseZapisywanie obrazów w pamięci podręcznej, aby przyspieszyć wczytywanie danych: ram, disk, true, false
seed0Ziarno losowości
resumeWznowienie trenowania: true lub ścieżka do checkpointu
amptrueAutomatyczna mieszana precyzja
amp_dtypefloat16Typ danych AMP na CUDA: float16 lub bfloat16
cuda_graphfalsePrzechwycenie przejścia w przód i wstecz do grafów CUDA. Tylko pojedyncze GPU i tylko obsługiwane rodziny; pozostałe działają w trybie eager
lorafalseDostrajanie LoRA, dla rodzin transformerowych wymienionych w sekcji Uwagi
freezeZamrożenie warstw: liczba całkowita, lista indeksów lub nazwy modułów

Destylacja

ArgumentDomyślnieZnaczenie
distill_modelNauczyciel: checkpoint detektora albo identyfikator nauczyciela fundamentalnego, taki jak dinov2, do destylacji cech z backbone
disWaga funkcji straty destylacji. Gdy nieustawione, publikowana wartość domyślna dla danego typu straty
distill_loss_typemgdStrata na cechach dla nauczycieli będących detektorami: mgd, cwd. Nauczyciele fundamentalni zawsze używają feat_mse

Optymalizator

ArgumentDomyślnieZnaczenie
optimizersgdOptymalizator: sgd, adam, adamw
lr00.01Początkowy współczynnik uczenia
momentum0.937Momentum SGD, a dla optymalizatorów Adam współczynnik pierwszego momentu
weight_decay0.0005Regularyzacja L2
nesterovtrueMomentum Nesterova

Harmonogram

ArgumentDomyślnieZnaczenie
scheduleryoloxwarmcosTyp harmonogramu LR
warmup_epochs5Czas trwania rozgrzewki
warmup_lr_start0.0Początkowy LR rozgrzewki
min_lr_ratio0.05Minimalny współczynnik LR
lr_drop100Epoka skokowego obniżenia LR w RF-DETR

Augmentacja

ArgumentDomyślnieZnaczenie
mosaic1.0Prawdopodobieństwo mosaic
mixup1.0Prawdopodobieństwo mixup
hsv_prob1.0Prawdopodobieństwo jitteru HSV
flip_prob0.5Prawdopodobieństwo odbicia poziomego
degrees10.0Zakres obrotu, plus minus, w stopniach
translate0.1Współczynnik przesunięcia
shear2.0Kąt ścinania
mosaic_scale(0.1,2.0)Zakres skali mosaic
mixup_scale(0.5,1.5)Zakres skali mixup
no_aug_epochs15Wyłączenie augmentacji przez ostatnie N epok

EMA

ArgumentDomyślnieZnaczenie
ematrueWykładnicza średnia krocząca
ema_decay0.9998Współczynnik zaniku EMA

Walidacja w trakcie trenowania

ArgumentDomyślnieZnaczenie
valtrueWalidacja w trakcie trenowania
eval_interval10Walidacja co N epok
max_det300Maksymalna liczba predykcji na obraz po NMS walidacji
eval_max_detLimit ewaluatora COCO. Gdy nieustawione, konwencja AP@100 z pycocotools
faster_coco_evaltrueUżycie backendu C++ faster-coco-eval do metryk COCO, gdy jest zainstalowany; w przeciwnym razie powrót do pycocotools
save_plotsfalseZapisanie końcowych wykresów walidacji w trakcie trenowania
patience50Cierpliwość early stopping (wczesne zatrzymanie). 0 wyłącza tę funkcję

Wyjście

ArgumentDomyślnieZnaczenie
projectruns/trainKatalog główny wyników
nameexpNazwa eksperymentu
exist_okfalsePonowne użycie istniejącego katalogu wyjściowego
save_period10Zapis checkpointu co N epok
log_interval10Logowanie straty co N batchy

Flagi dla agentów

ArgumentDomyślnieZnaczenie
jsonfalseWyjście JSON na stdout
quietfalseWyciszenie stderr
dry_runfalseUstalenie i wypisanie konfiguracji bez jej wykonania
help_jsonfalseZrzut schematu polecenia jako JSON i zakończenie

Przykłady

Podstawowy
# coco8.yaml jest częścią pakietu i przy pierwszym użyciu pobiera swoje 8 obrazów.libreyolo train model=LibreYOLO9s.pt data=coco8.yaml epochs=10 imgsz=640 batch=8
Najpierw sprawdzenie ustalonej konfiguracji
# Wypisuje ustawienia, których użyłoby uruchomienie, łącznie z domyślnymi# ustawieniami rodziny, i kończy działanie bez trenowania i wczytywania danych.libreyolo train model=LibreDFINEn.pt data=coco8.yaml epochs=10 dry_run=true
Nazwane uruchomienie z jawnym przepisem
libreyolo train model=LibreYOLO9s.pt data=coco8.yaml \  epochs=50 batch=8 optimizer=adamw lr0=0.001 weight_decay=0.0001 \  patience=20 save_period=5 project=runs/train name=yolo9s-coco8 exist_ok=true

Uwagi

Powyższe wartości domyślne nie zawsze są tymi używanymi

Każda rodzina modeli ma własną konfigurację trenowania i tam, gdzie różni się ona od bazowej, jej wartość zastępuje domyślną wartość polecenia dla każdego argumentu, który nie został ustawiony jawnie. Samodzielne ustawienie argumentu zawsze ma pierwszeństwo. libreyolo cfg wypisuje bazowe wartości domyślne oraz nadpisania dla poszczególnych rodzin, i to jest sposób na sprawdzenie, czego dana rodzina faktycznie użyje.

imgsz to argument, dla którego ma to największe znaczenie. Domyślną wartością polecenia jest 640, co nie jest natywnym wejściem każdego checkpointu: publikowane rozmiary detekcji RF-DETR to 384, 512, 576 i 704, a checkpointy YOLOX n i t mają 416. W przypadku RF-DETR i DEIMv2 imgsz jest przekazywany tylko wtedy, gdy został ustawiony jawnie, więc poza tym obowiązuje ich własny rozmiar. Pozostałe rodziny dostają podaną wartość i trenują z nią. FOMO jest tu najbardziej rygorystyczny: każdy rozmiar przyjmuje wyłącznie swoje natywne wejście (96, 192 i 224), więc uruchomienie FOMO wymaga dopasowania imgsz, inaczej kończy się błędem. RF-DETR wymaga dodatkowo, aby wartość dzieliła się przez rozmiar patcha pomnożony przez liczbę okien, i podaje dwa najbliższe dopuszczalne rozmiary, gdy tak nie jest.

Argumenty ignorowane przez rodzinę

Nie każda rodzina czyta każdy argument, a najbardziej widać to przy argumentach augmentacji. RF-DETR, D-FINE, DEIM, DEIMv2, RT-DETRv4 i DINOv2 trenują przez pipeline'y typu pass-through, bez mosaic, bez mixup i bez przekształcenia afinicznego, więc mosaic, mixup, hsv_prob, degrees, translate, shear, mosaic_scale i mixup_scale nic tam nie zmieniają. EC korzysta z tego samego pipeline'u, ale czyta hsv_prob, degrees i translate, gdy jego zadaniem jest estymacja pozy. Rodziny klasyfikacyjne, SegFormer i NAFNet ignorują cały ten zestaw, a wraz z nim flip_prob, ponieważ ich odbicie działa ze stałym prawdopodobieństwem, a nie konfigurowalnym. YOLO-NAS ignoruje sam mosaic, ponieważ zamiast tego stosuje stale włączone przekształcenie afiniczne na każdej próbce. RF-DETR ignoruje dodatkowo trzy kolejne argumenty spoza tej listy: optimizer, momentum i nesterov.

Ustawienie jednego z nich nie jest błędem. Uruchomienie zapisuje na stderr wiersz z nazwą rodziny i argumentami, które zostaną zignorowane, a następnie trenuje, i ten wiersz jest miarodajną listą dla zainstalowanej wersji. Jest to również jedyny sygnał, więc skryptowe uruchomienie z quiet=true wycisza to ostrzeżenie razem ze wszystkim innym na stderr.

val=false to powiązany przypadek. Dla większości rodzin ustawia eval_interval na 0; RF-DETR nie potrafi w ten sposób wyłączyć walidacji i zapisuje w logu, że zignorował to żądanie.

Inne zachowania, które warto znać

lora=true jest przyjmowane przez RF-DETR, D-FINE, DEIM, DEIMv2, RT-DETR v1, v2 i v4, EC oraz ConvNeXt. Każda inna rodzina kończy działanie z config_unsupported, zamiast trenować bez tego.

pretrained=false w połączeniu z resume jest odrzucane w rodzinach, które obsługują trenowanie od zera, ponieważ oba te ustawienia żądają przeciwnych rzeczy.

mosaic i mixup to zapis w wierszu poleceń pól konfiguracyjnych mosaic_prob i mixup_prob. W rodzinach, w których mixup działa tylko na próbkach mosaic, mixup powyżej zera przy mosaic równym zero nigdy się nie uruchomi, o czym uruchomienie informuje.

dry_run=true rozwiązuje odwołanie do modelu, stosuje domyślne ustawienia rodziny i wypisuje konfigurację, z którą trenowałoby uruchomienie. Nie wczytuje zbioru danych, więc jest to tani sposób na potwierdzenie, że argument przyjął oczekiwaną wartość.

stdout przenosi końcowy obiekt wyniku; postęp i ostrzeżenia trafiają na stderr. Kod wyjścia to 0 przy powodzeniu, 2 przy błędzie użycia lub konfiguracji, 3 gdy nie można znaleźć lub odczytać zbioru danych, 4 gdy nie można wczytać modelu, oraz 1 przy innych awariach w trakcie działania.

Powiązane: libreyolo doctor do sprawdzenia zbioru danych przed zdecydowaniem się na uruchomienie, libreyolo monitor do obserwowania uruchomienia w przeglądarce, libreyolo val do zmierzenia wyniku.

Zweryfikowano z LibreYOLO v1.5.0.