faster-rcnn 步骤理解

1)输入图像预处理;

1、图像(三通道),每个像素点减去一个均值像素,默认为(102.9801,

115.9465, 122.7717);

2、缩放;根据插值法进行图像缩放,规则为:首先将图像最短边固定为600个像素点,最长边根据这个缩放比例进行相应调整,如果此时最长边大于1000个像素点,则将最长边固定为1000个像素,最短边根据长边的缩放比例进行相应的调整;(保证都不大于1000,也即长宽比<5:3)

2)网络前向计算;

Faster

RCNN的检测过程,主要分为三部分(如下图):第一部分利用VGG网络结构进行基础的特征提取;第二部分是RPN网络,负责计算可能存在目标的区域(proposals)的坐标以及判断是前景/背景以及利用RPN网络得到的目标区域再经过ROIPooling层得到相同长度的特征向量;第三部分,最后经过两个全连接层接入softmax实现具体分类和更精确的回归坐标。整体结构如下图所示:


faster-rcnn 步骤理解_第1张图片

1、基础的特征提取网络结构(vgg16):

(我们需要处理的图像长宽比基本符合小于5:3,因此缩放后输入网络的大小通常为:(800,600,3))

faster-rcnn 步骤理解_第2张图片

2、RPN网络:

产生anchor

box

conv5_3对应的特征图大小为50×38,每个位置将产生9个不同尺度和长宽比的anchor

box,用于目标区域位置的计算。9个boxes的坐标为:array([

[ -83.,  -39.,  100.,  56.],

[-175.,-87.,  192.,  104.],

[-359.,-183.,  376.,  200.],

[-55.,  -55.,  72.,  72.],

[-119.,-119.,  136.,  136.],

[-247.,-247.,  264.,  264.],

[-35.,  -79.,  52.,  96.],

[-79., -167.,  96.,  184.],

[-167.,-343.,  184.,  360.]])

计算这些boxes在原图像上的实际坐标(从原图像到conv5_3的映射,其实就是缩小了16倍),保证conv5_3每个特征点位置对应原图像上9个boxes,如下图所示,在实际图像中包含的boxes个数为50×38×9。


faster-rcnn 步骤理解_第3张图片

rpn网络结构:

faster-rcnn 步骤理解_第4张图片

proposal(Python)层操作:rpn_bbox_pred得到四个数值,并不是实际的坐标值,而是4个修改量(boundingbox

regression),再根据上面计算的anchor

boxes对应在原图像中的坐标,就可以计算回归得到的实际坐标(bounding boxes):


faster-rcnn 步骤理解_第5张图片

得到实际坐标之后,会存在一些坐标超出图像边界,此时删除这类boxes.

接着根据余下的bounding

boxes对应的rpn_bbox_pred(是前景的概率)进行降序排序,根据设定的参数,提取概率较大的6000个box;然后根据nms(非极大值抑制,阈值设为0.7)再一次减小boxes的个数;最后再次根据前面的排序结果只留下300个box,用于后续的具体分类。

roi_pool5层:将proposal层产生的实际坐标值映射到relu5_3(conv5_3)层,在feature

map上产生不同区域大小的boxes,再经过ROIPooling操作得到固定长度的特征向量,我们这里固定为7*7,所以每个roi经过该层,都会得到数据大小为(channels(512),7,7),整体的数据格式为(num_rois,512,7,7)。

3、全连接网络结构:


faster-rcnn 步骤理解_第6张图片


faster-rcnn 步骤理解_第7张图片

从PoI Pooling获取到7x7=49大小的proposal feature maps后,送入后续网络,可以看到做了2个操作:

1. 通过全连接和softmax对proposals进行分类,这实际上是深度学习的识别范畴了。

2. 再次对proposals进行bounding box regression,获取更高精度的rectbox。

你可能感兴趣的:(faster-rcnn 步骤理解)