Soft NMS+Softer NMS+KL Loss
论文1: Soft-NMS – Improving Object Detection With One Line of Code (ICCV2017) 速达>>
论文2: Softer-NMS–Bounding Box Regression with Uncertainty for Accurate Object Detection(CVPR 2019)速达>>
文章目录
- 针对问题
- Soft-NMS
- Soft NMS算法流程
- Soft-NMS算法实现
- 实验
- Softer-NMS
- Bounding Box Regression with KL Loss
- Softer-NMS算法
- 实验
- 参考文献
针对问题
传统的NMS存在的问题:
- 同类的两目标重合度比较大时,容易误删,如 Figure 1
- 如果过目标附近的预测框均不好呢?Figure 2 (a)的情况如何抉择,两个框都不是好的选择
- IoU 和分类 score 并不强相关,最高 score 的框不一定是最好的,如 Figure 2 (b)
Soft-NMS
Soft NMS算法流程
NMS 删除框的方式太 Hard,容易误删,针对该问题改进 NMS 得到了Soft NMS:IOU超过阈值时不是立马将其当做重复框剔除,而是降低其分数,最后剔除分数低的,大致流程如下:
传统NMS处理方式比较刚,超过设定阈值就删除该框,容易误伤友军(两个目标的框被当做一个目标的给处理了):
si={si,iou(M,bi)≤Nt0,iou(M,bi)≥Nt\begin{aligned}s_i = \left\{\begin{aligned} s_i,\qquad iou(\mathcal M,b_i)\leq N_t \\ 0,\qquad iou(\mathcal M,b_i)\geq N_t \end{aligned}\right.\end{aligned}si={si,iou(M,bi)≤Nt0,iou(M,bi)≥Nt
Soft NMS则更温柔,多给了重合度高的框一个证明自己的机会,以一个降低该框 score 方式(IoU越高则分数应该越低),让其重新去后面排队。最容易想到的就是用线性的方法,将该框 score 和 IoU 直接相乘,论文中给出的是乘以 (1−iou(M,bi)(1-iou(\mathcal M,b_i)(1−iou(M,bi):
si={si,iou(M,bi)≤Ntsi(1−iou(M,bi)),iou(M,bi)≥Nt\begin{aligned}s_i = \left\{\begin{aligned} &s_i,\qquad\qquad\qquad\qquad\quad iou(\mathcal M,b_i)\leq N_t \\ &s_i(1-iou(\mathcal M,b_i)),\qquad iou(\mathcal M,b_i)\geq N_t \end{aligned}\right.\end{aligned}si={si,iou(M,bi)≤Ntsi(1−iou(M,bi)),iou(M,bi)≥Nt
但上式不连续,所以实际上用 高斯函数:
si=sie−iou(M,bi)2σ,∀bi∉Ds_i = s_ie^{-\frac{iou(\mathcal M,b_i)^2}{\sigma}},\forall b_i \notin \mathcal Dsi=sie−σiou(M,bi)2,∀bi∈/D
当然,最后还是得选择一个合适的score阈值来去掉那些重复框
Soft-NMS算法实现
def cpu_soft_nms(np.ndarray[float, ndim=2] boxes, float sigma=0.5, float Nt=0.3, float threshold=0.001, unsigned int method=0):cdef unsigned int N = boxes.shape[0]cdef float iw, ih, box_areacdef float uacdef int pos = 0cdef float maxscore = 0cdef int maxpos = 0cdef float x1,x2,y1,y2,tx1,tx2,ty1,ty2,ts,area,weight,ovfor i in range(N):# 在i之后找到confidence最高的框,标记为max_posmaxscore = 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# 找到max的框while pos < N:if maxscore < boxes[pos, 4]:maxscore = boxes[pos, 4]maxpos = pospos = pos + 1# 交换max_pos位置和i位置的数据# add max box as a detection boxes[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 + 1while pos < N:# 先记录内层循环的数据bix1 = boxes[pos, 0]y1 = boxes[pos, 1]x2 = boxes[pos, 2]y2 = boxes[pos, 3]s = boxes[pos, 4]# 计算iouarea = (x2 - x1 + 1) * (y2 - y1 + 1)iw = (min(tx2, x2) - max(tx1, x1) + 1) # 计算两个框交叉矩形的宽度,如果宽度小于等于0,即没有相交,因此不需要判断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) #计算union面积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]# 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
实验
Softer-NMS
Soft-NMS 针对的是误删的问题,对另外两个问题没有考虑,而要解释 Softer-NMS 首先得介绍 Bounding Box Regression with KL Loss
Bounding Box Regression with KL Loss
在原本分类和回归两个支路的基础上,增加了一条关于Box std(目标框与对应预测框的距离)的回归支路,定位的同时估计定位置信度,指导修正预测框位置
假设预测框位置与目标框位置间的距离分布为高斯分布, xex_exe 表示预测框位置,用一维高斯分布描述如下:
PΘ(x)=12πσ2e−(x−xe)22σ2P_\Theta(x) = \frac1{2\pi\sigma^2}e^{-\frac{(x-x_e)^2}{2\sigma^2}}PΘ(x)=2πσ21e−2σ2(x−xe)2
目标框位置视为狄拉克分布(只存在有没有的问题)
PD(x)=δ(x−xg)P_D(x) = \delta(x - x_g)PD(x)=δ(x−xg)
狄拉克函数性质:∫−∞+∞PD(x)dx=1\int^{+\infty}_{-\infty}P_D(x)dx=1∫−∞+∞PD(x)dx=1
KL距离:衡量两个分布间的差异,也称为 KL散度(Kullback-Leibler divergence)、相对熵(relative entropy),令p,qp,qp,q分别为真实和假设两个分布,则两分布间的 KL 距离为:
DKL(p∣∣q)=Ep[logp(x)⏞真实分布q(x)⏟假设分布]=∑x∈χp(x)logp(x)q(x)=∑x∈χ[p(x)logp(x)−p(x)logq(x)]=∑x∈χp(x)logp(x)−∑x∈χp(x)logq(x)\begin{aligned} D_{KL}(p||q)&=E_p\bigg[\log\frac{\overbrace{p(x)}^{\color{blue}\text{真实分布}} }{\underbrace{q(x)}_{\color{blue}\text{假设分布}} } \bigg]=\sum_{x∈χ} p(x)\log\frac{p(x)}{q(x)}\\ &=\sum_{x∈χ}[p(x)\log p(x)−p(x)\log q(x)]\\ &=\sum_{x∈χ}p(x)\log p(x)−\sum_{x∈χ}p(x)\log q(x)\\ \end{aligned}DKL(p∣∣q)=Ep[log假设分布q(x)p(x)真实分布]=x∈χ∑p(x)logq(x)p(x)=x∈χ∑[p(x)logp(x)−p(x)logq(x)]=x∈χ∑p(x)logp(x)−x∈χ∑p(x)logq(x)
所以优化目标就是让预测框分布与目标框分布接近:
又有:
对 xex_exe 和 σ\sigmaσ 分别求偏导:
σ\sigmaσ 作为分母,为避免梯度爆炸,令 α=log(σ2)\alpha=\log(\sigma^2)α=log(σ2) 代替 σ\sigmaσ,:
参照 Smooth L1Loss\text{Smooth}\ {L_1}\ LossSmooth L1 Loss 的形式:
SmoothL1(x)={0.5x2if∣x∣<1∣x∣−0.5otherwise\text{Smooth}_{L_1}(x)=\bigg\{\begin{aligned} &0.5x^2 \qquad \quad\; if\;|x|<1\\ &|x|-0.5\qquad otherwise \end{aligned}SmoothL1(x)={0.5x2if∣x∣<1∣x∣−0.5otherwise
当 ∣xg−xe>1∣|x_g-x_e >1|∣xg−xe>1∣时,LregL_{reg}Lreg 取下列形式
最终的损失形式为:
SmoothLreg(x)={e−α2(xg−xe)2+12αif∣xg−xe∣<1e−α(∣xg−xe∣−12)+12αotherwise{\color{blue}\text{Smooth}_{L_{reg}}}(x)=\left\{\begin{aligned} &\frac{e^{-\alpha}}{2}(x_g-x_e)^2+\frac 12 \alpha \qquad \qquad\;\; if\;|xg-x_e|<1\\ &{e^{-\alpha}}\left(|x_g-x_e|-\frac12\right)+\frac 12 \alpha\qquad otherwise \end{aligned} \right.SmoothLreg(x)=⎩⎪⎪⎨⎪⎪⎧2e−α(xg−xe)2+21αif∣xg−xe∣<1e−α(∣xg−xe∣−21)+21αotherwise
Softer-NMS算法
Softer-NMS 与标准 NMS 不同的是:超过阈值的框根据 IoU 置信度加权合并多个框得到最终框,而不是直接舍弃
IoU置信度与两个因素有关:
- 方差:方差大置信度低(认为离目标远)
- IOU:IOU小置信度低(与 score 最高的Box)
分类分数与权重无关,因为得分较低的盒子可能具有较高的定位置信度
Softer-NMS 算法流程
实验
参考文献
【1】Soft(er)-NMS:非极大值抑制算法的两个改进算法
【2】softer-nms论文学习详解
【3】Soft NMS算法笔记
Soft NMS+Softer NMS+KL Loss相关推荐
- 交并比 (IoU), mAP (mean Average Precision), 非极大值抑制 (NMS, Soft NMS, Softer NMS, IoU-Net)
目录 目标检测的评价指标 交并比 (Intersection of Union, IoU) mAP (mean Average Precision) 其他指标 非极大值抑制 (Non-Maximum ...
- NMS、soft NMS、softer NMS与IOU-Guided NMS
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 NMS.soft NMS.softer NMS与IOU-Guided NMS 一.NMS 二.soft NMS 三.softer NM ...
- NMS系列(NMS,Soft-NMS,Weighted-NMS,IOU-Guided NMS,Softer-NMS,Adaptive NMS,DIOU NMS,Cluster NMS)
文章目录 NMS ConvNMS(2016) Soft-NMS(2017) Weighted-NMS(2017) IOU-Guided NMS (2018) Pure NMS Network(2017 ...
- 目标检测中的NMS,soft NMS,softer NMS,Weighted Boxes Fusion
NMS 非最大值抑制算法,诞生至少50年了. 在经典的两阶段目标检测算法中,为了提高对于目标的召回率,在anchor阶段会生成密密麻麻的anchor框. 所以在后处理的时候,会存在着很多冗余框对应着同 ...
- softer nms论文阅读Bounding Box Regression with Uncertainty for Accurate Object Detection
论文地址:https://arxiv.org/pdf/1809.08545.pdf 代码地址:https://github.com/yihui-he/KL-Loss https://github.co ...
- 目标检测后处理:从nms到softer nms
文章目录 1 NMS 1.1 动机 1.2 步骤 2 Soft-NMS 2.1 动机 2.2 算法思想 2.3 步骤 3 Softer-NMS 3.1 动机 3.1.1 现有方法的问题 3.1.2 本 ...
- 目标检测(后处理):从 NMS 到 Soft-NMS 到 Softer NMS
目标检测(后处理):从 NMS 到 Soft-NMS 到 Softer NMS 1.NMS 2.Soft-NMS 3.Softer-NMS 4.总结 1.NMS 非最大抑制(NMS)主要用于基于深度学 ...
- soft-nms(softnms)(pytorch实现) softer nms
softnms和softer nms是nms的两个改进算法 传统nms存在的问题 传统的NMS方法是基于分类分数的,只有最高分数的预测框能留下来,但是大多数情况下IoU和分类分数不是强相关,很多分类标 ...
- NMS技术总结(NMS原理、多类别NMS、NMS的缺陷、NMS的改进思路、各种NMS方法)
点击上方"计算机视觉工坊",选择"星标" 干货第一时间送达 作者丨仿佛若有光157 来源丨CV技术指南 前言 本文介绍了NMS的应用场合.基本原理.多类别NM ...
最新文章
- pip、NumPy、Matplotlib在Windows上的安装过程
- silverlight、wpf中 dispatcher和timer区别
- Fast construction of FM-index for long sequence reads
- [笔记]何为Linux及其文件系统(四)
- AJAX-jQuery实现Ajax
- html鼠标点击切换图片,js鼠标点击图片切换效果代码分享
- Mysql数据库的基本概念
- windows中架设基于Apache的svn服务器
- scala编程第16章学习笔记(3)——List类的高阶方法
- phpstudy连接SQL Server 2008数据库 以及 php使用sql server出现乱码解决方式
- Linux c语言 creat参数,C语言open和creat函数
- 前端实战项目:前端框架Vue3.0项目教程(一)Vue3.0环境的搭建
- java算法竞赛入门经典_算法竞赛入门经典笔记(1-3章)
- OA办公管理系统的功能有什么特点
- 程序员如何让自己的技术能力突飞猛进?
- 串口,使用交叉还是直连串口线
- 子午线收敛角python代码
- “秀才造反,十年不成”是什么意思? - 已解决 - 搜搜问问
- 一文带你入门Redis
- 03.OpenWrt-系统固件烧录
热门文章
- 数据结构与算法基础Day2
- PyTorch 学习之Ubuntu16.04 下安装 PyTorch(conda与pip两种方式安装)
- 水质监测系统解决方案
- python房价数据分析统计服_Python 爬取分析全国 12 个城市 4 万条房价信息,告诉你该怎样买房?...
- Cisco NSF 与NSR 与GR
- 蛮力枚举算法C语言,算法01-蛮力法
- 【单片机毕业设计】【mcuclub-jj-006】基于单片机的指纹电子密码锁的设计
- 深度学习模型CPT的环境配置经验
- HDU1000题纪念
- 噪声dba是什么单位_声音的大小dB,到底是什么单位?