대상 검출 의 IoU 분석
IoU 의 전 칭 을 교차 비(Intersection over Union)라 고 하 는데 이 이름 을 통 해 우 리 는 IoU 의 계산 방법 을 대충 짐작 할 수 있다.IoU 는'예측 한 테두리'와'실제 테두리'의 교 집합 과 병 합 된 비율 을 계산 합 니 다.
계산 을 시작 하기 전에 우 리 는 먼저 교 집합 과 집합 을 어떻게 계산 해 야 하 는 지 분석 해 야 한다.우 리 는 먼저 교 집합 을 계산 한 다음 에 두 개의 테두리 의 면적 과 교 집합 부분 을 뺀 것 이 바로 집합 이기 때문에 IoU 의 계산 난점 은 교 집합 계산 에 있다.
교 집합 을 계산 하기 위해 머 릿 속 에서 가장 먼저 떠 오 르 는 방법 은 두 테두리 의 상대 적 인 위 치 를 고려 한 다음 에 상대 적 인 위치(왼쪽 위,왼쪽 아래,오른쪽 위,오른쪽 아래,포함,서로 교차 하지 않 음)에 따라 상황 을 나 누 어 토론 하여 교 집합 을 계산 하 는 것 이다.
위의 그림 은 바로 너의 직감 이다.이렇게 생각 하 는 것 은 잘못 이 없다.그러나 교 집합 을 계산 하려 면 여러 가지 상황 으로 나 누 어 토론 해 야 한다.만약 프로그램 이 정말 이 논리 에 따라 작성 된다 면 너무 웃긴다.따라서 이 문제 에 대한 진일보 한 연구 가 필요 하 다.
두 상자 가 교차 하 는 계산 을 다시 생각해 봅 시다.두 상자 가 교차 하 는 계산의 실질 은 두 집합 이 교차 하 는 계산 이기 때문에 우 리 는 두 상자 의 교차 하 는 계산 을 다음 과 같이 간소화 할 수 있다.
간 화 를 통 해 우 리 는 교 집합 컴 퓨 팅 의 관건 은 상하 점(그림 속 파란색 점)의 계산 을 교차 시 키 는 것 임 을 뚜렷하게 볼 수 있다.
우 리 는 집합 A 가[x1,x2]이 고 집합 B 는[y1,y2]라 고 가정한다.그리고 AB 가 교차 하 는 상하 경 계 를 구 하 겠 습 니 다.
교 집합 계산의 논리
하계 z1:max(x1,y1)상계 z2:min(x2,y2)4.567917.만약 에 z2-z1 이 0 보다 작 으 면 집합 A 와 집합 B 가 교차 하지 않 았 다 는 것 을 의미한다다음은 Python 을 사용 하여 2 차원 집합 을 실현 하 는 IoU 의 계산 입 니 다.
def iou(set_a, set_b):
'''
iou
'''
x1, x2 = set_a # (left, right)
y1, y2 = set_b # (left, right)
low = max(x1, y1)
high = min(x2, y2)
# intersection
if high-low<0:
inter = 0
else:
inter = high-low
# union
union = (x2 - x1) + (y2 - y1) - inter
# iou
iou = inter / union
return iou
위 에서 우 리 는 2 차원 집합 iou 를 계산 하여 위의 프로그램 을 확장 하면 두 상자 의 IoU 계산 프로그램 을 얻 을 수 있 습 니 다.
def iou(box1, box2):
'''
( ) iou
:
box:[top, left, bottom, right]
'''
in_h = min(box1[2], box2[2]) - max(box1[0], box2[0])
in_w = min(box1[3], box2[3]) - max(box1[1], box2[1])
inter = 0 if in_h<0 or in_w<0 else in_h*in_w
union = (box1[2] - box1[0]) * (box1[3] - box1[1]) + \
(box2[2] - box2[0]) * (box2[3] - box2[1]) - inter
iou = inter / union
return iou
2.TensorFlow 기반 의 IoU 실현지난 절 에 IoU 와 그 계산 을 소 개 했 습 니 다.다음은 TensorFlow 에서 의 실현 을 보 여 드 리 겠 습 니 다.
import tensorflow as tf
def IoU_calculator(x, y, w, h, l_x, l_y, l_w, l_h):
"""calaulate IoU
Args:
x: net predicted x
y: net predicted y
w: net predicted width
h: net predicted height
l_x: label x
l_y: label y
l_w: label width
l_h: label height
Returns:
IoU
"""
# convert to coner
x_max = x + w/2
y_max = y + h/2
x_min = x - w/2
y_min = y - h/2
l_x_max = l_x + l_w/2
l_y_max = l_y + l_h/2
l_x_min = l_x - l_w/2
l_y_min = l_y - l_h/2
# calculate the inter
inter_x_max = tf.minimum(x_max, l_x_max)
inter_x_min = tf.maximum(x_min, l_x_min)
inter_y_max = tf.minimum(y_max, l_y_max)
inter_y_min = tf.maximum(y_min, l_y_min)
inter_w = inter_x_max - inter_x_min
inter_h = inter_y_max - inter_y_min
inter = tf.cond(tf.logical_or(tf.less_equal(inter_w,0), tf.less_equal(inter_h,0)),
lambda:tf.cast(0,tf.float32),
lambda:tf.multiply(inter_w,inter_h))
# calculate the union
union = w*h + l_w*l_h - inter
IoU = inter / union
return IoU
이상 은 목표 가 검 측 한 IoU 의 상세 한 내용 을 분석 하 는 것 입 니 다.목표 가 IoU 를 검 측 하 는 데 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.