libreyolo train

Entraîne un modèle sur un dataset et écrit les checkpoints, les métriques et les logs dans un répertoire de run. Chaque argument ci-dessous a une valeur par défaut issue de la définition de la commande, que la config d'entraînement propre à une famille de modèles peut remplacer.

Commande
libreyolo train
Requis
data
Sortie
Checkpoints, métriques et logs dans runs/train/<name> ; sans name=, le nom de run propre à la famille, comme yolo9_exp

Synopsis

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

Les arguments sont des paires key=value, et la forme POSIX fonctionne aussi : epochs=50 et --epochs 50 sont donc le même argument. Les booléens acceptent true et false : amp=false devient --no-amp là où le flag possède une forme négative.

Arguments

Modèle et données

ArgumentDéfautSignification
dataChemin vers le YAML du dataset (format YOLO, par exemple coco8.yaml). Requis
modelyolox-sNom du modèle ou chemin vers des poids
taskForçage explicite de la tâche : detect, segment, semantic, pose, classify, gaze, obb, point, depth
pretrainedtrueUtiliser des poids pré-entraînés. false construit l'architecture et entraîne à partir de zéro
allow_download_scriptsfalseAutoriser le Python embarqué dans les blocs de téléchargement du YAML de dataset

Boucle d'entraînement

ArgumentDéfautSignification
epochs300Époques d'entraînement
batch16Taille de batch. Avec plusieurs GPU, c'est le batch global, réparti également entre eux
imgsz640Taille des images d'entraînement : 640 (carré) ou 480x640 (HxW)
deviceautoAppareil : 0, cpu, mps, auto. Une liste de GPU comme 0,1 ou [0,1] entraîne sur ces GPU
workers4Workers du dataloader
cachefalseMettre les images en cache pour accélérer le chargement des données : ram, disk, true, false
seed0Graine aléatoire
resumeReprendre l'entraînement : true, ou un chemin vers un checkpoint
amptruePrécision mixte automatique
amp_dtypefloat16dtype de l'AMP CUDA : float16 ou bfloat16
cuda_graphfalseCapturer les passes avant et arrière de l'entraînement dans des CUDA graphs. GPU unique, familles prises en charge uniquement ; les autres s'exécutent en mode eager
compilefalseCompiler le réseau d'entraînement avec torch.compile : true, false, default, reduce-overhead, max-autotune, max-autotune-no-cudagraphs. GPU CUDA unique ; les autres runs s'entraînent en mode eager avec un avertissement
lorafalseFine-tuning LoRA, pour les familles transformer listées sous Notes
freezeGeler des couches : un nombre entier, une liste d'indices, ou des noms de modules

Distillation

ArgumentDéfautSignification
distill_modelEnseignant : un checkpoint de détecteur, ou un identifiant de modèle de fondation enseignant tel que dinov2 pour la distillation des caractéristiques du backbone
disPoids de la loss (fonction de perte) de distillation. La valeur par défaut publiée pour le type de loss si non défini
distill_loss_typemgdLoss de caractéristiques pour les enseignants détecteurs : mgd, cwd. Les enseignants de fondation utilisent toujours feat_mse

Optimiseur

ArgumentDéfautSignification
optimizersgdOptimiseur : sgd, adam, adamw
lr00.01Learning rate initial
momentum0.937Momentum de SGD, et coefficient du premier moment pour les optimiseurs Adam
weight_decay0.0005Régularisation L2
nesterovtrueMomentum de Nesterov
clip_max_normÉcrête la norme L2 du gradient à cette valeur avant chaque pas de l'optimiseur ; 0 désactive l'écrêtage. Si non défini, la valeur de la famille s'applique

Scheduler

ArgumentDéfautSignification
scheduleryoloxwarmcosType de schedule du LR
warmup_epochs5Durée du warmup
warmup_lr_start0.0LR initial du warmup
min_lr_ratio0.05Ratio de LR minimal
lr_drop100Époque de baisse du LR par paliers pour RF-DETR

Augmentation

ArgumentDéfautSignification
mosaic1.0Probabilité du mosaic
mixup1.0Probabilité du mixup
hsv_prob1.0Probabilité du jitter HSV
flip_prob0.5Probabilité de retournement horizontal
degrees10.0Amplitude de rotation, en plus et en moins, en degrés
translate0.1Ratio de translation
shear2.0Angle de cisaillement
mosaic_scale(0.1,2.0)Plage d'échelle du mosaic
mixup_scale(0.5,1.5)Plage d'échelle du mixup
no_aug_epochs15Désactiver l'augmentation pendant les N dernières époques

EMA

ArgumentDéfautSignification
ematrueMoyenne mobile exponentielle
ema_decay0.9998Facteur de décroissance de l'EMA

Validation pendant l'entraînement

ArgumentDéfautSignification
valtrueValider pendant l'entraînement
eval_interval10Valider toutes les N époques, et après la dernière époque
max_det300Nombre maximum de prédictions par image après le NMS de validation
eval_max_detPlafond de l'évaluateur COCO. La convention AP@100 de pycocotools si non défini
faster_coco_evaltrueUtiliser le backend C++ faster-coco-eval pour les métriques COCO s'il est installé ; repli sur pycocotools
save_plotsfalseEnregistrer les graphiques de validation finale pendant l'entraînement
patience50Patience de l'early stopping. 0 le désactive

Sortie

ArgumentDéfautSignification
projectruns/trainRacine du répertoire de sortie
nameNom de l'expérience. Si non défini, le run prend le nom qu'utilise le train() de la famille, comme yolo9_exp ou dfine_exp
exist_okfalseRéutiliser un répertoire de sortie existant
save_period10Enregistrer un checkpoint toutes les N époques
log_interval10Journaliser la loss tous les N batchs

Flags agent

ArgumentDéfautSignification
jsonfalseSortie JSON sur stdout
quietfalseSupprimer stderr
dry_runfalseRésoudre et afficher la config sans exécuter
help_jsonfalseDumper le schéma de la commande en JSON et quitter
ArgumentValeur par défautSignification
min_samples0Longueur minimale d'époque pour les petits datasets : si le dataset contient moins d'images, tire ce nombre d'échantillons par époque avec remise (0 = désactivé)
class_balancedFalseÉchantillonnage par facteur de répétition de type LVIS pour les datasets à longue traîne (désactivé par défaut)
cls_pw0.0Puissance de pondération inverse des fréquences en classification : 0 désactivée, 1 complète (poids de classe de moyenne 1 ; incompatible avec class_weights=True)
class_weightsFalseAnciens poids de loss de classification normalisés par échantillon (désactivé par défaut)
single_clsFalseEntraîne un détecteur pris en charge en ramenant toutes les étiquettes à la classe 0
classesNoneEntraîne un détecteur pris en charge uniquement sur ces identifiants de classe d'origine du dataset, séparés par des virgules (ex. '0,3,5') ; toute autre classe est écartée comme si elle n'était pas annotée. Les identifiants restent inchangés, sans renumérotation
average_best0Moyenne uniformément les N meilleurs checkpoints selon la métrique suivie dans weights/average.pt à la fin de l'entraînement (0 = désactivé)
export_checkFalseExporte en ONNX avant l'époque 1 et fait échouer l'exécution si l'export échoue (désactivé par défaut)
precise_bn0Recalcule les statistiques courantes de BatchNorm sur ce nombre d'images d'entraînement après la dernière époque (0 = désactivé)
aux_weightYOLO9 uniquement : poids de la loss de la branche auxiliaire PGI. Une valeur attache une nouvelle branche avec ce poids et 0 n'entraîne que la tête principale. Si non défini, la branche n'est attachée à 0.25 que lorsque les poids contiennent des tenseurs PGI ou que le run s'entraîne à partir de zéro
fliplrNoneProbabilité de retournement horizontal (alias de flip_prob dans l'écosystème)
flipud0.0Probabilité de retournement vertical
auto_augmentNonePolitique d'auto-augmentation de classification : randaugment, autoaugment, augmix (aucune par défaut)
erasing0.0Probabilité RandomErasing de classification, 0 <= erasing < 1
cutmix0.0Probabilité CutMix de classification (étiquettes souples)
scale0.5Plage d'aire RandomResizedCrop de classification : borne inférieure flottante ou (min,max) explicite
crop_pctNoneRatio de redimensionnement d'évaluation de classification avant le recadrage central (valeur native de la famille par défaut)
plot_samples8Images d'exemple dans le tracé de validation : 0 pour aucune, -1 pour chaque image validée (ne change pas les métriques)

Exemples

Basique
# coco8.yaml est fourni avec le paquet et télécharge ses 8 images au premier usage.libreyolo train model=LibreYOLO9s.pt data=coco8.yaml epochs=10 imgsz=640 batch=8
Vérifier d'abord la config résolue
# Affiche ce que le run utiliserait, valeurs par défaut de la famille# incluses, et quitte sans entraîner ni charger de données.libreyolo train model=LibreDFINEn.pt data=coco8.yaml epochs=10 dry_run=true
Run nommé avec une recette explicite
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

Notes

Les valeurs par défaut ci-dessus ne sont pas toujours celles utilisées

Chaque famille de modèles porte sa propre config d'entraînement, et là où cette config diffère de la config de base, sa valeur remplace la valeur par défaut de la commande pour tout argument que vous n'avez pas défini explicitement. Définir l'argument vous-même l'emporte toujours. libreyolo cfg affiche les valeurs par défaut de base et les surcharges par famille, ce qui est le moyen de voir ce qu'une famille donnée utilisera réellement.

imgsz est l'argument pour lequel cela compte le plus. La valeur par défaut de la commande est 640, qui n'est pas l'entrée native de tous les checkpoints : les tailles de détection publiées pour RF-DETR sont 384, 512, 576 et 704, et les checkpoints YOLOX n et t sont en 416. RF-DETR et DEIMv2 sont traités en ne transmettant imgsz que s'il a été défini explicitement, si bien que leur propre taille reste sinon en vigueur. Les autres familles reçoivent la valeur telle quelle et s'entraînent à cette taille. FOMO est la famille stricte : chaque taille n'accepte que son entrée native (96, 192 et 224), donc un run FOMO exige que imgsz soit réglé en conséquence, sinon il s'arrête sur une erreur. RF-DETR impose en plus que la valeur soit divisible par sa taille de patch multipliée par son nombre de fenêtres, et signale les deux tailles légales les plus proches lorsque ce n'est pas le cas.

Les arguments qu'une famille ignore

Toutes les familles ne lisent pas tous les arguments, et c'est sur ceux d'augmentation que cela se voit. RF-DETR, D-FINE, DEIM, DEIMv2, RT-DETRv4 et DINOv2 s'entraînent via des pipelines pass-through sans mosaic, sans mixup et sans déformation affine, si bien que mosaic, mixup, hsv_prob, degrees, translate, shear, mosaic_scale et mixup_scale n'atteignent rien chez elles. EC partage ce pipeline mais lit bien hsv_prob, degrees et translate quand sa tâche est pose. Les familles de classification ignorent cet ensemble sauf mixup, qui est pour elles un MixUp par batch, et elles lisent flip_prob. SegFormer, LingBot-Vision et NAFNet ignorent tout cet ensemble et flip_prob avec lui, parce que leur retournement s'applique à une probabilité fixe plutôt que configurable. YOLO-NAS ignore mosaic seul, puisqu'il augmente à la place avec une transformation affine par échantillon toujours active. RF-DETR en ignore trois autres au-delà de cette liste : optimizer, momentum et nesterov.

Définir l'un d'eux n'est pas une erreur. Le run écrit sur stderr une ligne qui nomme la famille et les arguments qu'elle ignorera, puis entraîne, et cette ligne est la liste faisant autorité pour la version installée. C'est aussi le seul signal, donc un run scripté avec quiet=true supprime cet avertissement en même temps que tout le reste sur stderr.

val=false est un cas voisin. Il met eval_interval à 0, ce qui désactive la validation pendant l'entraînement, dernière époque comprise, et le run n'écrit aucun best.pt.

Autres comportements à connaître

lora=true est accepté par RF-DETR, D-FINE, DEIM, DEIMv2, RT-DETR v1, v2 et v4, EC, GTR et ConvNeXt. Toute autre famille se termine avec config_unsupported plutôt que d'entraîner sans.

clip_max_norm est accepté par les familles dont la configuration d'entraînement le déclare : YOLOv9, YOLOv9-E2E et YOLOv9-P2, où il vaut 10 par défaut, et D-FINE, Dome-DETR, DEIM, DEIMv2, TinyFormer, RT-DETR, RT-DETRv2, RT-DETRv4, RF-DETR, DINOv2 et GTR, où il vaut 0.1 par défaut. Toute autre famille se termine avec config_unsupported, et une valeur négative ou non finie se termine avec config_type_error.

device=0,1 construit le modèle sur le premier GPU listé et transmet la liste à train(), qui démarre un processus par GPU. Voir l'entraînement multi-GPU.

RF-DETR n'a pas de transfert de la détection vers la segmentation. task=segment avec un checkpoint de segmentation RF-DETR charge ce checkpoint quel que soit son nom de fichier, parce que ce sont les métadonnées du checkpoint qui décident de la tâche, tandis qu'un checkpoint de détection s'arrête avec une erreur au lieu d'entraîner une tête de masques non entraînée.

pretrained=false combiné avec resume est refusé pour les familles qui prennent en charge l'entraînement à partir de zéro, puisque les deux demandent des choses opposées.

mosaic et mixup sont les orthographes en ligne de commande des champs de config mosaic_prob et mixup_prob ; sur un modèle de classification, mixup est à la place un MixUp par batch. Sur les familles dont le mixup ne s'applique qu'aux échantillons mosaic, mixup au-dessus de zéro avec mosaic à zéro ne se déclenche jamais, et le run le signale.

dry_run=true résout la référence du modèle, applique les valeurs par défaut de la famille et affiche la config avec laquelle il entraînerait. Il ne charge pas le dataset, c'est donc le moyen peu coûteux de confirmer qu'un argument a bien atteint la valeur que vous attendiez.

stdout porte l'objet de résultat final ; la progression et les avertissements vont sur stderr. Le code de sortie est 0 en cas de succès, 2 pour une erreur d'usage ou de configuration, 3 quand le dataset est introuvable ou illisible, 4 quand le modèle ne peut pas être chargé, et 1 pour les autres échecs d'exécution.

À voir aussi : libreyolo doctor pour vérifier un dataset avant de lancer un run, libreyolo monitor pour suivre un run dans le navigateur, libreyolo val pour mesurer le résultat.

Vérifié avec LibreYOLO v1.6.0.