Faster R-CNN原理详解

本文跟着数据流动,从每一步分析Faster RCNN的原理。

看完可能要花上10分钟.

---------------------------------------------------------

原理:是技术实现的逻辑抽象。

  1. 数据输入的resize

  2. 卷积层的特征计算(卷积操作、padding~补0)

  3. 再到RPN(anchor、分类、回归)

  4. ROI-Pooling

  5. 全连接层(flatten)

  6. 最终回归、分类

  7. Loss计算

  8. 梯度传播

  9. SGD

以上9点用能明白数据流动过程中的变化,就说明逻辑已经能抽象出来,每一个都能解释通。下面一点点来分析数据流动、变换。

 

1、对输入数据的处理

输入数据是一个batch,在代码上是一个Blob块。faser首先计算:设置最小边/短边=scale。然后计算:长边*scalle。如果小于max_size=1000,就采用这个scale,对图像进行等比缩放,把短边放到600,长边等比例缩小一点。如果大于max_size=1000,则重新计算scale=max_size/长边。同样进行等比缩放。这是对每一个图像的处理。最后batch个图像组成blob块,作为网络的输入。对于Blob,不够补0(黑边)

以上。

 

2、卷积层计算

【卷积核 】blob大小每一个Batch可能是不一样的。因为图像resize后的大小不一样。所以feature大小不一样,神经元个数也不一样,连接总数也不一样。但是,因为cnn是权重共享的,使得他可以接受任意尺寸的输入,每一个feature不管大小怎么变,都是由一个固定大小的神经元模板计算得到,这个模板就是卷积核。不管是40*40还是20*20的feature,每一个神经元的连接都是同一个卷积核的参数。这说明2点:卷积层可以接受不同大小的输入以处理而不报错;卷积层的权重,是卷积核里的参数。问题:梯度到这里怎么更新的?

 

ceil (H  = (  长 - 卷积核大小+1) / 步长)

ceil( W = (  宽 -卷积核大小+1) / 步长 )

 

【特征图计算】25*25的计算和25*27的计算方式一样,都是按单边算,然后相乘。当输入不能够被卷积核与步长完美的走一遍,就会有padding问题:假设走到了边上,但只有一列数据,卷积核是两列的,那么就会无法计算,如果不用padding,就停止,不往下计算了,如果用Padding就补0,使得剩下的部分被计算,feature则会大一点。加入了padding之后,feature map大小计算公式修正如下:

 

ceil H=(长+2*pad-卷积核大小)/步长

ceil W=(宽+2*pad-卷积核大小)/步长

 

<
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值