Fast-RCNN

Fast-RCNN是RCNN的优化版,通过RoI pooling层实现端到端训练,解决了多阶段训练和特征冗余问题。论文引入多任务损失函数,允许所有网络层更新参数,并在保持良好性能的同时减少了训练时间和空间开销。Fast-RCNN对比了SVM与Softmax,以及不同训练策略和Proposal数量对结果的影响。

Fast-RCNN

论文下载地址
github网址

简介

首先膜拜一下RBG大神,RBG大神不仅是学术的大牛,工程也是大牛,代码写的很漂亮。这篇论文主要参考的是RCNN和SPPNet。需要按照这个顺序进行看paper,RCNN -> SPPNET -> Fast-RCNN -> Faster-RCNN。CNN在分类上效果很好。

  • RNN就解决了为什么不把目标检测的问题转化到分类的问题上呢?
  • Fast-RCNN解决的就是为什么一起输出bounding box和label呢?
  • Faster-RCNN解决的为什么还要使用select search呢?(摘自知乎)。

Fast-RCNN是RCNN的加速版,主要是针对之前的RCNN和SPPNET进行改进。

主要工作

在Fast-RCNN之前主要在目标检测方面有RBG大神的RCNN和何凯明的SPPNET,但是这两种网络结构都存在缺点,所以作者总结上述的不足,进行改进。首先RCNN存在以下的缺点

  • 训练是多阶段的。首先通过selective search提取Proposal,然后利用CNN提取特征,之后用SVM作分类,最后使用Bounding Box Regression。
  • 训练的时间空间开销大。RCNN中,SVM和Bounding Box regressor特征都是从磁盘读取,这个读取操作不仅耗时,还要占据磁盘空间存放特征。
  • 目标检测测试比较慢,因为每一个图像都要提取2K左右的区域,很多区域都是重复的,导致特征冗余。

虽然SPPNET每张图片仅仅计算一个特征,然后通过特征共享计算每一个proposal的特征。但是SPPNET同样是一个多阶段的网络,需要将特征存放到磁盘。除此之外,fune-tuning算法不能更新SPP pooling之前的参数。
针对上述的缺点,RBG大神提出了以下改进:

  • Training变为一个end-to-end,使用多任务的损失函数
  • 参数可以在所有的网络层进行更新
  • 不需要额外的磁盘空间存放特征

作者并通过实验证明效果优于RCNN和SPPNET。
整个网络的结构如图所示:


图1

上图显示了Fast-RCNN的主要过程,首先输入整张图经过一系列的卷积层和max pooling得到一个conv feature map。然后每一个proposal 经过RoI pooling层得到一个固定长度的feature。每一个feature在经过一个FC层,最后输入到两个输出层,产生两个优化的目标,一个用来分类,一个用来优化bounding box。

RoI pooling layer

RoI pooling Layer主要是以下的工作,首先要把输入RoI映射到feature map 上的patch上来。并且使用单层的SPPNET讲特征降维到固定长度,方便进行下一步的输入。RoI pooling 使用max pooling把 h×w 的RoI窗口,切成 H×W 个子窗口,然后每一个子窗口使用max pooling操作得到输出。

Initializing pre-training networks

  • 网络的最有一个max pooling层改为RoI pooling layer,设置 H,W 使得和网络的第一个全连接层匹配。
  • 把网络的最后一个FC层和softmax层修改为两个网络层,分别用来分类和Bounding box regress。
  • 网络的输入变为图片和图片的ROI

Fine-tuning for detection

对R-CNN和SPPNET网络输入的是一个proposal,Fast-RCNN输入则是一副完整的图像和RoI的位置集合,根据RoI的位置得到proposal的特征。这样做可以大大加速训练的过程。如果一副图像提取64个RoI的时候,那么将会得到64 × 的加速。

Multi-task loss

Fast-RCNN的目标函数如下所示:

L(p,u,tu,v)=Lcls(p,u)+λ[u
### Fast-RCNN 的改进方法及新版本 #### Faster R-CNN Faster R-CNNFast-RCNN 的一个重要改进版本,在原有基础上引入了 Region Proposal Network (RPN)[^1]。这一改动使得候选框生成过程被完全集成到了 CNN 框架内部,从而实现了端到端的学习机制。具体来说,整个模型可以分为四个主要部分:候选框生成、特征提取、候选框分类以及候选框边界回归,所有这些都在同一个神经网络中完成,消除了之前多阶段训练的需求[^2]。 ```python import torch.nn as nn class FasterRCNN(nn.Module): def __init__(self, backbone, rpn, roi_heads, transform): super(FasterRCNN, self).__init__() self.backbone = backbone # 特征提取模块 self.rpn = rpn # 区域提议网络 self.roi_heads = roi_heads # ROI头部用于分类和回归 self.transform = transform # 数据预处理 def forward(self, images, targets=None): features = self.backbone(images.tensors) # 提取图像特征 proposals, proposal_losses = self.rpn(images, features, targets) detections, detector_losses = self.roi_heads(features, proposals, images.image_sizes, targets) losses = {} if self.training: losses.update(detector_losses) losses.update(proposal_losses) return detections, losses ``` #### A-Fast-RCNN 另一种值得注意的改进方向是通过对抗性训练增强 Fast-RCNN 的鲁棒性和泛化能力。A-Fast-RCNN 方法利用了一个特殊的对抗网络来生成难以识别的对象实例作为额外的数据样本供主检测器学习。这种方法的核心在于于卷积特征空间而非像素级别创建 GAN 样本,这样做的好处是可以专注于提升模型对于复杂场景下的适应力而不必担心低层次视觉信息的影响[^4]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值