深度學習的目標檢測中,iou表示先驗框(bounding box)和真實框(ground truth)的交並比,在數學上就是表示兩個框之間的交際和兩個框的並集的比值。初中我們就知道,交集一定是小於或等於並集。在faster rcnn等目標檢測框架中,經常用到這個東西,今天來實現一下。雖然網上有很多版本,都實現的很好,但是可以記錄一下學習過程。
2.1 名詞解釋:一共需要用到8個值,分別是如下的2.2.一共會出現四種情況:其中兩種情況會相交兩種情況不相交。我把第一種叫做(左上右下型),第二種叫做(左下右上型),如圖2所示:2.3:iou計算1:(左上右下型)以圖3為例,令中間這塊矩形區域叫做中心區域,左圖並沒有交集,中心區域和任意矩形都不想交,右圖表示兩個矩形有交集,因此中心區域就是兩者的交集。w,h分別表示中心區域的寬和高。1:(左下右上型)以圖4為例。def iou( box1, box2 ):
""":box1:[x1,y1,x2,y2]# (x1,y1)表示左上角,(x2,y2)表示右下角
:box2:[x1,y1,x2,y2]
:return: iou_ratio交並比
"""width1 = abs(box1[2] - box1[0])
height1 = abs(box1[1] - box1[3])
width2 = abs(box2[2] - box2[0])
height2 = abs(box2[1] - box2[3])
xmax = max(box1[0],box1[2],box2[0],box2[2])
ymax = max(box1[1],box1[3],box2[1],box2[3])
xmin = min(box1[0],box1[2],box2[0],box2[2])
ymin = min(box1[1],box1[3],box2[1],box2[3])
w = xmin + width1 + width2 - xmax
h = ymin + height1 + height2 - ymax
if w <= 0 or h <= 0: # 當h和w都小於等於0的時候沒有交集,其他情況有交集。
iou_ratio = 0
else: #其他情況有交集
iou_area = w * h# 交集的面積
box1_area = width1 * height1
box2_area = width2 * height2
iou_ratio = iou_area / (box1_area + box2_area - iou_area) # 並集的面積
return iou_ratio
box1 = [1,3,4,1]
box2 = [2,4,5,2]
box3 = [1,1,3,3]
box4 = [3,3,5,5]
print("第乙個iou為:",iou(box1,box2))
print("第二個iou為:",iou(box3,box4))
# 第乙個iou為:0.2
# 第二個iou為:0
''' **參考了github上的。
如果給出的box是[xcenter,ycenter,width,height],中心點座標和寬高,可以通過以下函式,轉換成左上右下的座標
'''def exchange(box1):
x,y = box1[0],box1[1]
w,h = box1[2],box1[3]
box2 =
return box2
python實現IOU計算
計算兩個矩形的交並比,通常在檢測任務裡面可以作為乙個檢測指標。你的 bbox和groundtruth之間的差異,就可以通過iou來體現。很簡單的演算法實現,我也隨便寫了乙個,嗯,很簡單。1.使用時,請注意bbox四個數字的順序 y0,x0,y1,x1 順序不太一樣。usr bin env pytho...
python實現的Iou與Giou
最近看了網上很多博主寫的iou實現方法,但giou的 似乎比較少,於是便自己寫了乙個,新手上路,如有錯誤請指正,話不多說,上 def iou rec1,rec2 x1,x2,y1,y2 rec1 分別是第乙個矩形左右上下的座標 x3,x4,y3,y4 rec2 分別是第二個矩形左右上下的座標 are...
(原)IOU的計算
參考 中iou的計算。理解不對的地方敬請諒解。iou是兩個矩形的交集與兩個矩形並集的比值 可以這樣理解吧 如下圖所示 黃色矩形起點座標 x11,y11 終點座標 x12,y12 藍色矩形起點座標 x21,y21 終點座標 x22,y22 則 黃色矩形寬w1 x12 x11,高h1 y12 y11 黃...