DETR을 공부하다보니 Bounding Box를 갱신하는 과정에서 처음 듣는 용어가 나와서 정리해둔다. !
IoU : 교집합 / 합집합
GIoU : 두 박스의 합집합 / 두 박스를 포함하는 큰 박스 넓이
DIoU : IoU, 두 박스 중심 거리 이용
- IoU ( Intersection over Union )
두 상자의 교집합 영역을 합집합의 영역으로 나눠서 0~1 점을 메기는 것이다. 이 점수를 마치 Loss처럼 이용하는 것이다.
여기서 예측 상자를 Bounding Box라고 하고, 정답 상자를 Ground Truth(GT)라고 표현하는 것을 기억하자.!
IoU가 유리하다는 것은 기존 L1 loss와 L2 loss의 문제점을 통해 살펴보자.
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를 연산하는 과정을 보자.
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도 어떻게 작동하는지 한번 살펴보자.
초록색 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의 장점을 모두 갖게 된다 !
'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 |
댓글