Ultralytics YOLO27 : Inscris-toi sur la liste d’attente.
Get Started
Développer avec Ultralytics Platform·Entraîner et évaluer·Leçon 5/10
Leçonintermédiaire

Entraîner, interpréter et ajuster finement les exécutions

Lance une exécution cloud dans les limites de ton budget, évalue-la à partir de ses courbes par époque et effectue un ajustement fin sans que l’optimiseur par défaut ignore ton taux d’apprentissage.

Un GPU cloud est facturé chaque minute pendant laquelle une exécution vouée à l’échec continue, et l’erreur d’ajustement fin la plus courante ne coûte rien, mais gaspille discrètement l’exécution : l’optimiseur par défaut ignore le taux d’apprentissage que tu définis. Cette leçon entraîne un vrai modèle sur le jeu de données medical pills, interprète ses courbes à l’aide d’une règle de décision et effectue un ajustement fin pour que tes paramètres soient réellement appliqués.

Résultat

Tu peux lancer une exécution d’entraînement sur la plateforme à un coût connu, décider à partir de ses courbes de l’arrêter, de la poursuivre ou de la conserver, et effectuer un ajustement fin à partir d’un modèle antérieur avec le taux d’apprentissage souhaité.

Parcours accéléré
Si tu connais déjà les bases, voici la version courte.
  1. Clique sur Nouveau modèle, choisis un modèle de base YOLO26 et ton jeu de données, puis active Enregistrer la version du jeu de données.

  2. Conserve 100 époques, la taille de lot automatique et une taille d’image de 640, sauf si tu as une raison de faire autrement ; consulte l’estimation du coût.

  3. Évalue l’exécution : si les résultats s’améliorent encore à la dernière époque, ajoute des époques ; s’ils stagnent tandis que la perte de validation augmente, corrige les données.

  4. Pour effectuer un ajustement fin avec ton propre lr0, définis aussi optimizer sur SGD ou AdamW ; auto ignore lr0.

  5. Entraîne le modèle localement avec project="username/project" et ULTRALYTICS_API_KEY pour transmettre une exécution à la plateforme.

Pratique

Lancer une exécution#

Clique sur Nouveau modèle sur une page de projet ou de jeu de données. L’onglet Entraînement cloud te guide dans les paramètres suivants :

Boîte de dialogue Entraîner un nouveau modèle d’Ultralytics Platform, avec yolo26n sélectionné comme modèle de base, le jeu de données COCO8, 100 époques, une taille de lot automatique, le GPU RTX PRO 6000, le solde du compte et un coût estimé de 0,03 $

ParamètrePar défautÀ modifier quand
Modèle de baseChoisis-en un sous Officiel (YOLO26 est recommandé)Pour effectuer un ajustement fin, choisis ton exécution antérieure sous Mes modèles
Jeu de données—Active toujours Enregistrer la version du jeu de données pour associer l’exécution à ses données
Époques100Test rapide (10–20) ou très grands jeux de données
Taille de lot-1 (s’adapte automatiquement à la mémoire du GPU)Tu as besoin de deux exécutions pour que la comparaison soit parfaitement équitable
Taille de l’image640Les objets sont petits : augmente-la (le curseur s’arrête à 1280 ; l’éditeur YAML accepte jusqu’à 4096)
Paramètres avancésValeurs par défautPlus de 50 arguments model.train() en YAML, dont l’optimiseur, le taux d’apprentissage et l’augmentation des données

Les arguments sont les mêmes que ceux acceptés localement par model.train(...), et la page du modèle affiche ensuite une commande yolo train que tu peux copier, avec les valeurs non définies par défaut.

Choisir le GPU et établir le budget de l’exécution#

CatégorieExemples (VRAM, prix horaire)Adapté à
Entrée de gammeRTX 2000 Ada (16 Go, 0,24 $), RTX A5000 (24 Go, 0,27 $), RTX 4090 (24 Go, 0,69 $)Tests rapides, modèles nano et petits modèles
IntermédiaireL40S (48 Go, 0,86 $), RTX 5090 (32 Go, 0,99 $), A100 SXM (80 Go, 1,49 $)Modèles moyens, lots plus volumineux
Par défautRTX PRO 6000 (96 Go, 2,09 $)La plupart des tâches
Haut de gammeH100 SXM (80 GB, 3,29 $), H200 SXM (141 GB, 4,39 $)Grands jeux de données quand le temps compte
Pro et EnterpriseB200 (180 GB, 5,89 $), B300 (288 GB, 7,39 $)Les tâches les plus volumineuses

La carte de coût estime la durée et le prix avant le démarrage : environ 0,23 $ pour 1 000 images × YOLO26n × 100 époques sur le RTX PRO 6000 par défaut, et environ 1,56 $ pour 5 000 images × YOLO26s × 100 époques sur un H100 SXM, qui entraîne environ 3,4× plus vite qu’un RTX 4090. La facturation se base sur le temps GPU réel : les exécutions terminées, annulées et échouées sont facturées dès qu’un GPU a démarré, une exécution nécessite un solde couvrant son estimation (au moins 15 minutes de temps GPU), et les exécutions actives s’arrêtent si le solde devient négatif. Active donc le rechargement automatique dans Settings > Billing pour les tâches longues. Si tu sélectionnes un GPU moins cher que le RTX PRO 6000, tu peux bénéficier gratuitement de ce dernier lorsque la capacité gérée par Ultralytics est inactive, tout en étant facturé au tarif du GPU sélectionné.

Règles de décision : teste rapidement un nouveau jeu de données avec 10 à 20 époques sur le GPU par défaut. Passe à un H100 ou H200 lorsqu’une exécution prend des heures et que quelqu’un l’attend. Choisis un GPU moins cher, pas plus rapide, lorsque l’utilisation du GPU reste faible.

Surveiller l’exécution#

L’onglet Train de la page du modèle diffuse les données dans trois sous-onglets. Charts trace les métriques, les pertes d’entraînement et de validation, ainsi que le taux d’apprentissage pour chaque époque ; Console conserve les 2 000 dernières lignes et arrête immédiatement l’exécution en cas de traceback ou d’erreur CUDA de mémoire insuffisante ; System affiche l’utilisation, la mémoire et la température du GPU :

Onglet Train du modèle dans Ultralytics Platform, affichant quatre cartes récapitulatives des métriques et le sous-onglet Charts avec les courbes de précision, de rappel et de mAP50-95 par époque

Onglet Train du modèle dans Ultralytics Platform avec le sous-onglet System ouvert, affichant une carte de l’hôte avec le modèle de GPU et les graphiques d’utilisation du CPU et de la RAM par époque

Une exécution qui ne rapporte rien pendant 4 heures est marquée comme échouée. Le meilleur checkpoint est téléversé périodiquement, donc une exécution annulée conserve sa meilleure époque à ce stade, et les alertes Slack peuvent t’informer de la réussite ou de l’échec des exécutions.

Exemple pratique : entraîner, diffuser et analyser une exécution#

Tu peux entraîner où que ce soit et suivre quand même l’exécution dans Platform. Avec une clé API obtenue dans Settings > API Keys et exportée sous la forme ULTRALYTICS_API_KEY, un project de la forme username/project diffuse les graphiques, la console et le meilleur checkpoint dans ce projet :

from ultralytics import YOLO

# export ULTRALYTICS_API_KEY="..." first to stream this run into your Platform project
model = YOLO("yolo26n.pt")
results = model.train(data="medical-pills.yaml", epochs=10, imgsz=320, project="username/pill-inspection", name="v1-baseline")
print(f"mAP50-95 {results.box.map:.3f}, best checkpoint: {model.trainer.best}")
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95)
                   all         23        399       0.97      0.957      0.977      0.659
mAP50-95 0.659, best checkpoint: .../runs/detect/username/pill-inspection/v1-baseline/weights/best.pt

La même commande s’exécute sur les GPU de Platform lorsque tu cliques sur New Model ; en local, elle a pris moins de deux minutes sur le CPU d’un ordinateur portable avec imgsz=320. Le results.csv de l’exécution contient les séries par époque tracées dans le sous-onglet Charts. Quelques lignes suffisent donc à transformer « surveiller les courbes » en règle :

import pandas as pd

df = pd.read_csv("results.csv")  # the per-epoch metrics behind the Charts subtab
df.columns = df.columns.str.strip()
m = df["metrics/mAP50-95(B)"]
best_epoch = int(df.loc[m.idxmax(), "epoch"])
recent_gain = m.iloc[-1] - m.iloc[-4]  # change over the last 3 epochs
val_loss = df["val/box_loss"]
print(f"epochs={len(df)} best mAP50-95={m.max():.3f} at epoch {best_epoch}")
print(f"gain over last 3 epochs: {recent_gain:+.3f}")
print(f"val box loss: {val_loss.iloc[0]:.3f} -> {val_loss.iloc[-1]:.3f}")
if recent_gain < 0.005 and val_loss.iloc[-1] >= val_loss.iloc[-4]:
    print("verdict: plateaued - stop, and fix the data before training longer")
elif best_epoch == len(df):
    print("verdict: still improving at the last epoch - more epochs should help")
else:
    print("verdict: converged - keep best.pt")
epochs=10 best mAP50-95=0.659 at epoch 10
gain over last 3 epochs: +0.028
val box loss: 1.367 -> 1.045
verdict: still improving at the last epoch - more epochs should help

La meilleure époque est la dernière, mAP50-95 a augmenté de 2,8 points au cours des trois dernières époques et la perte de validation continue de diminuer : cette exécution de 10 époques s’est arrêtée trop tôt, et une exécution plus longue ou un ajustement fin sera utile. Applique ces trois mêmes indicateurs à toute exécution de Platform dans le sous-onglet Charts : la position de la meilleure époque, le gain récent et l’évolution de la perte de validation.

Ajuster un modèle antérieur#

Choisis ton modèle précédent dans My Models comme modèle de base ; Platform crée un nouveau modèle qui repart de ce checkpoint et laisse l’ancien inchangé. En général, on recommande un taux d’apprentissage plus faible, mais avec le paramètre par défaut optimizer: auto, l’entraînement choisit son propre optimiseur et son propre taux d’apprentissage et ignore lr0. La console le précise dans les premières lignes :

optimizer: 'optimizer=auto' found, ignoring 'lr0=0.01' and determining best 'optimizer' and 'lr0' automatically...
optimizer: AdamW(lr=0.002, momentum=0.9) with parameter groups 114 weight(decay=0.0), 126 weight(decay=0.0005), 126 bias(decay=0.0)

Définis explicitement optimizer dans Advanced Settings pour que la valeur soit prise en compte. Voici les journaux de l’ajustement fin du modèle des pilules pendant 5 époques supplémentaires avec optimizer: SGD et lr0: 0.001 :

optimizer: SGD(lr=0.001, momentum=0.937) with parameter groups 114 weight(decay=0.0), 126 weight(decay=0.0005), 126 bias(decay=0.0)
                   all         23        399      0.969      0.962      0.983      0.687

mAP50-95 est passé de 0.659 à 0.687. Dans la prochaine leçon, tu soumettras ce candidat à une étape de validation avant sa promotion.

Boîte de dialogue Train New Model d’Ultralytics Platform avec Advanced Settings développé, affichant l’éditeur YAML et des paramètres d’entraînement tels que epochs, batch, imgsz, patience et seed

Pour reproduire une exécution antérieure, ouvre son tableau Training Configuration sur la page du modèle, choisis Copy JSON et colle le résultat dans Advanced Settings. Le guide d’ajustement fin explique le gel des couches, et le guide de réglage des hyperparamètres explique les balayages systématiques.

Pièges#

Le taux d’apprentissage de ton réglage fin est ignoré

Symptôme : tu définis lr0: 0.001, et la console affiche ignoring 'lr0=...'. Correctif : avec optimizer: auto, l’entraînement choisit lui-même l’optimiseur et le taux d’apprentissage. Définis optimizer sur SGD ou AdamW en même temps que lr0, puis vérifie la ligne optimizer: dans la console.

Payer pour un GPU sous-utilisé

Symptôme : le sous-onglet System indique une utilisation du GPU bien inférieure à 80 % pendant toute l’exécution. Correctif : le goulot d’étranglement est le chargement des données, pas le GPU ; un GPU plus rapide ne ferait qu’augmenter les coûts. Choisis un GPU moins cher ou augmente la taille du lot si la mémoire le permet.

Poursuivre l’entraînement au-delà du point de non-retour

Symptôme : le mAP50-95 de validation stagne depuis 10 époques, tandis que la perte de validation augmente lentement. Correctif : annule l’entraînement. Le meilleur point de contrôle obtenu jusqu’ici est conservé, et le prochain gain viendra des données (leçons 3 et 4), pas d’un plus grand nombre d’époques.

Essayer

Entraîne un modèle YOLO26n sur ton jeu de données (dans le cloud avec Save Dataset Version, ou en local avec diffusion via project="username/project") pendant 10 à 20 époques. Exécute read_run.py sur son results.csv ou applique les trois mêmes vérifications dans son sous-onglet Charts. Puis ajuste-le finement avec un optimizer et un lr0 explicites, et vérifie que la ligne optimizer: de la console utilise tes valeurs.

Terminé lorsque
Tu as terminé la leçon lorsque tous les éléments suivants sont réunis.
  • Une exécution terminée figure dans ton projet Platform et est associée à une version de jeu de données ou à un jeu de données ul://.

  • Tu as consigné la décision concernant l’exécution (arrêter, continuer ou conserver) ainsi que les trois chiffres qui la justifient.

  • La console d’une exécution ajustée finement affiche l’optimiseur et le taux d’apprentissage que tu as choisis, et non optimizer=auto.

Afficher la solution

Exemple de réponse pour les pilules médicales : la référence de 10 époques atteint son meilleur résultat à l’époque 10, avec mAP50-95 à 0.659, une hausse de +0.028 au cours des trois dernières époques et une perte de boîte de validation qui diminue de 1.367 à 1.045. La décision est donc « continuer ». Plutôt que de tout réentraîner, effectue un ajustement fin : modèle de base v1-baseline dans My Models, 5 époques, Advanced Settings optimizer: SGD et lr0: 0.001. La console confirme SGD(lr=0.001, momentum=0.937), et mAP50-95 atteint 0.687. Le coût sur le GPU par défaut est de quelques centimes ; la carte de coût affiche l’estimation avant que tu cliques sur Start Training, et Settings > Billing affiche le montant réel après l’entraînement.

Et ensuite ?

Tu as une référence et un candidat. Ensuite, tu décideras, à l’aide de critères prédéfinis, si le candidat mérite d’être déployé.