Ultralytics YOLO27: Inscreve-te na lista de espera.
Get Started
Aulainiciante

Retomar e iterar

Retoma exatamente uma execução interrompida, inicia um novo ciclo a partir de best.pt com uma taxa de aprendizagem que seja efetivamente aplicada e compara as execuções lado a lado.

Os projetos reais consistem numa série de execuções de treino. Algumas param a meio — porque se fecha um portátil, se perde uma sessão SSH ou se interrompe uma GPU na cloud — e recomeçar do zero desperdiça horas. Outras terminam, e o ciclo seguinte deve basear-se nelas em vez de começar novamente com COCO.

Nesta lição, vais interromper uma execução e retomá-la, iniciar o segundo ciclo a partir de best.pt com uma taxa de aprendizagem que seja efetivamente aplicada e comparar todas as execuções numa tabela. Também vais aprender dois comportamentos de resume que desperdiçam execuções sem dares por isso.

Resultado

Consegues escolher corretamente entre retomar, iniciar a partir de pesos existentes e começar do zero, executar cada opção e comparar as execuções numa tabela.

Via rápida
Se já sabes orientar-te, aqui está a versão resumida.
  1. Interrompida, sem alterações? yolo train resume=True model=.../weights/last.pt.

  2. Execução concluída ou dados ou configurações alterados? Inicia uma nova execução a partir de .../weights/best.pt.

  3. Para definir lr0, define também optimizer; com optimizer=auto, lr0 é ignorado.

  4. Dá nomes às execuções com base na alteração e, depois, compara os respetivos ficheiros results.csv.

Prático

Escolhe o tipo de execução certo#

Gráficos de treino do Ultralytics Platform que acompanham as curvas de perda e métricas ao longo das épocas de uma execução

SituaçãoTipo de execuçãoComeça a partir de
Falha de energia, desconexão ou falta de memória a meio da execuçãoRetomarlast.pt, com o respetivo estado do otimizador e plano de aprendizagem
Execução concluída; mais dados, uma correção de anotações ou treino mais longoIniciar a partir de pesos existentesbest.pt como modelo pré-treinado
Classes adicionadas ou removidas, muitas anotações alteradas ou imgsz bastante alteradoDo zeroyolo26n.pt

Exemplo prático: retomar uma execução interrompida#

resume=True restaura o modelo, o estado do otimizador, o plano da taxa de aprendizagem e o contador de épocas a partir de last.pt e, depois, continua o plano original:

yolo train resume=True model=runs/detect/pills_resume/weights/last.pt

Saída real de uma execução de 5 épocas interrompida após a época 2:

Resuming training runs/detect/pills_resume/weights/last.pt from epoch 3 to 5 total epochs
        3/5         0G      1.232      2.393   0.005478        206        320: 100% 6/6 4.5s
        4/5         0G      1.345      1.859   0.005833        208        320: 100% 6/6 4.5s
        5/5         0G       1.31      1.625   0.005854        191        320: 100% 6/6 4.4s
3 epochs completed in 0.004 hours.
  • from epoch 3 to 5 total epochs: retomou exatamente após a última época guardada, com o objetivo original.
  • Não especificaste data nem epochs: todos os argumentos vieram do ponto de controlo. Algumas definições de execução, como batch, device e workers, podem ser substituídas ao retomar; todas as outras são ignoradas, com um aviso Resume ignores ....

Exemplo prático: iniciar o segundo ciclo a partir de pesos existentes#

A maioria das experiências do tipo "ciclo seguinte" não consiste em retomar uma execução; são novas execuções que partem do teu último modelo válido — aprendizagem por transferência simples dentro do teu próprio projeto. Usa uma taxa de aprendizagem mais baixa para refinar o modelo em vez de o treinar novamente:

from ultralytics import YOLO

model = YOLO("runs/detect/pills_v1/weights/best.pt")  # # iniciar a partir dos pesos do ciclo 1
model.train(
    data="my_dataset/data.yaml",
    epochs=5,
    imgsz=320,
    optimizer="AdamW",  # # definir explicitamente: optimizer="auto" ignora lr0
    lr0=0.0005,  # # mais suave do que os 0.002 selecionados automaticamente no ciclo 1
    name="pills_v2_warm",
)

O registo confirma que a definição foi aplicada: optimizer: AdamW(lr=0.0005, momentum=0.937). O guia de ajuste fino aborda o congelamento de camadas e o treino em duas etapas; o guia de ajuste de hiperparâmetros aborda as pesquisas.

Exemplo prático: comparar execuções#

Dá a cada execução um nome que indique o que foi alterado — pills_v2_warm, pills_v3_imgsz640, pills_v4_edge_frames — nunca train2 nem final. Cada execução cria um results.csv, por isso a comparação requer apenas algumas linhas:

from pathlib import Path

import pandas as pd

for csv in sorted(Path("runs/detect").glob("*/results.csv")):
    df = pd.read_csv(csv)
    best = df["metrics/mAP50-95(B)"].max()
    print(f"{csv.parent.name:<14} epochs={len(df):<3} best mAP50-95={best:.3f}")
pills_resume   epochs=5   best mAP50-95=0.579
pills_v1       epochs=10  best mAP50-95=0.659
pills_v2_warm  epochs=5   best mAP50-95=0.694

Cinco épocas iniciadas a partir de pesos existentes elevaram o mAP50-95 de 0.659 para 0.694, enquanto cinco épocas com pesos de COCO (pills_resume) chegaram apenas a 0.579. Iniciar a partir de pesos existentes permite progredir com menos esforço — desde que as classes e as anotações não tenham sido alteradas entretanto. Após algumas execuções, uma ferramenta de acompanhamento compensa: Ultralytics Platform (consulta Comparar execuções e escolher a melhor) ou as integrações Comet e Weights & Biases, que registam automaticamente todas as execuções.

Mantém cada ciclo económico#

A maioria dos ciclos responde a uma pergunta, como "os novos fotogramas ajudaram?". Estes argumentos permitem obter respostas mais rapidamente enquanto exploras:

ArgumentoExemploEfeito
fractionfraction=0.5Treina com a primeira metade das imagens de treino (ordenadas pelo nome do ficheiro)
timetime=0.25Para após 0.25 horas, substituindo epochs
patiencepatience=10Para quando a aptidão de validação não melhora durante 10 épocas
imgszimgsz=320Um quarto dos píxeis de 640; compara execuções apenas com o mesmo tamanho
cachecache=TrueMantém as imagens descodificadas na RAM para acelerar o carregamento nas épocas seguintes

Altera uma coisa por ciclo e confirma o melhor resultado com uma execução em tamanho completo antes de o lançar. Quando precisares de começar do zero, usa a mesma chamada com os pesos pré-treinados:

from ultralytics import YOLO

model = YOLO("yolo26n.pt")  # voltar aos pesos pré-treinados no COCO
model.train(data="my_dataset/data.yaml", epochs=10, imgsz=320, name="pills_v3_relabeled")

Evita estes erros#

Retomar uma execução concluída

Sintoma: WARNING ⚠️ model '.../last.pt' is not a resumable training checkpoint ... Starting new training instead, seguido de uma execução completamente nova — no conjunto de dados predefinido coco8, a menos que tenhas passado data. Causa: resume=True só continua execuções que tenham parado antes do fim. Solução: interrompe-a e inicia deliberadamente uma nova execução a partir de best.pt.

lr0 é ignorado silenciosamente

Sintoma: optimizer: 'optimizer=auto' found, ignoring 'lr0=0.0005' and determining best 'optimizer' and 'lr0' automatically.... Causa: o optimizer=auto predefinido escolhe a sua própria taxa de aprendizagem. Solução: define explicitamente optimizer (por exemplo, "AdamW" ou "SGD") sempre que definires lr0 e confirma a linha de registo optimizer:.

Os nomes reutilizados não substituem os existentes

Treinar com name="pills_v1" uma segunda vez grava em pills_v1-2, o que pode causar confusão mais tarde. Usa um nome novo e descritivo para cada execução.

Experimente

Pratique os três tipos de execução. Inicie uma execução de 5 épocas chamada pills_resume, interrompa-a após a época 2 (com Ctrl+C ou o callback da solução) e retome-a. Treine pills_v2_warm a partir dos melhores pesos de pills_v1 com optimizer="AdamW" e lr0=0.0005. Entregue a tabela compare_runs.py e uma frase indicando de qual execução você continuaria e por quê.

Concluído quando
Você concluiu a aula quando todos estes critérios forem atendidos.
  • A execução retomada imprimiu Resuming training ... from epoch 3 e concluiu todas as 5 épocas.

  • O log de pills_v2_warm mostra AdamW(lr=0.0005, ...), não a mensagem de otimização automática.

  • Você tem uma tabela comparativa impressa de todas as execuções, com nomes descritivos, e uma decisão em uma frase.

Mostrar solução

Se for difícil acertar o momento do Ctrl+C em uma máquina rápida, um callback pode interromper a execução após a época 2:

from ultralytics import YOLO

def power_cut(trainer):
    if trainer.epoch == 1:  # Indexado a partir de 0: interrompa após salvar a época 2
        raise KeyboardInterrupt

model = YOLO("yolo26n.pt")
model.add_callback("on_model_save", power_cut)
model.train(data="my_dataset/data.yaml", epochs=5, imgsz=320, name="pills_resume")
yolo train resume=True model=runs/detect/pills_resume/weights/last.pt
python round2.py
python compare_runs.py
pills_v2_warm has the best mAP50-95 (0.694 vs 0.659 for pills_v1), with the same
classes and labels, so round three warm-starts from pills_v2_warm/weights/best.pt.
Próximos passos

Você já consegue treinar, diagnosticar e iterar. Agora, passe dos modelos em imagens estáticas para vídeos, onde acontece a maioria das implantações reais.

Entre para salvar seu progresso