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演算法,而是用於在目標檢測中用於提取分數最高的視窗的。例如在行人檢測中,滑動視窗經提取特徵,經分類器分類識別後...