티스토리 뷰

반응형
IoU 설명, python 코드(Intersection over Union, object detection 평가방법)

IoU란?

IoU는 Intersection over Union의 약자로 보통 두 가지 물체의 위치(Bounding Box)가 얼마나 일치하는지를 수학적으로 나타내는 지표이다. 객체 인식같은 모델을 사용했을 때 실제 물체의 위치와 예측된 물체의 위치를 평가방법으로 사용할 수 있다.

설명보다 아래 그림이 단번에 이해하기 쉽다.

왼쪽 위 박스를 A, 오른쪽 아래 박스를 B라고 하면 아래와 같은 식이 된다.

IoU=ABABIoU=\dfrac{A\cap B}{A\cup B}

Python 코드

위의 공식처럼 두 개의 박스가 있을 때, iou값을 계산하는 코드이다.

각 두개의 박스 크기를 구하고, 겹치는 부분(intersection)의 크기를 구하여 아래의 식을 이용해 계산한다.

IoU=IntersectionA+BIntersectionIoU=\dfrac{Intersection}{A+B-Intersection}

def IoU(box1, box2):
    # box = (x1, y1, x2, y2)
    box1_area = (box1[2] - box1[0] + 1) * (box1[3] - box1[1] + 1)
    box2_area = (box2[2] - box2[0] + 1) * (box2[3] - box2[1] + 1)

    # obtain x1, y1, x2, y2 of the intersection
    x1 = max(box1[0], box2[0])
    y1 = max(box1[1], box2[1])
    x2 = min(box1[2], box2[2])
    y2 = min(box1[3], box2[3])

    # compute the width and height of the intersection
    w = max(0, x2 - x1 + 1)
    h = max(0, y2 - y1 + 1)

    inter = w * h
    iou = inter / (box1_area + box2_area - inter)
    return iou

반응형
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday