• 论文:《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%的提升,且不增加额外的训练和计算负担。

深度学习之 soft-NMS相关推荐

  1. 【深度学习】——模型评估指标MAP计算实例计算

    目录 一.知识储备 1.IOU--交集面积与并集面积之比 2.混淆矩阵(TP.FP.FN.TN) 问题1:上面的TP等具体是如何计算得到的? 3.精度precision&召回率recall 二 ...

  2. 【深度学习】一分钟速学 | NMS, IOU 与 SoftMax

    非极大抑制 NMS的英文是Non-maximum suppression的缩写. 简单的说,就是模型给出了多个重叠在一起的候选框,我们只需要保留一个就可以了.其他的重叠的候选框就删掉了,效果可见下图: ...

  3. 【深度学习】——物体检测细节处理(NMS、样本不均衡、遮挡物体)

    目录 一.候选框大量重叠问题 1.NMS核心思想 2. 步骤: 3.缺陷 4.改进 1)soft NMS--衰减的方式来减小预测框的分类得分 2)softer nms--增加了位置置信度 二.样本不平 ...

  4. 【深度学习】去掉softmax后Transformer会更好吗?复旦华为诺亚提出SOFT:轻松搞定线性近似...

    作者丨happy  编辑丨极市平台 导读 本文介绍了复旦大学&华为诺亚提出的一种新颖的softmax-free的Transformer-SOFT.所提SOFT显著改善了现有ViT方案的计算效率 ...

  5. 【深度学习】非极大值抑制Non-Maximum Suppression(NMS)一文搞定理论+多平台实现...

    薰风说 Non-Maximum Suppression的翻译是非"极大值"抑制,而不是非"最大值"抑制.这就说明了这个算法的用处:找到局部极大值,并筛除(抑制) ...

  6. 深度学习目标检测详细解析以及Mask R-CNN示例

    深度学习目标检测详细解析以及Mask R-CNN示例 本文详细介绍了R-CNN走到端到端模型的Faster R-CNN的进化流程,以及典型的示例算法Mask R-CNN模型.算法如何变得更快,更强! ...

  7. 基于深度学习识别模型的缺陷检测

    根据读者反映,咱们的这个PCB素材设置的不对,应该是没有漆,铜线等等,应该是黑白的.额,具体我也知道,但没去过工厂,实在很难获得这些素材... 所以就当是一次瑕疵识别的实践,具体的数据集你可以自己定义 ...

  8. 深度学习目标检测之 YOLO v4

    论文原文:https://arxiv.org/abs/2004.10934 代码 原版c++: https://github.com/AlexeyAB/darknet keras:https://gi ...

  9. 卷积在计算机中实现+pool作用+数据预处理目的+特征归一化+理解BN+感受野理解与计算+梯度回传+NMS/soft NMS

    一.卷积在计算机中实现 1.卷积 将其存入内存当中再操作(按照"行先序"): 这样就造成混乱. 故需要im2col操作,将特征图转换成庞大的矩阵来进行卷积计算,利用矩阵加速来实现, ...

  10. Soft NMS论文笔记

    论文:Improving Object Detection With One Line of Code. Navaneeth Bodla*, Bharat Singh*, Rama Chellappa ...

最新文章

  1. 你们这行我懂,不给点好处都不接!
  2. Fedora和Fedora Core各个历史版本官方下载地址
  3. Solaris ALOM1.6 SC Password Reset
  4. 【11GR2 RAC】如何开启归档和FLASHBACK
  5. HDLBits答案(19)_Verilog有限状态机(6)
  6. 受限玻尔兹曼机RBM实现及能量值思考——matlab实现
  7. OGEngine教程:声音载入
  8. 论文浅尝 | Interaction Embeddings for Prediction and Explanation
  9. scpi指令转换c语言,[C#源代码]使用SCPI指令对通讯端口(RS232/USB/GPIB/LAN)进行仪器编程...
  10. 一文搞定C语言指针问题
  11. 持续集成实践二之Jenkins与Sonar Qube集成
  12. 修改rocketmq nameserver的默认端口号
  13. SwiftyJson 实现Json转模型
  14. 前端开发 20 年变迁史
  15. 如何使用阿里云的NAS云文件存储服务
  16. django 过滤器-查询集-比较运算符-FQ对象-mysql的命令窗口
  17. JavaScript学习(五)
  18. 如何基于已有的 REST API 实现 GraphQL API
  19. 计算机网络原理 计算题,计算机网络原理计算题
  20. 基于Java毕业设计阳光社区新冠瘦苗接种系统源码+系统+mysql+lw文档+部署软件

热门文章

  1. @JsonFormat Date类型时间 格式化 注解 使用
  2. 解决:Error response from daemon: Get https://index.docker.io/v1/search?q=openjdkn=25: dial tcp: looku
  3. TOAD连接Oracle数据库失败:OCI_INVALID_HANDLE解决
  4. 从任意网页上摘取酷炫Jquery效果为自己使用的方法
  5. xcode windows版安装使用教程
  6. java Spring Boot中使用Swagger2构建API文档
  7. 测试环境服务器硬盘塞满问题排查
  8. Word -- 列表重新编号
  9. XidianOJ 1123 K=1 Problem of Orz Pandas
  10. PHPCMS V9爆出多个SQL注入漏洞