深度學習之 soft-NMS

  • 論文:《Improving Object DetectionWith One Line of Code》
  • soft-NMS 英文論文鏈接:https://arxiv.org/pdf/1704.04503.pdf
  • soft-NMS github 鏈接:https://github.com/bharatsingh430/soft-nms

絕大部分目標檢測方法,最后都要用到 NMS 非極大值抑制進行后處理。 通常的做法是將檢測框按得分排序,然后保留得分最高的框,同時刪除與該框重疊面積大于一定比例的其它框。

這種貪心式方法存在如下圖所示的問題: 紅色框和綠色框是當前的檢測結果,二者的得分分別是0.95和0.80。如果按照傳統的NMS進行處理,首先選中得分最高的紅色框,然后綠色框就會因為與之重疊面積過大而被刪掉。

另一方面,NMS的閾值也不太容易確定,設小了會出現下圖的情況(綠色框因為和紅色框重疊面積較大而被刪掉),設置過高又容易增大誤檢。
在這里插入圖片描述

思路:不要粗魯地刪除所有IOU大于閾值的框,而是降低其置信度。

soft NMS算法的大致思路為:M為當前得分最高框,bi 為待處理框,bi 和M的IOU越大,bi 的得分si 就下降的越厲害。
在這里插入圖片描述

soft-NMS算法中的修剪步驟可以寫成如下的評分函數:

(1)線性加權:
在這里插入圖片描述

(2)高斯加權:
在這里插入圖片描述
在這里插入圖片描述
假如還檢測出了3號框(最細的紅色框),而我們的最終目標是檢測出1號和2號框,并且剔除3號框,原始的nms只會檢測出一個1號框并剔除2號框和3號框,而softnms算法可以對1、2、3號檢測狂進行置信度排序,可以知道這三個框的置信度從大到小的順序依次為:1-》2-》3(由于是使用了懲罰,所有可以獲得這種大小關系),如果我們再選擇了合適的置信度閾值,就可以保留1號和2號,同時剔除3號,實現我們的功能。

但是,這里也有一個問題就是置信度的閾值如何選擇,作者在這里依然使用手工設置的值,依然存在很大的局限性,所以該算法依然存在改進的空間

sotf-NMS算法實現代碼如下:

# coding:utf-8
import numpy as np
def soft_nms(boxes, sigma=0.5, Nt=0.1, threshold=0.001, method=1):N = boxes.shape[0]pos = 0maxscore = 0maxpos = 0for i in range(N):maxscore = boxes[i, 4]maxpos = itx1 = boxes[i,0]ty1 = boxes[i,1]tx2 = boxes[i,2]ty2 = boxes[i,3]ts = boxes[i,4]pos = i + 1# get max boxwhile pos < N:if maxscore < boxes[pos, 4]:maxscore = boxes[pos, 4]maxpos = pospos = pos + 1# add max box as a detectionboxes[i,0] = boxes[maxpos,0]boxes[i,1] = boxes[maxpos,1]boxes[i,2] = boxes[maxpos,2]boxes[i,3] = boxes[maxpos,3]boxes[i,4] = boxes[maxpos,4]# swap ith box with position of max boxboxes[maxpos,0] = tx1boxes[maxpos,1] = ty1boxes[maxpos,2] = tx2boxes[maxpos,3] = ty2boxes[maxpos,4] = tstx1 = boxes[i,0]ty1 = boxes[i,1]tx2 = boxes[i,2]ty2 = boxes[i,3]ts = boxes[i,4]pos = i + 1# NMS iterations, note that N changes if detection boxes fall below thresholdwhile pos < N:x1 = boxes[pos, 0]y1 = boxes[pos, 1]x2 = boxes[pos, 2]y2 = boxes[pos, 3]s = boxes[pos, 4]area = (x2 - x1 + 1) * (y2 - y1 + 1)iw = (min(tx2, x2) - max(tx1, x1) + 1)if iw > 0:ih = (min(ty2, y2) - max(ty1, y1) + 1)if ih > 0:ua = float((tx2 - tx1 + 1) * (ty2 - ty1 + 1) + area - iw * ih)ov = iw * ih / ua #iou between max box and detection boxif method == 1: # linearif ov > Nt:weight = 1 - ovelse:weight = 1elif method == 2: # gaussianweight = np.exp(-(ov * ov)/sigma)else: # original NMSif ov > Nt:weight = 0else:weight = 1boxes[pos, 4] = weight*boxes[pos, 4]print(boxes[:, 4])# if box score falls below threshold, discard the box by swapping with last box# update Nif boxes[pos, 4] < threshold:boxes[pos,0] = boxes[N-1, 0]boxes[pos,1] = boxes[N-1, 1]boxes[pos,2] = boxes[N-1, 2]boxes[pos,3] = boxes[N-1, 3]boxes[pos,4] = boxes[N-1, 4]N = N - 1pos = pos - 1pos = pos + 1keep = [i for i in range(N)]return keep
boxes = np.array([[100, 100, 150, 168, 0.63],[166, 70, 312, 190, 0.55],[221, 250, 389, 500, 0.79],[12, 190, 300, 399, 0.9],[28, 130, 134, 302, 0.3]])
keep = soft_nms(boxes)
print(keep)

效果

下圖可以看出,基本可以獲得平均1%的提升,且不增加額外的訓練和計算負擔。
在這里插入圖片描述

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

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

相關文章

項目微管理 - 總結也是新的開始

時間都去哪了&#xff1f;聽著這首耳熟能詳的旋律&#xff0c;感嘆著飛速流逝的年華&#xff0c;我漸漸的陷入到沉思之中。時間過的真的很快&#xff0c;從一名程序員到接手一個一線項目團隊一晃已經2年多了。在這段時間里&#xff0c;我接觸了各種各樣的人&#xff0c;處理了各…

一維二維_Excel二維數據轉一維,2種方法輕松搞定

今天是2020年1月1日&#xff0c;祝各位小伙伴們新年快樂&#xff0c;開心每一天~如下所示&#xff0c;左邊是二維交叉數據表&#xff0c;我們希望快速轉換成右邊的一維數據表如果復制粘貼&#xff0c;效率太低了&#xff0c;今天分享兩種方法&#xff0c;實現快速轉換1、powerq…

數百種 Windows 軟件的免費替代品列表

程序所執行任務的描述WindowsLinux1) 網絡連接網頁瀏覽器微軟 IE&#xff0c;網景 Netscape / Mozilla&#xff0c; Opera [私有]&#xff0c;Firebird&#xff0c;……1) Netscape/Mozilla 2) Galeon. 3) Konqueror. 4) Opera.[私有] 5) Firebird. 6) Nautilus 7) Epiphany 8)…

深度學習之 Cascade R-CNN

Zhaowei Cai, Nuno Vasconcelos. 《Cascade R-CNN: Delving into High Quality Object Detection》. CVPR 2018.論文鏈接&#xff1a;https://arxiv.org/abs/1712.00726代碼鏈接&#xff1a;https://github.com/zhaoweicai/cascade-rcnn 前言 IOU閾值被用來定義正負例&#x…

轉換文檔參數_明明2秒可以搞定Word、Excel相互轉換,你卻用了半小時!真虧了...

我們在用office三件套工作的時候&#xff0c;經常都需要對文件的格式進行轉換&#xff0c;像是Word文檔和Excel表格的轉換&#xff0c;很多小伙伴都要花上半個小時甚至以上的時間才能搞定&#xff0c;效率實在不行。別擔心&#xff0c;今天小編將分享能快速完成Word、Excel轉換…

深度學習之 DCN(Deformable Convolution)-可變形卷積

Paper link: http://openaccess.thecvf.com/content_ICCV_2017/papers/Dai_Deformable_Convolutional_Networks_ICCV_2017_paper.pdfhttps://arxiv.org/pdf/1703.06211 Code link: https://github.com/msracver/Deformable-ConvNets Abstract 如何有效地對幾何圖形的變化進行…

軟件開發 項目進展 軟件架構 指南

軟件開發&#xff0c;標準化流水線式開發的實施構想 軟件開發&#xff0c;標準化流水線式開發的實施構想 近日看到一篇博文&#xff0c;討論標準化流水線開發模式的話題&#xff0c;但是這篇博文僅僅提出這個問題&#xff0c;未見回應。 這其實是一個很大的問題&#xff0c;我…

linux 下php多版本安裝

php-multi-version ubuntu apt-get 安裝php5.6 添加軟件源sudo add-apt-repository ppa:ondrej/php sudo apt-get updatesudo apt-get install php5.6sudo apt-get install php5sudo apt-get install php7 /usr/local/bin 與/usr/bin echo $PATH/usr/local/sbin:/usr/local/bin…

c++ 舞伴配對問題_挑戰新物體描述問題,視覺詞表解決方案超越人類表現

編者按&#xff1a;最近&#xff0c;研究者們發布了 nocaps 挑戰&#xff0c;用以測量在沒有對應的訓練數據的情況下&#xff0c;模型能否準確描述測試圖像中新出現的各種類別的物體。針對挑戰中的問題&#xff0c;微軟 Azure 認知服務團隊和微軟研究院的研究員提出了全新解決方…

深度學習之雙線性插值(Bilinear interpolation)

1. 什么是插值 Interpolation is a method of constructing new data points within the range of a discrete set of known data points. Image interpolation refers to the“guess”of intensity values at missing locations. 圖片放大是圖像處理中的一個特別基礎的操作。…

div table 超出了_div包裹的table,table的寬度超出了的寬度,出現的滾動條的在windows下無法拖動...

1.父級div是否設置了寬度&#xff0c;只有設置了寬度且滾動條在div內才是你想要控制的滾動2.僅憑你說的這些屬性不知道滾動條怎么不能動&#xff0c;可以貼一下代碼&#xff1f;3.橫向需要滾動條的話必須設置table的確定寬度做了一個demo:.table{table-layout:fixed; width:…

第二階段站立會議7

昨天&#xff1a;美化頁面 今天&#xff1a;進行項目上傳 問題&#xff1a;阿里云服務器上的mysql出現連接問題轉載于:https://www.cnblogs.com/sdysyhj/p/8301489.html

深度學習之 OHEM (Online Hard Example Mining)

論文 《Training Region-based Object Detectors with Online Hard Example Mining》鏈接 https://arxiv.org/pdf/1604.03540.pdf Astract 摘要主要講了四點&#xff1a; (1) 訓練過程需要進行參數的空間搜索(2) 簡單樣本與難分辨樣本之間的類別不平衡是亟需解決的問題(3) 自…

音視頻 詳解

avi文件格式詳解 AVI是音頻視頻交錯(Audio Video Interleaved)的英文縮寫&#xff0c;它是Microsoft公司開發的一種符合RIFF文件規范的數字音頻與視頻文件格式&#xff0c;原先用于Microsoft Video for Windows (簡稱VFW)環境&#xff0c;現在已被Windows 95/98、OS/2等多數操…

c6011取消對null指針的引用_C++| 函數的指針參數如何傳遞內存?

函數的參數是一個一級指針&#xff0c;可以傳遞內存嗎&#xff1f;如果函數的參數是一個一級指針&#xff0c;不要指望用該指針去申請動態內存。看下面的實例&#xff1a;#include using namespace std;void GetMemory(char *p, int num){p (char *)malloc(sizeof(char) * num…

Servlet執行時要實現的方法

Servlet執行時要實現的方法 public void init(ServletConfig config) public ServletConfig getServletConfig() public String getServletInfo() public void service(ServletRequest request,ServletResponse response) public void destroy() 本文轉自sucre03 5…

axios 設置攔截器 全局設置帶默認參數(發送 token 等)

應用場景&#xff1a;1&#xff0c;每個請求都帶上的參數&#xff0c;比如token&#xff0c;時間戳等。2&#xff0c;對返回的狀態進行判斷&#xff0c;比如token是否過期代碼如下&#xff1a;[javascript] view plain copyaxios.interceptors.request.use( config &g…

深度學習目標檢測之 YOLO v2

論文名&#xff1a;《YOLO9000: Better, Faster, Stronger》原文&#xff1a;https://arxiv.org/pdf/1612.08242v1.pdf代碼&#xff1a;http://pjreddie.com/darknet/yolo/ YOLO v2 斬獲了CVPR 2017 Best Paper Honorable Mention。在這篇文章中&#xff0c;作者首先在YOLOv1的…

tcpmp 編譯 源代碼分析

TCPMP源代碼分析 TCPMP源代碼分析 播放器主要由核心框架模塊&#xff08;common工程&#xff09;和解碼器、分離器插件組成。TCPMP的插件非常多&#xff0c;其中主要的插件有&#xff1a;interface插件實現了TCPMP的界面&#xff0c;ffmpeg是系統主要的音視頻解碼模塊&#xff…

使用zerorpc踩的第一個坑:

Server端代碼&#xff1a;注意s.run() 和 s.run的區別&#xff0c;一個括號搞死我了.如果不加括號&#xff0c;服務端服務是不會啟動的&#xff0c;客戶端就會報連接超時的錯誤 Server端在本機所有IP上監聽4242端口的tcp協議 import zerorpcclass HelloRPC(object):   def __…