[딥러닝] Object Detection Metric - IoU, 코드

미남잉·2021년 12월 14일
0

IoU

IoU=ABABIoU=\frac{A∪B}{A∩B}

객체의 영역(BBox)을 찾아내고 모델이 인식한 결과를 평가하려는 metric이 필요한데, L1, L2로 정의하면 BBox의 면적에 따라 값이 달라지는 문제가 발생합니다.

IoU는 면적에 영향을 받지 않도록 두 개 박스의 차이를 상대적으로 평가하기 위한 방법이며, 식은 합집합 분의 교집합이라 생각하면 됩니다.

전체 영역 중 겹치는 영역이 얼마나 되는지를 따져 평가합니다.



def iou(box1, box2):
    """Implement the intersection over union (IoU) between box1 and box2
    Arguments:
    box1 -- first box, list object with coordinates (x1, y1, x2, y2)
    box2 -- second box, list object with coordinates (x1, y1, x2, y2)
    """

    # Calculate the (y1, x1, y2, x2) coordinates of the intersection of box1 and box2. Calculate its Area.
    xi1 = max(box1[1], box2[0])
    yi1 = max(box1[1], box2[1])
    xi2 = min(box1[2], box2[2])
    yi2 = min(box1[1], box2[2])
    inter_area =(yi2 - yi1) * (xi2 - xi1)
    
    # calculate the Union area by using Formula: Union(A,B) = A + B - Inter(A,B)
    box1_area = (box1[2] - box1[0]) * (box1[3] * box1[1])   
    box2_area = (box2[2] - box2[0]) * (box2[3] * box2[1])
    union_area = box1_area + box2_area - inter_area
    
    # compute the IoU
    iou = inter_area / union_area
    
    return iou
profile
Tistory로 이사갔어요

0개의 댓글