Intersection over Union (IoU)
Пересечение над объединением (IoU) оценивает степень перекрытия предсказанной рамки с истинной по шкале от 0 до 1. Формула, код на Python, пороговые значения и функции потерь на основе IoU.
Пересечение над объединением (IoU) измеряет степень перекрытия двух областей: это площадь их пересечения, делённая на общую площадь, которую они вместе занимают. Значение варьируется от 0 для не соприкасающихся областей до 1 для полностью совпадающих областей; в статистике эта величина известна как индекс Жаккара. В детекции объектов IoU сравнивает предсказанную ограничивающую рамку с эталонной рамкой из разметки. Эта метрика определяет, считается ли предсказание верным, какие дублирующиеся предсказания удаляются и как обучаются предсказания рамок.
Как вычисляется IoU#
IoU = площадь пересечения / площадь объединения, где площадь объединения равна площади рамки A плюс площадь рамки B минус площадь их пересечения, поэтому общая область учитывается один раз. Для двух выровненных по осям рамок в формате углов пересечение представляет собой прямоугольник, ограниченный внутренними сторонами рамок; если рамки не перекрываются, его ширина или высота приравнивается к нулю.
# Boxes as [x1, y1, x2, y2] in pixels
label = [100, 100, 200, 200]
pred = [110, 110, 210, 210]
# Intersection rectangle, clamped to zero when the boxes do not overlap
w = max(0, min(label[2], pred[2]) - max(label[0], pred[0]))
h = max(0, min(label[3], pred[3]) - max(label[1], pred[1]))
intersection = w * h
# Union counts the overlap only once
area_label = (label[2] - label[0]) * (label[3] - label[1])
area_pred = (pred[2] - pred[0]) * (pred[3] - pred[1])
union = area_label + area_pred - intersection
print(f"IoU = {intersection} / {union} = {intersection / union:.3f}")Скрипт выводит IoU = 8100 / 11900 = 0.681. Если сдвинуть рамку размером 100 пикселей на 10 пикселей в каждом направлении, область перекрытия уменьшится до 90 × 90 пикселей, а площадь объединения увеличится до 11 900. Таким образом, сдвиг на 10% снижает оценку почти на треть. Поскольку обе площади масштабируются одинаково, IoU не зависит от масштаба: одинаковое относительное смещение даёт одну и ту же оценку для птицы размером 20 пикселей и грузовика размером 2 000 пикселей. Поэтому фиксированная ошибка в пикселях сильнее всего влияет на мелкие объекты: сдвиг на один пиксель вбок снижает IoU до 0.905 для рамки размером 20 пикселей и до 0.990 для рамки размером 200 пикселей.
Пороговые значения IoU при оценке#
Порог оценки превращает IoU в бинарное решение. Предсказание считается истинно положительным, если его класс совпадает, а IoU с ещё не сопоставленной эталонной рамкой достигает порога; в противном случае оно считается ложноположительным. В бенчмарке PASCAL VOC использовалось значение 0.5 — порог менее строгий, чем кажется: IoU двух одинаковых рамок, смещённых вбок на треть ширины, равен ровно 0.5. Бенчмарк COCO усредняет результаты по десяти порогам от 0.50 до 0.95, благодаря чему средняя точность (mAP) учитывает точность локализации.
IoU при обучении и постобработке#
- Функции потерь регрессии рамок: Детекторы обучаются предсказывать координаты рамок с помощью 1 − IoU или его варианта, поскольку функция потерь на исходных координатах одинаково учитывает ошибку в 10 пикселей для маленьких и больших рамок. Обычный IoU не даёт градиента, если рамки не пересекаются, поэтому обобщённый IoU (GIoU) добавляет штраф, основанный на наименьшей рамке, охватывающей обе рамки, а IoU с учётом расстояния и полный IoU (DIoU, CIoU) добавляют слагаемые для расстояния между центрами и соотношения сторон. YOLO26 обучает свою голову рамок с помощью функции потерь CIoU и также использует CIoU, чтобы при обучении определять, каким размеченным объектам назначать предсказания.
- Подавление немаксимумов (NMS): При инференсе рамка, IoU которой с рамкой того же класса с более высокой оценкой превышает порог, считается дубликатом и удаляется.
- Отслеживание объектов: Такие трекеры, как ByteTrack, используют IoU между существующими треками и новыми детекциями как стоимость сопоставления кадров.
IoU для других форм#
То же отношение применимо к любой паре областей. При сегментации масочный IoU вычисляется по наборам пикселей: сегментация экземпляров использует его для сопоставления предсказанных масок с метками, а в бенчмарках семантической сегментации указывают среднее значение по классам — mIoU. Для повёрнутых рамок требуется вычислять пересечение многоугольников или использовать гауссовское приближение, например ProbIoU. При 3D-детекции IoU вычисляется между кубоидами — в полном 3D или по перекрытию их проекций на вид сверху.
IoU и связанные метрики#
- Коэффициент Dice: удвоенная площадь пересечения, делённая на сумму площадей двух областей. Он ранжирует предсказания так же, как IoU, поскольку Dice = 2 × IoU / (1 + IoU), и часто используется в сегментации медицинских изображений.
- Точность: доля правильно предсказанных классов; эта метрика ничего не говорит о положении рамки.
- mAP: сводная метрика детекции, основанная на порогах IoU и объединяющая локализацию с точностью и полнотой по всем классам.
Соотношение Dice также позволяет переводить пороги: IoU 0.5 соответствует оценке Dice 0.667, а IoU 0.9 — оценке Dice 0.947.










