• 카테고리

    질문 & 답변
  • 세부 분야

    컴퓨터 비전

  • 해결 여부

    미해결

iou 구하는법

22.09.15 22:45 작성 조회수 135

0

import numpy as np 

def compute_iou(cand_box, gt_box):

    # Calculate intersection areas
    x1 = np.maximum(cand_box[0], gt_box[0])
    y1 = np.maximum(cand_box[1], gt_box[1])
    x2 = np.minimum(cand_box[2], gt_box[2])
    y2 = np.minimum(cand_box[3], gt_box[3])
    
    intersection = np.maximum(x2 - x1, 0) * np.maximum(y2 - y1, 0)
    
    cand_box_area = (cand_box[2] - cand_box[0]) * (cand_box[3] - cand_box[1])
    gt_box_area = (gt_box[2] - gt_box[0]) * (gt_box[3] - gt_box[1])
    union = cand_box_area + gt_box_area - intersection
    
    iou = intersection / union #여기 부분
    return iou

iou = intersection / union 인데.

코드에서는 union 구하는 것이 cand_box와 gt_box의 합집합 - can_box, gt_box 교집합으로 확인했습니다.

근데 강의의 iou 구하는 이미지를 보면 교집합 / 합집합으로 나와있는데 헷갈려서 질문 드립니다.

  1. 교집합 / 합집합

  2. 교집합 / (합집합 - 교집합)

어떤 것이 맞는 건지 제가 잘못 이해하고 있는 것 같아요.

답변 1

답변을 작성해보세요.

0

안녕하십니까,

합집합의 기하학적 면적을 구할 때 cand_box와 gt_box의 합집합에서 교집합을 빼줘야 합니다.

그렇지 않고 단순히 두개 박스의 면적을 합하게 되면, 합집합의 기하학적 면적이 매우 커지게 되고 정확한 IOU계산이 되지 않습니다.

IOU(Intersection over Union)의 이해와 구현 실습 강의 영상을 다시한번 확인 부탁드립니다.

감사합니다.