🤔 Как считается метрика IoU?



Метрика IoU (Intersection over Union) используется для оценки качества совпадения предсказанной области с истинной областью в задачах сегментации или обнаружения объектов. Она вычисляется как отношение площади пересечения двух областей (предсказанной и истинной) к площади их объединения.



🚩Пример расчета IoU



🟠Предсказанная область:

допустим, у нас есть предсказанный прямоугольник с координатами \((x_1, y_1, x_2, y_2)\).

🟠Истинная область:

истинный прямоугольник с координатами \((x_1', y_1', x_2', y_2')\).



🚩Выполнение расчета пересечения и объединения:



1⃣Найти координаты пересекающегося прямоугольника:

\(\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')\)



2⃣Рассчитать площадь пересечения:

\(\text{Площадь пересечения} = \max(0, \text{right} - \text{left}) \times \max(0, \text{bottom} - \text{top})\)



3⃣Рассчитать площадь объединения:

\(\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)}")




Ставь 👍 и забирай 📚 Базу знаний