Faster_rcnn

Faster R-CNN

继RCNN,Fast R-CNN后于2015年提出,主要用区域生成网络(RPN)代替了Fast R-CNN的Selective Search方法。下面讲下一下Faster R-CNN所涉及到的所有步骤及涉及到的其他思想。特征提取网络以VGG-16为例。

一、概述

目标识别需要完成两个任务,定位和分类。分类已经有很久的历史了,长久以来都是用特征提取然后逻辑回归,这点毋庸置疑。而如何定位目标(目标分割)才是整个目标识别算法中的核心。例如R-CNN采用的是经典的图像处理方法,Selective Search,通过一些颜色纹理等特征来达到目标分割的任务,但是这样太耗时间,果然被抛弃。Fast R-CNN并没有修改定位这部分,只是将定位后的检测算法通过卷积网络一步实现,达到提升速度的效果,这里后面会详谈。而Faster R-CNN则直接用深度学习的方法实现目标分割,这一下大大提高了定位的速度,且减少了待检测块的数量,成为2015年目标识别领域最好的算法(state-of-the-art)。尽管Faster R-CNN,速度已经很快,但要达到实时检测仍然有些不够,特别是对于类似自动驾驶的场景。2016年,YOLO(You Only Look Once:Unified, Real-Time Object Detection)算法被提出,速度有质的提升,采用的方法当然与Faster R-CNN有所不同。YOLO算法是通过将图片分成 n * n大小的栅格,然后对于每个栅格,识别网络同时给出位置坐标和类别概率,一步到位速度当然有提升,但带来的缺陷就是一个栅格只能检测一个物体,且定位有一定误差。后面的YOLO版本在吸取一些先进的思想后有比较大的提高,甚至在精确度上超过Faster R-CNN。

二、特征提取网络

卷积 + 池化 + 激活 向来是卷积神经网络的标配,VGG网络也不例外。RPN网络和Fast R-RCNN网络公共结构如下:

image → conv3-64 → conv3-64 →pool2 → conv3-128 →conv3-128 → pool2 → conv3-256 → conv3-256 → conv3-256 → pool2 → conv3-512 → conv3-512 →conv3-512 →pool2→conv3-512 → conv3-512→ conv3-512

VGG网络特点是只用3*3大小的卷积核

三、 RPN网络

滑动窗口

初始图像经过特征提取网络得出特征图(feature),要想识别出图片所有可能存在的物体,穷举法必然是我们的第一反应。而对应于图片识别的穷举法便是滑动窗口了,顾名思义,就像滑动的窗口一样一步一步探测窗口内是否含有物体。可是对特征图滑窗可以真的映射到原图片吗?答案是肯定的,正是因为如此Fast RCNN才能达到比较高的速度。具体如何实现可以参考(OverFeat: Integrated recognition , localization and detection using convolutional networks)。仅仅有窗口并不够,我们要的是物体的具体坐标,而窗口只能给出大致的位置,或者说该物体的局部位置,于是有了锚箱(anchor box)的想法。对于每个窗口,有k个锚箱与之对应。论文中给出的锚箱有9个,三种面积{ 1282,2562,5122 128 2 , 256 2 , 512 2 } * 三种比例{ 1:1,1:2,2:1 1 : 1 , 1 : 2 , 2 : 1 }。对于每个锚箱,有6个输出向量,2个变量代表是目标和不是目标的概率,另外4个是关于坐标的预测。既然每个锚箱都有了具体的位置,为什么还要对坐标进行具体预测呢?实质上锚箱只能给出模糊的位置,所以每个锚箱对应到具体的物体还需要添加偏移量。具体公式

tx=(xxa)/wa,ty=(yya)/ha,tw=log(w/wa),th=log(h/ha) t x = ( x − x a ) / w a , t y = ( y − y a ) / h a , t w = l o g ( w / w a ) , t h = l o g ( h / h a )
tx=(xxa)/wa,ty=(yya)/ha,tw=log(w/wa),th=log(h/ha) t x ∗ = ( x ∗ − x a ) / w a , t y ∗ = ( y ∗ − y a ) / h a , t w ∗ = l o g ( w ∗ / w a ) , t h ∗ = l o g ( h ∗ / h a )

x,y,w,h 分别表示预测值;
xa,ya,ha,wa x a , y a , h a , w a 表示Anchor Boxes;
tx,ty,tw,th t x ∗ , t y ∗ , t w ∗ , t h ∗ 表示真实物体位置

感受野

对于特征图中的每个点,对应原图片中的面积大小,称之为感受野。这里有一个疑惑,感受野的大小(已经计算经过VGG网络的特征图,感受野为228)竟然可以小于锚箱的大小,不能理解。
这里给出相关计算公式

nout=nout+2pk/s+1 n o u t = ⌊ n o u t + 2 p − k ⌋ / s + 1

jout=jins j o u t = j i n ∗ s

rout=rin+(k1)jin r o u t = r i n + ( k − 1 ) ∗ j i n

startout=startin+((k1)/2p)jin s t a r t o u t = s t a r t i n + ( ( k − 1 ) / 2 − p ) ∗ j i n

n表示特征点个数,j表示特征点数的距离,r表示感受野,start有效表示开始点(考虑paddle)

具体网络

feature(conv3-512) conv3-512 conv1-18,conv1-36(18为9 * 2类别预测,36为9 * 4位置预测)

损失函数

L(pi,ti)=1NclsiLcls(pi,pi)+λ1NregipiLreg(ti,ti) L ( p i , t i ) = 1 N c l s ∑ i L c l s ( p i , p i ∗ ) + λ 1 N r e g ∑ i p i ∗ L r e g ( t i , t i ∗ )

Lcls=(pilogpi+(1pi)log(1pi)) L c l s = − ( p i ∗ log ⁡ p i + ( 1 − p i ∗ ) log ⁡ ( 1 − p i ) )

Lreg(ti,ti)=smoothL1(titi) L r e g ( t i , t i ∗ ) = s m o o t h L 1 ( t i − t i ∗ )

smoothL1(x)={0.5x2,|x|0.5if |x|<1otherwise. s m o o t h L 1 ( x ) = { 0.5 x 2 , if  | x | < 1 | x | − 0.5 otherwise.

四、Fast R-CNN

RPN网络预测物体位置,然后将位置信息传给Fast R-CNN检测网络,提取给定位置后的特征图信息进行分类,并进行位置精修得出最后的结果

ROI层

RPN预测的物体大小不一,意味着给出的特征图的向量维数不一致。然而对于后面的全连接层必须保证维数一致。因此这里借鉴了SPPNET的思想,进行了MaxPooling。对于任意特征图m * n,固定输出为7 * 7矩阵。即进行卷积核大小为m/7 * n/7的MaxPooling。

具体网络

feature(conv3-512),RPNproposal ROI(7*7*512) FC(4096) FC(4096) (SVD)FC21,(SVD)FC84

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值