18
Help us understand the problem. What are the problem?

posted at

updated at

Organization

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

はじめに

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

目次

IoUとは

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

image.png

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

IoUの計算方法

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

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

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

image.png

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$についても同様です。

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

参考文献

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
18
Help us understand the problem. What are the problem?