Intersection over Union (IoU)
A interseção sobre união (IoU) mede a sobreposição entre uma caixa prevista e a caixa real, numa escala de 0 a 1. Fórmula, código Python, limiares e funções de perda baseadas em IoU.
A interseção sobre união (IoU) mede a sobreposição entre duas regiões: a área compartilhada dividida pela área total coberta por elas. Ela varia de 0, para regiões sem sobreposição, a 1, para regiões idênticas, e é a mesma medida conhecida em estatística como índice de Jaccard. Na detecção de objetos, a IoU compara uma caixa delimitadora prevista com a caixa de referência anotada e determina se uma previsão conta como correta, quais previsões duplicadas são removidas e como as previsões de caixas são treinadas.
Como a IoU é calculada#
IoU = área da interseção / área da união, em que a união é a área da caixa A mais a área da caixa B menos a interseção, para que a região compartilhada seja contada uma única vez. Para duas caixas alinhadas aos eixos e representadas pelas coordenadas dos cantos, a interseção é um retângulo delimitado pelas bordas internas das duas caixas. Sua largura ou altura é limitada a zero quando as caixas não se sobrepõem.
# Boxes as [x1, y1, x2, y2] in pixels
label = [100, 100, 200, 200]
pred = [110, 110, 210, 210]
# Intersection rectangle, clamped to zero when the boxes do not overlap
w = max(0, min(label[2], pred[2]) - max(label[0], pred[0]))
h = max(0, min(label[3], pred[3]) - max(label[1], pred[1]))
intersection = w * h
# Union counts the overlap only once
area_label = (label[2] - label[0]) * (label[3] - label[1])
area_pred = (pred[2] - pred[0]) * (pred[3] - pred[1])
union = area_label + area_pred - intersection
print(f"IoU = {intersection} / {union} = {intersection / union:.3f}")O script imprime IoU = 8100 / 11900 = 0.681. Deslocar uma caixa de 100 pixels em 10 pixels em cada direção reduz a sobreposição para 90 × 90 pixels e aumenta a união para 11.900, então um deslocamento de 10% reduz a pontuação em quase um terço. Como as duas áreas aumentam proporcionalmente, a IoU é invariante à escala: o mesmo desalinhamento relativo produz a mesma pontuação em um pássaro de 20 pixels e em um caminhão de 2.000 pixels. Portanto, um erro fixo em pixels prejudica mais os objetos pequenos: um deslocamento lateral de um pixel reduz a IoU para 0,905 em uma caixa de 20 pixels e para 0,990 em uma caixa de 200 pixels.
Limiares de IoU na avaliação#
Um limiar de avaliação transforma a IoU em uma decisão de sim ou não. Uma previsão é um verdadeiro positivo quando sua classe corresponde e sua IoU com uma caixa de referência ainda não correspondida atinge o limiar; caso contrário, é um falso positivo. O benchmark PASCAL VOC usava 0,5, um limite menos rigoroso do que parece: duas caixas iguais deslocadas lateralmente em um terço da largura têm uma IoU de exatamente 0,5. O benchmark COCO calcula a média dos resultados em dez limiares de 0,50 a 0,95, que é como a precisão média (mAP) recompensa uma localização precisa.
IoU no treinamento e no pós-processamento#
- Funções de perda para regressão de caixas: Os detectores treinam as coordenadas das caixas usando 1 − IoU ou uma variante, pois uma função de perda baseada nas coordenadas brutas trata um erro de 10 pixels da mesma forma em caixas pequenas e grandes. A IoU simples não fornece gradiente quando as caixas não se sobrepõem, então a IoU generalizada (GIoU) adiciona uma penalidade baseada na menor caixa que engloba ambas, e a IoU de distância e IoU completa (DIoU, CIoU) adicionam termos para a distância entre centros e a proporção entre os lados. O YOLO26 treina sua cabeça de caixas com uma função de perda CIoU e também usa CIoU para decidir quais previsões são atribuídas a cada objeto anotado durante o treinamento.
- Supressão não máxima (NMS): Na inferência, uma caixa cuja IoU com uma caixa de mesma classe e pontuação mais alta ultrapassa um limiar é tratada como duplicata e removida.
- Rastreamento de objetos: Rastreadores como o ByteTrack usam a IoU entre rastros existentes e novas detecções como custo de correspondência entre quadros.
IoU para outras formas#
A mesma proporção se aplica a qualquer par de regiões. A segmentação calcula a IoU das máscaras com base em conjuntos de pixels: a segmentação de instâncias usa essa medida para corresponder máscaras previstas aos rótulos, e os benchmarks de segmentação semântica informam sua média entre classes como mIoU. Caixas rotacionadas exigem uma interseção de polígonos ou uma aproximação gaussiana, como ProbIoU, e a detecção 3D calcula a IoU entre cuboides, em 3D completo ou como a sobreposição de suas projeções em uma vista aérea.
IoU vs. métricas relacionadas#
- Coeficiente Dice: duas vezes a interseção dividida pela soma das duas áreas. Ele classifica as previsões na mesma ordem que a IoU, pois Dice = 2 × IoU / (1 + IoU), e é comum na segmentação de imagens médicas.
- Precisão: proporção das previsões de classe corretas, que não informa nada sobre a posição de uma caixa.
- mAP: resumo no nível de detecção, baseado em limiares de IoU, que combina localização com precisão e revocação entre classes.
A relação com Dice também permite converter limiares: uma IoU de 0,5 equivale a uma pontuação Dice de 0,667, e uma IoU de 0,9 equivale a uma pontuação Dice de 0,947.










