1. IoU(Intersection over Union)란 무엇입니까?
오늘은 IoU에 대해 알아보겠습니다.
IoU는 Intersection over Union의 약어이며 객체 감지 영역에서 모델이 객체를 얼마나 잘 인식하는지를 나타내는 지표입니다.
지표는 0과 1 사이의 값을 가지며, 모델의 예측값이 실제 물체 영역과 얼마나 겹치는지 척도로 모델의 성능이 좋은지 나쁜지를 평가합니다.
아래 그림을 참조하십시오. 녹색 상자는 실제 값이고 파란색 상자는 모델의 예측 값입니다.
모델은 약 2/3의 시간 동안 고양이 범위를 성공적으로 예측했으며 이는 그리 나쁘지 않습니다.
개체 감지의 궁극적인 목표는 모델이 파란색 및 녹색 상자와 완벽하게 겹칠 때까지 예측을 개선하는 것입니다.
즉, 두 박스의 IoU가 1이 될 때까지입니다.
IoU를 이해하려면 먼저 두 가지 개념을 이해해야 합니다.
- Ground Truth 경계 나무 상자: 테스트 세트에서 개체 위치의 레이블 값(일반적으로 사람이 레이블 지정)
- 예측된 경계 상자: 물체의 위치에 대한 모델 예측 값
물체 감지기가 물체를 얼마나 정확하게 예측했는지 IoU를 계산해 봅시다.
중첩 영역 ground truth bounding box와 예측된 bounding box의 중첩 면적이다.
연합의 영역 ground truth 경계 상자와 예측 경계 상자의 총 면적입니다.
계산을 위해 Box1은 (x1, y1, x2, y2)로, Box2는 (x3, y3, x4, y4)로 표현됩니다.
이해하기 쉽도록 Y축의 위치를 아래 방향이 양수, 위 방향이 음수로 변경되었습니다.
세 가지 항목을 계산해야 합니다.
1. 중첩 영역
두 상자의 겹치는 영역을 찾는 방법 (왼쪽 위 모서리, 오른쪽 아래 모서리, 높이, 너비) 저장해야
2. 연합 영토
두 상자의 총 면적은 다음 공식을 사용하여 쉽게 찾을 수 있습니다.
각 박스의 넓이는 계산이 되어 있는데 그냥 합산하면 겹치는 넓이도 계산에 포함되기 때문에 겹치는 넓이는 빼줍니다.
3.IoU
마지막으로 이 기사의 시작 부분에서 본 공식을 사용하여 계산하면 최종 IoU 값을 얻게 됩니다.
2. IoU 구현
def compute_iot(predicted_box, gt_box):
"""
predicted_box list : (x1, y1, x2, y2)
gt_box list : (x3, y3, x4, y4)
"""
# top-left corner of the intersection
x1 = max(predicted_box(0), gt_box(0))
y1 = max(predicted_box(1), gt_box(1))
# bottom-right corner of the intersection
x2 = min(predicted_box(2), gt_box(2))
y2 = min(predicted_box(3), gt_box(3))
width_intersection = abs(x2 - x1)
height_intersection = abs(y2 - y1)
area_intersection = width_intersection * height_intersection
# area = width * height
predicted_box_area = abs(predicted_box(2) - predicted_box(0)) * abs(predicted_box(3) - predicted_box(1))
gt_box_area = abs(gt_box(2) - gt_box(0)) * abs(gt_box(3) - gt_box(1))
area_union = predicted_box_area + gt_box_area - area_intersection
iou = area_intersection / area_union
return iou