Метрика IoU (Intersection over Union) используется для оценки качества совпадения предсказанной области с истинной областью в задачах сегментации или обнаружения объектов. Она вычисляется как отношение площади пересечения двух областей (предсказанной и истинной) к площади их объединения.
допустим, у нас есть предсказанный прямоугольник с координатами \((x_1, y_1, x_2, y_2)\).
истинный прямоугольник с координатами \((x_1', y_1', x_2', y_2')\).
\(\text{left} = \max(x_1, x_1')\)
\(\text{right} = \min(x_2, x_2')\)
\(\text{top} = \max(y_1, y_1')\)
\(\text{bottom} = \min(y_2, y_2')\)
\(\text{Площадь пересечения} = \max(0, \text{right} - \text{left}) \times \max(0, \text{bottom} - \text{top})\)
\(\text{Площадь объединения} = \text{Площадь предсказанной области} + \text{Площадь истинной области} - \text{Площадь пересечения}\)
def calculate_iou(box1, box2):
"""
Вычисляет IoU для двух прямоугольников.
box1 и box2 — это списки или кортежи, содержащие координаты прямоугольника в формате (x1, y1, x2, y2)
"""
x1, y1, x2, y2 = box1
x1_prime, y1_prime, x2_prime, y2_prime = box2
# Вычисляем координаты пересекающейся области
xi1 = max(x1, x1_prime)
yi1 = max(y1, y1_prime)
xi2 = min(x2, x2_prime)
yi2 = min(y2, y2_prime)
# Вычисляем площадь пересечения
inter_width = max(0, xi2 - xi1)
inter_height = max(0, yi2 - yi1)
inter_area = inter_width * inter_height
# Вычисляем площади обоих прямоугольников
box1_area = (x2 - x1) * (y2 - y1)
box2_area = (x2_prime - x1_prime) * (y2_prime - y1_prime)
# Вычисляем площадь объединения
union_area = box1_area + box2_area - inter_area
# Вычисляем IoU
iou = inter_area / union_area
return iou
# Пример использования
box1 = (1, 1, 3, 3)
box2 = (2, 2, 4, 4)
print(f"IoU: {calculate_iou(box1, box2)}")
Ставь 👍 и забирай 📚 Базу знаний