IOU計算公式

2021-10-06 17:14:00 字數 1963 閱讀 9478

在目標檢測當中,有乙個重要的概念就是 iou。一般指代模型**的 bbox 和 groud truth 之間的交並比。

何為交並比呢?

集合 a 和集合 b 的並集包括了上面 3 種顏色區域。

集合 c 是集合 a 與集合 b 的交集。

在目標檢測當中,iou 就是上面兩種集合的比值。

a \cup ba∪b 其實就是 a + b - ca+b−c。

那麼公式可以轉變為:

iou = \fraciou=a+b−(a∩b)a∩b​

iou 衡量兩個集合的重疊程度。

在 2d 目標檢測當中,因為 bbox 是矩形,所以很容易求得 iou。

方框 a 和 b 相交,典型的情況如下:

a 和 b 的面積容易求得,c 的面積稍微繁瑣一點,但耐心細緻的話可以求得。

如果利用數學思維,細心整理,可以發現面積 c 只需要求得邊長的乘積就好,即使 a 和 b 的位置是相對的,但稍加變換也能夠求出。

如果以 w 代表 a 和 b 的交集 c 的 x 軸方向上的邊長,那麼有

w = min(a.x_,b.x_) - max(a.x_,b.x_)w=min(a.x1​,b.x1​)−max(a.x0​,b.x0​)

同理,h = min(a.y_,b.y_) - max(a.y_,b.y_)h=min(a.y1​,b.y1​)−max(a.y0​,b.y0​)

大家仔細觀察上面的對應關係,可以發現公式是成立的。這個公式的推導並不難,無非是 4 個頂點的座標的相對位置變換,大家可以自行琢磨。

如果 a 與 b 根本就不相交。

這個時候可以發現 w <= 0 或 h <= 0.

下面是 python **。

class bbox:

def __init__(self,x,y,w,h):

self.x = x

self.y = y

self.w = w

self.h = h

def iou(a,b):

assert isinstance(a,bbox)

assert isinstance(b,bbox)

area_a = a.w * a.h

area_b = b.w * b.h

w = min(b.x+b.w,a.x+a.w) - max(a.x,b.x)

h = min(b.y+b.h,a.y+a.h) - max(a.y,b.y)

if w <= 0 or h <= 0:

return 0

area_c = w * h

return area_c / (area_a + area_b - area_c)

if __name__ == '__main__':

a = bbox(1,1,4,5)

b1 = bbox(1,1,4,5)

b2 = bbox(5,1,4,5)

b3 = bbox(3,2,3,6)

print("iou ",iou(a,b1))

print("iou ",iou(a,b2))

print("iou ",iou(a,b3))

執行結果如下:

iou  1.0

iou 0

iou 0.26666666666666666

再加上個diou  等等吧

還有giou相比iou的優點 哈哈

計算公式 UPS電池計算公式

很多的弱電朋友提到ups電池容量如何確定,其實是有計算公式的,今天我們就一起來了解ups電池的計算方法。計算如下一 恆電流模式計算 根據能量守恆原理,按如下公式計算 c pl t vbat k 其中 c 為蓄電池容量 ah pl為ups輸出功率 w t 為電池後備時間 h vbat是電池組電壓 vd...

計算公式 樓梯踏步尺寸計算公式

計算公式 確定踏步級數方法 b表示的是調整踏步高度和踏步寬度,h除以踏步高度h得到踏步級數為n h h,當以為小數時就要取整取,並且調整踏步高h h h n 使用公式b h 450 mm 或者b 2h 600 620 mm 來確定踏步寬b。根據公式計算 首先按照規範限制來選擇踏步寬b和踏步高,這裡一...

wh計算公式 閥門扭矩計算公式

閥門扭矩計算的方法是什麼?閥門扭矩是閥門乙個重要引數,因此不少朋友都很關注閥門扭矩計算的問題。下面,世界工廠幫浦閥網為大家詳細介紹閥門扭矩計算。閥門扭矩計算具體是 二分之一閥門口徑的平方 3.14得出是閥板的面積,再乘以所承壓力 即閥門工作壓力 得出軸所承受的靜壓力,乘以磨擦係數 去查表一般鋼鐵的磨...