【目标检测】基础知识:IoU、NMS、Bounding box regression

1. IoU

IoU(Intersection over Union),即交并比,是目标检测中常见的评价标准,主要是衡量模型生成的bounding box和ground truth box之间的重叠程度,计算公式为:

img

更直观的图像化表示:

img

2. Non-maximum suppression

NMS(Non-maximum suppression),即非极大值抑制,在目标检测中的出镜率也很高呀。在目标检测中,不论是最初的region proposal,还是后来的anchor box,不可避免的一个问题就是对于同一个物体,会预测出多个bounding box,如下左图所示。而NMS所做的就是去除掉多余的bounding box,只保留和ground truth重叠度最高的bounding box,如下右图所示。

img

在目标检测中,分类器会给每个bounding box(bb)计算出一个class score,就是这个bb属于每一类的概率,NMS就是根据这些值来进行的,主要流程:

  • 对于每一类,首先把所有score<thresh1的bb的score设为0
  • 之后,将所有的bb按照得分排序,选中最高分及其对应的bb
  • 遍历其余的bb,如果和当前最高分bb的重叠面积(IoU)大于一定的阀值,便将该bb删除
  • 从未处理的bb中继续选择一个最高分的bb,重复上述过程
  • 重复上述过程,直到找到全部保留的bb
  • 然后根据所有保留bb的class score和class color画出最后的预测结果

感觉整个过程没有办法用语言来表述清楚,还是用实例来解释吧,可能会清楚一些:

\1. 首先从第一类dog开始,将所以dog score < thresh1(0.3)的bb的score值设置为0

img

\2. 然后按照当前的dog score值给所以的bb排序:

img

\3. 排好序之后我们找到当前最高分0.7和其对应的bb98(红色箭头),为了更清楚的描述整个过程,我们单独把dog score 这一行拎出来,然后我们算其余的bb和bb98的IoU:

img

根据计算结果,我们发现bb3和bb98的重叠度最高,因此我们bb3删掉。

\4. 当计算完bb98和其余的bb的IoU值之后,我们便可以删掉一部分bb,之后我们从未删除的bb中再选取当前的最大值,即0.4,对应的是bb1(红色箭头),然后再计算bb1和其余bb的IoU值:

img

同样,我们将和bb1重叠度高的bb都删掉,然后按照这个过程依次处理完所有bb:

img

\5. 当处理完dog这一类之后,我们处理下一类,例如bike,和上述过程相同,最后的得到以下的处理结果:

img

img

\6. 然后对于每一类都进行同样的操作之后,我们便删掉了大多数bb,而对于保留下来的bb,我们找到该bb所属于的类,然后根据类所对应的颜色画出框,如下图所示:

img

这便是非极大值抑制的整个过程,这是根据我个人理解整理出来的,希望可以帮助到大家。

3. Bounding box regression

Regression,即回归,对大量统计数据进行数学处理,并确定因变量与某些自变量的相关关系,建立一个相关性较好的回归方程,并对今后因变量的变化进行预测。举个简单的例子:给定一堆点(x, y),然后根据这些点拟合出一条线(一个函数),之后再给定一个x,那我们就可以预测出对应的y的值。

那在目标检测中,为什么会需要回归呢?请看下图,红色的框是使用selective search提取出的region proposal,绿色的框是ground truth。当图中红色的框被分类器识别为飞机,但是由于红色框的定位不准(IoU<0.5),还是相当于没有正确检测出飞机。所以为了使定位更准确,即使得region proposal更接近于ground truth,我们可以对红色的框进行微调,那怎么进行微调呢?答案即使bounding box regression。接下来我们看看是怎么实现的。

img

问题定义

首先说明:在目标检测中,窗口一般用四维向量(x, y, w, h)来表示,分别表示窗口的中心点坐标和宽高。在下图中,粉色的窗口 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YqPA1Bso-1625467942929)(https://www.zhihu.com/equation?tex=P)] 为region proposal,蓝色的窗口 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i6tuUYfc-1625467942931)(https://www.zhihu.com/equation?tex=G)] 为ground truth,那bounding box regression的目标呢就是:找到一种映射关系,使得 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4We9zdJQ-1625467942932)(https://www.zhihu.com/equation?tex=P)] 经过映射后会得到一个和 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b4vFjGYr-1625467942933)(https://www.zhihu.com/equation?tex=G)] 比较接近的 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GljTURix-1625467942934)(https://www.zhihu.com/equation?tex=G%27)] 。

img

即:给定 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qoYS7kIA-1625467942936)(https://www.zhihu.com/equation?tex=%28P_x+%2C+P_y%2C+P_w%2C+P_h%29)] ,寻找一种映射 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dBYG0RiW-1625467942937)(https://www.zhihu.com/equation?tex=f)] ,使得 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HHHmciIE-1625467942938)(https://www.zhihu.com/equation?tex=f%28P_x%2C+P_y%2C+P_w%2C+P_h%29+%3D+%28G%27_x%2C+G%27_y%2C+G%27_w%2C+G%27_h%29)] ,且 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JFtxi3MP-1625467942939)(https://www.zhihu.com/equation?tex=%28G%27_x%2C+G%27_y%2C+G%27_w%2C+G%27_h%29+%5Capprox+%28G_x%2C+G_y%2C+G_w%2C+G_h%29)] 。

解决方法

首先我们先探讨如何才能从 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EtFL1KII-1625467942941)(https://www.zhihu.com/equation?tex=P)] 变到 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ufQ0D5Bv-1625467942942)(https://www.zhihu.com/equation?tex=G%27)] ,无非就是平移+缩放嘛(显而易见)

\1. 平移( [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VvPwQ3Ug-1625467942943)(https://www.zhihu.com/equation?tex=%5CDelta+x%2C+%5CDelta+y)] ),在R-CNN中对应着如下的平移操作:

img

其中 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EdoyjuIX-1625467942944)(https://www.zhihu.com/equation?tex=%5CDelta+x+%3D+P_wd_x%28P%29)] , [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lmZISzOL-1625467942945)(https://www.zhihu.com/equation?tex=%5CDelta+y+%3D+P_hd_y%28P%29)]

\2. 缩放( [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E7okn9vp-1625467942947)(https://www.zhihu.com/equation?tex=S_w%2C+S_h)] ),在R-CNN中对应着如下的缩放操作:

img

其中 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dJqTX4Ct-1625467942949)(https://www.zhihu.com/equation?tex=S_w+%3D+exp%28d_w%28P%29%29)] , [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DKWkMmL6-1625467942950)(https://www.zhihu.com/equation?tex=S_h+%3D+exp%28d_h%28P%29%29)]

综上所述,我们需要计算出 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2HkmfTlP-1625467942951)(https://www.zhihu.com/equation?tex=d_x%28P%29+%EF%BC%8Cd_y%28P%29%EF%BC%8Cd_w%28P%29%EF%BC%8Cd_h%28P%29)] 这四个平移缩放量,这就需要我们学习到四种映射关系,那么接下来我们就要设计算法得到这四种映射关系啦~

设计回归

那怎么得到映射关系呢,当然是用回归啦。正如一开始所讲的,回归是在大一堆数据中找到一种映射关系,所以现在需要定义一堆数据(x, y):

x:region proposal [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EcOzitNK-1625467942952)(https://www.zhihu.com/equation?tex=%28P_x%2CP_y%2CP_w%2CP_h%29)] ,但是输入的并不是这四个数值,而是region proposal所对应的pool 5层的特征。

y:输出就是平移和缩放的尺度,即 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PdxBvD5T-1625467942953)(https://www.zhihu.com/equation?tex=d_x%28P%29%2C+d_y%28P%29%2C+d_w%28P%29%2C+d_h%28P%29)] 。根据这些平移缩放尺度,我们就能根据上面的公式(1)(2)(3)(4)计算得到微调后的窗口 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MDWIAgxx-1625467942954)(https://www.zhihu.com/equation?tex=G%27)] 。

回归的目的就是,训练一组参数 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ypk93eXf-1625467942957)(https://www.zhihu.com/equation?tex=W)] ,使得 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cZjU1Hcd-1625467942958)(https://www.zhihu.com/equation?tex=y+%3D+W+x)] 。

训练

在训练时,输入x就是每个region proposal的pool5层的特征,用 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rm2PomRY-1625467942959)(https://www.zhihu.com/equation?tex=%5Cphi_5%28P%29)] 表示,那么y则是由ground truth [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kTlRnIln-1625467942961)(https://www.zhihu.com/equation?tex=G)] 和当前的region [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-03uOjb7G-1625467942962)(https://www.zhihu.com/equation?tex=P)] 计算得到平移缩放量,就代表真正需要的平移和缩放量,这里用 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q6LNG74W-1625467942963)(https://www.zhihu.com/equation?tex=t)] 来表示:

img

所以,我们要训练 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lIOAt3d7-1625467942965)(https://www.zhihu.com/equation?tex=W)] ,使得 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6o6pWOv9-1625467942966)(https://www.zhihu.com/equation?tex=W%5Cphi_5%28P%29+%5Capprox+t)] ,因此我们可以得到我们的损失函数为:

img

然后,加上一个正则项,得到最终的损失函数:

img

得到损失函数后,我们使用梯度下降或者最小二乘法就可以求得 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aQOGJnJO-1625467942970)(https://www.zhihu.com/equation?tex=W)] 。

测试

当测试的时候,就是把region proposal的feature map输进去,然后就会得到 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fSE1Kgno-1625467942971)(https://www.zhihu.com/equation?tex=d_x%28P%29+%EF%BC%8Cd_y%28P%29%EF%BC%8Cd_w%28P%29%EF%BC%8Cd_h%28P%29)] 这几个偏移量,然后再把这几个偏移量施加到region proposal的(x, y, w, h),便得到最后的微调过的bounding box。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值