fix: corrige upload de modelo velho após treino por causa do dir incremental
O Ultralytics incrementa o diretório de saída (train, train2, train3...) quando o anterior já existe, mas o código sempre lia de um caminho fixo "runs/detect/train/weights/best.pt". Depois do primeiro treino nesse container, todo treino seguinte silenciosamente subia pro S3 o best.pt de uma rodada anterior em vez do modelo recém-treinado — por isso as métricas de antes/depois batiam sempre igual, mesmo com o modelo internamente convergindo bem (mAP50 90%+ no treino do-zero mais recente). Agora project/name/exist_ok fixam o diretório de saída por ambiente, garantindo que o best.pt lido seja sempre o do treino que acabou de rodar.
This commit is contained in:
@@ -187,13 +187,18 @@ def _executar_treino_sync(ambiente: str, pular_triagem: bool, forcar_do_zero: bo
|
||||
modelo_base.add_callback("on_fit_epoch_end", _on_fit_epoch_end)
|
||||
# Fine-tuning: LR baixo preserva o que o modelo já aprendeu.
|
||||
# Primeiro treino: LR padrão + mais épocas para convergir do zero.
|
||||
# project/name/exist_ok fixos: sem isso o Ultralytics incrementa o
|
||||
# diretório a cada treino (train, train2, train3...) e o caminho abaixo
|
||||
# ficava sempre apontando pro "train" original, subindo pro S3 um
|
||||
# modelo de uma rodada antiga em vez do que acabou de treinar.
|
||||
train_dir = f"runs/detect/{ambiente}"
|
||||
if is_fine_tuning:
|
||||
modelo_base.train(data=yaml_path, epochs=20, imgsz=640, batch=8, device='cpu', plots=True, lr0=0.001, lrf=0.01)
|
||||
modelo_base.train(data=yaml_path, epochs=20, imgsz=640, batch=8, device='cpu', plots=True, lr0=0.001, lrf=0.01, project="runs/detect", name=ambiente, exist_ok=True)
|
||||
else:
|
||||
modelo_base.train(data=yaml_path, epochs=30, imgsz=640, batch=8, device='cpu', plots=True, lr0=0.01, lrf=0.01)
|
||||
modelo_base.train(data=yaml_path, epochs=30, imgsz=640, batch=8, device='cpu', plots=True, lr0=0.01, lrf=0.01, project="runs/detect", name=ambiente, exist_ok=True)
|
||||
modelo_base.reset_callbacks()
|
||||
|
||||
best = "runs/detect/train/weights/best.pt"
|
||||
best = f"{train_dir}/weights/best.pt"
|
||||
if os.path.exists(best):
|
||||
carimbo = datetime.now().strftime("%Y%m%d_%H%M")
|
||||
s3.upload_file(best, BUCKET, f"modelos/{ambiente}/atual/cerebro.pt")
|
||||
|
||||
Reference in New Issue
Block a user