对于SPP(空间金字塔池化)、RPN(区域候选网络)与回归器的理解

边框回归取值的含义

原文链接:https://blog.csdn.net/shenxiaolu1984/article/details/51066975

位置精修
目标检测问题的衡量标准是重叠面积:许多看似准确的检测结果,往往因为候选框不够准确,重叠面积很小。故需要一个位置精修步骤。
回归器
对每一类目标,使用一个线性脊回归器进行精修。正则项λ=10000λ=10000。
输入为深度网络pool5层的4096维特征,输出为xy方向的缩放和平移。
训练样本
判定为本类的候选框中,和真值重叠面积大于0.6的候选框。
 

我的理解:回归器用了4096的特征,其本质是利用卷积形成的向量特征,修正selective search找出的最大可能框的小偏差。因为在最后一层的卷积输出的二维特征矩阵中,已经包含了目标的特征,对这些特征直接进行定位即可得出更加精确的定位框。这也是后续yolo系列直接一步回归到位的理论基础。

因为selective search算法是恒定的,它找出的框有稳定的偏差,回归器能通过统计规律找出这个稳定偏差。如果换了selective search算法,它的偏差有变化,要重新训练回归器学习它的新偏差才行。

SPP空间金字塔池化 原文地址:http://blog.csdn.net/hjimce/article/details/50187655

我们知道在现有的CNN中,对于结构已经确定的网络,需要输入一张固定大小的图片,比如224*224,32*32,96*96等。这样对于我们希望检测各种大小的图片的时候,需要经过裁剪,或者缩放等一系列操作,这样往往会降低识别检测的精度,于是paper提出了“空间金字塔池化”方法,这个算法的牛逼之处,在于使得我们构建的网络,可以输入任意大小的图片,不需要经过裁剪缩放等操作,只要你喜欢,任意大小的图片都可以。不仅如此,这个算法用了以后,精度也会有所提高,总之一句话:牛逼哄哄。

思考:为了归一化,选取4×4的池化层就可以了,为什么还要用2×2和1的呢?

我的理解:对于很大的图,在4×4的网格中,每个网格中的数值,都保存了很强的目标图像特征,在2×2和1的网格中,这种特征也很强烈。因此对于256×(16+4+1)=5376维的全连接输入一维向量来说,这个向量中的每一个值都有很强特征,因此对于大目标的识别率就很高。

对于很小的图,在4×4的网格中,每个网格中有很多干扰,存在噪音,有时候噪音甚至还大于目标特征,因此每个网格中的数值代表的特征就很弱,但还是有的。在1网格中,这个特征是相对最强烈的。因此在5367维中,只有256维具有强特征,其它小格子里的特征要弱一些。尽管如此,分类器还是足够强大到能将这个维度进行分类,识别出目标。但置信度肯定不如大目标。

如果只有4×4的网格,那么这仅有的256维强特征也没有了,就降低了识别出目标的可能性。因此SPP的存在是有道理的,回答了思考中的问题。

RPN(region proposal network,区域候选网络)

原文链接:https://blog.csdn.net/qq_33547191/article/details/88693033

训练RPN的流程:
1、假设输入的图片是576* 960,经过VGG16生成卷积特征图,缩放16倍,得到36 * 60 *512的特征图,512是通道数
2、使用3*3*512的滑窗在特征图滑动(stride=1,padding=2),找到每个三维滑窗的中心在原图对应的像素位置,然后在原图上生成9个anchor,这9个anchor的中心重合且和三维滑窗对应的中心相同。共有36*60个滑窗,则共有36*60*9个原图上的锚  ​。3*3*512的三维滑窗足够表达228 pixels区域的特征。
3、生成anchor的同时根据ground truth的IoU值确定每个anchor是正样本还是负样本(是否是类)。为两种anchor分配正样本标签:(1)和一个ground truth的IoU值最大的那些anchor;(2)和任意一个ground truth的IoU大于或等于0.7的anchor。注意到单个ground truth可能分配正样本标签给多个anchor。第(2)个条件足以确定正样本,仍然使用第(1)个条件的原因是存在在第(2)个条件下没有正样本的情况。不是正样本的anchor中,那些和所有ground truth的IoU值小于0.3的被分配为负样本,其余那些既不是正样本也不是负样本的anchor,不作为训练样本,被忽略掉的。这样对于一个滑窗,原图产生的9个anchor,anchor可能被分配到正样本、负样本、被忽略样本的标签。然后对每个正样本anchor对应的ground truth,打上回归的标签,交给该anchor对应的回归器预测。anchor生成好以后,回归器对应的正样本回归标签 就确定好的。
4、从一张图片当中随机采样256个anchor,正负样本anchor的比例是1:1,如果一张图片中正样本anchor的数量少于128个,就减少负样本anchor的数量和正样本anchor数量相同。需要注意的是,这256个anchor中来自不同的3*3滑窗。
5、接着看网络的流程,mini-batch中的每个样本anchor对应的3*3*512的三维滑窗经过卷积(卷积核3*3*512)生成512维的向量,这512维的向量进入分类层、9个独立的回归层,输出一定是(4+2)* 9维,然后对正样本anchor对应的ground truth的回归层输出,使用  计算回归损失loss,然后还要计算其分类损失,负样本也要计算分类损失。被忽略的锚对应的输出loss=0。

我的理解:RPN中的输出向量,是在卷积神经网络最后一层上用3×3×256的卷积核卷出来的。但这个输出向量经过回归分类器后,输出每个点9个anchor的score和定位。这个输出向量总归要包含了这9个anchor的图像特征才行啊,否则怎么分类和定位。

我只能这么理解,特征图中3×3的面积,相当于原图中48×48像素的面积,这个面积是比最大面积的anchor要大的。否则没法得到所有anchor的图像特征。未经过验证,不知是否正确。

 

你可能感兴趣的:(目标检测)