R-FCN算法及Caffe代码详解

R-FCN是Faster RCNN的改进版,提高了约3倍速度,mAP略有提升。通过region-based fully convolutional networks,解决了Faster RCNN中ROI Pooling层的重复计算问题。使用ResNet-101网络,添加position-sensitive score map和ROI Pooling,避免全连接层计算。Caffe代码实现了这一算法,包括RPN网络和position-sensitive ROI Pooling,加速了目标检测过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇博客一方面介绍R-FCN算法(NISP2016文章),该算法改进了Faster RCNN,另一方面介绍其Caffe代码,这样对算法的认识会更加深入。

论文:R-FCN:object detection via region-based fully convolutional networks
论文链接:http://papers.nips.cc/paper/6465-r-fcn-object-detection-via-region-based-fully-convolutional-networks.pdf

要解决的问题:

这篇论文提出一种基于region的object detection算法:R-FCN(Region-based Fully Convolutional Network),**R-FCN可以看做是Faster RCNN的改进版,速度上提高了差不多3倍左右,mAP也有一点提升。**另外一类object detection算法像YOLO,SSD等object detection算法是不基于region的。
为什么R-FCN相比Faster RCNN会有明显的提速呢?以主网络为ResNet101为例,在Faster RCNN中,ROI Pooling层的输入是在conv4_x,在做完ROI Pooling后会继续接conv5_x,conv5_x包含9个卷积层,另外在conv5_x后还有几个全连接层,这些层的计算都直接作用在每个roi上,因此存在许多重复计算。如果主网络换成VGG也类似,只不过重复计算的层数会少一些,主要是一些全连接层。而在R-FCN中,所有能共享的层都在ROI Pooling之前做好了,因此在ROI Pooling后基本不会有太多的重复计算。为了要在ROI Pooling之前实现层共享,一方面将conv5_x的计算移到Pooling层之前,但这样依然还存在一些全连接层的重复计算,因此再引入position-sensitive score map和position-sensitive ROI Pooling,使得经过Pooling后简单地执行一些操作就能得到回归和分类结果,而不再像Faster RCNN一样用几个全连接层去得到结果。

基于101层的ResNet网络在VOC 2007数据集上达到mAP 83.6%。测试的时候每张图像所用时间是170ms,比Faster RCNN快2.5到20倍。
代码地址:https://github.com/daijifeng001/r-fcn

算法概要:

首先之所以提出本文的算法,简单讲是为了提高Faster RCNN的速度,因此一方面很直观地想到要尽可能在网络中共享计算,所以就想到对原来ROI Pooling层进行改造和移动;另一方面希望基本网络可以更加强大,因此就想到了用类似Resnet等全卷积网络代替原来的VGG等网络。

这个算法的网络主要是基于ResNet-101,ResNet-101包含100个卷积层、一个均值降采样层和一个1000分类的全连接层。这里作者仅采用前面的100个卷积层来提取特征,其它层不用。ResNet-101的最后一个卷积层输出是2048维,这里作者为了降维,添加了一个1024维的11卷积层(随机初始化)。**最后,一方面添加一个k^2(C+1)维的卷积层用于生成score maps,这些score maps主要是用来生成object的类别;另一方面为了做bounding box regression,作者添加了和Fast RCNN类似的bounding box regression卷积层,维度是4k^2,该层和前面生成score maps的卷积层是并列的。**除了这个主网络以外,该算法还引入RPN网络生成ROI,生成的ROI将和分类的卷积层生成的score maps进行pooling并最终得到每个ROI属于每个类别的概率(一共C+1类)。另外这个ROI还将和回归卷积层的输出进行pooling,得到每个ROI的四个坐标。损失函数方面基本上和Fast RCNN一样。
因此,整个网络主要就是由全卷积网络(ResNet)和RPN网络构成,前者用于提取特征,后者用于生成ROI。

注意:文中的ROI就是region proposal。另外Faster RCNN中的ROI Pooling和本文的ROI Pooling不是一个意思,前者只是简单将每个region feature变换到统一的尺寸的feature,变换过程中采用Max pooling;而后者则是一种position-sensitive的ROI Pooling。

算法详解:

图片分类问题是具有平移不变性的(translation invariance),什么意思呢?就是说一张图像中目标的平移对这张图片的分类结果影响不大,这也是为什么全卷积网络可以在图像分类比赛中成绩更好;目标检测问题则具有平移敏感性(translati

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值