日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

目标检测 nms非极大抑制算法

發布時間:2025/4/5 222 豆豆
生活随笔 收集整理的這篇文章主要介紹了 目标检测 nms非极大抑制算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

nms算法就是對同一個anhor 的box 進行基于閾值的去重

1、目的

對于尺寸為416×416的輸入圖像,YOLO預測((52×52)+(26×26)+ 13×13))×3 = 10647個邊界框。 但是,在我的圖像中只有三個物體(本人,水杯,手機)。 我們如何將檢測結果從10647減少到3呢?

2、基于對象置信度的閾值。

首先,我們根據對象分數(objectness score)過濾框。 通常,具有低于閾值分數的框被忽略。

3、非最大抑制(NMS)

NMS打算解決同一圖像的多重檢測問題。通過抑制不是極大值的元素,可以理解為局部最大搜索。這個局部代表的是一個鄰域,鄰域有兩個參數可變,一是鄰域的維數,二是鄰域的大小。這里討論用于目標檢測中提取分數最高的窗口的。例如在行人檢測中,滑動窗口經提取特征,經分類器分類識別后,每個窗口都會得到一個分數。但是滑動窗口會導致很多窗口與其他窗口存在包含或者大部分交叉的情況。這時就需要用到NMS來選取那些鄰域里分數最高(是行人的概率最大),并且抑制那些分數低的窗口。
3.1、算法過程
  • Step1:按置信概率排列相應的備選框
  • :取最大的框作為保留框,與其IOU大于閾值的框刪除掉
  • :剩下的框執行Step2
# python3 import numpy as npdef py_nms(dets, thresh):"""Pure Python NMS baseline."""#x1、y1、x2、y2、以及score賦值x1 = dets[:, 0]y1 = dets[:, 1]x2 = dets[:, 2]y2 = dets[:, 3]scores = dets[:, 4]#每一個候選框的面積areas = (x2 - x1 + 1) * (y2 - y1 + 1)### argsort()函數是將x中的元素從小到大排列,提取其對應的index(索引)or1=scores.argsort() #array([3, 2, 1, 0])#降序排序的order = or1[::-1]keep = []while order.size > 0:#先取order最大的那個索引 ii = order[0]#保留score最大的那個boxkeep.append(i)#計算當前概率最大矩形框與其他矩形框的相交框的坐標,會用到numpy的broadcast機制,得到的是向量xx1 = np.maximum(x1[i], x1[order[1:]])yy1 = np.maximum(y1[i], y1[order[1:]])xx2 = np.minimum(x2[i], x2[order[1:]])yy2 = np.minimum(y2[i], y2[order[1:]])#計算相交框的面積,注意矩形框不相交時w或h算出來會是負數,用0代替#分別計算其他box 與 i box 的交集w = np.maximum(0.0, xx2 - xx1 + 1)h = np.maximum(0.0, yy2 - yy1 + 1)inter = w * h#計算重疊度IOU:重疊面積/(面積1+面積2-重疊面積)#其他box 與i box 的iouovr = inter / (areas[i] + areas[order[1:]] - inter)#找到重疊度不高于閾值的矩形框索引inds = np.where(ovr <= thresh)[0]#因為ovr 是三維,已經去掉了score最大的那一個#將order序列更新,由于前面得到的矩形框索引要比矩形框在原order序列中的索引小1,所以要把這個1加回來order = order[inds + 1]return keep# test if __name__ == "__main__":dets = np.array([[30, 20, 230, 200, 1], [50, 50, 260, 220, 0.9],[210, 30, 420, 5, 0.8],[430, 280, 460, 360, 0.7]])thresh = 0.35keep_dets = py_nms(dets, thresh)print(keep_dets)print(dets[keep_dets])
tensorflow 有內置的nms算法api
tf.image.non_max_suppression_with_scores(boxes, scores, max_output_size, iou_threshold=0.5,score_threshold=float('-inf'), soft_nms_sigma=0.0, name=None )

參考鏈接一

參考鏈接二

參考鏈接三

參考鏈接四

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的目标检测 nms非极大抑制算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。