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
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
| Argument | Défaut | Signification |
|---|---|---|
data | Chemin vers le YAML du dataset (format YOLO, par exemple coco8.yaml). Requis | |
model | yolox-s | Nom du modèle ou chemin vers des poids |
task | Forçage explicite de la tâche : detect, segment, semantic, pose, classify, gaze, obb, point, depth | |
pretrained | true | Utiliser des poids pré-entraînés. false construit l'architecture et entraîne à partir de zéro |
allow_download_scripts | false | Autoriser le Python embarqué dans les blocs de téléchargement du YAML de dataset |
Boucle d'entraînement
| Argument | Défaut | Signification |
|---|---|---|
epochs | 300 | Époques d'entraînement |
batch | 16 | Taille de batch. Avec plusieurs GPU, c'est le batch global, réparti également entre eux |
imgsz | 640 | Taille des images d'entraînement : 640 (carré) ou 480x640 (HxW) |
device | auto | Appareil : 0, cpu, mps, auto. Une liste de GPU comme 0,1 ou [0,1] entraîne sur ces GPU |
workers | 4 | Workers du dataloader |
cache | false | Mettre les images en cache pour accélérer le chargement des données : ram, disk, true, false |
seed | 0 | Graine aléatoire |
resume | Reprendre l'entraînement : true, ou un chemin vers un checkpoint | |
amp | true | Précision mixte automatique |
amp_dtype | float16 | dtype de l'AMP CUDA : float16 ou bfloat16 |
cuda_graph | false | Capturer 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 |
compile | false | Compiler 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 |
lora | false | Fine-tuning LoRA, pour les familles transformer listées sous Notes |
freeze | Geler des couches : un nombre entier, une liste d'indices, ou des noms de modules |
Distillation
| Argument | Défaut | Signification |
|---|---|---|
distill_model | Enseignant : 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 | |
dis | Poids 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_type | mgd | Loss de caractéristiques pour les enseignants détecteurs : mgd, cwd. Les enseignants de fondation utilisent toujours feat_mse |
Optimiseur
| Argument | Défaut | Signification |
|---|---|---|
optimizer | sgd | Optimiseur : sgd, adam, adamw |
lr0 | 0.01 | Learning rate initial |
momentum | 0.937 | Momentum de SGD, et coefficient du premier moment pour les optimiseurs Adam |
weight_decay | 0.0005 | Régularisation L2 |
nesterov | true | Momentum 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
| Argument | Défaut | Signification |
|---|---|---|
scheduler | yoloxwarmcos | Type de schedule du LR |
warmup_epochs | 5 | Durée du warmup |
warmup_lr_start | 0.0 | LR initial du warmup |
min_lr_ratio | 0.05 | Ratio de LR minimal |
lr_drop | 100 | Époque de baisse du LR par paliers pour RF-DETR |
Augmentation
| Argument | Défaut | Signification |
|---|---|---|
mosaic | 1.0 | Probabilité du mosaic |
mixup | 1.0 | Probabilité du mixup |
hsv_prob | 1.0 | Probabilité du jitter HSV |
flip_prob | 0.5 | Probabilité de retournement horizontal |
degrees | 10.0 | Amplitude de rotation, en plus et en moins, en degrés |
translate | 0.1 | Ratio de translation |
shear | 2.0 | Angle 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_epochs | 15 | Désactiver l'augmentation pendant les N dernières époques |
EMA
| Argument | Défaut | Signification |
|---|---|---|
ema | true | Moyenne mobile exponentielle |
ema_decay | 0.9998 | Facteur de décroissance de l'EMA |
Validation pendant l'entraînement
| Argument | Défaut | Signification |
|---|---|---|
val | true | Valider pendant l'entraînement |
eval_interval | 10 | Valider toutes les N époques, et après la dernière époque |
max_det | 300 | Nombre maximum de prédictions par image après le NMS de validation |
eval_max_det | Plafond de l'évaluateur COCO. La convention AP@100 de pycocotools si non défini | |
faster_coco_eval | true | Utiliser le backend C++ faster-coco-eval pour les métriques COCO s'il est installé ; repli sur pycocotools |
save_plots | false | Enregistrer les graphiques de validation finale pendant l'entraînement |
patience | 50 | Patience de l'early stopping. 0 le désactive |
Sortie
| Argument | Défaut | Signification |
|---|---|---|
project | runs/train | Racine du répertoire de sortie |
name | Nom 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_ok | false | Réutiliser un répertoire de sortie existant |
save_period | 10 | Enregistrer un checkpoint toutes les N époques |
log_interval | 10 | Journaliser la loss tous les N batchs |
Flags agent
| Argument | Défaut | Signification |
|---|---|---|
json | false | Sortie JSON sur stdout |
quiet | false | Supprimer stderr |
dry_run | false | Résoudre et afficher la config sans exécuter |
help_json | false | Dumper le schéma de la commande en JSON et quitter |
| Argument | Valeur par défaut | Signification |
|---|---|---|
min_samples | 0 | Longueur 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_balanced | False | Échantillonnage par facteur de répétition de type LVIS pour les datasets à longue traîne (désactivé par défaut) |
cls_pw | 0.0 | Puissance 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_weights | False | Anciens poids de loss de classification normalisés par échantillon (désactivé par défaut) |
single_cls | False | Entraîne un détecteur pris en charge en ramenant toutes les étiquettes à la classe 0 |
classes | None | Entraî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_best | 0 | Moyenne 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_check | False | Exporte en ONNX avant l'époque 1 et fait échouer l'exécution si l'export échoue (désactivé par défaut) |
precise_bn | 0 | Recalcule les statistiques courantes de BatchNorm sur ce nombre d'images d'entraînement après la dernière époque (0 = désactivé) |
aux_weight | YOLO9 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 | |
fliplr | None | Probabilité de retournement horizontal (alias de flip_prob dans l'écosystème) |
flipud | 0.0 | Probabilité de retournement vertical |
auto_augment | None | Politique d'auto-augmentation de classification : randaugment, autoaugment, augmix (aucune par défaut) |
erasing | 0.0 | Probabilité RandomErasing de classification, 0 <= erasing < 1 |
cutmix | 0.0 | Probabilité CutMix de classification (étiquettes souples) |
scale | 0.5 | Plage d'aire RandomResizedCrop de classification : borne inférieure flottante ou (min,max) explicite |
crop_pct | None | Ratio de redimensionnement d'évaluation de classification avant le recadrage central (valeur native de la famille par défaut) |
plot_samples | 8 | Images d'exemple dans le tracé de validation : 0 pour aucune, -1 pour chaque image validée (ne change pas les métriques) |
Exemples
# 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# 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=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=trueNotes
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.