物体検出の評価指標IoUの計算方法


はじめに

YoloやSSDなど物体検出で評価指標として用いられる、IoUについて調べたのでまとめました。

目次

IoUとは

IoU(Intersection over Union)とは、2つの領域がどれぐらい重なっているかを表す指標です。
2つの領域の共通部分を和集合で割ったものになります。

物体検出では、「何が」「どこに」うつっているかを検出することになります。
「どこに」については、画像内の物体の座標(Bounding Box)で表すことができます。
「検出結果の座標」の精度を測る際、「正解の座標」との重なり具合を評価指標としたいときにIoUが使用されます。

IoUの計算方法

以下、$IoU$を計算します。

ここでは、Yoloで用いられている座標表示$(x, y, w, h)$を使用することとします(注1)。

  • $x$:領域中心の$x$座標
  • $y$:領域中心の$y$座標
  • $w$:領域の幅
  • $h$:領域の高さ

2つの領域

A(x_A, y_A, w_A, h_A)\\
B(x_B, y_B, w_B, h_B)

が与えられたとき、

dx = \min(x_{A, max}, x_{B, max}) - \max(x_{A, min}, x_{B, min})\\
dy = \min(y_{A, max}, y_{B, max}) - \max(y_{A, min}, y_{B, min})\\

とすると(注2)、重なる条件は

$dx > 0$ かつ $dy > 0$
あるいは
$x_{A, min} < x_{B, min} < x_{A, max}$ かつ $y_{A, min} < y_{B, min} < y_{A, max}$

さらに

\begin{align}
A\cup B &= A+B-A\cap B\\
&= w_Ah_A + w_Bh_B-dxdy
\end{align}

であるので

\begin{align}
IoU &= \frac{A\cap B}{A\cup B}\\
&=\frac{dxdy}{w_Ah_A + w_Bh_B-dxdy}
\end{align}

となります。

注釈

注1

実際には、Yoloでは上記座標の値を画像全体の大きさで割ったもの(規格化)になります。すなわち、画像全体の幅を$W$、高さを$H$としたとき、上記はそれぞれ

x\rightarrow\frac{x}{W},\\
y\rightarrow\frac{y}{H},\\
w\rightarrow\frac{w}{W},\\
h\rightarrow\frac{h}{H}

となります。
ここでは、簡単のため規格化はせずに計算しています。
詳しくは、Yolov5公式ページの説明を参照下さい。

注2

$x_{A, max}(x_{A, min})$は、$A$の$x$座標の最大値(最小値)を表します。例えば、上図においては、

\begin{align}
x_{A, max} &= x_A +\frac{w_A}{2}\\
x_{A, min} &= x_A -\frac{w_A}{2}\\
y_{A, max} &= y_A +\frac{h_A}{2}\\
y_{A, min} &= y_A -\frac{h_A}{2}\\
\end{align}

$B$についても同様です。

また、図形が重なる条件を求める際には、
「最値の最値」と「最値の最値」の差をとる
といった考え方を用いています。

参考文献