目标检测的非最大值抑制-NMS
来源:互联网 发布:cydia中软件源打不开 编辑:程序博客网 时间:2024/06/05 15:24
object detection[NMS][非极大抑制]
非极大抑制,是在对象检测中用的较为频繁的方法,当在一个对象区域,框出了很多框,那么如下图:
目的就是为了在这些框中找到最适合的那个框,主要就是通过迭代的形式,不断的以最大得分的框去与其他框做iou操作,并过滤那些iou较大(即交集较大)的框
按照github上R-CNN的matlab代码,改成py的,具体如下:
def iou(xminNp,yminNp,xmaxNp,ymaxNp,areas,lastInd,beforeInd,threshold): #将lastInd指向的box,与之前的所有存活的box指向坐标做比较 xminNpTmp = np.maximum(xminNp[lastInd], xminNp[beforeInd]) yminNpTmp = np.maximum(yminNp[lastInd], yminNp[beforeInd]) xmaxNpTmp = np.maximum(xmaxNp[lastInd], xmaxNp[beforeInd]) ymaxNpTmp = np.maximum(ymaxNp[lastInd], ymaxNp[beforeInd]) #计算lastInd指向的box,与存活box交集的,所有width,height w = np.maximum(0.0,xmaxNpTmp-xminNpTmp) h = np.maximum(0.0,ymaxNpTmp-yminNpTmp) #计算存活box与last指向box的交集面积 inter = w*h iouValue = inter/(areas[beforeInd]+areas[lastInd]-inter) indexOutput = [item[0] for item in zip(beforeInd,iouValue) if item[1] <= threshold ] return indexOutputdef nms(boxes,threshold): ''' boxes:n by 5的矩阵,n表示box个数,每一行分别为[xmin,ymin,xmax,ymax,score] ''' assert isinstance(boxes,numpy.ndarray),'boxes must numpy object' assert boxes.shape[1] == 5,'the column Dimension should be 5' xminNp = boxes[:,0] yminNp = boxes[:,1] xmaxNp = boxes[:,2] ymaxNp = boxes[:,3] scores = boxes[:,4] #计算每个box的面积 areas = (xmaxNp-xminNp)*(ymaxNp-yminNp) #对每个box的得分按升序排序 scoresSorted = sorted(list(enumerate(scores)),key = lambda item:item[1]) #提取排序后数据的原索引 index = [ item[0] for item in scoresSorted ] pick = [] while index: #将当前index中最后一个加入pick lastInd = index[-1] pick.append(lastInd) #计算最后一个box与之前所有box的iou index = iou(xminNp,yminNp,xmaxNp,ymaxNp,areas,lastInd,index[:-1],threshold) return pick[:-1]if __name__ == '__main__': nms(boxes,threshold)
参考资料:
[] 非极大抑制。http://www.cnblogs.com/liekkas0626/p/5219244.html
阅读全文
0 0
- 目标检测的非最大值抑制-NMS
- NMS(non maximum suppression)非最大值抑制
- NMS非极大值抑制
- 非极大值抑制 NMS
- NMS-----非极大抑制
- 非极大值抑制NMS
- 非极大值抑制(NMS)
- 非最大抑制(NMS)
- 非最大抑制(NMS)
- 非极大值抑制(NMS)
- NMS(非极大值抑制)
- 非最大抑制(NMS)
- 非极大值抑制(NMS)
- 非极大值抑制算法 NMS
- NMS非极大值抑制的原理与代码实现
- NMS——非极大值抑制
- NMS——非极大值抑制
- NMS——非极大值抑制
- ROS机器人星火计划公开课总结
- 关于Activity和Fragment同时使用startActivityForResult的问题
- 对称加密与非对称加密优缺点详解
- capture pspice 库元件简介
- secureCRT 字体颜色、文件夹和文件显示的颜色区别开解决办法
- 目标检测的非最大值抑制-NMS
- C++普通构造函数和复制构造函数的区别
- Nginx服务器在Linux下的安装步骤
- Unity中Awake和Start的区别
- Java Socket编程
- SYN攻击(DDOS攻击的一种)
- 拒绝gradle慢,手动下载配置
- <input type="file" />浏览时只显示指定文件类型
- vue中数据双向绑定的实现原理