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>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
c8ce09e5af
commit
432159bb2e
@@ -88,6 +88,35 @@ Ambientes ativos: `"gondola"` (produtos), `"etiqueta"` (etiquetas de preço).
|
||||
- `pular_triagem: true` é útil quando as imagens já foram pré-validadas
|
||||
- Este serviço não tem estado persistente próprio — tudo no S3
|
||||
|
||||
## Bugs conhecidos / pendentes de correção
|
||||
|
||||
### Bug 1 — Triagem aprova imagens sem nenhuma detecção (CORRIGIDO em código, validar deploy)
|
||||
Linha 118 do `main.py`:
|
||||
```python
|
||||
# Antes (bug)
|
||||
decisao = "base-oficial" if media >= 0.15 or media == 0 else "descartados"
|
||||
# Depois (correto)
|
||||
decisao = "base-oficial" if media >= 0.15 else "descartados"
|
||||
```
|
||||
O critério `media == 0` aprovava imagens onde o YOLO não detectou nada (desfocadas,
|
||||
ângulo errado, fora de contexto), contaminando o dataset de treino.
|
||||
|
||||
### Bug 2 — Validação e treino usam os mesmos dados (PENDENTE — aplicar após restaurar v1)
|
||||
Linha 152 do `main.py`:
|
||||
```python
|
||||
yaml.dump({'train': img_dir, 'val': img_dir, ...}) # val = train → mAP50 inflado
|
||||
```
|
||||
Precisa de split 80/20: 80% para `train/`, 20% para um `val/` separado. Só aplicar
|
||||
**após** a restauração da v1 e retreino de estabilização estarem concluídos.
|
||||
|
||||
## Situação do modelo (2026-06-25)
|
||||
|
||||
O modelo `cerebro.pt` (gondola) regrediu após rodadas de treino acumulativas. A v1
|
||||
original (timestamp mais antigo em `modelos/gondola/versionamento/`) performa melhor.
|
||||
Plano de restauração documentado em `ia-gondola-api/docs/plano-mitigacao-regressao-modelo.md`.
|
||||
O rollback pode ser feito pelo frontend: aba Treinamento → Ciclos → botão "↩ Rollback"
|
||||
no run mais antigo, ou via endpoint `POST /training/gondola/runs/{run_id}/rollback`.
|
||||
|
||||
## Como rodar
|
||||
|
||||
```bash
|
||||
|
||||
@@ -115,7 +115,7 @@ def _executar_treino_sync(ambiente: str, pular_triagem: bool) -> dict:
|
||||
pred = modelo_base(img_data, conf=0.1, verbose=False)
|
||||
confs = [float(b.conf) for r in pred for b in r.boxes]
|
||||
media = sum(confs)/len(confs) if confs else 0
|
||||
decisao = "base-oficial" if media >= 0.15 or media == 0 else "descartados"
|
||||
decisao = "base-oficial" if media >= 0.15 else "descartados"
|
||||
log_print(f"{os.path.basename(img_key)}: Conf. {media:.2f} -> {decisao}")
|
||||
for k in [img_key, txt_key]:
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user