Fast R-CNN

来源:互联网 发布:谷歌输入法 linux 编辑:程序博客网 时间:2024/06/06 10:14
原文链接:http://arxiv.org/abs/1504.08083
工程链接:https://github.com/rbgirshick/fast-rcnn
        Fast R-CNN是R-CNN的改进,它将识别object proposal和提炼他们的空间位置结合成一个单一阶段的训练算法,提高速度和准确性。
        R-CNN的不足:(1) 训练是一个多阶段的pipeline,先得到object proposal,再提取特征,然后用SVM分类,最后再用bounding-box回归。(2) 训练的时间、空间成本都很高。(3) 目标检测过程很慢。
Fast R-CNN architecture and training
        Fast R-CNN的训练过程是:(1) 用几个卷积层和最大池化层来处理整张图像得到conv feature map。(2) 对于每个object proposal,一个region of interest(RoI)池化层从feature map中抓取一个定长的feature向量。(3) 每个feature向量经过一系列最终和两个同科输出层相连的全连接(fc)层。(两个输出层:一个在K个object类加一个"background"类上进行softmax概率估算,另一个对于K个object类中的每一个类输出四个real-valued numbers)

        The RoI pooling layer 该层把层内的features转化为一个H*W的feature map。每个RoI由一个四元组(r,c,h,w)定义,分别表示左上角坐标、宽、高。RoI最大池化通过将每个h*w的RoI窗口分成一个H*W的网格,网格由h/H*w/W的小窗口组成,然后将每个小窗口的值池化成相应的输出网格。对于每一个feature map,池化过程是独立的。
        Initializing from pre-trained networks 使用3个提前训练好的ImageNet,每个有5个最大池化层,在这5个之间有13个卷积层。将该网络转化成Fast R-CNN网络还需:(1) 最后一个最大池化层换成一个RoI池化层,它的H和W可与第一个全连接层共用。(2) 最后一个全连接层和softmax换成前面提到的两个输出层。(3) 调整网络能适应两个输入数据:图片集和这些图片集的RoI。
        Fine-tuning for detection 在Fast R-CNN中,对SGD mini-batches进行分层抽样,先抽取N个图像,再从每个图像中抽取R/N个ROI。还使用把优化softmax分类器和bounding-box回归结合在一起的一次微调的训练过程,该过程包括四个部分:(1)Multi-task loss. Fast R-CNN有两个输出层,对应有两个loss。对于分类loss,是一个N+1路的softmax输出。对于回归loss,每个类单独输出一个regressor,最终是一个4*N路输出的regressor。

(2) Mini-batch sampling. (3) Back-propagation through RoI pooling layers.(4) SGD hyper-parameters.
        Scale invariance 要实现object的scale不敏感可以采取两种方法:(1) "brute-force" learning.每个图像在训练和测试期间有一个提前定义好的像素大小,希望网络能够直接从训练数据中学习到scale-invariant的性质。(2) 使用图像金字塔。
Fast R-CNN detection 
        网络输入图像(或图像金字塔)和R个object proposal来计算。R一般大约为2000。对于每个测试RoI r,前向传递输出一个类后验概率分布p和一系列相对于r的预测bounding-box的offsets。
        用截平面奇异值分解(truncated SVD)处理大型的全连接层可以加速。

0 0
原创粉丝点击