Interseção sobre União

O que é Interseção sobre União (Intersection over Union, IoU)?

Interseção sobre União (IoU) é uma medida padrão de quão bem uma região prevista se sobrepõe a uma região de verdade de base (ground truth) em visão computacional (computer vision). Ela é usada mais comumente para:

  • Detecção de objetos (object detection) (sobreposição entre caixas delimitadoras (bounding boxes) previstas e de verdade de base)
  • Segmentação por instância (instance segmentation) / segmentação semântica (semantic segmentation) (sobreposição entre máscaras (masks) previstas e de verdade de base)

A IoU também é conhecida como o índice de Jaccard (Jaccard index) na teoria dos conjuntos (set theory) e na estatística (statistics).

Em alto nível, a IoU responde:

“De toda a área coberta pela previsão ou pela verdade de base, que fração é coberta por ambas?”


Definição formal e fórmula

Seja (P) a região prevista e (G) a região de verdade de base. A IoU é definida como:

[ \mathrm{IoU}(P, G) = \frac{|P \cap G|}{|P \cup G|} ]

Onde:

  • (P \cap G) é a interseção (área/pixels sobrepostos)
  • (P \cup G) é a união (área/pixels cobertos por qualquer uma das duas)
  • (|\cdot|) denota área (para caixas) ou número de pixels (para máscaras)

Intervalo e interpretação

A IoU está sempre em ([0, 1]):

  • 1.0: sobreposição perfeita
  • 0.0: nenhuma sobreposição
  • Valores intermediários: sobreposição parcial (quanto maior, melhor)

Intuição geométrica (por que a união importa)

Um equívoco comum é focar apenas em quanto a previsão se sobrepõe à verdade de base. Mas a IoU normaliza pela união, o que penaliza:

  • Superprevisão (over-predicting) (previsão grande demais, inclui muita área extra)
  • Subprevisão (under-predicting) (previsão pequena demais, perde partes do objeto)
  • Desalinhamento (misalignment) (deslocamentos, formato incorreto, localização ruim)

Duas previsões podem ter a mesma área de interseção, mas IoU diferente dependendo de quão grande é a união. É por isso que a IoU é uma métrica de localização (localization), e não apenas um indicador de “acertou/errou”.


IoU para caixas delimitadoras

Para caixas delimitadoras alinhadas aos eixos (axis-aligned) (o caso mais comum), cada caixa é representada por cantos:

  • ( (x_1, y_1) ): superior esquerdo
  • ( (x_2, y_2) ): inferior direito

Cálculo da IoU passo a passo

  1. Calcule os cantos do retângulo de interseção:

    • (x_{\text{left}} = \max(x_{1}^{P}, x_{1}^{G}))
    • (y_{\text{top}} = \max(y_{1}^{P}, y_{1}^{G}))
    • (x_{\text{right}} = \min(x_{2}^{P}, x_{2}^{G}))
    • (y_{\text{bottom}} = \min(y_{2}^{P}, y_{2}^{G}))
  2. Largura/altura da interseção:

    • (w_I = \max(0, x_{\text{right}} - x_{\text{left}}))
    • (h_I = \max(0, y_{\text{bottom}} - y_{\text{top}}))
  3. Área da interseção: (A_I = w_I \cdot h_I)

  4. Áreas de cada caixa:

    • (A_P = (x_2^P - x_1^P)(y_2^P - y_1^P))
    • (A_G = (x_2^G - x_1^G)(y_2^G - y_1^G))
  5. Área da união: (A_U = A_P + A_G - A_I)

  6. IoU: (A_I / A_U)

Exemplo numérico prático

Suponha:

  • Área da caixa de verdade de base = 100
  • Área da caixa prevista = 120
  • Área de sobreposição (interseção) = 60

Então:

  • União = (100 + 120 - 60 = 160)
  • IoU = (60 / 160 = 0.375)

Mesmo que a previsão se sobreponha a 60% da verdade de base (60 de 100), a IoU é menor porque ela também inclui área extra.


IoU para máscaras de segmentação

Para máscaras, a IoU é calculada sobre pixels:

  • Interseção: número de pixels em que tanto a máscara prevista quanto a verdade de base são 1
  • União: número de pixels em que pelo menos uma das duas é 1

Isso torna a IoU uma métrica natural para Segmentação Semântica e Segmentação por Instância.

Relação com “acurácia de pixels (pixel accuracy)”

A acurácia de pixels pode parecer alta mesmo se o objeto for pequeno (porque o fundo domina). A IoU evita isso ao focar na sobreposição da região positiva e penalizar falsos positivos/negativos dentro da união.


Exemplos de código

IoU para caixas alinhadas aos eixos (Python)

def iou_xyxy(box_p, box_g):
    # boxes as (x1, y1, x2, y2)
    x1p, y1p, x2p, y2p = box_p
    x1g, y1g, x2g, y2g = box_g

    inter_x1 = max(x1p, x1g)
    inter_y1 = max(y1p, y1g)
    inter_x2 = min(x2p, x2g)
    inter_y2 = min(y2p, y2g)

    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_p = max(0.0, x2p - x1p) * max(0.0, y2p - y1p)
    area_g = max(0.0, x2g - x1g) * max(0.0, y2g - y1g)

    union_area = area_p + area_g - inter_area
    if union_area == 0.0:
        return 0.0

    return inter_area / union_area

IoU para máscaras binárias (NumPy)

import numpy as np

def iou_masks(pred_mask, gt_mask):
    # pred_mask and gt_mask are boolean arrays (H, W)
    inter = np.logical_and(pred_mask, gt_mask).sum()
    union = np.logical_or(pred_mask, gt_mask).sum()
    return float(inter) / float(union) if union > 0 else 0.0

Como a IoU é usada em protocolos de avaliação

A IoU se torna mais importante quando é usada para decidir se uma previsão é um verdadeiro positivo (true positive) (TP) ou um falso positivo (false positive) (FP) na avaliação de detecção/segmentação.

Isso se conecta diretamente a Precisão e Revocação e, por fim, a métricas como Precisão Média (Average Precision) e Média da Precisão Média (Mean Average Precision, mAP).

Limiarização (thresholding) de IoU: “Essa detecção está correta?”

Uma detecção normalmente é contada como correta se:

  • Tem o rótulo de classe correto (para problemas multiclasse), e
  • Sua IoU com um objeto de verdade de base é pelo menos um limiar (t) (por exemplo, 0.5)

Então:

  • Se (\mathrm{IoU} \ge t) → candidato a correspondência (pode se tornar um TP)
  • Se (\mathrm{IoU} < t) → não corresponde (geralmente FP)

VOC vs COCO: limiares comuns de IoU

Diferentes referências de avaliação (benchmark) definem “correto” de maneiras distintas.

Pascal VOC (típico)

A métrica clássica de detecção de objetos do Pascal VOC historicamente usava:

  • IoU ≥ 0.5 para contar como uma detecção correta

Isso costuma ser chamado de AP@0.5.

Implicação: o VOC é relativamente tolerante a erros de localização desde que a caixa cubra aproximadamente o objeto.

COCO (típico)

A avaliação do Dataset COCO é mais rigorosa e informativa. O COCO reporta AP como a média ao longo de múltiplos limiares de IoU:

  • AP@[0.50:0.95] em passos de 0.05
    (isto é, 0.50, 0.55, …, 0.95)

Isso às vezes é descrito informalmente como “mAP do COCO”.

O COCO também costuma reportar:

  • AP@0.50 (mais fácil)
  • AP@0.75 (mais difícil; enfatiza melhor localização)
  • AP para objetos pequenos/médios/grandes (para expor sensibilidade à escala)

Implicação: não dá para ter bom desempenho no COCO sem boa localização; caixas “relaxadas” tendem a falhar em limiares de IoU mais altos.


IoU e mAP: onde ocorre a correspondência

Para calcular AP/mAP, os avaliadores:

  1. Ordenam previsões por pontuação de confiança (confidence score) (decrescente)
  2. Para cada previsão, decidem se ela corresponde a uma instância de verdade de base
  3. Marcam cada previsão como TP ou FP
  4. Constroem uma curva precisão–revocação (precision–recall curve) e calculam AP
    (depois fazem a média entre classes → mAP)

A IoU é o critério-chave no passo (2).

Para a explicação completa, veja Média da Precisão Média (Mean Average Precision, mAP).


Nuance: correspondência um-para-um (múltiplas previsões e múltiplas verdades de base)

Por que a correspondência é necessária

Em saídas reais, você pode ter:

  • Várias caixas previstas sobrepondo o mesmo objeto de verdade de base
  • Uma caixa prevista sobrepondo vários objetos de verdade de base (por exemplo, duas pessoas muito próximas)

Para evitar “contagem dupla”, a avaliação usa atribuição um-para-um (one-to-one assignment) entre previsões e verdades de base por classe e por imagem.

Protocolo comum (casamento guloso (greedy matching))

Uma abordagem amplamente usada:

  • Iterar previsões em ordem decrescente de confiança
  • Para cada previsão:
    • encontrar o objeto de verdade de base ainda não atribuído com a maior IoU
    • se essa IoU ≥ limiar, fazer a correspondência (TP) e marcar aquela verdade de base como usada
    • caso contrário, marcar a previsão como FP

Consequência: detecções duplicadas do mesmo objeto tornam-se falsos positivos mesmo que sua IoU seja alta, depois que a verdade de base já tiver sido reivindicada.

Essa é uma das razões pelas quais métodos de pós-processamento (post-processing) como Supressão Não Máxima (Non-Maximum Suppression, NMS) são importantes: eles reduzem duplicatas ao suprimir caixas com alta IoU mútua.

Estratégias alternativas de correspondência

Alguns cenários usam atribuição global (por exemplo, casamento Húngaro (Hungarian matching)) para maximizar a IoU total entre correspondências. Isso é comum em algumas configurações de treinamento (training setups) (por exemplo, detectores no estilo DETR (DETR-style detectors)), mas a avaliação de benchmark para detecção normalmente é gulosa por pontuação.


Sensibilidade a objetos pequenos (e por que a IoU pode ser severa)

A IoU é sensível à escala (scale-sensitive). Para objetos pequenos, erros minúsculos de pixel/coordenada podem causar uma grande queda na IoU.

Intuição com um objeto pequeno

Se a caixa de verdade de base é 10×10 (área 100) e você desloca a previsão alguns pixels, a interseção pode encolher drasticamente, enquanto a união permanece semelhante — então a IoU cai rapidamente.

Isso aparece nas métricas do COCO, em que AP_small costuma ser muito menor do que AP_medium/large, mesmo para modelos fortes.

Máscaras de segmentação amplificam o efeito

Para máscaras, erros de contorno de alguns pixels podem mudar significativamente interseção/união, especialmente em estruturas finas (por exemplo, postes, fios) ou instâncias pequenas.

Implicações práticas

  • Comparar modelos por um único limiar de IoU (por exemplo, 0.5) pode esconder diferenças de localização.
  • Limiares mais altos (0.75–0.95) e recortes por tamanho geralmente oferecem uma visão mais honesta.
  • Quando a rotulagem é ruidosa (ruído de rótulos (label noise), comum em conjuntos de dados reais), limiares muito altos de IoU podem penalizar modelos além do que faz sentido.

Casos-limite comuns e armadilhas de implementação

1) Convenções de coordenadas

Certifique-se de saber se as caixas são representadas como:

  • cantos (x1, y1, x2, y2), ou
  • centro + tamanho (cx, cy, w, h)

Também esclareça se x2, y2 são coordenadas de pixel inclusivas ou exclusivas. Convenções inconsistentes podem mudar áreas e, portanto, a IoU.

2) Caixas com área zero

Caixas degeneradas (degenerate boxes) (largura ou altura ≤ 0) levam a área zero e podem causar problemas de divisão por zero. A maioria dos códigos limita larguras/alturas com max(0, …) e retorna IoU 0 se a união for 0.

3) Multidões/Regiões a ignorar (específico do conjunto de dados)

Alguns conjuntos de dados (notavelmente o COCO) têm anotações de “multidão (crowd)” ou regiões a serem ignoradas. Regras de avaliação podem tratar sobreposições com regiões de multidão de forma diferente (por exemplo, não contar certas detecções como falsos positivos). Se você reimplementar a avaliação, esses detalhes importam.

4) Correspondência sensível à classe (class-aware matching)

Na avaliação padrão de detecção de objetos, a correspondência é feita por classe. Uma caixa com alta IoU mas rótulo de classe errado não corresponde e será contada como FP para a classe prevista (e a verdade de base permanece sem correspondência).


IoU além da avaliação: perdas de treinamento e pós-processamento

Embora a IoU seja uma métrica de avaliação, ela também aparece no projeto do modelo (model design).

Perdas baseadas em IoU

Detectores modernos frequentemente usam funções de perda (losses) derivadas de IoU para otimizar diretamente a qualidade de localização, especialmente ao usar regressão de caixa (box regression). Exemplos incluem:

  • perda de IoU (IoU loss) (maximizar IoU)
  • IoU Generalizado (Generalized IoU, GIoU)
  • IoU de Distância (Distance IoU, DIoU)
  • IoU Completo (Complete IoU, CIoU)

Essas variantes ajudam quando as caixas não se sobrepõem (a IoU simples vira 0 e não fornece sinal de gradiente (gradient signal)).

Supressão Não Máxima (NMS)

A NMS normalmente usa um limiar de IoU para decidir se duas caixas previstas são “duplicatas”. Se duas caixas têm IoU > limiar, a de menor confiança é suprimida.

Esse limiar de IoU não é o mesmo que o limiar de avaliação, mas ele interage com ele: uma NMS agressiva demais pode remover verdadeiros positivos; uma NMS fraca demais pode criar duplicatas que viram falsos positivos sob correspondência um-para-um.


Orientação prática: escolhendo e interpretando limiares de IoU

Quando um único número de IoU é útil

  • Fazer uma verificação de sanidade (sanity-checking) da localização de um modelo em imagens de amostra
  • Comparar duas caixas/máscaras diretamente
  • Depurar regressões (por exemplo, após mudar o pré-processamento (preprocessing))

Quando você deve olhar além de um único limiar de IoU

  • Fazer benchmark de detectores de objetos: prefira AP no estilo COCO ao longo de vários limiares
  • Diagnosticar problemas de localização vs classificação: compare AP@0.50 vs AP@0.75
  • Tarefas com objetos pequenos: inspecione métricas por tamanho e saídas qualitativas

Regras práticas

  • IoU ≥ 0.5: frequentemente “aproximadamente correta” para caixas de detecção
  • IoU ≥ 0.75: localização forte
  • IoU ≥ 0.9: quase perfeita; frequentemente irrealista com ruído de rótulos ou fronteiras ambíguas

Resumo

  • IoU mede sobreposição como (\frac{\text{interseção}}{\text{união}}) e varia de 0 a 1.
  • Ela se aplica a caixas delimitadoras (áreas) e máscaras de segmentação (pixels) e também é conhecida como o índice de Jaccard.
  • Na avaliação, a IoU é usada com limiares para decidir TP/FP, o que alimenta a Média da Precisão Média (Mean Average Precision, mAP).
  • Protocolos de benchmark diferem: VOC frequentemente usa IoU ≥ 0.5, enquanto COCO calcula a média de AP ao longo de 0.50–0.95, enfatizando a qualidade de localização.
  • Nuances importantes incluem correspondência um-para-um (detecções duplicadas viram falsos positivos) e sensibilidade a objetos pequenos (pequenos erros podem reduzir muito a IoU).
  • A IoU também influencia pós-processamento (NMS) e treinamento (perdas derivadas de IoU como GIoU/DIoU/CIoU).

Se você estiver implementando um avaliador ou comparando modelos, a métrica “de destaque” quase sempre depende de um protocolo específico de correspondência baseado em IoU — então seguir as regras do benchmark é tão importante quanto calcular a IoU corretamente.