9.Fast R-CNN

  • 检测的主要问题:处理候选框的定位问题;候选框提供的位置需要进一步精确。
  • 提出:单阶段训练算法联合训练 classify object proposals 和 refine their spatial locations.
  • 解决了之前 RCNN 和 SPP-Net 的 multi-stage pipelines ( slow and inelegant )

输入是224*224,经过5个卷积层和2个降采样层(这两个降采样层分别跟在第一和第二个卷积层后面)后,进入ROIPooling层,该层是输入是conv5层的输出和region proposal,region proposal的个数差不多2000。然后再经过两个都是output是4096的全连接层。最后分别经过output个数是21和84的两个全连接层(这两个全连接层是并列的,不是前后关系),前者是分类的输出,代表每个region proposal属于每个类别(21类)的得分,后者是回归的输出,代表每个region proposal的四个坐标。最后是两个损失层,分类的是softmaxWithLoss,输入是label和分类层输出的得分;回归的是SmoothL1Loss,输入是回归层的输出和target坐标及weight。 (对每个类别都训练一个回归器,且只有非背景的region proposal才需要进行回归。)

测试的过程: 
与训练基本相同,最后两个loss层要改成一个softmax层,输入是分类的score,输出概率。最后对每个类别采用NMS(non-maximun suppression)

 

 

1.The RoI pooling layer

RoIs Pooling层利用Proposal从feature maps中提取Proposal feature进行池化操作,送入后续的Fast R-CNN网络做分类和回归

  • RoI pooling layer 使用max pooling将感兴趣的任何有效区域内的特征转换为具有固定空间范围 H*W 的小特征图w(例如,7 7),其中H和W是独立于任何特定RoI的层超参数。在本文中,RoI是一个进入conv feature map的矩形窗口。每个RoI由一个四元组(r;c;h;w)表示它的左上角(r;c)和它的高度和宽度(h;w)来定义。
  • RoI max pooling的工作原理是将h*w RoI窗口划分为大小近似为 h/W * w/W 的子窗口组成的 H*W 网格,然后将每个子窗口中的值max-pooling到对应的输出网格单元中。
  • pooling 独立地应用于每个feature map通道,就像标准的max pooling一样。
  • ROI Pooling的作用是对不同大小的region proposal,从最后卷积层输出的feature map提取大小固定的feature map。简单讲可以看做是SPPNet的简化版本,其中只有一个金字塔级别。
  •  
  •    
  •       

 

2.Initializing from pretrained networks

用预训练好的网络初始化 Fast-RCNN , 需要:

(1)最后一个 max pooling 用 RoI pooling 代替。设置成 H和W 的配置兼容 网络中全连接的第一层。

(2)最后一个全连接层和 softmax 用两个同级的层代替

(a fully connected layer ; softmax over K+1 categories and category-specific bounding-box regressors).

两个并行层取代上述VGG-16网络的最后一层全连接层和softmax层,并行层之一是新全连接层1+原softmax层1000个分类输出修改为21个分类输出【20种类+背景】,并行层之二是新全连接层2+候选区域窗口回归层,如下图所示;

(3)两个数据输入:a list of images and a list of RoIs in those images.

3.Finetuning for detection

  • SPP-Net 微调时不能更新空间金字塔池之前的卷积层的原因:back-propagation through the SPP layer is highly inefficient when each training sample (i.e. RoI) comes from a different image
  • The inefficiency 是因为: 每个 RoI 可能有非常大的感受野,通常覆盖整个输入图像
    由于前向传播必须处理整个感受野,训练输入是非常大的(通常是整张图片)
  • 我们提出解决方案:takes advantage of feature sharing during training
  • SGD mini-batches 分层次采样。N个图片-->每个图片中R/N RoIs 。来自同一个图片中RoIs共享计算
  • 需要考虑:将会引起训练收敛缓慢。因为同一幅图像的RoI是相关的

####  联合优化softmax classifier 和 bounding-box regressors 

        Multi-task loss ( 将分类的loss和回归的loss整合在一起 )

        对于分类loss,是一个N+1路的softmax输出,其中的N是类别个数,1是背景。

        对于回归loss,是一个4xN路输出的regressor,也就是说对于每个类别都会训练一个单独的regressor的意思,比较有意思的是,这里regressor的loss不是L2的,而是一个平滑的L1

       

cls_score层用于分类,输出K+1维数组pp,表示属于K类和背景的概率。 
bbox_prdict层用于调整候选区域位置,输出4*K维数组tt,表示分别属于K类时,应该平移缩放的参数。

Scale invariance

SPPnet用了两种实现尺度不变的方法: 
1. brute force (single scale),直接将image设置为某种scale,直接输入网络训练,期望网络自己适应这个scale。 
2. image pyramids (multi scale),生成一个图像金字塔,在multi-scale训练时,对于要用的RoI,在金字塔上找到一个最接近227x227的尺寸,然后用这个尺寸训练网络。 
虽然看起来2比较好,但是非常耗时,而且性能提高也不对,大约只有%1,所以这篇论文在实现中还是用了1。

Which layers to finetune?

对于较深的网络,比如VGG,卷积层和全连接层是否一起tuning有很大的差别(66.9 vs 61.4)
有没有必要tuning所有的卷积层?
答案是没有。如果留着浅层的卷积层不tuning,可以减少训练时间,而且mAP基本没有差别。
 

4.采用SVD分解改进全连接层

如果是一个普通的分类网络,那么全连接层的计算应该远不及卷积层的计算,但是针对object detection,Fast RCNN在ROI pooling后每个region proposal都要经过几个全连接层,这使得全连接层的计算占网络的计算将近一半,如下图,所以作者采用SVD来简化全连接层的计算。


 

 

实验结论

- 网络末端同步训练的分类和位置调整,提升准确度 
- 使用多尺度的图像金字塔,性能几乎没有提高 
倍增训练数据,能够有2%-3%的准确度提升 
- 网络直接输出各类概率(softmax),比SVM分类器性能略好 
更多候选窗不能提升性能

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值