본문 바로가기
Ai/Notion

IoU, GIoU, DIoU 개념 !

by yooom 2023. 11. 9.

DETR을 공부하다보니 Bounding Box를 갱신하는 과정에서 처음 듣는 용어가 나와서 정리해둔다. !

 

IoU : 교집합 / 합집합

GIoU : 두 박스의 합집합 / 두 박스를 포함하는 큰 박스 넓이

DIoU : IoU, 두 박스 중심 거리 이용

 

 

 

- IoU ( Intersection over Union )

두 상자의 교집합 영역을 합집합의 영역으로 나눠서 0~1 점을 메기는 것이다. 이 점수를 마치 Loss처럼 이용하는 것이다.

 

여기서 예측 상자를 Bounding Box라고 하고, 정답 상자를 Ground Truth(GT)라고 표현하는 것을 기억하자.!

 

 

IoU가 유리하다는 것은 기존 L1 loss와 L2 loss의 문제점을 통해 살펴보자.

연두색- GT, 민트색 - Bounding Box

L1 loss의 경우, 위 그림을 보자.

Bounding Box와 GT 간의 중점의 거리가 동일하고

높이, 너비의 차이가 일정하다.

 

중점과 각 거리가 동일하므로 L1 loss는 일정하지만,

상자가 겹치는 범위, 즉 실제 정답과 가까운 Bounding Box를 나타내는 IoU값은 모두 다르다.

 

L2 loss의 경우, 위 그림을 보자.

GT의 두 꼭짓점에서 동일한 위치의 두 점을 Bounding Box의 대각선으로  취급하여 Box를 만든다.

 

GT 꼭짓점으로부터 유클리안 거리(Euclidean distance)가 일정하여 L2 loss는 동일하지만,

IoU값은 모두 다르다.

 

즉, L1, L2 모두의 경우에서 박스의 좌표를 이용하면 두 박스 간의 유사성을 올바르게 반영하지 못한다는 것이다.

게다가 직관적으로도 IoU가 높은 것이 유사도가 높은 경우이다.!

이제 IoU를 이용해 loss를 연산하는 과정을 보자. 

 

맨 오른쪽 그림은 Bounding Box가 날아가는 중인 걸 포착해라!

loss로 이용하기 위해서는 잘 겹칠 수록 0에 가까운 (1-IoU 사용) 값을 내면된다. 하지만 맨 오른쪽을 보자.

상자가 GT로부터 아무리 멀리 떨어져있더라도 모두 같은 loss = 1 을 갖는다.

일반적으로 오차가 클수록 loss가 커야하는데, 그런 경향이 반영되지 않는다.

 

그래서 등장했다

 

- GIoU(Generalized IoU)

 

수식에서 \(\frac{|C(A \cup B)|}{|C|}\) 이 부분을 잘 봐야한다.

C는 A와 B를 모두 포함하는 큰 박스다.

그리고 C\(A \cup B)는 C에서 A \cup B를 제거한 영역이다.

그냥 차집합으로 표현하지...

 

좌우에 있는 그림을 비교하자면, 둘 다 겹치는 영역이 없으므로 IoU = 0 이다.

하지만 오른쪽 그림이 오차가 더 크므로 \(\frac{|C(A \cup B)|}{|C|}\)가 커진다.

 

Loss = 1 - GIoU 를 사용할 경우 치역은 (0~2)가 된다.

 

GIoU도 어떻게 작동하는지 한번 살펴보자.

 

왼쪽부터 작동 순서 1, 2, 3

초록색 GT가 주어지고 파란색으로 Bounding Box가 주어졌다.

1. 두 박스간의 겹치는 영역이 없으므로 박스를 키운다.

2. 박스가 겹치는 영역이 있으므로 IoU는 양수이지만 GIoU는 여전히 음수이다. GIoU를 키우는 방향으로 박스를 이동시키며 박스 크기를 줄인다.

3. 줄어든 Bounding Box가 GT에 근사된다. 

 

이 방식의 단점은 시간이 오래 걸린다는 점과 Bounding Box가 GT의 형상을 제대로 반영하지 못한다는 것이다.

(박스의 크기와 위치만 반영하기 때문에 박스의 가로,세로 길이를 따로 표현하지 않음.)

 

그래서 개선 버전으로 DIoU가 등장했다.

 

- DIoU (Distance IoU)

IoU와 함께 박스의 중점 좌표를 고려한다.

세 개의 이미지에서 \(L_{IoU}, L_{GIoU}\)는 모두 같은 값을 가지고 있지만 ( =겹치는 영역의 넓이가 같지만 )

\(L_{DIoU}\)에서는 중점 좌표가 다르므로 각각의 이미지에서 Loss가 다르게 뽑힌다. !

 \(\rho\)는 유클리드 거리를 쟤는 함수 !, \(b\)는 Bounding box, \(b^{gt}\)는 Ground truth(정답), c는 Bounding box와 GT를 모두 포함하는 C박스의 대각선 길이이다. 

그림으로 보자면 이러하다 !

 

이렇게 되면 수렴 속도도 빨라지고 IuO와 GIoU의 장점을 모두 갖게 된다 !

728x90

'Ai > Notion' 카테고리의 다른 글

DETR(Detection with Transformers)  (0) 2023.11.08
Transformer 에서 cos, sin 함수를 사용한 이유(position encoding)  (0) 2023.10.17
VIT (Vision Transformer)  (0) 2023.10.12
Transformer  (0) 2023.10.12
VggNet  (0) 2023.10.12

댓글