您的位置:

Fasterrcnn论文详解

一、Fasterrcnn论文下载

首先要了解的是,我们可以从arxiv.org官网免费下载Fasterrcnn论文原文。该论文是由Ross Girshick、Shaoqing Ren、Kaiming He和Jian Sun于2015年在ICCV 2015上发表的。Fasterrcnn作为一种基于深度学习的物体检测算法,在图像识别领域具有广泛的应用。

二、Fasterrcnn详解

Fasterrcnn算法是在R-CNN、Fast R-CNN算法的基础上发展而来。相比于这两种算法,Fasterrcnn在准确率、速度上都得到了进一步优化。下面介绍一下Fasterrcnn算法的主要特点。

1. RPN网络

Fasterrcnn的关键在于加入了RPN(Region Proposal Network)网络。RPN网络可以输出一些候选框的信息,这些候选框在后续的分类器中将会有所应用。这样一来,就不再需要使用Selective search等复杂的算法来得到候选框了,显著提升了速度。

from keras.layers import Input, Conv2D, MaxPooling2D

#定义RPN网络
input_layer = Input(shape=(None,None,3))
conv1 = Conv2D(512, (3,3), activation='relu', padding='same', name='rpn_conv1')(input_layer)
rpn = Conv2D(20, (1,1), activation='linear', padding='same', name='rpn')(conv1)
rpn_cls = Conv2D(10, (1,1), activation='sigmoid', name='rpn_cls')(rpn)#输出候选框的类别信息
rpn_bbox = Conv2D(40, (1,1), activation='linear', name='rpn_bbox')(rpn)#输出候选框的边界框信息

#定义分类器
conv2 = Conv2D(256, (3,3), activation='relu', padding='same', name='conv1')(input_layer)
fasterrcnn_cls = Conv2D(10, (1,1), activation='sigmoid', name='ffcnn_cls')(conv2)#输出物体的类别信息
fasterrcnn_bbox = Conv2D(40, (1,1), activation='linear', name='ffcnn_bbox')(conv2)#输出边界框信息

2. RoI Pooling

另一个特点就是RoI Pooling。 RoI(Region of Interest)对应的是候选框,也就是说每一个候选框都是一个RoI。

  

Fasterrcnn的RoI Pooling和Fast R-CNN的RoI Pooling不同。Fast R-CNN要求所有RoI具有相同的大小,不同大小的RoI需要通过调整大小得到规定大小。而Fasterrcnn的RoI pooling则不需要调整大小,只需在池化层中进行相应的变换即可。

from keras.layers import Lambda, concatenate
from keras.models import Model

def roi_pooling(x, ix, feat_stride, pooled_height, pooled_width):
    #根据边界框中心点(x,y)和长宽(w,h)计算出边框顶点的坐标
    x = Lambda(lambda x: x[:,ix:ix+1]*feat_stride)(x)#x是之前定义的rpn_bbox层的输出
    y = Lambda(lambda x: x[:,ix+1:ix+2]*feat_stride)(x)
    w = Lambda(lambda x: x[:,ix+2:ix+3]*feat_stride)(x)
    h = Lambda(lambda x: x[:,ix+3:ix+4]*feat_stride)(x)
    #下面的运算根据得到的坐标值计算出边框顶点坐标
    x1 = Lambda(lambda arg: arg[0]-arg[1]/2,name='x1')([x, w])
    y1 = Lambda(lambda arg: arg[0]-arg[1]/2,name='y1')([y, h])
    x2 = Lambda(lambda arg: arg[0]+arg[1]/2,name='x2')([x, w])
    y2 = Lambda(lambda arg: arg[0]+arg[1]/2,name='y2')([y, h])
    
    pooled_features = []
    for i in range(10):
     #使用两个lambda层来实现复杂的RoI Pooling算法
        pooled_feature = Lambda(lambda x: x[:,int(y1[i]):int(y2[i])+1,int(x1[i]):int(x2[i])+1,i])(x)
        pooled_feature = MaxPooling2D((pooled_height, pooled_width))(pooled_feature)
        pooled_features.append(pooled_feature)
    pooled_features = concatenate(pooled_features)
    return pooled_features

pooled_features = []
for i in range(10):
    #roi_pooling是之前定义的函数
    pooled_feature = roi_pooling(rpn_bbox, i*4, 16, 7, 7)
    pooled_features.append(pooled_feature)
pooled_features = concatenate(pooled_features,axis=0)

fasterrcnn_cls = Conv2D(10, (1,1), activation='sigmoid', name='ffcnn_cls')(pooled_features)#输出物体的类别信息、

3.网络结构

Fasterrcnn网络结构与其前身Fast R-CNN相似,但是有些细节处理上却有很大的不同。整个网络架构图如下:

4.Fasterrcnn论文的改进

Fasterrcnn算法在原论文的基础上也有了不少改进。例如,引入了Fpn网络,进一步提升了算法的准确性,同时还加强了RoI Pooling的池化过程,增强了特征的表达能力。除此之外,还有不少对算法效率和准确性的优化。

三、其他相关论文

1. 论文FastTrack

论文"FastTrack: Real-time Tracking-by-Detection using Efficient Proposals"也是Ross Girshick和Shaoqing Ren所撰写的一篇著名的论文。该论文提出了一种新的物体跟踪算法,采用候选框和依赖性图(Dependency Graph)的思想来增强跟踪的鲁棒性和准确性。

2. FastPlanner论文

"FastPlanner: Efficient Planning for Safe Navigation in Complex Environments"是由Alberto Speranzon、Yun Chang、Weizhe Yuan、Kostas Bekris和David Lee等人于2021年发表的文章。该论文给出了一种基于深度学习的路径规划算法,能够有效地在复杂的环境中规划路径和避免障碍物。

3. RCNN和Fasterrcnn的区别

RCNN、Fast R-CNN和Fasterrcnn是物体检测算法中的三个经典算法。RCNN和Fast R-CNN都是基于手工特征的算法,而Fasterrcnn则是基于深度学习的算法,相比前两者在速度、准确率方面都有很大的提升。Fasterrcnn的另一个特点是采用了RPN网络作为特征提取器,可以直接预测候选框,无需比较复杂的算法。

4. Fasterrcnn结构

Fasterrcnn网络结构采用了RPN网络作为候选框提取器,再经过RoI Pooling的处理,采用全连接层对候选框进行分类和坐标回归等操作。整个网络结构可以看做一个多任务学习的过程,其中包括物体分类、边界框回归、候选框提取等多个任务。

5. Fasterrcnn中文名称选取

Fasterrcnn的中文名称是“快速双阶段物体检测算法”或者“快速区域卷积神经网络算法”,这两个名称都能够准确描述Fasterrcnn算法的原理和特点。