인프런 커뮤니티 질문&답변

함형빈님의 프로필 이미지
함형빈

작성한 질문수

[개정판] 딥러닝 컴퓨터 비전 완벽 가이드

iou 구하는법

작성

·

186

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)의 이해와 구현 실습 강의 영상을 다시한번 확인 부탁드립니다.

감사합니다.

함형빈님의 프로필 이미지
함형빈

작성한 질문수

질문하기