目标检测的概念与R CNN

关于FPN,它既是一个单独的特征金字塔网络,又被用在了MASK R-CNN模型的前半部分,所以要写FPN,自然也要从最开始说起,这样才能知道为什么我们要用到FPN,以及他在MASK R-CNN中起的作用。

这些模型的目标都是一个:object detection(目标检测)。在给定的图片中精确找到物体所在位置,并标注出物体的类别。object detection要解决的问题就是物体在哪里,是什么的问题。

object detection的发展是:RCNN(2013)->SppNET->Fast-RCNN->Faster-RCNN->MASK R-CNN。

四张图已经说明了我们每个阶段需要做的任务。

1.Classification(图像分类),输入一张图片,输出图片类别。CNN多种网络均可预测,不再赘述。

2.Localization(定位),图像分类加定位就构成了最简单Object detection的任务目标,在Localization中,我们不仅需要将图像进行分类,还需将图中种类进行框定。输入一张图片,输出(x,y,w,h)。在这里我们采用的是检测评价函数 intersection-over-union ( IOU ) 。

 

定位问题有两种解决思路,其一是看作回归问题,预测出(x,y,w,h)四个参数的值,从而得到方框位置。Regression那个部分用欧氏距离损失,将两部分拼接在一起进行训练。Regression部分加在最后一个卷积层后面是VGG的想法,而加在最后一个全连接层后面是R-CNN的想法。但是regression的训练参数收敛的时间要长得多,所以下面的网络采取了用classification的网络来计算出网络共同部分的连接权值。

其二是取图像窗口,取大小不同的框出现在不同位置,进行判定得分,最后取得分最高的框。即对一张图片,用各种大小的框(遍历整张图片)将图片截取出来,输入到CNN,然后CNN会输出这个框的得分(classification)以及这个框图片对应的x,y,h,w(regression)。

3.Object detection(目标检测),多个物体,用矩形框分别标注

当图像中有很多物体,就变成了标准的Object detection问题(多物体识别+定位多个物体)。麻烦是既要找很多位置,给很多个不同大小的框,又要对框内的图像进行分类。这时有人想到找出可能含物体的框(候选框),框之间可以互相重叠与包含,这样就避免了枚举所有框带来的代价。候选框的选取就变成了一个重要的问题。

了解到这些后,我们就可以开始学习目标检测的网络发展了。

1.R CNN

https://github.com/rbgirshick/rcnn

主要贡献有两个:

1)经典目标检测算法一般使用滑动窗口扫描所有可能区间,同时需要考虑变化窗口尺寸以适应不同大小的目标,这种方法效率太低。R-CNN使用Selective Search方法(候选框的标定)预先提取所有候选区域 。
2)经典目标检测算法依赖人工设计的特征,R-CNN使用深度学习自动提取和学习特征

算法思路

首先使用Selective Search方法提取所有可能区域(大约2K个),然后采用CNN(AlexNet)提取每个候选区域的特征向量(维度4096),最后使用SVM(二分类器)对每个特征做分类

R-CNNç®æ³

1.候选框的提取

(1)Selective Search是已有的方法,其算法输出的区域有很多,R-CNN做了非极大值抑制处理(对概率最高的区域,计算其他区域和他的重合度,如果重合度比较大则删除这些区域;然后考虑概率第二高的区域)。一般会得到2K左右的候选框.

(2)CNN中输入的图像需要统一尺寸,因此需要将候选区域resize(AlexNet中为227*227),有两种resize方法,

            a.各向异性缩放 :不管当前区域的长宽比,直接resize。结果可能会扭曲原图 (D)
            b.各向同性缩放 :直接在原始图中做边界扩展,如果到了图像边缘则用区域的均值做填充(B)/在区域边缘使用固定背景颜色做填充 (C)

          最终文章选择padding=16(先添加一定尺寸的边界)的各向异性resize方法

我们需要用IOU为2000个bounding box打标签,以便下一步CNN训练使用。在CNN阶段,如果用selective search挑选出来的候选框与物体的人工标注矩形框的重叠区域IoU大于0.5,那么我们就把这个候选框标注成物体类别,否则我们就把它当做背景类别。

2.CNN特征提取

文章考虑了AlexNet和VGG16两个经典的网络。前者测试的精度为58.5%,后者为66%;但VGG16的计算量是AlexNet的7倍。最后文章选择AlexNet进行训练。

文章将CNN训练分为两步:首先使用ILSVRC2012的数据做预训练(1000类),然后使用VOC数据集做fine-tunning(之所以要预训练是因为VOC数据量太少)在设计网络结构的时候,是直接用Alexnet的网络,然后连参数也是直接采用它的参数,作为初始的参数值,然后再fine-tuning训练。

fine-tuning阶段将网络输出换成21类,学习率设为0.001,每次迭代使用32个正样本和96个负样本(IoU重叠阈值设为0.5,大于该值为正,小于为负)

文章同时测试了不用fine-tuning,直接用AlexNet的模型做特征提取,发现p5层的精度与f6、f7差不多,其中f6得到的特征比f7精度还搞。而fine-tuning后的f7输出特征获得的分类精度会得到大幅度提高。

这个测试表明,如果不针对特定任务做fine-tuning,CNN与SIFT(Scale-invariant feature transform 尺度不变特征)一样,获得的是基础的共享特征提取层。而f6、f7所学习到的特征是用于针对特定任务的特征。打个比方:对于人脸性别识别来说,一个CNN模型前面的卷积层所学习到的特征就类似于学习人脸共性特征,然后全连接层所学习的特征就是针对性别分类的特征了。

3.SVM

为什么本来可以直接用softmax层进行分类但是用了二分类的SVM,考虑到过拟合的风险,CNN的训练数据比较宽松,一个bouding box可能只包含一部分物体(IoU=0.5),也作为正样本训练; 而SVM适用于少样本训练,所以训练数据可以比较严格(文章选择IoU=0.3),这样能获得比softmax更高的分类精度。

对于K个目标分类,同时训练K个SVM。假设图片候选框为2000个,那么输入特征维度为2000*4096(特征向量为4096个),SVM的权重维度为4096*1(需要注意的是,由于IoU的选择不同,CNN和SVM的正负样本性质可能不一样)

补充概念

1.IOU

物体检测需要定位出物体的bounding box,就像下面的图片一样,我们不仅要定位出车辆的bounding box 我们还要识别出bounding box 里面的物体就是车辆。对于bounding box的定位精度,有一个很重要的概念,因为我们算法不可能百分百跟人工标注的数据完全匹配,因此就存在一个定位精度评价公式:IOU。

IOU=(A∩B)/(A∪B)

2.非极大值抑制


就像上面的图片一样,定位一个车辆,最后算法就找出了一堆的方框,我们需要判别哪些矩形框是没用的。非极大值抑制:先假设有6个矩形框,根据分类器类别分类概率做排序,从小到大分别属于车辆的概率分别为A、B、C、D、E、F。

(1)从最大概率矩形框F开始,分别判断A~E与F的重叠度IOU是否大于某个设定的阈值;

(2)假设B、D与F的重叠度超过阈值,那么就扔掉B、D;并标记第一个矩形框F,是我们保留下来的。

(3)从剩下的矩形框A、C、E中,选择概率最大的E,然后判断E与A、C的重叠度,重叠度大于一定的阈值,那么就扔掉;并标记E是我们保留下来的第二个矩形框。

就这样一直重复,找到所有被保留下来的矩形框。
 

猜你喜欢

转载自blog.csdn.net/qq_38284204/article/details/83623005
今日推荐