非極大值抑制 NMS 的實現

2021-09-28 15:52:32 字數 987 閱讀 3039

import numpy as np

# 定義iou(交並比)計算公式, 傳入真實框和其他移動後的框

def iou(box, boxes, ismin=false):

# 計算原始真實框的面積

box_area = (box[2] - box[0]) * (box[3] - box[1])

# 計算移動後的框的面積,這裡計算的是矩陣

boxes_area = (boxes[:, 2] - boxes[:, 0]) * (boxes[:, 3] - boxes[:, 1])

# 找到兩個框的內部點計算交集

x1 = np.maximum(box[0], boxes[:, 0])

y1 = np.maximum(box[1], boxes[:, 1])

x2 = np.minimum(box[2], boxes[:, 2])

y2 = np.minimum(box[3], boxes[:, 3])

# 然後找到交集區域的長和寬,有的框沒有交集那麼相差可能為負,所以需要使用0來規整資料

w = np.maximum(0, x2 - x1)

h = np.maximum(0, y2 - y1)

# 計算交集的面積

inter_area = w * h

# 兩種計算方法:1是交並比等於交集除以並集,2是交集除以最小的面積

if ismin:

ovr_area = np.true_divide(inter_area, np.minimum(boxes_area, box_area))

else:

ovr_area = np.true_divide(inter_area, (boxes_area + box_area - inter_area))

# 返回交並比,也就是iou

return ovr_area

# 定義nms,篩選符

NMS 非極大值抑制 實現

nms演算法思路 於 把置信度最高的乙個boundingbox bbox 作為目標,然後對比剩下bbox與目標bbox之間的交叉區域 如果交叉區域大於設定的閾值,那麼在剩下的bbox中去除該bbox 即使該bbox的置信度與目標bbox的置信度一樣 這個操作就是抑制最大重疊區域 把第二置信度高的bb...

NMS 非極大值抑制 實現

1 iou計算 設兩個邊界框分別為a,b。a的座標為ax1,ax2,ay1,ay2,且ax1 ax2,ay1 ay2。b和a類似。則iou為a b除以a b。當兩個邊界框有重疊部分時,即位於上面邊框的y2大於下面邊框的y1,且左邊邊框的x2大於右邊邊框的x1時,iou才大於0.否則a和b不重疊,io...

非極大值抑制(NMS)

非極大值抑制 nms 非極大值抑制顧名思義就是抑制不是極大值的元素,搜尋區域性的極大值。這個區域性代表的是乙個鄰域,鄰域有兩個引數可變,一是鄰域的維數,二是鄰域的大小。這裡不討論通用的nms演算法,而是用於在目標檢測中用於提取分數最高的視窗的。例如在行人檢測中,滑動視窗經提取特徵,經分類器分類識別後...