文章目录
一、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可太古老了,又慢又过时。