Commit Graph
11 Commits
Author SHA1 Message Date
Davi Dias 8f61a76132 fix: corrige duplicação de diretório do treino e valida ambiente contra allowlist
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.
2026-07-02 21:11:07 -03:00
Davi Dias 6c4f9d78e5 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.
2026-07-02 20:35:48 -03:00
Davi Dias a990e6b618 feat: flag forcar_do_zero para treinar do zero ignorando modelo atual
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.
2026-07-02 19:23:51 -03:00
Davi DiasandClaude Sonnet 4.6 6832076db3 feat: log_print passa a alimentar _training_logs além do stdout
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>
2026-06-27 20:17:31 -03:00
Davi DiasandClaude Sonnet 4.6 1c39fb70f8 fix: separar conjunto de validação do treino com split 80/20
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>
2026-06-25 20:15:26 -03:00
Davi DiasandClaude Sonnet 4.6 432159bb2e fix: remove aprovação automática de imagens sem detecção na triagem
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>
2026-06-25 19:51:04 -03:00
Davi Dias 3f375ec8d5 fix: corrige grade de sessões oculta quando status é concluido_rollback 2026-06-23 20:48:15 -03:00
davi.dias 43079049bd feat: fine-tuning incremental com LR reduzido e fallback para primeiro treino 2026-06-11 13:48:38 -03:00
davi.dias 336b89cc98 feat: captura de logs por época via callback YOLO e expõe em GET /treinar/status 2026-06-10 15:14:10 -03:00
davi.dias f7ab4219ca feat: treino assíncrono com polling de status
/treinar agora dispara em background thread e retorna imediato.
Novo endpoint GET /treinar/status expõe estado (idle/running/concluido/vazio/erro).
2026-06-10 14:40:42 -03:00
Davi Dias e1fe47b264 chore: remove pasta gondola-imagem-negocio-main duplicada 2026-05-21 22:30:15 -03:00