Intersection over Union (IoU)は物体検出AIの評価指標としてよく使われます。物体検出AIが出力する複数の矩形の重なり具合を定量的に表すことができます。
以下にPythonでIoUを計算する関数の実装例を示します。
def iou(a, b):
ax_mn, ay_mn, ax_mx, ay_mx = a[0], a[1], a[2], a[3]
bx_mn, by_mn, bx_mx, by_mx = b[0], b[1], b[2], b[3]
a_area = (ax_mx - ax_mn + 1) * (ay_mx - ay_mn + 1)
b_area = (bx_mx - bx_mn + 1) * (by_mx - by_mn + 1)
abx_mn = max(ax_mn, bx_mn)
aby_mn = max(ay_mn, by_mn)
abx_mx = min(ax_mx, bx_mx)
aby_mx = min(ay_mx, by_mx)
w = max(0, abx_mx - abx_mn + 1)
h = max(0, aby_mx - aby_mn + 1)
intersect = w * h
iou = intersect / (a_area + b_area - intersect)
return iou
この関数は2つの矩形aとbを引数とし、それぞれの矩形は[xmin, ymin, xmax, ymax]
の形式で表されます。この関数は2つの矩形の重なり具合を0から1の範囲で表すIoUの値を返します。
このコードは物体検出AIの評価に役立つだけでなく、画像処理やコンピュータビジョンの分野で広く応用可能です。ぜひ活用してみてください。