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/<name>; bez name= nazwa uruchomienia własna dla rodziny, na przykład yolo9_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. Przy kilku GPU jest to batch globalny, dzielony równo między nie
imgsz640Rozmiar obrazu treningowego: 640 (kwadrat) lub 480x640 (HxW)
deviceautoUrządzenie: 0, cpu, mps, auto. Lista GPU, taka jak 0,1 lub [0,1], trenuje na tych GPU
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
compilefalseKompilacja trenowanej sieci przez torch.compile: true, false, default, reduce-overhead, max-autotune, max-autotune-no-cudagraphs. Tylko pojedyncze GPU z CUDA; pozostałe uruchomienia trenują w trybie eager z ostrzeżeniem
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
clip_max_normObcina normę L2 gradientu do tej wartości przed każdym krokiem optymalizatora; 0 wyłącza obcinanie. Bez ustawienia obowiązuje wartość rodziny

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 oraz po ostatniej epoce
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
nameNazwa eksperymentu. Bez ustawienia uruchomienie dostaje nazwę używaną przez train() rodziny, na przykład yolo9_exp lub dfine_exp
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
ArgumentDomyślnieZnaczenie
min_samples0Minimalna długość epoki dla małych zbiorów: jeśli zbiór ma mniej obrazów, losuje tyle próbek na epokę ze zwracaniem (0 = wyłączone)
class_balancedFalsePróbkowanie ze współczynnikiem powtórzeń w stylu LVIS dla zbiorów z długim ogonem (domyślnie wyłączone)
cls_pw0.0Potęga ważenia odwrotnością częstości w klasyfikacji: 0 wyłącza, 1 daje pełne ważenie (wagi klas ze średnią 1; nie można łączyć z class_weights=True)
class_weightsFalseStarsze wagi funkcji straty klasyfikacji normalizowane względem próbek (domyślnie wyłączone)
single_clsFalseTrenowanie obsługiwanego detektora ze wszystkimi etykietami mapowanymi na klasę 0
classesNoneTrenowanie obsługiwanego detektora tylko na podanych oryginalnych identyfikatorach klas zbioru, oddzielonych przecinkami (np. '0,3,5'); pozostałe klasy są odrzucane jak nieoznaczone. Identyfikatory pozostają bez zmian, bez zagęszczania
average_best0Równomierne uśrednienie N najlepszych checkpointów według obserwowanej metryki do weights/average.pt na końcu trenowania (0 = wyłączone)
export_checkFalseEksport ONNX przed epoką 1 i przerwanie uruchomienia, jeśli eksport się nie powiedzie (domyślnie wyłączone)
precise_bn0Ponowne obliczenie bieżących statystyk BatchNorm z tylu obrazów treningowych po ostatniej epoce (0 = wyłączone)
aux_weightTylko YOLO9: waga funkcji straty gałęzi pomocniczej PGI. Wartość dołącza nową gałąź z tą wagą, a 0 trenuje tylko główną głowicę. Bez ustawienia gałąź jest dołączana z wagą 0.25 tylko wtedy, gdy wagi zawierają tensory PGI albo uruchomienie trenuje od zera
fliplrNonePrawdopodobieństwo odbicia poziomego (alias flip_prob używany w ekosystemie)
flipud0.0Prawdopodobieństwo odbicia pionowego
auto_augmentNonePolityka automatycznej augmentacji klasyfikacji: randaugment, autoaugment, augmix (domyślnie brak)
erasing0.0Prawdopodobieństwo RandomErasing w klasyfikacji, 0 <= erasing < 1
cutmix0.0Prawdopodobieństwo CutMix w klasyfikacji (miękkie etykiety)
scale0.5Zakres obszaru RandomResizedCrop w klasyfikacji: dolna granica zmiennoprzecinkowa lub jawne (min,max)
crop_pctNoneWspółczynnik zmiany rozmiaru przed centralnym wycięciem podczas ewaluacji klasyfikacji (domyślnie natywna wartość rodziny modelu)
plot_samples8Przykładowe obrazy na wykresie walidacji: 0 wyłącza, -1 wybiera każdy walidowany obraz (nie zmienia metryk)

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 ignorują ten zestaw z wyjątkiem mixup, który oznacza dla nich batch-MixUp, i czytają flip_prob. SegFormer, LingBot-Vision 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. Ustawia eval_interval na 0, co wyłącza walidację w trakcie trenowania, łącznie z ostatnią epoką, a uruchomienie nie zapisuje best.pt.

Inne zachowania, które warto znać

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

clip_max_norm jest przyjmowane przez rodziny, których konfiguracja trenowania go deklaruje: YOLOv9, YOLOv9-E2E i YOLOv9-P2, gdzie domyślnie wynosi 10, oraz D-FINE, Dome-DETR, DEIM, DEIMv2, TinyFormer, RT-DETR, RT-DETRv2, RT-DETRv4, RF-DETR, DINOv2 i GTR, gdzie domyślnie wynosi 0.1. Każda inna rodzina kończy działanie z config_unsupported, a wartość ujemna lub nieskończona kończy z config_type_error.

device=0,1 buduje model na pierwszym wymienionym GPU i przekazuje listę do train(), który uruchamia jeden proces na każde GPU. Zobacz trenowanie na wielu GPU.

RF-DETR nie ma transferu z detekcji do segmentacji. task=segment z checkpointem segmentacji RF-DETR ładuje ten checkpoint niezależnie od nazwy pliku, ponieważ o zadaniu decydują metadane checkpointu, natomiast checkpoint detekcji kończy się błędem zamiast trenować nieuczoną głowicę masek.

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 modelu klasyfikacyjnym mixup oznacza zamiast tego batch-MixUp. 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.6.0.