在目標檢測當中,有乙個重要的概念就是 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得出是閥板的面積,再乘以所承壓力 即閥門工作壓力 得出軸所承受的靜壓力,乘以磨擦係數 去查表一般鋼鐵的磨...