faster rcnn主要结构理解:
1、cnn(卷积神经网络网络):
特征提取层,通过特征提取层提取特征向量,(可以使用vgg16,resnet101等网络结构),生成固定大小的特征图如mobile生成256层(也有说生成通道的,这里我理解为层),vgg16生成512层的。每层可以设置,如(40,60)
2、rpn(区域建议网络):
Isliding window(滑动窗口)
使用小的卷积神经网络(如3x3小卷积核),在特征图上进行滑动,在每个滑动位置上,将会接两个FC层(也可以使用全卷积网络),一个用于分类(分析是分类物体的概率和不是物体的概率),一个用于回归物体位置的坐标。
第一层:预测该特征点前景和背景概率,生成18(2*9)维的向量,即。
第二层(获取36维的特征向量,目的将特征向量映射到相应的整数坐标上):每一个像素点输出一个36(4*9)维的向量,即9个anchor框的4个Bounding Box的参数,并通过anchor框调整预测为不同比例,解决长度可变问题。(其实,坐标的回归,可能很大程度上都是在进行区域的微调,因为我们可以从feature map,通过感受野的反向计算,得到一个大概的区域,也就是接下来anchor锚点所做的工作)
RPN处理后,将返回一堆矩形框.anchors是圈出原image中的某块区域,所以按照Fast R-CNN RoI pooling层要完成的第一个任务,即把region proposal投影到conv feature map上,我们需要把sliding window(这是在conv feature map上)的中心坐标投影到原image上,然后就能找到原image上这些anchors应该对应的区域。
每一个小卷积核的中心点,都可以看做一个anchor(锚点),每个锚点其实都可以通过3、建议区域在feature map上的映射,每个锚点都可以反向映射回原始图片的一个区域,也可以看做每一锚点都是原图中一片区域的中心点的坐标。
再通过nms(非极大值抑制算法)生成更高质量的矩形框。
使用NMS(非最大值抑制),对于Bounding Box的列表和每个框的置信度,选择最大score的检测框,将其从Bounding Box列表移除并加入到最终的检测结果列表中,将IoU大于阈值的框从Bounding Box列表移除,小于一定阈值的框标记为背景,直到Bounding Box为空,最后取前300个建议窗口(可以自行设计,也可以对多个框惊醒合并),作为proposal,
通过3、建议区域在feature map上的映射,在我们可以看出,rpn可以通过在特征图上的区域判断,反向映射回原图,不同大小的box矩形框映射成指定大小的矩形框,即将对原图的矩形框映射到feature map上,并在这个范围上进行max或average池化。
参考:https://www.cnblogs.com/dudumiaomiao/p/6560841.html
(RPN实例的tensorflow代码在ubuntu机器的~/project/RPN项目下面)
3、建议区域在feature map上的映射
除了每个维度上特征图的个数,还需要计算每一层的感受野大小,因此我们需要了解每一层的额外信息,包括:当前感受野的尺寸r,相邻特征之间的距离(或者jump)j,左上角(起始)特征的中心坐标start,其中特征的中心坐标定义为其感受野的中心坐标(如上述固定大小CNN特征图所述)。假设卷积核大小k,填充大小p,步长大小s,则其输出层的相关属性计算如下:
- 公式一基于输入特征个数和卷积相关属性计算输出特征的个数
- 公式二计算输出特征图的jump,等于输入图的jump与输入特征个数(执行卷积操作时jump的个数,stride的大小)的乘积
- 公式三计算输出特征图的receptive field size,等于k个输入特征覆盖区域
加上边界上输入特征的感受野覆盖的附加区域
。
- 公式四计算第一个输出特征的感受野的中心位置,等于第一个输入特征的中心位置,加上第一个输入特征位置到第一个卷积核中心位置的距离
,再减去填充区域大小
。注意:这里都需要乘上输入特征图的jump,从而获取实际距离或间隔。
通过找到候选区域到特征图的映射,可以在特征图上进行接下来的操作
参考:https://blog.csdn.net/u010725283/article/details/78593410/
https://zhuanlan.zhihu.com/p/26663577
4、RoI pooling 层
RoI pooling就是单层的SPP-Net,负责将不定大小的向量处理为固定大小的向量,在faster rcnn中
5、利用Softmax Loss和smooth L1 Loss对分类概率和边框回归(Bounding Box regression)联合训练
参考自:https://blog.csdn.net/u011718701/article/details/53758927
faster rcnn需要的主要知识:
1、cnn卷积神经网络的理解,
2、边框回归
3、非极大值抑制
4、感受野的理解(包含锚点的选择和
5、spp-net和roi pooling的理解