«Алгоритм на практике» Минималистская реализация IoU на Python

искусственный интеллект глубокое обучение

 

Первый адрес:Tickets.WeChat.QQ.com/Yes/PA Ингредиент V стоит 4…

Если вы не знаете, в какой порт плывете, не имеет значения, дует ли ветер юго-восточный или северо-западный.
-- "Минимализм" Парадигма 2: Придумай, что делать, это полдела

 

0. Введение

Китайское название долговой расписки — отношение пересечения и союза, что означает соотношение пересечения и союза. это широко используемый алгоритм обнаружения целей

IoU原理

принцип долговой расписки

 

Как показано на рисунке выше, необходимо рассчитать отношение заштрихованной части вверху к заштрихованной части внизу.

Давайте разделим задачу, молекулярная часть — это область пересечения Box1 и Box2, которая сначала устанавливается в A1. Часть знаменателя — это площадь объединения Box1 и Box2, которая равна A2, что на самом деле представляет собой площадь S1 Box1 плюс площадь S2 Box2 минус A1 (зачем вычитать A1, потому что Box1 и Box2 перекрываются? Часть А1, и ее нужно вычесть Переходите к единице, детская обувь, о которой я не подумала, уходит в стену за 0,1 секунды :)

IoU = A1 / A2

A2 = S1 + S2 -A1

IoU = A1 / (S1 + S2 -A1)

S1 — это площадь Box1, а S2 — площадь Box2. Фактически задача трансформируется в решение Box и A1.

Далее продолжаем разбирать задачу

0.0: Определение осей координат

OpenCV坐标器

Координатор OpenCV

 

Сначала взгляните на определение координатных осей в OpenCV. Начало координат находится в верхнем левом углу изображения, положительное направление оси X — вправо, положительное направление оси Y — вниз (это отличается от определения в математике).

0.1: Представление и вычисление блока

Box имеет два часто используемых выражения:

1: Boxa = (xmin,ymin,xmax,ymax) (формат coco и voc); 2: Boxb = (xcenter,ycenter,w,h) (формат yolo).

На самом деле, согласно различным выражениям вещи, она по существу одна и та же.

Соответствующее отношение преобразования приведено ниже:

xmin,ymin,xmax,ymax = round(xcenter-(w/2.0)) ,round(ycenter-(h/2.0)),round(xcenter+(w/2.0)),round(ycenter+(h/2.0)) 
xcenter,ycenter,w,h = round((xmin+xmax)/2.0),round((ymin+ymax)/2.0),round(xmax-xmin),round(ymax-ymin)
Boxa = (round(Boxb[0]-(Boxb[2]/2.0)) ,round(Boxb[1]-(Boxb[3]/2.0),round(Boxb[0]+(Boxb[2]/2.0),round(Boxb[1]+(Boxb[3]/2.0))

Площадь коробки рассчитывается как w*h

S_Boxa = (xmax-xmin)*(ymax-ymin) = (Boxa[2]-Boxa[0])*(Boxa[3]-Boxa[1])

S_Boxb = w*h = Boxb[2]*Boxb[3]

0.2: Представление и расчет A1

Некоторые случаи пересечения коробок

Вычисление площади пересечения аналогично предыдущей задаче, просто посчитайте, что w и h поля пересечения равны 0, если они не пересекаются. Из приведенного выше рисунка можно найти следующие правила: если пересечение

xmin =max(xmin1, xmin2)#相交框xmin是两个框的左上角x坐标的最大值:
ymin =max(ymin1, ymin2)#相交框ymin是两个框的左上角y坐标的最大值:
xmax =min(xmax1, xmax2)#相交框xmax是两个框的右下角x坐标的最大值:
ymax =min(ymax1, ymax2)#相交框ymax是两个框的右下角y坐标的最大值:

Наконец, разберитесь с ситуацией, когда вы не хотите платить.Вы можете обнаружить, что когда вы не хотите платить, будет по крайней мере одна из следующих ситуаций:

xmax<=xmin or ymax<ymin

Так что метод обработки очень прост: в любом случае один из w или h будет равен 0, так что вычисляемая площадь тоже будет 0

w =max(0, xmax - xmin)

h =max(0, ymax - ymin)

Итак, общий код готов к выходу, не правда ли, все просто :)

1. Код

def cal_iou(box1, box2):
    """
    :param box1: = [xmin1, ymin1, xmax1, ymax1]
    :param box2: = [xmin2, ymin2, xmax2, ymax2]
    :return: 
    """
    xmin1, ymin1, xmax1, ymax1 = box1
    xmin2, ymin2, xmax2, ymax2 = box2
    # 计算每个矩形的面积
    s1 = (xmax1 - xmin1) * (ymax1 - ymin1)  # b1的面积
    s2 = (xmax2 - xmin2) * (ymax2 - ymin2)  # b2的面积
 
    # 计算相交矩形
    xmin = max(xmin1, xmin2)
    ymin = max(ymin1, ymin2)
    xmax = min(xmax1, xmax2)
    ymax = min(ymax1, ymax2)
 
    w = max(0, xmax - xmin)
    h = max(0, ymax - ymin)
    a1 = w * h  # C∩G的面积
    a2 = s1 + s2 - a1
    iou = a1 / a2 #iou = a1/ (s1 + s2 - a1)
    return iou

-1. Ссылка

-1,0:blog.csdn.net/guyue alian / ...

-1,1:blog.CSDN.net/WeChat_4092…