import numpy as np
def py_cpu_nms(dets, thresh):
#首先數(shù)據(jù)賦值和計算對應矩形框的面積
#dets的數(shù)據(jù)格式是dets[[xmin,ymin,xmax,ymax,scores]....]
x1 = dets[:,0]
y1 = dets[:,1]
x2 = dets[:,2]
y2 = dets[:,3]
areas = (y2-y1+1) * (x2-x1+1)
scores = dets[:,4]
print('areas ',areas)
print('scores ',scores)
#這邊的keep用于存放,NMS后剩余的方框
keep = []
#取出分數(shù)從大到小排列的索引馋嗜。.argsort()是從小到大排列探入,[::-1]是列表頭和尾顛倒一下悼沈。
index = scores.argsort()[::-1]
print(index)
#上面這兩句比如分數(shù)[0.72 0.8 0.92 0.72 0.81 0.9 ]
# 對應的索引index[ 2 5 4 1 3 0 ]記住是取出索引导匣,scores列表沒變果正。
#index會剔除遍歷過的方框养筒,和合并過的方框试躏。
while index.size >0:
print(index.size)
#取出第一個方框進行和其他方框比對帜消,看有沒有可以合并的
i = index[0] # every time the first is the biggst, and add it directly
#因為我們這邊分數(shù)已經(jīng)按從大到小排列了棠枉。
#所以如果有合并存在,也是保留分數(shù)最高的這個泡挺,也就是我們現(xiàn)在那個這個
#keep保留的是索引值辈讶,不是具體的分數(shù)。
keep.append(i)
print(keep)
print('x1',x1[i])
print(x1[index[1:]])
#計算交集的左上角和右下角
#這里要注意娄猫,比如x1[i]這個方框的左上角x和所有其他的方框的左上角x的
x11 = np.maximum(x1[i], x1[index[1:]]) # calculate the points of overlap
y11 = np.maximum(y1[i], y1[index[1:]])
x22 = np.minimum(x2[i], x2[index[1:]])
y22 = np.minimum(y2[i], y2[index[1:]])
print(x11,y11,x22,y22)
#這邊要注意贱除,如果兩個方框相交生闲,X22-X11和Y22-Y11是正的。
#如果兩個方框不相交月幌,X22-X11和Y22-Y11是負的碍讯,我們把不相交的W和H設為0.
w = np.maximum(0, x22-x11+1)
h = np.maximum(0, y22-y11+1)
#計算重疊面積就是上面說的交集面積。不相交因為W和H都是0扯躺,所以不相交面積為0
overlaps = w*h
print('overlaps is',overlaps)
#這個就是IOU公式(交并比)捉兴。
#得出來的ious是一個列表,里面擁有當前方框和其他所有方框的IOU結果录语。
ious = overlaps / (areas[i]+areas[index[1:]] - overlaps)
print('ious is',ious)
#接下來是合并重疊度最大的方框倍啥,也就是合并ious中值大于thresh的方框
#我們合并的操作就是把他們剔除,因為我們合并這些方框只保留下分數(shù)最高的澎埠。
#我們經(jīng)過排序當前我們操作的方框就是分數(shù)最高的虽缕,所以我們剔除其他和當前重疊度最高的方框
#這里np.where(ious<=thresh)[0]是一個固定寫法。
idx = np.where(ious<=thresh)[0]
print(idx)
#把留下來框在進行NMS操作
#這邊留下的框是去除當前操作的框蒲稳,和當前操作的框重疊度大于thresh的框
#每一次都會先去除當前操作框氮趋,所以索引的列表就會向前移動移位,要還原就+1弟塞,向后移動一位
index = index[idx+1] # because index start from 1
print(index)
return keep
def soft_nms(dets,thre):
if method == 1: # linear
if ov > Nt:
weight = 1 - ov
else:
weight = 1
elif method == 2: # gaussian
weight = np.exp(-(ov * ov)/sigma)
else: # original NMS
if ov > Nt:
weight = 0
else:
weight = 1 # re-scoring 修改置信度
boxes[pos, 4] = weight*boxes[pos, 4]
nms
最后編輯于 :
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門椒惨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人潮罪,你說我怎么就攤上這事康谆。” “怎么了嫉到?”我有些...
- 文/不壞的土叔 我叫張陵沃暗,是天一觀的道長。 經(jīng)常有香客問我何恶,道長孽锥,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮惜辑,結果婚禮上唬涧,老公的妹妹穿的比我還像新娘。我一直安慰自己盛撑,他們只是感情好碎节,可當我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著撵彻,像睡著了一般钓株。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上陌僵,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼巡雨!你這毒婦竟也來了闰渔?” 一聲冷哼從身側響起,我...
- 正文 年R本政府宣布睹耐,位于F島的核電站,受9級特大地震影響部翘,放射性物質發(fā)生泄漏。R本人自食惡果不足惜响委,卻給世界環(huán)境...
- 文/蒙蒙 一新思、第九天 我趴在偏房一處隱蔽的房頂上張望窖梁。 院中可真熱鬧,春花似錦夹囚、人聲如沸纵刘。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽假哎。三九已至,卻和暖如春鞍历,著一層夾襖步出監(jiān)牢的瞬間舵抹,已是汗流浹背。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 至今掠兄,我只有過一次戀愛像云,那段感情維持了一個多月,我提出了分手徽千。大概苫费,我真的不適合愛情吧! 我們是由好朋友發(fā)展成戀人...