物体检测之从RCNN到Faster RCNN

原创 2017年12月22日 15:33:04

这里写图片描述

本文将简要介绍物体检测的two stage的相关算法,two stage包括:region proposals、classification。介绍的相关算法有:RCNN、Fast RCNN、Faster RCNN。

RCNN

RCNN是基于CNN物体检测的奠基之作。其核心思想是:利用selective search对图片选取多个proposals;将每个proposals送入预训练的CNN得到features;在features上使用分类器对齐分类,使用回归器得到准确边框。

问题与创新

问题:

  1. 目标检测进展缓慢,传统的基于SIFT、HOG的方法不符合视觉启发式、多阶段的认知,需要尝试新的方法。
  2. CNN在ImamgeNet图片分类领域上取得了较好的效果,同样的方法是否可以移植到目标检测领域(PASCAL VOC)。

创新:

  1. 将CNN应用到了目标检测上,相比传统基于HOG的方法提升巨大。
  2. 采用两阶段的方法,先提取proposal,再识别。
  3. 通过在相似数据集上有监督的预训练和目标领域的微调解决了数据量不足的问题。

架构

这里写图片描述

网络自底向上包括三部分:

  1. region proposal:使用selective search。
  2. CNN:使用在其他数据集上预训练的模型。
  3. 分类器和回归器

训练

训练包含4部分:

  1. CNN的预训练:在其他数据集上预训练CNN模型。
  2. CNN的微调:CNN部分输入是warped region proposals,输出是N+1个类别(N个分类目标与背景)。
  3. SVM detector的训练: 针对每个类别分别训练一个SVM。训练数据前景的条件是真实的box;背景的条件的IoU<0.3。
  4. Box regression的训练:针对每个类别分别训练一个regression。训练数据的条件是IoU>0.6。

CNN的微调部分有几个问题,分别是:

  1. proposals中如何区分前景背景:与真实proposal的IoV>0.5的记为前景,其余记为背景。
  2. 训练的时候数据的比例如何选取:batch_size设置为128,其中包含32个所有类别随机的前景和96个随机背景。选取的原则是偏向于数量较少的前景。

测试

  1. 利用selective search计算region proposals(大约2k个)
  2. warp proposals将其送入到CNN中得到features
  3. 利用各类的SVM计算proposals的类别与分数。针对每个类别,采用非极大抑制(Non-Maximum Suppression)得到该类别所有的proposals。
  4. 利用各类的Box regression修正类别的bounding box。

Fast RCNN

问题与创新

针对RCNN,其存在以下问题:

  1. 多步训练:先在大规模类似数据集上预训练CNN,然后微调CNN,最后在微调获得的特征上加入分类器、回归器。
  2. 训练过程耗费过多的时间、空间:时间空间主要花费在计算CNN的features。
  3. 测试过慢:时间主要花在了CNN的计算上。

其中,训练及测试过慢的主要原因是:RCNN中每个proposals都经过CNN计算,计算冗余。

创新:

  1. single-stage training,使用multi-task loss,可以end2end训练,不需要额外存储空间。
  2. 针对图片先构建feature map再抽取区域,batch中的图片的个数较少,避免了冗余计算。
  3. 使用ROI pooling,有效地将不同大小的proposal固定为相同长度的向量。
  4. 采用Truncated SVD将全连接层分解成两个小的全连接,加速全连接过程的计算。

架构

这里写图片描述

网络架构如上图所示,自底向上包含下面几部分:

  1. 预训练的Cov层
  2. selective search提取的proposals
  3. 对Cov层上的各个proposal的映射做ROI pooling
  4. 全连接层
  5. 分类器和回归器

训练

训练包含

  1. 利用预训练的CNN初始化,并调整部分网络结构以初始化网络
  2. 利用multi-task loss对目标检测问题做fine tuning

在初始化网络部分,对预训练的CNN网络主要做了以下的修改:

  1. 最后一个max pooling层被ROI pooling层取代。ROI pooling层的固定参数是H,W,含义是将region均分成HW子区域,对每个子区域做max pooling从而得到固定的输出。
  2. 网络最后的全连接和softmax层被分类器、各个类别的回归器取代。
  3. 网络的输入源更改为2个,包括图片和图片对应的ROI。

在fine tuning部分,存在以下问题:

  1. proposals中如何区分前景背景:与真实proposal的IoV>0.5的记为前景,0.1<=Iov<0.5记为背景。
  2. 训练的时候数据的比例如何选取:选取的图片记为N,每张图片选择R/N个ROI。论文中使用的参数是N=2,R=128。这样做的好处是输入的图片较少,从而避免了因图片不同造成的冗余计算。选择25%的数据作为前景,75%的数据作为背景。
  3. 训练的时候使用综合分类、回归的multi-task loss。

测试

  1. 输入图像到CNN中得到feature map。
  2. 利用selective search计算region proposals(大约2k个)
  3. 在feature map上找到proposals的映射,针对每个proposal做ROI pooling得到固定长度的feature。
  4. 通过全连接、分类器、回归器得到各类别的概率及各类别的box。
  5. 针对每个类别,采用非极大抑制(Non-Maximum Suppression)得到该类别所有的proposals。

Faster RCNN

问题与创新

问题:

  1. SPP Net和Fast RCNN的计算瓶颈主要是region proposals。

创新:

  1. 将之前用于detection的CNN feature map用于计算region proposals。采用RPN网络计算region proposals。RPN网络和detection网络共享CNN权重,几乎实现了cost-free的proposals计算。

架构

这里写图片描述

Faster RCNN的大体架构与Fast RCNN一致,唯一不同的是将Selective Search换成了Region Proposal Network去获得bounding box。

网络架构如上图所示,自底向上包含下面几部分:

  1. 预训练的Cov层
  2. Region Proposal Network提取的proposals
  3. 对Cov层上的各个proposal的映射做ROI pooling
  4. 全连接层
  5. 分类器和回归器

下面,将详细介绍RPN网络架构。

这里写图片描述

RPN网络在feature map上加了一个n*n(3*3),通道为256的卷积,这样feature map上的每一个点连同其周围的8个点都被映射成了一个大小256的向量;接着再通过1*1的卷积,得到通道为(2k+4k=6k)的feature map。其中,k代表锚框的数量。

训练

训练包含

  1. Region Proposal Network的训练
  2. 将RPN网络和Fast RCNN detection网络的卷积共享

先来谈RPN网络的训练

RPN网络的输入是正负例的锚框,输出是边框的修正(回归)以及是不是前景(二分类)。

选择正负例锚框的标准如下,其batch为256,正负比例为1比1:

  • 正例:对每个真实box,距离其IOU最大的锚框;对任意一个真实box,IOU>0.7的锚框。
  • 负例:对所有真实box,IOU<0.3的锚框。

其中,对于1000*600大小的图片,大约有20000(60*40*9)个锚框。忽略了与边界相交的锚框后还剩6000个。但是这些边框有相当一部分相交的很多,因此采用IOU阈值为0.7的NMS,余下2000个锚框。

损失函数使用的是综合分类、回归的multi-task loss。


再来谈如何共享RPN和Fast RCNN的卷积

一般来说,有三种共享卷积的方法:

  1. 交替训练RPN和Fast RCNN,使用一个训练的结果去初始化另外一个
  2. 当成一个网络去做end2end的训练,综合RPN的2类loss和Fast RCNN的loss
  3. 使用Fast RCNN的loss去做完全backward的训练

实际使用时,采取4-step的训练:

  1. 先预训练再微调训练RPN网络
  2. 使用上一步RPN网络的结果,先预训练再微调训练Fast RCNN网络。在这一步后两个网络还未共享CNN权重。
  3. 使用上一步Detection网络的结果去初始化RPN网络,接着固定CNN的权重不变,微调RPN网络。在这一步后两个网络共享权重。
  4. 使用上一步RPN的结果去初始化Detection网络,接着固定CNN的权重不变,微调RPN网络。

测试

  1. 输入图像到CNN中得到feature map。
  2. 利用RPN网络计算region proposals
  3. 针对每个proposal做ROI pooling得到固定长度的feature。
  4. 通过全连接、分类器、回归器得到各类别的概率及各类别的box。
  5. 针对每个类别,采用非极大抑制(Non-Maximum Suppression)得到该类别所有的proposals。

总结

  • RCNN将CNN引入了物体检测上,提出了proposal-classification做物体检测的整体框架。
  • Fast RCNN针对RCNN不同proposals间冗余计算的问题,提出了先构建feature map,再将region proposal的region映射到feature map上进行计算;同时采用ROI pooling解决proposal大小不同的问题。
  • Faster RCNN针对Fast RCNN的速度瓶颈在region proposal上,直接在CNN的feature map上加了RPN网络提供高效的proposal计算。

物体检测-从RCNN到YOLO

转载http://blog.csdn.net/cosmosshadow/article/details/50244715 文章初始发表在: 物体检测-从RCNN到YOLO 参考列表 ...
  • zwfightsinuestc
  • zwfightsinuestc
  • 2016年12月07日 21:49
  • 426

[水文]物体检测与识别-Faster RCNN

一 导语 最近移植了faster rcnn[1]的测试部分,有一些肤浅的理解,做一个简要的分享和总结,希望后面能对训练过程做一个详细的剖析,由于本人水平有限,难免有错误与疏漏,请批评与指正。 一幅图...
  • PeaceInMind
  • PeaceInMind
  • 2016年01月01日 19:31
  • 10315

目标检测——从RCNN到Faster RCNN 串烧

本人小硕一枚,方向是深度学习的目标检测,故想把从RCNN到Faster RCNN整个线串一下,理清里面的整个设计流程和创新思路,也算是对大神的创新思维进行学习。我会不定期改善博客里面可能存在的小错误,...
  • xyy19920105
  • xyy19920105
  • 2016年03月07日 11:20
  • 12076

[深度学习] RCNNs系列(4)Faster RCNN介绍

Faster RCNN是Kaming He与RCNN作者共同完成的一项工作,也是目前在目标检测领域非常知名并应用广泛的一种深度学习框架。自2016年被提出以后成为了Detection领域的baseli...
  • lhanchao
  • lhanchao
  • 2017年06月30日 22:30
  • 1715

【深度学习:目标检测】RCNN学习笔记(5):faster rcnn

转载:http://blog.csdn.net/u011534057/article/details/51247371 reference link: http://blog.csdn.n...
  • SMF0504
  • SMF0504
  • 2016年10月06日 18:52
  • 1182

cs231n: 第四讲 faster rcnn的解释

最近在做detection的相关工作,但是对于要做的东西呢总是不太清楚,看了课程介绍之后,终于有了稍微清楚一些的认识。计算机视觉中一般有以下任务: 分类就是给你一张图,你说这是什么,一般来说只有一个...
  • c602273091
  • c602273091
  • 2017年01月09日 16:08
  • 916

【目标检测】RCNN算法详解

深度学习用于目标检测的RCNN算法
  • shenxiaolu1984
  • shenxiaolu1984
  • 2016年04月05日 23:10
  • 74399

faster-rcnn for tensorflow 测试过程

faster-rcnn for tensorflow 测试
  • WeiGuanQun
  • WeiGuanQun
  • 2017年12月11日 13:24
  • 164

【目标检测】Faster RCNN算法详解

继RCNN,fast RCNN之后,目标检测界的领军人物Ross Girshick在2015年提出faster RCNN。目标检测速度达到15fps。...
  • shenxiaolu1984
  • shenxiaolu1984
  • 2016年04月21日 15:08
  • 114316

从编程实现角度学习 Faster R-CNN(附极简实现)

本文原载于知乎专栏「人工智障的深度瞎学之路」,AI 研习社获得授权转载。Faster R-CNN 的极简实现: github: simple-faster-rcnn-pytorch(http://t....
  • Y0W1as5eg37urFdS
  • Y0W1as5eg37urFdS
  • 2018年01月11日 00:00
  • 186
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:物体检测之从RCNN到Faster RCNN
举报原因:
原因补充:

(最多只允许输入30个字)