RPN具体详解:
右边是RPN的结构,使用滑动窗口在特征图上滑动,每滑动到一个位置上,会生成1个一维的向量,(256_d 是 backbone的输出通道数(此处所用网络ZF,若用VGG16,就变成512-d)),在此向量上,分别通过两个全连接层,目标概率(cls layer)和边界框回归参数。
2k是针对k个anchor box,是针对每个anchor生成的2个概率,一个是背景的概率,一个是前景的概率,针对每个anchor都会生成4个边界框回归参数。
anchor是怎样生成的嫩?
首先找出特征图上对应在原图上的点,如何find?将原图的X/特征图的x=stride1,同理原图Y/y=stride2,eg:特征图上那个黑的方块x=3,y=3,映射回原图上X=x*stride1,同理,Y=y*stride2,
之后将映射回到原图上的点为中心,画出k个anchor box.
有关2k,4k的使用:
cls 2个一组, 第一组:背景概率|前景概率=0.1|0.9
reg 4个一组 对应生成的预测框的中心点坐标及长宽
关于3*3滑动窗口在特征图上感受野的问题:
anchor面积共有三种,对应长宽比也有3种,如右图圆圈,对应anchor面积128*128,有三种形状的的anchor. 而当使用VGG时,它的感受野只有228,那当anchor面积512*512时,他怎么预测呢?论文指出当人眼看到物体一部分时,也能识别物体,这里就是这个道理。
(补充:感受野定义及计算:
感受野:CNN每一层输出的特征图上的像素点映射回原始图像上的图像大小。
损失计算:
RPN损失=分类损失+边界框回归损失
分类损失:使用二值交叉熵损失,对每个anchor对应的cls计算损失(不是按一组组计算喔)
zuuz
边界框回归损失:
Fast损失=分类损失+边界框回归损失
由上图可见,分类损失也是采用多类别交叉熵损失的。
存在问题:
1.对小目标检测不友好
只是在一个特征层上进行预测的,而此特征层经过多重卷积,featuremap被抽象到一个比较高的层次,细节信息丢失了很多,而小目标检测正需要比较多的细节信息。
2.模型大,检测速度慢
two-stage检测网络通病