NMS 非極大值抑制

2021-09-24 05:43:27 字數 971 閱讀 2834

之前總是對這個東西理解錯, 後來看了一遍code, 這次應該不會錯~~

自己的理解:

在nms之前先進行乙個大的top-n, nms之後在進行乙個恰當的top-n, 這樣可以非常好~

因為如果不進行後面的top-n 之前過大, 那麼後面就可能很多, 之前過小, 那麼後面可能就沒幾個了

1. 把框的資訊和對應的目標得分傳給函式(這裡都是目標分數, 多少框多少分數, 不是背景的分數, 僅僅提取目標分數top-n傳入nms)

框的資訊是: [[x1, y1, x2, y2]1, ....., [x1, y1, x2, y2]n]

目標的分數是: [s1, s2...sn]

2. 然後開始處理, 我們先計算每個框的面積, 然後把分數從大到小排序, 然後返回未排序之前的陣列索引.

order = score.sort(decending)[1]

3. 現在從分數最高的框開始處理

for _i = 1 to n

i = order[_i]

這個i就是最高得分的框.

獲得框i的資訊 box[i]

for _j = _i+1 to n

j = order[_j]: 不要以為這一步沒有必要, 仔細考慮一下: 框i一定要找比他自己得分小的對

比, 如果不這樣幹, 那麼可能乙個高分框, 不加處理, 就可能被低分框抑制掉~~

如果這個框已經被抑制, 那麼continue

否則, 我們看box[j] 和 box[i] 的iou.

如果iou大於閾值, 我們就要抑制掉這個框.

4. 最後 return at::nonzero((suppressed_t) == 0).squeeze(1);

根據後續**推理, 這個返回值是: 沒有被抑制的框(或者得分), 其原始排序(sort之前)的index

非極大值抑制(NMS)

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

NMS非極大值抑制

非極大值抑制演算法 non maximum suppression for object detection in python 非極大值抑制演算法 nms 非極大值抑制 矩形框融合 nms 卷積網路改進實現 筆記 人臉檢測視窗選擇辦法 nms convnet 開源 如何用soft nms實現目標檢...

非極大值抑制(NMS)

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