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
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
| Argument | Domyślnie | Znaczenie |
|---|---|---|
data | Ścieżka do pliku YAML zbioru danych (format YOLO, np. coco8.yaml). Wymagany | |
model | yolox-s | Nazwa modelu lub ścieżka do wag |
task | Jawne nadpisanie zadania: detect, segment, semantic, pose, classify, gaze, obb, point, depth | |
pretrained | true | Użycie wstępnie wytrenowanych wag. false buduje architekturę i trenuje od zera |
allow_download_scripts | false | Zezwolenie na osadzony kod Pythona w blokach pobierania w pliku YAML zbioru danych |
Pętla trenowania
| Argument | Domyślnie | Znaczenie |
|---|---|---|
epochs | 300 | Epoki trenowania |
batch | 16 | Rozmiar batcha. Przy kilku GPU jest to batch globalny, dzielony równo między nie |
imgsz | 640 | Rozmiar obrazu treningowego: 640 (kwadrat) lub 480x640 (HxW) |
device | auto | Urządzenie: 0, cpu, mps, auto. Lista GPU, taka jak 0,1 lub [0,1], trenuje na tych GPU |
workers | 4 | Procesy robocze dataloadera |
cache | false | Zapisywanie obrazów w pamięci podręcznej, aby przyspieszyć wczytywanie danych: ram, disk, true, false |
seed | 0 | Ziarno losowości |
resume | Wznowienie trenowania: true lub ścieżka do checkpointu | |
amp | true | Automatyczna mieszana precyzja |
amp_dtype | float16 | Typ danych AMP na CUDA: float16 lub bfloat16 |
cuda_graph | false | Przechwycenie 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 |
compile | false | Kompilacja 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 |
lora | false | Dostrajanie LoRA, dla rodzin transformerowych wymienionych w sekcji Uwagi |
freeze | Zamrożenie warstw: liczba całkowita, lista indeksów lub nazwy modułów |
Destylacja
| Argument | Domyślnie | Znaczenie |
|---|---|---|
distill_model | Nauczyciel: checkpoint detektora albo identyfikator nauczyciela fundamentalnego, taki jak dinov2, do destylacji cech z backbone | |
dis | Waga funkcji straty destylacji. Gdy nieustawione, publikowana wartość domyślna dla danego typu straty | |
distill_loss_type | mgd | Strata na cechach dla nauczycieli będących detektorami: mgd, cwd. Nauczyciele fundamentalni zawsze używają feat_mse |
Optymalizator
| Argument | Domyślnie | Znaczenie |
|---|---|---|
optimizer | sgd | Optymalizator: sgd, adam, adamw |
lr0 | 0.01 | Początkowy współczynnik uczenia |
momentum | 0.937 | Momentum SGD, a dla optymalizatorów Adam współczynnik pierwszego momentu |
weight_decay | 0.0005 | Regularyzacja L2 |
nesterov | true | Momentum Nesterova |
clip_max_norm | Obcina normę L2 gradientu do tej wartości przed każdym krokiem optymalizatora; 0 wyłącza obcinanie. Bez ustawienia obowiązuje wartość rodziny |
Harmonogram
| Argument | Domyślnie | Znaczenie |
|---|---|---|
scheduler | yoloxwarmcos | Typ harmonogramu LR |
warmup_epochs | 5 | Czas trwania rozgrzewki |
warmup_lr_start | 0.0 | Początkowy LR rozgrzewki |
min_lr_ratio | 0.05 | Minimalny współczynnik LR |
lr_drop | 100 | Epoka skokowego obniżenia LR w RF-DETR |
Augmentacja
| Argument | Domyślnie | Znaczenie |
|---|---|---|
mosaic | 1.0 | Prawdopodobieństwo mosaic |
mixup | 1.0 | Prawdopodobieństwo mixup |
hsv_prob | 1.0 | Prawdopodobieństwo jitteru HSV |
flip_prob | 0.5 | Prawdopodobieństwo odbicia poziomego |
degrees | 10.0 | Zakres obrotu, plus minus, w stopniach |
translate | 0.1 | Współczynnik przesunięcia |
shear | 2.0 | Kąt ścinania |
mosaic_scale | (0.1,2.0) | Zakres skali mosaic |
mixup_scale | (0.5,1.5) | Zakres skali mixup |
no_aug_epochs | 15 | Wyłączenie augmentacji przez ostatnie N epok |
EMA
| Argument | Domyślnie | Znaczenie |
|---|---|---|
ema | true | Wykładnicza średnia krocząca |
ema_decay | 0.9998 | Współczynnik zaniku EMA |
Walidacja w trakcie trenowania
| Argument | Domyślnie | Znaczenie |
|---|---|---|
val | true | Walidacja w trakcie trenowania |
eval_interval | 10 | Walidacja co N epok oraz po ostatniej epoce |
max_det | 300 | Maksymalna liczba predykcji na obraz po NMS walidacji |
eval_max_det | Limit ewaluatora COCO. Gdy nieustawione, konwencja AP@100 z pycocotools | |
faster_coco_eval | true | Użycie backendu C++ faster-coco-eval do metryk COCO, gdy jest zainstalowany; w przeciwnym razie powrót do pycocotools |
save_plots | false | Zapisanie końcowych wykresów walidacji w trakcie trenowania |
patience | 50 | Cierpliwość early stopping (wczesne zatrzymanie). 0 wyłącza tę funkcję |
Wyjście
| Argument | Domyślnie | Znaczenie |
|---|---|---|
project | runs/train | Katalog główny wyników |
name | Nazwa eksperymentu. Bez ustawienia uruchomienie dostaje nazwę używaną przez train() rodziny, na przykład yolo9_exp lub dfine_exp | |
exist_ok | false | Ponowne użycie istniejącego katalogu wyjściowego |
save_period | 10 | Zapis checkpointu co N epok |
log_interval | 10 | Logowanie straty co N batchy |
Flagi dla agentów
| Argument | Domyślnie | Znaczenie |
|---|---|---|
json | false | Wyjście JSON na stdout |
quiet | false | Wyciszenie stderr |
dry_run | false | Ustalenie i wypisanie konfiguracji bez jej wykonania |
help_json | false | Zrzut schematu polecenia jako JSON i zakończenie |
| Argument | Domyślnie | Znaczenie |
|---|---|---|
min_samples | 0 | Minimalna 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_balanced | False | Próbkowanie ze współczynnikiem powtórzeń w stylu LVIS dla zbiorów z długim ogonem (domyślnie wyłączone) |
cls_pw | 0.0 | Potę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_weights | False | Starsze wagi funkcji straty klasyfikacji normalizowane względem próbek (domyślnie wyłączone) |
single_cls | False | Trenowanie obsługiwanego detektora ze wszystkimi etykietami mapowanymi na klasę 0 |
classes | None | Trenowanie 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_best | 0 | Równomierne uśrednienie N najlepszych checkpointów według obserwowanej metryki do weights/average.pt na końcu trenowania (0 = wyłączone) |
export_check | False | Eksport ONNX przed epoką 1 i przerwanie uruchomienia, jeśli eksport się nie powiedzie (domyślnie wyłączone) |
precise_bn | 0 | Ponowne obliczenie bieżących statystyk BatchNorm z tylu obrazów treningowych po ostatniej epoce (0 = wyłączone) |
aux_weight | Tylko 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 | |
fliplr | None | Prawdopodobieństwo odbicia poziomego (alias flip_prob używany w ekosystemie) |
flipud | 0.0 | Prawdopodobieństwo odbicia pionowego |
auto_augment | None | Polityka automatycznej augmentacji klasyfikacji: randaugment, autoaugment, augmix (domyślnie brak) |
erasing | 0.0 | Prawdopodobieństwo RandomErasing w klasyfikacji, 0 <= erasing < 1 |
cutmix | 0.0 | Prawdopodobieństwo CutMix w klasyfikacji (miękkie etykiety) |
scale | 0.5 | Zakres obszaru RandomResizedCrop w klasyfikacji: dolna granica zmiennoprzecinkowa lub jawne (min,max) |
crop_pct | None | Współczynnik zmiany rozmiaru przed centralnym wycięciem podczas ewaluacji klasyfikacji (domyślnie natywna wartość rodziny modelu) |
plot_samples | 8 | Przykładowe obrazy na wykresie walidacji: 0 wyłącza, -1 wybiera każdy walidowany obraz (nie zmienia metryk) |
Przykłady
# 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# 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=truelibreyolo 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=trueUwagi
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.