Faster_R_CNN源码详细解析

Faster R-CNN整体架构

在这里插入图片描述

  1. 首先使用共享卷积层为全图提取特征feature maps
  2. 将得到的feature maps送入RPN,RPN会产生接近两千个候选框proposals
  3. RoI Pooling Layer根据RPN的输出在feature map上面找到proposals对应的对应区域也就是ROI(region of interest),对不同大小ROI输出固定大小的feature map
  4. 使用全连接层(FC Layer)对ROI进行分类,并对proposals进行根据类别做相应的矫正,比如人的话,尽可能矫正成一个竖向的矩形框,对车的话,尽可能矫正成一个横向的矩形框。

根据源码对Faster R-CNN进行详解

数据预处理

  1. 对原有数据集的所有图片进行水平翻转,并计算翻转后的目标框gt(ground truth)新的位置

  2. 读取一张图片

  3. 将图片缩放到最小的边为600像素,计算缩放比例im_scales

  4. 对RGB三个通道减去各自均值,使像素有正有负

  5. 对所有gt的4各坐标信息(x,y,w,h)也按im_scales缩放,并记录box的类别号

提取特征图

图片经过VGG-16直到conv5_3卷积层,提取feature maps,称为bottom

构建RPN网络

在这里插入图片描述

计算anchor boxs在原图的位置

  1. 因为原图经过VGG-16的4层2*2的池化层宽高都缩小16倍,将原本图片的面积去除以16得到bottom的宽width和 高height

  2. bottom上的一个坐标点称为anchor(对应到原图16*16的区域),为了尽可能的框住目标,设定了9种anchor boxs形状,如下:
    在这里插入图片描述

  3. 计算9种anchor boxs在原图的上的相对坐标(x1,y1,y2,y2)(分别对应左上角和右下角),anchor boxs大小只跟bottom的宽高、anchor box预设的面积大小、宽高比有关,(x1,y1,y2,y2)和(x,y,w,h)可以相互转换

  4. 根据anchor的映射到原图的坐标,计算所有anchor boxs在原图的坐标

进行前景、背景分类和anchor boxs偏移量的预测

  1. 对bottom进行3*3的卷积,这样做的目是进一步集中特征信息,将结果走分类、回归两条路线

  2. 预测每个anchor box的分别属于前景、背景的概率

    1. 一条用1*1的卷积核卷积输出(batch_size,hight,wedth,18)接着reshape成(batch_size,9*hight,wedth,2),代替全连接层,并不会减少参数的数量,但是使得输入图像的尺寸可以更加灵活
    2. 用softmax通过每一个anchor来预测对应的9个anchor boxs各自属于前景、背景的概率分别是多少
    3. 改变回(batch_size,hight,wedth,18)的形状,18对应一个anchor对应的9个anchor boxs分别属于前景、背景的概率值
  3. 预测每个anchor box与它对应的gt的偏移量(tx,ty,tw,th),用1*1的卷积核卷积计算anchor boxs与它对应的gt box的偏移量(tx,ty,tw,th),输出(batch_size,hight,wedth,36),36对应一个anchor对应的9个anchor boxs的4个偏移量(tx,ty,tw,th)

提候选框proposals

  1. 通过RPN计算得到anchors boxs的偏移量对anchor boxs进行修正

  2. 切掉anchors boxs超过原图边界的部分

  3. 根据anchors boxs预测属于正例的概率进行倒排取topN(12000)个

  4. 对保留下来的anchors boxs进行非极大值抑制,两个重叠比例(IOU)>0.7只保留属于正例的概率大的

  5. 取保留下来的anchors的topN,如果超过2000个那么只保留2000个

训练RPN

  1. 将所有的anchors boxs中超出边界的anchors boxs过滤掉

  2. 将保留下来的每一个anchors box与原图中的每一个gt计算IOU

  3. 计算保留下来的每一个anchors box与IOU的最大的gt的真实偏移量(tx*,ty*,tw*,th*)

  4. 将与gt的IOU>0.7作为正例

  5. 将得到那些与任意一个gt的IOU最大的anchors boxs,作为正例(以防没有与gt的IOU>0.7,那样就没正例)

  6. 将与gt的IOU<0.3作为负例

  7. 总共取256个正负例样本,如果正例太多,就随机取128,如果不够就用负例来凑。如果负例太多,就随机取128,如果不够就用正例来凑

  8. 计算分类损失:计算256正负例样本的交叉熵除以256

  9. 计算回归损失:计算正例样本的真实偏移量与预测偏移量之差的smooth L1 损失除以256

  10. 按一定权重加和分类损失和回归损失。

Fast R-CNN网络

预测

  1. 将proposals 从原图映射到bottom上面

  2. ROI池化,将所有proposals 变成7*7

在这里插入图片描述

  1. 接全链全连接层,将结果走分类、回归两条路线

  2. 一条路线,对每一个proposals 进行类别分类

  3. 另一条路线,对每一个proposal与对应的gt的偏移量进行预测(tx,ty,tw,th)

  4. 对每一个proposals 进行矫正,并输出目标框、所属类别

训练最终分类

  1. 拿到2000个proposals与原图中的每一个gt计算IOU

  2. 得到每一个proposals最有可能的类别号

  3. IOU大于等于0.5,为正例,IOU小于0.5并大于等于0.1,为负例,

  4. 正负例取1:3,共256个, 如果正例超过64个,随机取64个,不够拿负例来凑。

  5. 取得256个样本的类别号,背景的类别号是0,其他有各自对应的类别号

  6. 计算256样本的proposals与gt 真实偏移量(tx*,ty*,tw*,th*)

  7. 将除背景以外的真实偏移量按类别分开,计算损失的时候,按类别去计算真实的和预测的偏离量的损失,模型就会学习到该类别的特有的矫正方式,比如人的话,尽可能矫正成一个竖向的矩形框,对车的话,尽可能矫正成一个横向的矩形框。

  8. 计算分类损失:计算256正负例样本的交叉熵除以256

  9. 计算回归损失:计算非背景样本的真实偏移量与预测偏移量之差的smooth L1 损失除以256

  10. 按一定权重加和分类损失和回归损失。

补充

用卷积代替全连接

可行性:卷积获取的是局部特征,全连接获取所有的局部特征,如果卷积核大小跟feature map一样大小就可以获取所有的局部特征。

实现过程如下:

在这里插入图片描述

全连接层转变成卷积层的操作很简单,只需要使用与上层尺寸一致的卷积核进行卷积运算即可。最终得到的输出层维度是1 x 1 x 4,代表4类输出值,激活函数也是softmax。

卷积替代全连接的优点
对输入分辨率的限制

如果网络后面有全连接层,而全连接层的输入神经元个数就是固定的,那么反推上层卷积层的输出是固定的,继续反推可知输入网络的图片的分辨率是固定的。例如,LetNet由于由全连接层,输入就只能是28 x 28的。那么图片就需要进行resize,这个会改变物体的真实比例,影响模型检测效果。

如果网络中的全连接层都用卷积层替代,网络中只有卷积层,那么网络的输出分辨率是随着输入图片的分辨率而来的,输出图中每一个像素点都对应着输入图片的一个区域(可以用stride,pooling来反算)。解决了v1只支持一种分辨率图片的问题

计算效率比较

在这里插入图片描述

假设为了识别图片中所有的数字(为了简单,假设每个数字都是在这个大图划分为14 x 14的网格中),16 x 16 x 3的图片需进行4次,28 x 28 x3的图片需进行64次。而利用卷积操作全链接,则不管原始图片有多大,只需要进行一次CNN正向计算,因为其中共享了很多重复计算部分,这大大节约了运算成本。

保留更多空间信息

全卷积网络的特点就在于输入和输出都是二维的图像,并且输入和输出具有相对应的空间结构,我们可以将网络的输出看作是一张heat-map,用热度来代表待检测的原图位置出现目标的概率,只做一次前向就可以得到所有位置的分类概率。如下图所示:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值