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 中有值的点。

文章转自: https://blog.csdn.net/shuzfan/article/details/50371990

NMS—卷积神经网络的更多相关文章

  1. 基于MTCNN多任务级联卷积神经网络进行的人脸识别 世纪晟人脸检测

    神经网络和深度学习目前为处理图像识别的许多问题提供了最佳解决方案,而基于MTCNN(多任务级联卷积神经网络)的人脸检测算法也解决了传统算法对环境要求高.人脸要求高.检测耗时高的弊端. 基于MTCNN多 ...

  2. 卷积神经网络提取特征并用于SVM

    模式识别课程的一次作业.其目标是对UCI的手写数字数据集进行识别,样本数量大约是1600个.图片大小为16x16.要求必须使用SVM作为二分类的分类器. 本文重点是如何使用卷积神经网络(CNN)来提取 ...

  3. tensorflow学习笔记五:mnist实例--卷积神经网络(CNN)

    mnist的卷积神经网络例子和上一篇博文中的神经网络例子大部分是相同的.但是CNN层数要多一些,网络模型需要自己来构建. 程序比较复杂,我就分成几个部分来叙述. 首先,下载并加载数据: import ...

  4. Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN

    http://m.blog.csdn.net/blog/wu010555688/24487301 本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep le ...

  5. [DL学习笔记]从人工神经网络到卷积神经网络_2_卷积神经网络

    先一层一层的说卷积神经网络是啥: 1:卷积层,特征提取 我们输入这样一幅图片(28*28): 如果用传统神经网络,下一层的每个神经元将连接到输入图片的每一个像素上去,但是在卷积神经网络中,我们只把输入 ...

  6. [DL学习笔记]从人工神经网络到卷积神经网络_1_神经网络和BP算法

    前言:这只是我的一个学习笔记,里边肯定有不少错误,还希望有大神能帮帮找找,由于是从小白的视角来看问题的,所以对于初学者或多或少会有点帮助吧. 1:人工全连接神经网络和BP算法 <1>:人工 ...

  7. lecture5-对象识别与卷积神经网络

    Hinton第五课 突然不知道object recognition 该翻译成对象识别好,还是目标识别好,还是物体识别好,但是鉴于范围性,还是翻译成对象识别吧.这一课附带了两个论文<Convolu ...

  8. Deep learning with Theano 官方中文教程(翻译)(四)—— 卷积神经网络(CNN)

    供大家相互交流和学习,本人水平有限,若有各种大小错误,还请巨牛大牛小牛微牛们立马拍砖,这样才能共同进步!若引用译文请注明出处http://www.cnblogs.com/charleshuang/. ...

  9. [转]Theano下用CNN(卷积神经网络)做车牌中文字符OCR

    Theano下用CNN(卷积神经网络)做车牌中文字符OCR 原文地址:http://m.blog.csdn.net/article/details?id=50989742 之前时间一直在看 Micha ...

随机推荐

  1. (转)mmap和shm共享内存的区别和联系

    共享内存的创建 根据理论: 1. 共享内存允许两个或多个进程共享一给定的存储区,因为数据不需要来回复制,所以是最快的一种进程间通信机制.共享内存可以通过mmap()映射普通文件 (特殊情况下还可以采用 ...

  2. 【笔记】virtualbox+arch+kde5安装流水账

    正常安装就是RTFD就行了,不行辅助这几个链接也行: 我先把整个脚本[1]放这里: loadkeys us parted mkfs.ext4 /dev/sda1mkfs.ext4 /dev/sda3 ...

  3. 论文笔记(3)-Extracting and Composing Robust Features with Denoising Autoencoders

    这篇文章是Bengio研究的在传统的autoencoder基础上增加了噪声参数,也就是说在输入X的时候,并不直接用X的数据,而是按照一定的概率来清空输入为0.paper中的名词为corrupted.这 ...

  4. jQuery截取字符串、日期字符串转Date、获取html中的纯文本

    jQuery截取字符串.日期字符串转Date.获取html中的纯文本. var com = com || {}; (function ($, com) { /* * 截取字符串 * @param st ...

  5. TextBox 加阴影

    <Border.Effect> <DropShadowEffect x:Name="dse" BlurRadius="8" ShadowDep ...

  6. UWP开发---嵌套DataTemplate&模板选择器

    对于Json结构体items不完全一致的情况下,在UWP平台是如何处理数据,并通过不同的模板选择,进行显示呢? 一,嵌套Json分析 1,结构 通过抓取index的API(点击请求API)获取到的js ...

  7. 【cocos2d-x 手游研发----界面UI设计】

    简单探讨一下如何在cocos2d-x的游戏引擎里面去制作各做交互UI界面,常见的UI如下: 人物头像,血条值,经验条,技能按钮,以及各种玩家交互的界面按钮:背包,人物属性,门派,等: 类似上面的图示交 ...

  8. 《JAVA与模式》之桥梁模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述桥梁(Bridge)模式的: 桥梁模式是对象的结构模式.又称为柄体(Handle and Body)模式或接口(Interface)模式. ...

  9. springmvc执行流程详细介绍

    1.什么是MVC MVC是Model View Controller的缩写,它是一个设计模式 2.springmvc执行流程详细介绍 第一步:发起请求到前端控制器(DispatcherServlet) ...

  10. Docker学习--Linux基础准备篇

    1.docker命令不需要附带敲sudo的解决办法 由于docker daemon需要绑定到主机的Unix socket而不是普通的TCP端口,而Unix socket的属主为root用户,所以其他用 ...