日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > 目标检测 >内容正文

目标检测

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

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

nms算法就是對(duì)同一個(gè)anhor 的box 進(jìn)行基于閾值的去重

1、目的

對(duì)于尺寸為416×416的輸入圖像,YOLO預(yù)測(cè)((52×52)+(26×26)+ 13×13))×3 = 10647個(gè)邊界框。 但是,在我的圖像中只有三個(gè)物體(本人,水杯,手機(jī))。 我們?nèi)绾螌z測(cè)結(jié)果從10647減少到3呢?

2、基于對(duì)象置信度的閾值。

首先,我們根據(jù)對(duì)象分?jǐn)?shù)(objectness score)過濾框。 通常,具有低于閾值分?jǐn)?shù)的框被忽略。

3、非最大抑制(NMS)

NMS打算解決同一圖像的多重檢測(cè)問題。通過抑制不是極大值的元素,可以理解為局部最大搜索。這個(gè)局部代表的是一個(gè)鄰域,鄰域有兩個(gè)參數(shù)可變,一是鄰域的維數(shù),二是鄰域的大小。這里討論用于目標(biāo)檢測(cè)中提取分?jǐn)?shù)最高的窗口的。例如在行人檢測(cè)中,滑動(dòng)窗口經(jīng)提取特征,經(jīng)分類器分類識(shí)別后,每個(gè)窗口都會(huì)得到一個(gè)分?jǐn)?shù)。但是滑動(dòng)窗口會(huì)導(dǎo)致很多窗口與其他窗口存在包含或者大部分交叉的情況。這時(shí)就需要用到NMS來選取那些鄰域里分?jǐn)?shù)最高(是行人的概率最大),并且抑制那些分?jǐn)?shù)低的窗口。
3.1、算法過程
  • Step1:按置信概率排列相應(yīng)的備選框
  • :取最大的框作為保留框,與其IOU大于閾值的框刪除掉
  • :剩下的框執(zhí)行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]#每一個(gè)候選框的面積areas = (x2 - x1 + 1) * (y2 - y1 + 1)### argsort()函數(shù)是將x中的元素從小到大排列,提取其對(duì)應(yīng)的index(索引)or1=scores.argsort() #array([3, 2, 1, 0])#降序排序的order = or1[::-1]keep = []while order.size > 0:#先取order最大的那個(gè)索引 ii = order[0]#保留score最大的那個(gè)boxkeep.append(i)#計(jì)算當(dāng)前概率最大矩形框與其他矩形框的相交框的坐標(biāo),會(huì)用到numpy的broadcast機(jī)制,得到的是向量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:]])#計(jì)算相交框的面積,注意矩形框不相交時(shí)w或h算出來會(huì)是負(fù)數(shù),用0代替#分別計(jì)算其他box 與 i box 的交集w = np.maximum(0.0, xx2 - xx1 + 1)h = np.maximum(0.0, yy2 - yy1 + 1)inter = w * h#計(jì)算重疊度IOU:重疊面積/(面積1+面積2-重疊面積)#其他box 與i box 的iouovr = inter / (areas[i] + areas[order[1:]] - inter)#找到重疊度不高于閾值的矩形框索引inds = np.where(ovr <= thresh)[0]#因?yàn)閛vr 是三維,已經(jīng)去掉了score最大的那一個(gè)#將order序列更新,由于前面得到的矩形框索引要比矩形框在原order序列中的索引小1,所以要把這個(gè)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 有內(nèi)置的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 )

參考鏈接一

參考鏈接二

參考鏈接三

參考鏈接四

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

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。