O fix anterior (forçar project="runs/detect") duplicava o caminho para
"runs/detect/runs/detect/{ambiente}" porque o Ultralytics já resolve esse
project por padrão a partir do runs_dir configurado. Resultado: o "best"
nunca era encontrado e NENHUM modelo era enviado ao S3 (pior que o bug
anterior, que ao menos subia um modelo antigo). Agora só passamos
name/exist_ok e lemos o caminho real via modelo_base.trainer.save_dir,
sem adivinhar a string.
Também adiciona allowlist para 'ambiente' em /detectar e /treinar — o
valor é usado sem sanitização para montar paths locais (/tmp/...,
runs/detect/...) e chaves S3, o que permitia path traversal.
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.
Permite disparar treino com yolov8n limpo (sem fine-tuning) sem apagar
o cerebro.pt em produção, que continua servindo o /detectar normalmente
enquanto o novo treino roda.
Triagem, download da base, contagem de imagens e mensagens de conclusão
agora aparecem no console de logs do frontend em tempo real, não apenas
nos logs do container.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Antes, val e train apontavam para o mesmo diretório, causando
overfitting silencioso e métricas infladas. Agora 20% das imagens
são movidas para val/ antes do treino.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Imagens onde o YOLO não detecta nada (conf == 0) passavam direto para
base-oficial, contaminando o dataset. Agora vão para descartados e
precisam de revisão humana antes de entrar no treino.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>