CV计算机视觉(3)——目标检测及RCNN解读(NMS,Soft-NMS)

一、Detection

先回顾一下前面说的分类任务:图片分类的任务是对于一个给定的图片,预测其中的类别标签。比如猫狗分类,数字0-9识别等。
在这里插入图片描述
而对于检测任务,除了要输出分类结果(输出形式跟分类相同,标量或编码),还要输出定位信息(输出形式是一个横平竖直的框,叫boudingbox,[x,y,w,h],[x1,y1,x2,y2])。

在这里插入图片描述
检测的输出信息是一个Bbox,除了表示边框的四个坐标点之外,通常还有一个所属类别的表示。
也就是说,检测与分类的模型流程一样,输入经过神经网络得到输出,不同的任务在基础层基本都是一样的,由功能层来实现不同的任务(前面介绍的CNN的fundmental layers vs Functional Layers)。对于检测任务,输出需要实现分类和定位两部分功能。

二、从RCNN开始设计检测

现阶段的检测算法主要有两种,一类是two stage detection,另一类是one stage detection。最先发展的是two stage detection。
前面介绍检测任务时提到,检测的输出需要分类和定位两种信息,此时就需要思考一个问题,先定位还是先分类?分类任务先发展起来的,先进行分类再对物体进行定位?答案是先定位再分类,即two stage detection。

而two stage的工作流程是:
1.先定位,得到候选区域,候选区域的大小可能不一
2.根据候选框进行分类
3.微调BBOX,精准定位。

较早使用这个思想的就是RGB大神提出的RCNN(2014年)
在这里插入图片描述
主要三个核心思想:

1.提取候选区域

关于候选区域的提取,使用的选择性搜索Selective Search(现阶段已经不用了,因为它太慢了):根据像素或纹理把相似的区域框在一起。是一种无监督的行为。
在这里插入图片描述
在这里插入图片描述
如上图所示,提取到候选框后再resize到统一的大小。RCNN中提取了大约2K个region。
在这里插入图片描述

2.经过卷积提取候选区域的特征向量

关于特征提取:经过选择性搜索得到了2k个区域,需要将他们输入CNN提取特征,但是这2K个region包含大量重复的目标,需要去除重复的无效region。作者在CNN这部分的做法是:
在这里插入图片描述
使用去除FC层的预训练Alexnet模型,再在新的训练集上进行训练。得到的2000个region中选32个正样本96个负样本参与训练(往往正样本要少于负样本,经过实验作者选择了1比3的正负样本比例,具体问题具体分析嘛),所谓的正就是指region与GT之间的iou高于阈值的那些样本。作者取的阈值为0.5,然后从iou中筛选128个样本。

在这里插入图片描述
在这里插入图片描述

3.对特征向量进行分类和定位

这一部分涉及到SVM Classification,NMS, BBox Regression。

3.1 SVM部分

作者用SVM进行分类。在训练阶段iou阈值取0.5筛选训练的正负样本,而SVM分类阶段iou阈值取了更苛刻的0.3来筛选正负样本。为什么这么做呢?因为CNN需要更多的数据量进行训练,而SVM只取决于支持向量,数据再多,起作用的也只有支持向量能参与训练,所以不需要多的数据量参与训练,干脆直接取更苛刻的iou选择更少的样本。

3.2 NMS部分

重点!!!!!!!!!

在训练阶段,2K个候选框经过与GT的iou计算然后再筛选了128个,但测试阶段,并没有GT提供用于计算IOU,我们就无法筛测试样本,2K个候选区域会含有大量重复的区域,导致生成重复的Bbox。比如下面这张图,图中有四个手,每个都被居多的Bbox包围,选哪个Bbox合适呢?
在这里插入图片描述
直接选score最高的那个Bbox?答案是否,因为一个图片中的一个类别可能有多个不同的目标,即一个类在图片中不一定是唯一的,而你得分的排序是整个类进行排序而不是单个目标进行排序,即“hand”这一类的所有score,而不是hand1,hand2,hand3,hand4这样排。假如图中有四只手,其中围绕一只手的的多个Bbox中得分最高0.95,剩下的三只手可能得分最高0.89,0.7,0.8这样,如果只保留得分最高的Bbox可能只保留了一只手的检测结果而忽略了其余手的检测结果。

(1)NMS思想

此时就提出了NMS极大值抑制:每个类分别进行NMS,不同的类的score无影响,相同的类的score会有影响。作者如何辨别同类的不同目标的呢?
第一步:对该类所有的Bbox的score进行一个排序,得到排序集合B{ }
第二步:选择score最高的那个Bbox,将它加入结果集M,并从排序集中删除,B-mi
第三步:剩余的排序集B中的Bbox,分别计算这些Bbox与得分最高的那个Bbox的iou,如果高于一个阈值,认为他们是同一个物体,将他们从B中删除,如果低于某个阈值,认为不是同一个物体,保留
第四步:经过阈值的设置,一轮筛选完后属于第一个该类的目标的Bbox确定在结果集中了;如果B还有剩余,说明该类还有第二个目标,再选一个最高分,再计算剩余的和它的iou并删除,循环往复,直至B中没有剩余的Bbox。
第五步:输出结果集M,就是得到的删除冗余框的Bbox

在这里插入图片描述

NMS的核心思想就是这样了,但是又有一个新的问题了,当两个目标挨的很近的时候呢?他们的Bbox有重合的情况下不就把邻近目标也给删除了吗?

(2)NMS的改进soft-nms

改进方法有软soft-nms。之所以临近的目标也有被删的风险,是因为nms做的太“绝”了,只要iou大于阈值就给它删掉了,那么我们不要那么决绝,给高度重合的Bbox一条活路不就可以了吗?
下面是nms的伪代码:B表示Bbox的集合,S表示score的集合,M表示选中的最高分
在这里插入图片描述
在这里插入图片描述
经过nms,BBox Regression。

4.RCNN的缺点

1.有大量的重复计算,因为候选区域就有重叠,而每个region都要进CNN提取特征,那么重复的region就做了重复的卷积进行了重复的特征提取,rcnn生成两千了region,就需要做2k次卷积,这是相当耗时且可怕的。为了解决这个问题提出了fast RCNN,每个区域只做一次卷积,避免重复提取特征
2.分类用的是SVM实现,SVM可太古老了,又慢又过时。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值