NMS——卷积网络改进实现
来源:互联网 发布:计算机编程英语词汇 编辑:程序博客网 时间:2024/05/21 01:45
本文介绍了用卷积神经网络改进传统NMS的方法,文章来源于2016ICLR《A CONVNET FOR NON-MAXIMUM SUPPRESSION》,该文章状态为正在审核。
- 1-传统的NMS
- 2-NMS-ConvNet
- 2-1 映射制作score map
- 2-2 制作IOU层
- 2-3 网络解析
- 2-4 输出及Loss
- 未完待续
1-传统的NMS
NMS,非极大值抑制,在很多计算机视觉问题中有着重要应用,尤其是目标检测领域。
以人脸检测为例,通常的流程为3步:
(1)通过滑动窗口或者其它的object proposals方法产生大量的候选窗口;
(2)用训练好的分类器对候选窗口进行分类,该过程可以看做是一个打分的过程;
(3)使用NMS对上面的检测结果进行融合(因为一个目标可能被检测出多个窗口,而我们只希望保留一个)。
如下图是(2)分类检测之后的结果:
以此图为例,传统的NMS,首先选定一个IOU阈值,例如为0.25。然后将所有4个窗口(bounding box)按照得分由高到低排序。然后选中得分最高的窗口,遍历计算剩余的3个窗口与该窗口的重叠面积比例(IOU),如果IOU大于阈值0.25,则将窗口删除。然后,再从剩余的窗口中选中一个得分最高的,重复上述过程。直至所有窗口都被处理。
假如0.25是一个不错的阈值,那么我们可以得到比较好的结果,如下图:
如果,我们的IOU阈值设定的特别小,比如说0.1。那么2个人的窗口会被归为一个人而被融合。得到下面的错误结果:
如果,我们的IOU阈值设定的特别大,比如说0.6。那么又可能得到下面的错误结果:
由上可知,对于传统的NMS算法选择一个好的阈值是多么重要的一件事,但又是一件很困难的事。传统的NMS是一种硬判决,是一种贪心算法。因此在文章中,作者称传统的NMS算法为:GreedyNMS
2-NMS-ConvNet
再提及一下,传统的NMS在判决融合的时候,只利用到了2个信息:Score 和 IOU ,即每个框的得分和框与框之间的重叠比例。
文章用神经网络去实现NMS,所利用的同样也是这2个信息。如下图的整个流程图:
由网络结构图中的红色框可以得到,输入data层有2个,一个是Score map,一个是 Iou layer.下面我们讲述一下,如何由最初的bounding box去得到这两个data层。
2-1 映射——制作score map
假定原图像尺寸为W×H,那么我们要制作的score map大小为w×h,其中w=W/4, h=H/4,则score map上的一个点对应着原图的4×4的区域:
对于一个bounding box ,我们计算其中心然后判断其属于哪个区域,然后将该box的score填入score map对应的位置。如下图:
如果有多个bounding box的中心落入同一区域,则只记录最高得分。
到此,我们已经得到了w×h×1的score map.
文章提到,传统的NMS需要排序,但在卷积神经网络中,很难用各种线性组合和非线性激活去模拟排序。因此,文章先用传统的NMS处理一遍bounding boxes, 然后再生成一张同样大小的score map,记作S(T),T为NMS的阈值。
最终,我们得到了w×h×2的score map. 记作S(1,T)
2-2 制作IOU层
IOU,intersection-over-union。因此IOU层描述的也就是bounding box之间的相交关系。
IOU层大小为w×h×121,其中121=11×11,即描述的是相应中心点11×11范围内存在的box的相交关系。
如下图所举出的例子,左侧的图是score map S(1),粉色表明有值,则每个粉色处也对应着一个bounding box。以红色为中心划一个11×11的范围,则可以依次计算每一个位置对应的box与中心点对应box的IOU,其值记作I,如右侧所示。 同理,易知 I(7,8,i)一定为0。
2-3 网络解析
我们再来看一下网络结构:
注意2点:
(1): IOU层的kernel size 为1,stride也为1。
Score map层的kernel size 为11×11,这是为了呼应IOU层;stride 为1 ,pad 为5,这是为了获得和输入同样尺寸的输出:
(2): Layer 2将之前的2个输出拼接,之后所有的卷积都是1×1。最终的输出仍然是一个尺寸一致的score map .
2-4 输出及Loss
理想的输出是一个同输入尺寸完全一致的score map 图,在该图中,每一个目标只拥有一个score,相应地也只对应了一个bounding box。
因此训练的目标就是保留一个,抑制其它。如下图:
(1)上图a的score map 是我们的输入,由图易知,这里面一共有5个有效的score,则也对应着5个bounding box。
(2) 假设5个bounding box都是同一个目标的检测结果。则我们的训练目的则是保留最好的一个,抑制其余4个。
为此,我们首先分配标签:5个bounding box 中满足与ground truth 的IOU大于0.5且得分最高的box作为正样本,其余均为负样本,如上图b所示。
(3)显然正负样本的数量严重不均衡,因此计算loss之前,我们要分配一下权重用于权衡这种失衡。权重的分配很简单,如图c所示,正样本的权重总和与负样本的权重总和相等。
(4)上右侧的图为理想的输出。综上,我们的Loss Function就可以很容易得出了(类似于pixel级别的分类):
其中,p属于G,表示score map 中有值的点。
未完待续…
- NMS——卷积网络改进实现
- 一行代码改进NMS
- tensorflow学习——NMS的python实现
- NMS——非极大值抑制
- NMS——非极大值抑制
- NMS——非极大值抑制
- NMS——非极大值抑制
- NMS——非极大值抑制
- 非极大值抑制——NMS实例
- NMS——非极大值抑制
- NMS—非极大值抑制算法
- nms的cpp实现
- TensorFlow实现简单卷积网络
- VGG —— 更深度卷积网络
- NMS网络管理产品战略规划
- 神经网络之自适应谐振网络ART及matlab实现——改进版
- NMS
- Nms
- 如何设计一个 iOS 控件?(iOS 控件完全解析)
- 监督学习之梯度下降——Andrew Ng机器学习笔记(一)
- Java源码之Stack
- 报错:finished with non-zero exit value 2
- 开源框架之Picasso进行网络图片下载
- NMS——卷积网络改进实现
- 简单理解python下的变量和内存
- Redis 视频教程 大数据 高性能 集群 NoSQL 设计 实战 入门 命令
- java.util.Arrays类详解(源码总结)
- OneAPM Cloud Test——系统性能监控神器
- 删除已经配置的类库和移除CocoaPods
- PAT-支票面额(基础编程题)
- 百度地图API自定义覆盖物与添加点击事件
- XML:体验学习的乐趣之XML总结