From 6c4f9d78e56117bbf9eb7982a6e20fb0a4d6d8b5 Mon Sep 17 00:00:00 2001 From: Davi Dias Date: Thu, 2 Jul 2026 20:35:48 -0300 Subject: [PATCH] =?UTF-8?q?fix:=20corrige=20upload=20de=20modelo=20velho?= =?UTF-8?q?=20ap=C3=B3s=20treino=20por=20causa=20do=20dir=20incremental?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- main.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/main.py b/main.py index 0aead69..7c7b65b 100644 --- a/main.py +++ b/main.py @@ -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")