---
title: "交聯比（IoU (Intersection over Union)）"
slug: iou-intersection-over-union
language: zh-TW
source: https://aiterms.tw/learning/what-is-iou-intersection-over-union
updated_at: 2026-06-22
tags: [電腦視覺, 物件偵測, 影像分割, mAP, 邊界框]
ipas_term: false
type: deep-dive
---

# 交聯比 是什麼？

> 衡量兩個邊界框或區域重疊程度的指標，值域 0 到 1，常用於物件偵測與影像分割的評估。

IoU（Intersection over Union，交聯比，又稱 Jaccard Index 或 Jaccard Similarity）是電腦視覺領域中最基礎、最重要的評估指標之一，幾乎所有物件偵測（Object Detection）和影像分割（Image Segmentation）的評估體系都建立在 IoU 之上。

定義與計算

給定兩個區域 A 和 B（通常是預測邊界框與真實標注框）：

IoU = |A ∩ B| / |A ∪ B| = 交集面積 / 聯集面積

由於交集是聯集的子集，IoU 的值域為 [0, 1]：
- IoU = 0：兩個區域完全不重疊。
- IoU = 1：兩個區域完全重合。
- 一般而言，IoU ≥ 0.5 常被作為「預測正確」的基本門檻。

在物件偵測中的應用

1. 判斷預測框是否正確（TP vs. FP）

在物件偵測中，模型輸出的每個預測框（Predicted Bounding Box）需要與真實標注框（Ground Truth Box）比對，以決定它是否算一個正確的偵測（True Positive）。比對的標準就是 IoU 閾值：
- IoU ≥ 閾值（如 0.5）：判定為 True Positive（成功偵測到目標）。
- IoU < 閾值：判定為 False Positive（誤報）。
- 漏偵測的真實框：判定為 False Negative（漏報）。

2. 非最大值抑制（Non-Maximum Suppression, NMS）

物件偵測模型通常對同一個目標生成多個重疊的預測框，NMS 的作用是去除重複框、只保留最佳框。流程如下：
1. 按信心分數（Confidence Score）排序所有預測框。
2. 選取信心分數最高的框保留。
3. 計算它與其他框的 IoU，移除 IoU 超過 NMS 閾值（通常 0.45–0.5）的框。
4. 對剩餘框重複步驟 2-3。

3. mAP（mean Average Precision）

mAP 是物件偵測任務的標準評估指標，COCO 資料集採用在 IoU 從 0.5 到 0.95（步長 0.05）的 10 個閾值下計算 AP 後取平均（AP@[0.5:0.95]），而 Pascal VOC 傳統上使用單一 IoU 閾值 0.5（mAP@0.5）。

4. 影像分割

在語意分割（Semantic Segmentation）中，IoU 針對每個類別計算預測分割遮罩與真實遮罩的交聯比，所有類別的平均 IoU 稱為 mIoU（mean IoU），是語意分割最主要的評估指標。

IoU 的改良版本

標準 IoU 存在一些限制（如兩框完全不重疊時 IoU=0，但梯度也為 0，無法指導訓練），研究者提出了多種改良版用於損失函數：

- GIoU（Generalized IoU）：加入最小閉包框（最小包圍兩框的矩形）作為懲罰項，即使兩框不重疊也能提供梯度信號。
- DIoU（Distance IoU）：額外懲罰預測框與真實框中心點的距離，加速收斂。
- CIoU（Complete IoU）：在 DIoU 基礎上進一步加入寬高比的一致性懲罰，全面優化位置、大小和形狀。
- EIoU（Efficient IoU）：分別懲罰寬度差和高度差（而非寬高比），梯度訊號更穩定。

現代物件偵測模型（如 YOLOv8、YOLOv9）普遍使用 CIoU 或 EIoU 作為邊界框回歸的損失函數，取代傳統的 MSE 或 Smooth L1 損失。

程式碼示例（Python）

計算兩個邊界框（[x1, y1, x2, y2] 格式）的 IoU：

```python
def compute_iou(box1, box2):
    inter_x1 = max(box1[0], box2[0])
    inter_y1 = max(box1[1], box2[1])
    inter_x2 = min(box1[2], box2[2])
    inter_y2 = min(box1[3], box2[3])
    
    inter_area = max(0, inter_x2 - inter_x1) * max(0, inter_y2 - inter_y1)
    area1 = (box1[2] - box1[0]) * (box1[3] - box1[1])
    area2 = (box2[2] - box2[0]) * (box2[3] - box2[1])
    union_area = area1 + area2 - inter_area
    
    return inter_area / union_area if union_area > 0 else 0
```

## 常見問題

### 物件偵測中 IoU 閾值通常設多少？0.5 是標準嗎？

IoU 閾值的選擇取決於應用場景的精度要求，沒有唯一的標準。在學術評估中，Pascal VOC 傳統上以 IoU=0.5 作為單一閾值（mAP@0.5），COCO 則採用從 0.5 到 0.95 每隔 0.05 的 10 個閾值取平均（mAP@[0.5:0.95]），後者對定位精度的要求更嚴格。在實際部署中，閾值的選擇需考慮業務需求：自動駕駛等安全關鍵場景可能需要 0.7 以上的高 IoU，確保邊界框精確定位；而一般物件計數場景使用 0.5 通常已足夠。NMS 中的 IoU 閾值則控制多餘框的抑制，通常設在 0.45–0.5 之間，過高會保留太多重疊框，過低會誤刪同類別不同物件的框。

### mIoU 是什麼？在語意分割中如何計算？

mIoU（mean Intersection over Union，平均交聯比）是語意分割任務的主要評估指標。計算方式是：對每個語意類別（如道路、天空、行人），分別計算預測分割遮罩與真實標注遮罩的 IoU，然後對所有類別取算術平均。例如，若場景有 5 個類別，各類別 IoU 分別為 0.8、0.7、0.6、0.5、0.4，則 mIoU = (0.8+0.7+0.6+0.5+0.4)/5 = 0.6。mIoU 等同對待每個類別（Macro 平均），稀有類別的低 IoU 同樣影響最終得分，這使它對類別不平衡的分割任務能提供公平的評估，是 Cityscapes、ADE20K、COCO Stuff 等主流分割 Benchmark 的標準指標。

### 為什麼物件偵測模型訓練時要用 CIoU 而不是 MSE 損失？

傳統的邊界框回歸損失（如 MSE 或 Smooth L1）對邊界框的各個座標（x, y, w, h）分別計算誤差再加總，但這種方式有兩個問題：第一，它沒有直接優化 IoU，最終評估指標（mAP）是 IoU-based 的，損失函數與評估指標不一致；第二，相同的座標誤差在不同尺寸的框上代表完全不同的 IoU 差異（大框位移幾個像素影響小，小框位移幾個像素影響大）。CIoU（Complete IoU）損失直接以 IoU 為基礎，並加入中心點距離和寬高比的懲罰項，讓損失函數與評估指標高度對齊，訓練過程中的每次梯度更新都在直接朝提高 IoU 的方向優化，收斂速度更快、最終定位精度更高，因此被現代 YOLO 系列等模型普遍採用。

---

深度解說頁：https://aiterms.tw/learning/what-is-iou-intersection-over-union
快查頁：https://aiterms.tw/terms/iou-intersection-over-union
最後更新：2026/06/22