Avaliação para Visão

Visão geral: o que “avaliação” significa em visão computacional

Em Visão Computacional, avaliação não é apenas “calcular uma pontuação e comparar modelos”. Tarefas de visão frequentemente exigem tanto reconhecimento (“o que é?”) quanto localização (“onde está?”), às vezes no nível de pixel ou de instância. Isso torna a avaliação sensível a detalhes como:

  • Como a sobreposição entre predição e ground truth (verdade-terreno, ground truth) é medida (por exemplo, IoU).
  • Como as predições são associadas aos objetos de ground truth.
  • O que conta como verdadeiro positivo vs. falso positivo.
  • Como o desempenho é resumido entre classes, imagens e limiares (por exemplo, AP/mAP).
  • Regras específicas de dataset e benchmark (COCO vs. Pascal VOC vs. Open Images).

Este artigo foca em dois conceitos fundamentais — Interseção sobre União (Intersection over Union, IoU) e precisão média (Average Precision, AP) média (mAP (mean Average Precision)) — e explica por que o protocolo de avaliação importa tanto quanto o modelo.

Para contexto das tarefas, veja Tarefas Principais.

Interseção sobre União (IoU)

O que a IoU mede

Interseção sobre União (IoU) mede o quanto uma região prevista se sobrepõe a uma região de ground truth. Para dois conjuntos (A) e (B) (por exemplo, caixas delimitadoras ou máscaras):

[ \mathrm{IoU}(A,B) = \frac{|A \cap B|}{|A \cup B|} ]

  • IoU = 1.0 significa sobreposição perfeita.
  • IoU = 0.0 significa nenhuma sobreposição.

A IoU é muito usada em:

  • Detecção de objetos: sobreposição entre caixas delimitadoras previstas e de ground truth.
  • Segmentação por instância: sobreposição entre máscaras de instância previstas e de ground truth.
  • Segmentação semântica: sobreposição entre máscaras de classe previstas e de ground truth (frequentemente resumida como IoU média, discutida mais adiante).

Limiares de IoU: transformando sobreposição em “correto vs. incorreto”

A maioria dos benchmarks converte IoU em uma decisão binária usando um limiar:

  • Uma detecção é considerada uma correspondência se (\mathrm{IoU} \ge \tau) (por exemplo, (\tau=0.5)).
  • Caso contrário, não é uma correspondência válida.

Esse limiar é crucial:

  • Limiar mais baixo (por exemplo, 0.5) recompensa localização “aproximadamente correta”.
  • Limiar mais alto (por exemplo, 0.75) exige caixas/máscaras bem ajustadas e penaliza localização imprecisa.

O COCO popularizou o reporte de desempenho em múltiplos limiares (mais sobre isso na seção de mAP).

Exemplo prático: IoU para caixas delimitadoras

Caixas delimitadoras geralmente são representadas como (x1, y1, x2, y2) (cantos superior esquerdo e inferior direito). A IoU pode ser computada geometricamente:

def iou_xyxy(box_a, box_b):
    ax1, ay1, ax2, ay2 = box_a
    bx1, by1, bx2, by2 = box_b

    inter_x1 = max(ax1, bx1)
    inter_y1 = max(ay1, by1)
    inter_x2 = min(ax2, bx2)
    inter_y2 = min(ay2, by2)

    inter_w = max(0.0, inter_x2 - inter_x1)
    inter_h = max(0.0, inter_y2 - inter_y1)
    inter_area = inter_w * inter_h

    area_a = max(0.0, ax2 - ax1) * max(0.0, ay2 - ay1)
    area_b = max(0.0, bx2 - bx1) * max(0.0, by2 - by1)

    union_area = area_a + area_b - inter_area
    return 0.0 if union_area == 0 else inter_area / union_area

print(iou_xyxy((0, 0, 2, 2), (1, 1, 3, 3)))  # 1 / 7 ≈ 0.1429

Armadilhas comuns:

  • Misturar convenções de coordenadas (xyxy vs xywh).
  • Erros de “um a mais/um a menos” quando caixas são inclusivas vs. exclusivas.
  • Esquecer que redimensionamento/recorte durante o pré-processamento muda coordenadas (veja Fundamentos de Imagens).

IoU além de caixas: máscaras e “IoU média”

Para segmentação, a IoU é calculada sobre pixels:

  • Interseção = número de pixels previstos como o objeto/classe que também estão rotulados como esse objeto/classe.
  • União = número de pixels previstos ou rotulados como esse objeto/classe.

Para segmentação semântica, uma métrica padrão é IoU média (mean IoU, mIoU):

  1. Calcule IoU por classe (frequentemente excluindo “background” ou “void” dependendo do protocolo).
  2. Faça a média entre as classes.

Isso difere do mAP de detecção: não usa predições ranqueadas por confiança da mesma forma e, normalmente, avalia saídas densas por pixel.

De precisão/recall para Precisão Média (AP)

Por que precisão/recall é o ponto de partida correto

Modelos de detecção e segmentação por instância produzem:

  • Um conjunto de caixas/máscaras previstas
  • Um rótulo de classe para cada uma
  • Uma pontuação de confiança

Não existe uma única acurácia “sem limiar”, porque você sempre pode trocar:

  • Precisão: “Das detecções que retornei, quantas estão corretas?”
  • Revocação (recall): “Dos objetos reais, quantos eu encontrei?”

São os mesmos conceitos da classificação padrão; veja Precisão e Revocação.

Em detecção, a correção depende de:

  • Classe correta
  • Sobreposição suficiente (IoU ≥ limiar)
  • Regras de correspondência (uma predição por instância de ground truth)

Regras de correspondência: um ground truth, uma detecção

Um pipeline típico de avaliação (estilo VOC/COCO) faz o seguinte por classe:

  1. Colete todas as predições dessa classe em todo o dataset.
  2. Ordene pela pontuação de confiança (maior primeiro).
  3. Para cada predição, em ordem:
    • Encontre o objeto de ground truth não correspondido na mesma imagem com a maior IoU.
    • Se IoU ≥ limiar e esse ground truth ainda não estiver correspondido → Verdadeiro Positivo (True Positive, TP).
    • Caso contrário → Falso Positivo (False Positive, FP).
  4. Quaisquer objetos de ground truth nunca correspondidos são Falsos Negativos (False Negatives, FN) (refletidos implicitamente na revocação).

Esse protocolo de correspondência ganancioso (greedy) é amplamente usado, mas os detalhes exatos (por exemplo, desempate, tratamento de rótulos “crowd”) fazem parte do protocolo de avaliação.

Precisão Média (AP): área sob a curva precisão–revocação

Precisão Média (AP) resume a curva precisão–revocação (PR) em um único número. Conceitualmente:

[ AP = \int_0^1 p(r),dr ]

Na prática, benchmarks aproximam essa integral usando pontos discretos de revocação e frequentemente aplicam um envelope de precisão (precisão monotonicamente decrescente em relação à revocação).

Duas variantes historicamente importantes:

  • AP do VOC 2007: interpolação em 11 pontos (grosseira, mais antiga).
  • AP do COCO: média da precisão em 101 limiares de revocação (0.00, 0.01, …, 1.00), tipicamente após aplicar o envelope de precisão.

Exemplo prático: como duplicatas e limiares de IoU mudam a AP

Suponha que uma imagem tenha 2 objetos de ground truth da classe “cat”. Seu modelo produz 3 detecções (ordenadas por confiança):

  1. Pred A: score 0.90, IoU com GT1 = 0.70 → TP
  2. Pred B: score 0.80, IoU com GT1 = 0.60 → FP (duplicata; GT1 já foi correspondido)
  3. Pred C: score 0.40, IoU com GT2 = 0.55 → TP (se o limiar for 0.5)

Precisão/revocação após cada predição:

  • Após A: precisão = 1/1 = 1.00, revocação = 1/2 = 0.50
  • Após B: precisão = 1/2 = 0.50, revocação = 0.50
  • Após C: precisão = 2/3 ≈ 0.67, revocação = 1.00

Se você elevar o limiar de IoU para 0.75, Pred A (0.70) deixa de corresponder, e sua AP pode despencar — mesmo que as predições “pareçam próximas” para um humano.

Isso ilustra por que reportar “AP em IoU=0.5” vs. “AP média em 0.5:0.95” pode levar a conclusões muito diferentes.

mAP: média da Precisão Média

O que “mAP” realmente significa

mAP (mean Average Precision) normalmente é:

  1. Calcular AP por classe.
  2. Fazer a média entre as classes (macro-média).

[ mAP = \frac{1}{C}\sum_{c=1}^{C} AP_c ]

Essa “média entre classes” importa quando as classes são desbalanceadas: categorias raras recebem o mesmo peso que as frequentes.

Cuidado: “mAP” é usado de forma inconsistente em artigos e bases de código. A única interpretação segura é a definida pelo protocolo do benchmark que você está usando.

mAP no estilo COCO (o padrão moderno)

O benchmark COCO reporta várias métricas de AP; o número principal é comumente escrito como:

  • AP ou mAP@[.5:.95]: AP média em limiares de IoU ({0.50, 0.55, ..., 0.95})

O COCO também reporta:

  • AP50 (IoU=0.50)
  • AP75 (IoU=0.75)
  • AP_small / AP_medium / AP_large (faixas por tamanho do objeto)

Isso é extremamente informativo: AP50 pode ser alta mesmo quando a localização é mediana; AP75 e a métrica média punem localização imprecisa.

Para contexto de datasets, veja Dataset COCO e Pascal VOC.

Esboço mínimo do cálculo de AP (classe única)

Abaixo há um esboço simplificado de como computar AP para uma classe em um limiar fixo de IoU. Implementações reais precisam lidar com múltiplas imagens, regiões “ignore”, anotações de multidão, e mapeamentos de categorias.

import numpy as np

def compute_ap(scores, matches):
    """
    scores: (N,) confidence scores sorted descending
    matches: (N,) boolean True for TP, False for FP (after IoU+matching rules)
    Returns AP using a COCO-like 101-point interpolation.
    """
    matches = np.array(matches, dtype=bool)
    tp = matches.astype(np.float32)
    fp = (~matches).astype(np.float32)

    tp_cum = np.cumsum(tp)
    fp_cum = np.cumsum(fp)

    # total_gt should be number of ground-truth objects for this class
    # (needed to compute recall). Here we pass it separately for clarity.
    return tp_cum, fp_cum

def ap_from_cumsums(tp_cum, fp_cum, total_gt):
    recall = tp_cum / max(1, total_gt)
    precision = tp_cum / np.maximum(1, tp_cum + fp_cum)

    # precision envelope
    precision_envelope = precision.copy()
    for i in range(len(precision_envelope) - 2, -1, -1):
        precision_envelope[i] = max(precision_envelope[i], precision_envelope[i + 1])

    # sample precision at 101 recall thresholds
    recall_thresholds = np.linspace(0, 1, 101)
    p_sampled = []
    for rt in recall_thresholds:
        inds = np.where(recall >= rt)[0]
        p_sampled.append(precision_envelope[inds[0]] if len(inds) else 0.0)

    return float(np.mean(p_sampled))

Principal conclusão: AP depende do ranqueamento por pontuações de confiança. Se as pontuações do seu modelo estiverem mal calibradas ou instáveis, a AP pode mudar mesmo quando a qualidade bruta das caixas é semelhante (veja Calibração de Modelos).

Por que o protocolo de avaliação importa (muito)

Duas equipes podem avaliar as mesmas predições e reportar números diferentes se aplicarem protocolos diferentes. Em visão, detalhes de protocolo não são “trivialidades de implementação” — eles definem a métrica.

1) Regras específicas do dataset: “crowd”, “ignore” e objetos difíceis

Muitos datasets incluem anotações que exigem tratamento especial:

  • Regiões de multidão (crowd) (COCO): múltiplas instâncias são rotuladas como um grupo; regras de correspondência diferem.
  • Regiões de ignorar / rótulos void (segmentação): pixels que não devem contar como FP/FN.
  • Objetos difíceis (VOC): às vezes excluídos da avaliação ou tratados de forma especial.

Se você ignorar essas regras, pode penalizar injustamente ou inflar o desempenho. Sempre use a API oficial de avaliação quando possível.

2) Correspondência um-para-um vs. permitir múltiplas correspondências

A avaliação padrão de detecção usa correspondência um-para-um:

  • Uma instância de ground truth pode ser correspondida a no máximo uma predição.
  • Predições extras viram falsos positivos (duplicatas).

Se você permitir correspondência muitos-para-um por engano, a precisão ficará artificialmente alta — especialmente em modelos que produzem caixas duplicadas (por exemplo, antes de uma Supressão Não Máxima adequada).

3) Detalhes de definição de caixa/máscara mudam a IoU

A IoU é sensível a convenções de coordenadas:

  • As coordenadas são ponto flutuante ou arredondadas para inteiro?
  • (x2, y2) é inclusivo ou exclusivo?
  • As caixas são recortadas aos limites da imagem antes da IoU?
  • A máscara é avaliada na resolução original ou redimensionada?

Essas escolhas podem deslocar a IoU perto do limiar (0.50, 0.75), invertendo TP ↔ FP e mudando a AP.

Um problema comum no mundo real: predições feitas em imagens redimensionadas precisam ser transformadas de volta corretamente para o sistema de coordenadas original (veja Fundamentos de Imagens).

4) Mapeamentos de classe, taxonomias de rótulos e tratamento de background

Como o mAP é uma média entre classes, erros nas definições de classe são fatais:

  • Você está avaliando com o mesmo conjunto de rótulos do benchmark?
  • “Sinônimos” são mesclados (por exemplo, “couch” vs “sofa”)?
  • Você está incluindo acidentalmente uma classe “background” na média?

Modelos de vocabulário aberto ou multimodais (por exemplo, em Multimodal (Modelos Visão-Linguagem)) precisam de um mapeamento de rótulos especialmente cuidadoso porque prompts textuais de classe podem não se alinhar de forma limpa às categorias do dataset.

5) Aumento em tempo de teste e inferência multi-escala

Alguns protocolos permitem aumento em tempo de teste (test-time augmentation, TTA), outros não. TTA pode melhorar significativamente a AP ao:

  • Aumentar a revocação (mais detecções encontradas)
  • Melhorar a localização (IoU melhor)

Se você comparar um modelo com TTA habilitado com um modelo de escala única sem observar diferenças de protocolo, a comparação não é significativa.

6) Objetos pequenos e reporte estratificado

Um único número de mAP pode esconder falhas em objetos pequenos ou sob oclusão. As decomposições no estilo COCO (AP_small/medium/large) importam porque:

  • Objetos pequenos são os mais difíceis e frequentemente os mais importantes em aplicações (por exemplo, pedestres à distância).
  • Melhorias podem aparecer apenas em um regime.

Se sua aplicação tiver seus próprios “regimes” (noite vs. dia, interno vs. externo), considere reportar métricas estratificadas para refletir condições reais de implantação (veja Mudança de Domínio).

7) Reprodutibilidade e versionamento do código de avaliação

Mesmo código correto pode diferir entre versões:

  • Versões da API do COCO tiveram pequenas mudanças e correções de bugs ao longo do tempo.
  • Implementações de frameworks às vezes aproximam de forma diferente.

Para avaliações publicáveis ou críticas em produção:

  • Fixe a versão da biblioteca de avaliação.
  • Registre a versão/hashes do dataset.
  • Salve predições brutas (caixas/máscaras/scores) para que resultados possam ser recomputados.

Orientação prática: como avaliar modelos de detecção/segmentação corretamente

O que reportar (conjunto recomendado)

Para detecção de objetos / segmentação por instância (estilo COCO):

  • mAP@[.5:.95] (principal)
  • AP50, AP75
  • AP_small/medium/large (se relevante)
  • AP por classe para categorias-chave (para detectar regressões)

Para segmentação semântica:

  • mIoU (IoU média entre classes)
  • Possivelmente acurácia por pixel (mas trate com cautela; pode ser dominada pelo background)

Considere também reportar:

  • Latência e vazão (throughput) de inferência (avaliação não é só acurácia).
  • Métricas de calibração se você depender operacionalmente das pontuações de confiança (veja Calibração de Modelos).

Checagens de sanidade que capturam bugs comuns

  1. Superajuste (overfit) em um subconjunto minúsculo
    Treine/avalie em 5–20 imagens e confirme que o mAP se aproxima de 1.0. Se não, seu pipeline (rótulos, transformações, mapeamento de coordenadas) provavelmente está errado.

  2. Visualize TP/FP
    Plote detecções correspondidas vs. não correspondidas. Muitas “regressões de mAP” na verdade são bugs de limiarização ou conversão de coordenadas.

  3. Teste unitariamente IoU e transformações de caixa
    Teste casos conhecidos (caixas idênticas → IoU=1, caixas disjuntas → IoU=0).

  4. Compare com a avaliação oficial
    Quando possível, use o servidor de avaliação oficial do dataset ou a API.

Um checklist compacto de avaliação

  • Use a partição oficial e o conjunto de rótulos do benchmark (evite Vazamento de Dados).
  • Confirme convenções de coordenadas e transformações de redimensionamento/recorte da imagem.
  • Aplique correspondência um-para-um correta e regras de “ignore/crowd”.
  • Ordene predições por confiança por classe antes de computar PR/AP.
  • Reporte a definição exata da métrica (por exemplo, “COCO AP@[.5:.95]”).
  • Estratifique resultados (tamanho, oclusão, domínio) se fizer sentido para sua implantação.
  • Versione e registre código de avaliação, versão do dataset e artefatos de predição.

Limitações de IoU e mAP (e por que as pessoas ainda as usam)

IoU e mAP são populares porque são:

  • Interpretáveis (limiares de IoU correspondem à qualidade de localização)
  • Comparáveis entre modelos (com o mesmo protocolo)
  • Robustos à escolha de um único limiar de confiança (AP integra sobre todos os limiares)

Mas elas ainda deixam de fora aspectos importantes:

  • Localização quase correta (near-miss): a IoU tem limiares rígidos; uma IoU de 0.49 é tratada como completamente errada em AP50.
  • Importância da instância: mAP dá o mesmo peso a todas as instâncias, mesmo se algumas forem mais importantes.
  • Qualidade de confiança: AP depende do ranqueamento, mas não avalia diretamente a correção probabilística.
  • Utilidade a jusante: um modelo com mAP ligeiramente menor pode ser melhor para rastreamento, planejamento ou revisão humana.

Para tarefas em vídeo, a avaliação frequentemente exige métricas de consistência temporal (veja Compreensão de Vídeo). Para tarefas 3D, a sobreposição pode ser medida com IoU 3D ou distâncias em nuvem de pontos (veja Visão 3D).

Resumo

  • IoU mede a sobreposição entre regiões previstas e de ground truth e é o guardião do que conta como localização correta.
  • AP resume a curva precisão–revocação de uma classe, com base em predições ranqueadas por confiança e regras estritas de correspondência.
  • mAP tira a média da AP entre classes (e, no COCO, entre múltiplos limiares de IoU), tornando-se uma métrica padrão forte para detecção e segmentação por instância.
  • O protocolo de avaliação — regras de correspondência, regiões de ignorar, limiares de IoU, mapeamentos de classe, convenções de coordenadas — pode mudar resultados de forma dramática. Sempre especifique e siga a definição do benchmark.

Na prática, uma avaliação forte é em partes iguais métricas corretas e protocolo correto. O mAP reportado de um modelo só é tão significativo quanto o rigor e a transparência do procedimento de avaliação por trás dele.