一、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算法的原理和特点。