Faster -RCNN算法笔记
论文:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
论文采用RPN(区域建议生成网络)来生成候选框,RPN网络与检测网络共享完整的图像卷积特征,大大减少了生成候选框所需的时间。RPN是一个全卷积网络,它同时预测每个位置的目标边界并给出所属类别的置信度(score)。RPN经过端到端的训练,生成候选框并对其进行条件筛选然后用于Fast R-CNN检测。
简单来说就是:
Faster RCNN算法将RPN和Fast-RCNN结合,由RPN负责候选框的提取,Fast R-CNN负责检测模块,对RPN提取的候选框检测并识别框中的目标,整个流程如下图所示。
RPN(Region Proposal Network)
RPN的作用是输入一张图像,输出一批矩形候选框,类似于以往目标检测中的selective search,网络结构是基于卷积神经网络,但输出包含二分类softmax和bbox回归的多任务模型。
RPN具体流程
使用一个小网络在最后卷积得到的特征图上进行滑动扫描,特征图上的每一个点都对应有9个不同的anchor。在这个滑动网络每次与特征图上n*n的窗口全连接,然后映射到一个低维向量,最后将这个低维向量送入到两个全连接层,即box回归层和box分类层。如下图来自论文。
RPN网络的训练
RPN网络的训练采用反向传播算法和随机梯度下降算法进行端到端的训练方式。依照Fast R-CNN中的“image-centric”采样策略训练这个网络。每个mini-batch由包含了许多正负样本的单个图像组成。我们可以优化所有anchor的损失函数,但是这会偏向于负样本,因为正负样本主要根据IOU值大小的来标定的,这样一来负样本就比较多。
正负样本的判定:
- 某anchor与任一目标区域的IOU最大,则判为目标
- 某anchor与任一目标区域的IOU>0.7则判定有目标,即正样本
- 某anchor与任一目标区域的IOU<0.3则判为背景,即负样本
训练数据
每一个mini-batch包含从一张图像中随机提取的256个anchor,前景样本和背景样本均取128个,达到正负比例为1:1。如果一个图像中的正样本数小于128,则多用一些负样本以满足有256个Proposal可以用于训练。
权重参数设置
前面几层参数是经ImageNet数据集预训练后的vgg16来进行初始化,新增的两层为权重均设置为满足0均值,标准差为0.01的高斯分布来进行初始化。
学习率设置
前60k的mini-batch,Lr =0.001,之后的20k个mini-batch,Lr = 0.0001
优化算法采用的Momentum,其中设置momentum = 0.9,权重衰减系数设置为0.0005。
Faster RCNN中的损失函数
其中分别表示box的中心点坐标,以及box的宽和高。并且为预测的box上的坐标,表示为由feature map上由一个像素点所生成的anchor box上的坐标,是groud truth所对应的点的坐标,其他符号同理可推。
损失函数的组成:
-
Box回归损失
表示预测平移缩放参数,表示了真实平移缩放参数。窗口回归层输出feature map上每一个像素点位置上产生的9个anchor所对应的平移缩放参数。
- 分类预测数据
Faster RCNN的分类预测层输出为 k+1维数组p,表示属于k类和背景的概率。对于每个ROI输出一个离散型概率分布。
分类层输出feature map上每一个像素点位置上产生的9个anchor属于前景和背景的概率。
- 总的损失函数定义
cls项为mini-batch的大小归一化值,,reg项的归一化值为anchor位置的数量,在这里的典型值是40*60*9 = 2400,,平衡权重设置为10,这样一来cls项与reg项的权重就差不多均衡了。表示只有当时,即roi区域为前景(目标)时才计算回归损失。为anchor预测为目标的概率。
边框是如何做回归的
对于一个box一般采用来表示,分别代表了box的中心点坐标,以及box的高度和宽度。黑色的框表示在feature map层由RPN网络生成的anchor,而绿色的框则表示了由我们手工标注的真实目标所在的box。简单来说窗口回归的目的是寻求一种映射关系将Anchor box转换成Ground truth近似的box。即
Bounding-box regression是如何操作的呢?
- 第一步:先做中心点坐标平移
- 第二步:确定边框高度宽度的缩放比例
首先确定bounding-box的输入与输出
输入:是由VGG16的conv5层输出的feature map,经过对其上每一个像素点生成anchor box,进而得到
输出:得到box的平移以及缩放参数 ,根据以上四个参数得到预测的box。
网络训练方式
RPN和Fast-RCNN共用了13个VGG的卷积层,文章中对这两个网络采用Alternating training的训练方式。
具体为:
第一步:训练RPN,用ImageNet预训练的模型初始化,并端到端微调用于生成候选框。
第二步:用第一步的RPN生成的box,由Fast R-CNN训练一个单独的检测网络,这个检测网络同样是由ImageNet预训练的模型初始化的,这时候两个网络还没有共享卷积层。
第三步:用检测网络初始化RPN训练,但我们固定共享的卷积层,并且只微调RPN独有的层,现在两个网络共享卷积层了。
第四步:保持共享的卷积层固定,微调Fast R-CNN的全连接层。这样,两个网络共享相同的卷积层,构成一个统一的网络。
参考文章:https://blog.csdn.net/xiaoye5606/article/details/71191429
注:本篇博客是我自己对近来Faster RCNN的一些学习总结,用来给自己复习看的,如果有不对的地方,欢迎批评指出