Intersection over Union (IoU)
IoU(Intersection over union)は、予測ボックスが正解ボックスとどの程度重なるかを0から1で評価します。数式、Pythonコード、しきい値、IoUベースの損失について解説します。
Intersection over Union(IoU)は、2つの領域の重なり具合を、共通する面積を両者を合わせた面積で割って測定します。領域が重ならない場合は0、完全に一致する場合は1となり、統計学でJaccard係数として知られるものと同じ指標です。物体検出では、IoUを使って予測したバウンディングボックスとラベル付けされた正解ボックスを比較します。予測を正解とみなすか、重複する予測をどれだけ除去するか、ボックス予測をどう学習するかもIoUによって決まります。
IoUの計算方法#
IoU = 共通部分の面積 / 和集合の面積です。和集合の面積は、ボックスAとボックスBの面積の合計から両者の共通部分を引いたもので、重なった領域を二重に数えません。四隅の座標で表す軸に平行な2つのボックスでは、共通部分は2つのボックスの内側の辺で囲まれた長方形になります。ボックスが重ならない場合、幅または高さは0に切り詰められます。
# 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}")スクリプトはIoU = 8100 / 11900 = 0.681を出力します。100ピクセルのボックスを各方向に10ピクセルずらすと、重なりは90 × 90ピクセルに縮小し、和集合は11,900に拡大するため、10%のずれでスコアはほぼ3分の1低下します。両方の面積は同じ比率で拡大縮小するため、IoUはスケール不変です。相対的なずれが同じなら、20ピクセルの鳥でも2,000ピクセルのトラックでもスコアは同じです。そのため、固定ピクセル数の誤差は小さなオブジェクトほど大きく影響します。横方向に1ピクセルずらした場合、20ピクセルのボックスではIoUが0.905に下がる一方、200ピクセルのボックスでは0.990にとどまります。
評価におけるIoUのしきい値#
評価のしきい値を使うと、IoUに基づいて正誤を判定できます。クラスが一致し、まだ対応付けられていない正解ボックスとのIoUがしきい値以上なら、予測は真陽性となり、それ以外は偽陽性となります。PASCAL VOCベンチマークでは0.5が使われました。見た目より緩い基準であり、同じサイズのボックスを幅の3分の1だけ横にずらすと、IoUはちょうど0.5になります。COCOベンチマークでは0.50から0.95までの10個のしきい値で結果を平均し、平均適合率(mAP)によって位置の正確さを評価します。
学習と後処理におけるIoU#
- ボックス回帰損失: 検出器はボックスの座標を1 − IoUまたはその変形で学習します。生の座標に対する損失では、小さなボックスでも大きなボックスでも10ピクセルの誤差が同じ扱いになるためです。通常のIoUではボックスが重ならないと勾配が得られないため、Generalized IoU(GIoU)は両方を囲む最小のボックスに基づくペナルティを加え、Distance-IoUとComplete IoU(DIoU、CIoU)は中心間の距離とアスペクト比に関する項を加えます。YOLO26はボックスヘッドの学習にCIoU損失を使い、学習時に各ラベル付きオブジェクトへどの予測を割り当てるかの判断にもCIoUを使います。
- 非最大値抑制(NMS): 推論時に、同じクラスのスコアが高いボックスとのIoUがしきい値を超えるボックスは重複とみなされ、除去されます。
- オブジェクトトラッキング: ByteTrackなどのトラッカーは、フレーム間の対応付けコストとして、既存のトラックと新しい検出のIoUを使用します。
さまざまな形状に対するIoU#
同じ比率は、どのような2つの領域にも適用できます。セグメンテーションではピクセル集合を使ってマスクIoUを計算します。インスタンスセグメンテーションでは予測マスクとラベルの対応付けに使い、セマンティックセグメンテーションのベンチマークではクラス間の平均をmIoUとして報告します。回転ボックスではポリゴンの共通部分またはProbIoUなどのガウス近似を使います。3D検出では、完全な3D空間、または鳥瞰図上のフットプリントの重なりを使って、直方体間のIoUを計算します。
IoUと関連メトリクスの比較#
- Dice係数: 共通部分の面積を2倍して、2つの領域の面積の合計で割った値です。Dice = 2 × IoU / (1 + IoU)であるため、IoUと同じ順序で予測を評価します。医用画像のセグメンテーションでよく使われます。
- 精度: 正しくクラスを予測した割合であり、ボックスの位置については何も示しません。
- mAP: IoUのしきい値を基に、クラス間の位置精度、適合率、再現率をまとめた検出単位の指標です。
Diceの関係式を使うと、しきい値も換算できます。IoU 0.5はDiceスコア0.667に相当し、IoU 0.9はDiceスコア0.947に相当します。










