faster R-CNN=RPN+fast R-CNN
①将fm送入RPN(region proposal network),RPN也是一个卷积神经网络,它对于input feature map的每个像素点,预测9个anchor boxes,anchor boxes的中心点坐标就是当前像素点映射到input image上的坐标点(注意从feature map pixel尺度上映射到input image pixel尺度上,中心点坐标需要在feature map pixel尺度上乘以factor,factor是特征图尺度相对于输入图像尺度缩小的因子,只有anchor boxes的中心点坐标与factor有关系,anchor boxes的高和宽都与factor无关,且同一个尺度的特征图上的多个不同aspect ratio的anchor boxes,它们的面积不一定相等,是根据先验知识设定的),anchor boxes的宽和高是人为事先设定的,RPN网络中的卷积并不会改变特征图的分辨率,但是输出的特征图通道数为(#anchor boxes per pixel)*5,表示anchor boxes是前景还是背景的概率,以及对anchor boxes进行坐标回归的4个值。这些(fm_size*fm_size*(#anchor boxes per pixel))个anchor boxes(坐标调整之前的值)将会根据与ground truth boxes的IOU值判断它是正样本还是负样本,以及对应的分类类别ground truth,也就是说,对于RPN网络,每个anchor boxes都有对应的target。
RPN网络的作用是输出网络模型所认为的正样本(从anchor boxes中挑选)以及其4个坐标值
RPN只是对于anchor boxes进行前景和背景的二分类,以及对于所有anchor boxes中的正样本进行位置粗略调整。
②将fm送入fast R-CNN网络中,根据region proposal network所提出的候选框(region proposals),对于候选框进行进一步地位置精修和类别回归。需要根据region proposal在input image pixel尺度上得到的候选框映射到fm特征图尺度上,在特征图上得到ROI区域,对于每个ROI进行ROI pooling,得到对于region proposal的feature vector,再将特征向量送入全连接层,得到分类类别向量和位置坐标。
RPN和fast R-CNN共享卷积层特征。(region proposal networks share convolutional layers with fast R-CNN or other region-based object detectors)。fast R-CNN使用卷积特征图可以用于基于区域的物体检测器,则它同样可以用来生成region proposals。在backbone网络输出卷积特征图后,再用一些额外的卷积层构建RPN,RPN可以对于feature map的每个位置的多个事先设定的anchor boxes同时回归物体边界(4个坐标值)和objectness score,单独来看,RPN网络是一个全卷积网络(fully convolutional network),并且如果将目标函数设定为为detector生成proposals,则可以对RPN网络进行端到端的训练。这是因为,对于(fm_size*fm_size*#anchors_per_pixel_in_feature_map)中的每个anchor boxes,会根据它与ground truth boxes之间的IOU值判断anchor boxes是正样本还是负样本,如果是负样本,就只计算分类损失(分类为背景),如果是正样本,则要计算分类损失(分类为前景)和回归损失(对于anchor boxes的4个坐标值进行修正,target为corresponding ground truth box coordinates),根据正样本和负样本的损失函数值可以单独训练RPN网络。只对于一个尺度的特征图上的每个像素点设定不同scales、aspect ratios的anchor boxes,RPN就可以实现预测不同尺度、宽高比的包围框,故而faster R-CNN是通过在单一尺度的特征图上设定不同scales的anchor boxes实现多尺度的bounding boxes的检测。
fast R-CNN模型的输入是RPN模型产生的region proposals,用attention mechanism的角度来看,RPN模型告诉了fast R-CNN模型,该注意图像中的哪些部分。
faster R-CNN网络模型的输入尺寸为任意大小,
faster R-CNN的最终目标是将RPN和fast R-CNN共享计算,假设这些共享的计算是一系列的卷积层,即生成特征图的卷积层,论文中的实验使用了两种卷积backbone(base network):包含5个卷积层的ZF网络,包含13个卷积层的VGG16.
RPN(region proposal network)
RPN网络模型输入是任意尺寸的图像,输出是一系列矩形候选框,每个region proposals都带有一个objectness score(objectness表示当前region proposal是前景还是背景的概率,并不区分具体的物体类别),RPN是用全卷积实现的。对于shared convolutional layers生成的convolutional feature map,将卷积核在feature map上进行滑动,卷积滤波器的输入是feature map上n*n的窗口(论文中RPN使用的是3*3 convolutional filters),每个滑动窗口对应于一个256-dimension(对于ZF模型),512-dimension(对于VGG模型)的feature vector,RPN中的卷积操作将high dimensional feature map映射成lower dimensionalhared feature map卷积操作后的feature map还要经过Relu非线性函数进行激活,经过RPN模型的输出特征图与输入的共享卷积特征图的size不变,使用的是stride=1、kernel size=3的卷积操作。在shared feature map上进行sliding window可以通过卷积操作实现,得到一张与shared feature map分辨率相同、channel num相同的新特征图,对于新特征图的每个spatial space的每个像素点,将会得到一个256维的feature vector(for ZF model ),将每个位置所对应的特征向量分别送入到①regression layer(以全连接层或者1*1的卷积层实现),输出节点数为4*(#anchors_per_pixel),得到在当前像素位置的k个anchor boxes所对应的4个坐标值,②classification layer,输出节点数为2*(#anchors_per_pixel),得到anchor 是前景和背景的分类概率,对于二分类问题,如果输出是2个值,则最终经过的是softmax函数,如果只输出一个值,则经过sigmoid函数进行激活,但是为了在分类层使用cross entropy作为损失函数,使用softmax作为分类器反向求导会更方便。
每个anchor boxes的中心点坐标在feature map 像素中心点上,对应于input image pixel尺度上需要进行从原图到特征图的尺度映射,anchor boxes的scales和aspect ratios事先指定,for a convolutional feature map of a size W*H,有W*H*(#anchor_per_pixel)个anchor boxes。
论文中说使用全卷积网络实现的RPN具有translation invariant(平移不变性),实际上任何卷积网络都具有平移不变性。(这里的意思是,如果在input image中的object发生了平移,则在feature map上会产生相同位置、scale、aspect ratios的anchor boxes),RPN中regression layer和classification layer的参数数量为:(4+2)*(#anchor_per_pixel),如果用1*1的卷积实现,算上偏置,则卷积层的参数数量=(#in_channel*kernel_size*kernel_size*#out_channel+#output_channels)
通过减少参数数量,可以降低在训练数据集较小时,发生过拟合的风险。
faster R-CNN实现different scale和different aspect ratios的region proposals是通过pyramid of anchors实现的,即通过对于anchor boxes的尺度、宽高比实现,并没有使用image pyramid和feature pyramid。
RPN训练:
正样本positive samples:①与ground truth boxes具有最大IOU值的anchors;②与ground truth IOU值大于0.7的anchor;使用①是因为有可能所有的anchor boxes都不满足条件②
负样本:与所有的ground truth boxes的IOU值都小于0.3
loss function of RPN
faster R-CNN论文中的训练方式:
为了将RPN和fast R-CNN模型融合到同一个网络中,使用4-Steps 交替训练法训练faster R-CNN,RPN模型的task是进行region proposal,fast R-CNN模型的task是对于输入的每个ROI feature vector进行分类和回归,为了将两个模型融合到一起,它们两个所使用的convolutional feature map是共享的。
这里所指的backbone是从input image到shared feature map的部分
1.使用ImageNet数据集上backbone+RPN模型参数进行微调/训练
2. 根据步骤1中训练得到的region proposals训练fast R-CNN(backbone+fast R-CNN)
至此,RPN和fast R-CNN并没有共享backbone部分的参数
3. 保持fast R-CNN模型参数不变,保持backbone参数不变,微调/训练RPN模型参数
4. 保持RPN和backbone参数固定不变,微调/训练fast R-CNN模型参数
这个4步训练可以迭代多次,但是对于检测结果并没有太大提升。
下面描述将ZF model作为feature extraction network的情况:
https://blog.csdn.net/hunterlew/article/details/71075925
https://blog.csdn.net/ying86615791/article/details/72788414
https://zhuanlan.zhihu.com/p/31426458
http://www.telesens.co/2018/03/11/object-detection-and-classification-using-r-cnns/
neural network中的fully connected layer可以用1*1convolutional layer代替。其中,全连接层的input layers节点为N,output layer节点为M,则可以将输入的N个节点看作是一个1*1*N的input image,通过1*1*M(output channel=M)的卷积滤波器,可以输出1*1*M的feature map,对应到全连接层的输出。
anchor boxes的aspect ratios(宽高比)
指的是宽(列数)与高(行数)的比例,对于text detection文本检测,都是具有很大的aspect ratios。