๐์ด ํฌ์คํธ๋ Intersection over Union์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
IoU๋ ๊ฐ์ฒด ํ์ง์ ์ ํ๋๋ฅผ ์ธก์ ํ๋๋ฐ ์ด์ฉ๋๋ ํ๊ฐ ์งํ์
๋๋ค.
IoU๋ ์์ธกํ ์์ญ๊ณผ ์ค์ ์์ญ ๊ฐ์ ๊ฒน์น๋ ์์ญ์ ๋น์จ์ ๊ณ์ฐํฉ๋๋ค.
์์ธกํ ์์ญ์ test ์ ๋ชจ๋ธ์ด ์์ธกํ ์์ญ์ ๋ปํฉ๋๋ค.
์ค์ ์์ญ์ target data๋ก ์ค์ ์ ๋ต์ ์์ญ์ ๋ปํฉ๋๋ค.
์ค์ ์์ญ๊ณผ ๋ชจ๋ธ์ด ์์ธกํ ์์ญ์ ์ค์ฐจ๋ฅผ ๊ตฌํ์ฌ ๋น์จ๋ก ๋ํ๋ด๋ ๊ฒ์ Intersection over Union์ด๋ผ๊ณ ํฉ๋๋ค.
์ ์์์ผ๋ก ํํํ ์ ์์ต๋๋ค.
์ด๋ฏธ์ง๋ก ๋ณด๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
๋นจ๊ฐ bounding box๊ฐ ์ค์ ์์ญ(target)์ด๊ณ ํ๋์ bounding box๊ฐ ๋ชจ๋ธ์ด ์์ธกํ ์์ญ์
๋๋ค.
์ด๋ก์จ ๋ bounding box๊ฐ ์ต๋ํ ๊ฒน์น ์๋ก ํฉ์งํฉ ์์ญ์ ์ค์ด๋ค๊ณ ๊ต์งํฉ ์์ญ์ด ์ฆ๊ฐํ์ฌ
๊ฐ์ด 1์ ๊ฐ๊น์ธ์๋ก ์ฑ๋ฅ์ด ์ข์ ๋ชจ๋ธ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ ๊ต์งํฉ ์์ญ๊ณผ ํฉ์งํฉ ์์ญ์ด ์ต๋ํ ๊ฒน์ณ์ผ IoU ์ฑ๋ฅ์ด ์ข๋ค๊ณ ํ ์ ์์ต๋๋ค.
import numpy as np
def Intersection_over_Union(box1, box2):
# ๊ต์งํฉ ์์ญ ์ ํ์
x1 = np.maximum(box1[0], box2[0])
y1 = np.maximum(box1[1], box2[1])
x2 = np.minimum(box1[2], box2[2])
y2 = np.minimum(box1[3], box2[3])
# ๊ต์งํฉ ์์ญ
intersection_area = np.maximum(0, x2 - x1 + 1) * np.maximum(0, y2 - y1 + 1)
box1_area = (box1[2] - box1[0] + 1) * (box1[3] - box1[1] + 1)
box2_area = (box2[2] - box2[0] + 1) * (box2[3] - box2[1] + 1)
# ํฉ์งํฉ ์์ญ
union_area = box1_area + box2_area - intersection_area
IoU = intersection_area / union_area
return IoU
์ข์ ๊ธ ์ ์ฝ์์ต๋๋ค, ๊ฐ์ฌํฉ๋๋ค.