最近看了網上很多博主寫的iou實現方法,但giou的**似乎比較少,於是便自己寫了乙個,新手上路,如有錯誤請指正,話不多說,上**:
def iou(rec1,rec2):
x1,x2,y1,y2 = rec1 #分別是第乙個矩形左右上下的座標
x3,x4,y3,y4 = rec2 #分別是第二個矩形左右上下的座標
area_1 = (x2-x1)*(y1-y2)
area_2 = (x4-x3)*(y3-y4)
sum_area = area_1 + area_2
w1 = x2 - x1#第乙個矩形的寬
w2 = x4 - x3#第二個矩形的寬
h1 = y1 - y2
h2 = y3 - y4
w = min(x1,x2,x3,x4)+w1+w2-max(x1,x2,x3,x4)#交叉部分的寬
h = min(y1,y2,y3,y4)+h1+h2-max(y1,y2,y3,y4)#交叉部分的高
area = w*h#交叉的面積
iou = area/(sum_area-area)
return iou
def giou(rec1,rec2):
x1,x2,y1,y2 = rec1 #分別是第乙個矩形左右上下的座標
x3,x4,y3,y4 = rec2
iou = iou(rec1,rec2)
area_c = (max(x1,x2,x3,x4)-min(x1,x2,x3,x4))*(max(y1,y2,y3,y4)-min(y1,y2,y3,y4))
area_1 = (x2-x1)*(y1-y2)
area_2 = (x4-x3)*(y3-y4)
sum_area = area_1 + area_2
w1 = x2 - x1#第乙個矩形的寬
w2 = x4 - x3#第二個矩形的寬
h1 = y1 - y2
h2 = y3 - y4
w = min(x1,x2,x3,x4)+w1+w2-max(x1,x2,x3,x4)#交叉部分的寬
h = min(y1,y2,y3,y4)+h1+h2-max(y1,y2,y3,y4)#交叉部分的高
area = w*h#交叉的面積
add_area = sum_area - area #兩矩形並集的面積
end_area = (area_c - add_area)/area_c #(c/(aub))/c的面積
giou = iou - end_area
return giou
rec1 = (27,47,130,90)
rec2 = (30,68,150,110)
iou = iou(rec1,rec2)
giou = giou(rec1,rec2)
print("iou = {},giou = {}".format(iou,giou))
python實現IOU計算
計算兩個矩形的交並比,通常在檢測任務裡面可以作為乙個檢測指標。你的 bbox和groundtruth之間的差異,就可以通過iou來體現。很簡單的演算法實現,我也隨便寫了乙個,嗯,很簡單。1.使用時,請注意bbox四個數字的順序 y0,x0,y1,x1 順序不太一樣。usr bin env pytho...
IOU的計算和python實現
深度學習的目標檢測中,iou表示先驗框 bounding box 和真實框 ground truth 的交並比,在數學上就是表示兩個框之間的交際和兩個框的並集的比值。初中我們就知道,交集一定是小於或等於並集。在faster rcnn等目標檢測框架中,經常用到這個東西,今天來實現一下。雖然網上有很多版...
目標檢測IOU指標的python實現
iou指標是目標檢測中重要的評價指標,即交集與並集的比值。如圖 iou的計算公式如下 即 框與真實框的交並比。先計算交集的面積,在計算並集的面積,然後求兩者的比值。計算 如下 其中ground truth的座標為 x0,y0,w0,h0 bounding box的座標分別為 x1,y1,w1,h1 ...