深度學習之非極大值抑制(Non-maximum suppression,NMS)

非極大值抑制(Non-maximum suppression,NMS)是一種去除非極大值的算法,常用于計算機視覺中的邊緣檢測、物體識別等。

算法流程

給出一張圖片和上面許多物體檢測的候選框(即每個框可能都代表某種物體),但是這些框很可能有互相重疊的部分,我們要做的就是只保留最優的框。假設有N個框,每個框被分類器計算得到的分數為Si,(1<=i<=N)S_i, (1<=i<=N)Si?,(1<=i<=N)

  1. 建造一個存放待處理候選框的集合H,初始化為包含全部N個框;建造一個存放最優框的集合M,初始化為空集。

  2. 將所有集合 H 中的框進行排序,選出分數最高的框 m,從集合 H 移到集合 M;

  3. 遍歷集合 H 中的框,分別與框 m 計算交并比(Interection-over-union,IoU),如果高于某個閾值(一般為0~0.5),則認為此框與 m 重疊,將此框從集合 H 中去除。

  4. 回到第1步進行迭代,直到集合 H 為空。集合 M 中的框為我們所需。

需要優化的參數

IoU 的閾值是一個可優化的參數,一般范圍為0~0.5,可以使用交叉驗證來選擇最優的參數。

示例

比如人臉識別的一個例子:
在這里插入圖片描述
已經識別出了 5 個候選框,但是我們只需要最后保留兩個人臉。

首先選出分數最大的框(0.98),然后遍歷剩余框,計算 IoU,會發現露絲臉上的兩個綠框都和 0.98 的框重疊率很大,都要去除。

然后只剩下杰克臉上兩個框,選出最大框(0.81),然后遍歷剩余框(只剩下0.67這一個了),發現0.67這個框與 0.81 的 IoU 也很大,去除。
在這里插入圖片描述
至此所有框處理完畢。
??在這里插入圖片描述
再比如定位一個車輛,最后算法就找出了一堆的方框,我們需要判別哪些矩形框是沒用的。非極大值抑制:先假設有6個矩形框,根據分類器類別分類概率做排序,從小到大分別屬于車輛的概率分別為A、B、C、D、E、F。

(1)從最大概率矩形框F開始,分別判斷A~E與F的重疊度IOU是否大于某個設定的閾值;

(2)假設B、D與F的重疊度超過閾值,那么就扔掉B、D;并標記第一個矩形框F,是我們保留下來的。

(3)從剩下的矩形框A、C、E中,選擇概率最大的E,然后判斷E與A、C的重疊度,重疊度大于一定的閾值,那么就扔掉;并標記E是我們保留下來的第二個矩形框。

就這樣一直重復,找到所有被保留下來的矩形框A、E。

代碼

import numpy as npdef py_cpu_nms(dets, thresh):# 單獨獲取各個參數,以下參數shape = (5,)x1 = dets[:,0]y1 = dets[:,1]x2 = dets[:,2]y2 = dets[:,3]scores = dets[:,4]areas = (y2-y1+1) * (x2-x1+1)print("areas.shape: {}".format(areas.shape))print("areas: {}".format(areas))keep = []# 得分按照由高到低排序的索引, index.shape = (6,)index = scores.argsort()[::-1]print("index.shape: {}".format(index.shape))print("index: {}".format(index))while index.size >0:# i為得分最高的索引i = index[0]      # 將得分最高的索引追加到列表中keep.append(i)# 計算兩個box左上角點坐標的最大值x11、y11和右下角坐標的最小值x22、y22# x11、y11、x22、y22 shape = (5,)x11 = np.maximum(x1[i], x1[index[1:]])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("index[1:]: {}".format(index[1:]))print("x1[index[1:]]: {}".format(x1[index[1:]]))print("x11: {}".format(x11))print("x11.shape: {}".format(x11.shape))# 當兩個方框相交時,22-11最后得到w,h是正值# 當兩個方框不相交的時候,22-11最后得到w,h是負值,則設置為0# w、h shape = (5,)w = np.maximum(0, x22-x11+1)h = np.maximum(0, y22-y11+1)print("w: {}".format(w))print("w.shape: {}".format(w.shape))# 計算交集面積# overlaps.shape = (5,)overlaps = w * hprint("overlaps: {}".format(overlaps))print("overlaps.shape: {}".format(overlaps.shape))# 計算交并比# ious.shape = (5,)ious = overlaps / (areas[i] + areas[index[1:]] - overlaps)print("ious.shape: {}".format(ious.shape))print("ious: {}".format(ious))# 得到滿足閾值條件的ious中的索引(ious相比index缺少第一個最大值)ious_idx = np.where(ious<=thresh)[0]print("ious<=thres idx: {}".format(ious_idx))# ious_idx+1得到在index中的索引index = index[ious_idx + 1]   # because index start from 1print("index: {}".format(index))return keepif __name__ == "__main__":boxes=np.array([[100,100,210,210,0.72], # 0[250,250,420,420,0.8],  # 1[220,220,320,330,0.92], # 2[100,100,210,210,0.72], # 3[230,240,325,330,0.81], # 4[220,230,315,340,0.9]]) # 5keep = py_cpu_nms(boxes, thresh=0.7)print("keep: {}".format(keep))

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453768.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453768.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453768.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

148. 顏色分類

給定一個包含紅&#xff0c;白&#xff0c;藍且長度為 n 的數組&#xff0c;將數組元素進行分類使相同顏色的元素相鄰&#xff0c;并按照紅、白、藍的順序進行排序。 我們可以使用整數 0&#xff0c;1 和 2 分別代表紅&#xff0c;白&#xff0c;藍。 注意事項 不能使用代碼庫中…

vue項目token放在哪里_關于vue動態菜單的那點事

vue-element-admin4.0國內節點訪問地址&#xff1a;https://panjiachen.gitee.io/vue-element-admin-site/zh/本此使用的是https://github.com/PanJiaChen/vue-element-admin/tree/i18n 國際化分支的版本。說是除了國際化其他都一樣。本文主要介紹前臺動態的使用資源權限。后臺…

H264學習方法歷程資料

我的H.264學習歷程 半年前&#xff0c;我知道了H.264這個名詞。那個時候決定學習H.264&#xff0c;可是我連資料都不知道如何收集。而且整個學校就只有我一個人在學習H.264&#xff0c; 找不到人交流&#xff0c;所以那個時候學得真的是舉步維艱&#xff0c;很痛苦&#xff0c…

深度學習之 ROI Pooling

什么是ROI&#xff1f; ROI是 Region of interest 的簡寫&#xff0c;指的是 Faster R-CNN 結構中&#xff0c;經過 RPN 層后&#xff0c;產生的 proposal 對應的 box 框。 ROI Pooling 顧名思義&#xff0c;是 pooling 層的一種&#xff0c;而且是針對 ROIs 的 pooling。整個…

KD樹小結

很久之前我就想過怎么快速在二維平面上查找一個區域的信息&#xff0c;思考許久無果&#xff0c;只能想到幾種優秀一點的暴力。 KD樹就是干上面那件事的。 別的不多說&#xff0c;趕緊把自己的理解寫下來&#xff0c;免得涼了。 KD樹的組成 以維護k維空間(x,y,……)內的KD樹為例…

多元函數求極值中的a_多元函數的條件極值和拉格朗日乘數法

、條件極值、拉格朗日乘數法1. 轉化為無條件極值在討論多元函數極值問題時&#xff0c;如果遇到除了在定義域中尋求駐點(可能的極值點)外&#xff0c;對自變量再無別的限制條件&#xff0c;我們稱這類問題為函數的無條件極值。如求的極值&#xff0c;就是無條件極值問題。然而在…

深度學習之 RPN(RegionProposal Network)- 區域候選網絡

anchor boxes基本概念與作用: feature map 上的一個點可以映射回輸入圖片上的一個點&#xff0c;以特征圖上這個點為中心&#xff0c;預先人為設定 k 個 boxes&#xff0c;這些 boxes 就稱為在這個點上生成的 k 個 anchor boxes&#xff08;所有anchor boxes的中心點坐標是一樣…

h264的碼率控制 JVT-G012

開始看h264的碼率控制&#xff0c;很多地方都提到 G012&#xff0c;拿來做為參考比較&#xff0c;看來很有必要研究清楚。 偶這人&#xff0c;E文文檔不翻譯的話&#xff0c;看過就忘了&#xff0c;于是草草翻譯了下&#xff0c;因為不打算做B幀&#xff0c;也不準備在同一幀中…

Android RecyclerView嵌套EditView實時更新Item數據

一、場景&#xff08;例如&#xff1a;購物車&#xff09; 1、當我們需要以列表樣式管理某些數據時&#xff0c;可能需要列表項的某個字段可編輯 2、編輯Item上的某個字段后可能還要更新相關字段的值 二、可能遇到的問題 1、列表滑動導致輸入框中的數據錯位&#xff08;或者焦點…

workbench拓撲優化教程_優化技術在水泵水力設計的應用(上篇)

文章來源&#xff1a;安世亞太官方訂閱號&#xff08;搜索&#xff1a;Peraglobal&#xff09;CFD技術在泵的內流數值模擬、研究泵內部流動規律和結構方面已廣泛應用&#xff0c;取得了很多成果。但是初步設計的產品如果通過CFD仿真得到的性能曲線不能滿足使用要求&#xff0c;…

深度學習之 TensorRT

1 簡介 TensorRT是一個高性能的深度學習推理&#xff08;Inference&#xff09;優化器&#xff0c;可以為深度學習應用提供低延遲、高吞吐率的部署推理。TensorRT可用于對超大規模數據中心、嵌入式平臺或自動駕駛平臺進行推理加速。TensorRT現已能支持TensorFlow、Caffe、Mxne…

H.264筆記

H.264標準寫得比較繁復&#xff0c;所以考慮在瀏覽完Whitepaper之后就開始研讀X264代碼。X264代碼風格還是比較清晰簡潔的。根據對標準得理解&#xff0c;Picture Order Count在Slice解碼的一開始就被提及&#xff1a;I0 B1 B2 P3 B4 B5 P6I0 P3 B1 B2 P6 B4 B5于是I0的POC是0&…

進制轉換中dbho是什么意思_什么是網段?二進制十進制如何互相轉換?看完這篇,你就全明白了...

之前的文章講了ip&#xff0c;子網掩碼&#xff0c;網關的關系&#xff0c;今天著重講一下網段。我們用傻瓜交換機通訊時&#xff0c;一個網段的設備才能互相通訊&#xff0c;怎么能判斷兩個ip是同一個網段呢&#xff1f;今天就簡單的說一下。(這篇文章用語音聽可以起到催眠作用…

【網絡流24題】星際轉移問題(最大流)

【網絡流24題】星際轉移問題&#xff08;最大流&#xff09; 題面 Cogs 題解 因為天數是未知的&#xff0c;所以我們要想辦法處理天數 可以選擇二分或者依次累加天數 因為數據范圍較小&#xff0c;使用二分可能反而復雜度會增高 所以使用不斷累加天數 那么&#xff0c;把所有的…

使用 gunicorn 部署flask項目

1、WSGI協議 Web框架致力于如何生成HTML代碼&#xff0c;而Web服務器用于處理和響應HTTP請求。Web框架和Web服務器之間的通信&#xff0c;需要一套雙方都遵守的接口協議。WSGI協議就是用來統一這兩者的接口的。 2、WSGI容器 常用的WSGI容器有Gunicorn和uWSGI&#xff0c;但G…

軟件需求與問題解決

&#xff08;一&#xff09; 小滿當上項目經理后不久&#xff0c;參與了一個大項目。當時市場簽下來的時候&#xff0c;公司里面是歡天喜地的。項目做了一年多。到了交付的時候&#xff0c;用戶卻很不滿意&#xff0c;當初說好的東西&#xff0c;好多都變了卦。用戶是上帝&…

flex 換主軸后子元素占滿_Chrome72 嵌套 flex 布局修改,你的網站可能會發生布局錯亂...

起源2019 年 1 月 29 日&#xff0c;Chrome72 正式版(72.0.3626.81)發布&#xff0c;本次發布帶來了一個改變&#xff0c;且沒有在更新日志中提及&#xff0c;該改變導致某些網站發生了布局錯亂。該改變主要針對的是嵌套的flex布局&#xff0c;下面我們一起看下是怎么回事。問題…

使用 Django + Wusgi + Nginx 部署 Django

如何在生產上部署Django? Django的部署可以有很多方式&#xff0c;采用 nginxuwsgi 的方式是其中比較常見的一種方式。 uwsgi介紹 uWSGI是一個Web服務器&#xff0c;它實現了WSGI協議、uwsgi、http等協議。Nginx中HttpUwsgiModule的作用是與uWSGI服務器進行交換。 WSGI / …

網絡學習網址

網絡之路博客 http://ccieh3c.com/ 轉載于:https://www.cnblogs.com/changha0/p/8179801.html

路由到另外一個頁面_Nextjs使用解讀一(項目搭建與路由系統)

文章說明&#xff1a;1. 之前想搭建個人博客&#xff0c;由于學習的是react技術棧&#xff0c;所以就到處搜羅資料學了nextjs&#xff0c;配合koa就把博客搭起來了。該系列文章基于我的學習筆記&#xff0c;重新整理了一遍&#xff0c;如果有錯誤之處&#xff0c;還請指正。2. …