俗话讲天下武功唯快不破,网络也是这样。RCNN比传统框架在mAP上提高到了66%,这得益于它引入了RP+CNN的特殊结构,促使他的准确率得到大幅度的提升,但是他的速度却十分的被大家所诟病。试想一下,两千个建议框,每个都需要针对性的提取特征图,这个过程很慢,很慢,很慢。
所以呢,就思考能不能更快,更强。显而易见,这种东西是存在的。于是名字很俗气,但是更快更强的fast r-cnn就这么被提出来了。它将RP在特征图上进行区域提取,并且通过使用softmax分类取代svm使得模型的准确率得到了一定的提高。
那么光说不练可不行,我先带大家来看一下这个框架的总体流程:
那么呢,我认为这个网络流程存在下述三个优势:
1)由于Region proposal的提取是在feature map之后进行的,所以不需要在对所有的特征图进行CNN forward的计算,因而这在计算上大大减少了计算的需求。这一部分没有什么好说的。
2)将SVM转换为生层网络来同时完成检测和识别的目的,使得模型可以使用GPU进行训练更加的加快了模型的运行速度。
这里主要分为连个部分,一个是使用ROI Pooling layer将所以的建议区域都转化为大小相等的输入,这是因为后面采用的深度模型中存在全连接层需要大小固定的输入。这个点我看在很多博客中并没有人提到,可能许多同学也不了解他的作用。那么ROI Pooling Layer的是如何实现这个功能的呢?
首先就是对于所有的输入特征图,将他们分为固定w*h个模块,这里的w和h就是后续所需要的输入。然后通过对每个模块进行最大池化而达到实现固定大小输入的目的。
3)此外这里还采用全连接层来实现分类以及检测的作用,通过之前的学习我们可以获知,全连接层其实也是需要耗费大量的计算资源的,因此我们通过SVD将全连接分解,这样分解之后实现精度无大的变化,而网络的参数得到较大幅度的降低。
在这种技术中,层的u×vu×v权重矩阵WW通过SVD被近似分解为:W≈UΣtVT(5)(5)W≈UΣtVT在这种分解中,UU是一个u×tu×t的矩阵,包括WW的前tt个左奇异向量,ΣtΣt是t×tt×t对角矩阵,其包含WW的前tt个奇异值,并且VV是v×tv×t矩阵,包括WW的前tt个右奇异向量。截断SVD将参数计数从uvuv减少到t(u+v)t(u+v)个,如果tt远小于min(u,v)min(u,v),则SVD可能是重要的。 为了压缩网络,对应于WW的单个全连接层由两个全连接层替代,在它们之间没有非线性。这些层中的第一层使用权重矩阵ΣtVTΣtVT(没有偏置),并且第二层使用UU(其中原始偏差与WW相关联)。当RoI的数量大时,这种简单的压缩方法给出良好的加速。
这里还有一点需要注意的就是使用金字塔来实现特征的尺度不变性,也就是说利用金字塔例如3*3、5*5、7*7这几种尺寸先对图像进行等比例缩放,然后通过随机将图片缩放进行训练提高模型对于不同尺度图形的适应性。
参考:
1、https://blog.csdn.net/lk123400/article/details/54343550 Faster RCNN解析
学术交流可以关注我的公众号,后台留言,粉丝不多,看到必回。卑微小钱在线祈求