深度学习入门(二)Fast R-CNN

来源:互联网 发布:centos snmp 是否开启 编辑:程序博客网 时间:2024/05/22 09:04
            Faster R-CNN: 

    

   rcnn的提出,用cnn来进行特征提取,进行classification之后,在分类的基础上进行稍微的fine-tuning之后在对每一个region proposal作为输入,大于IOU>0.5的region就是我们标记为positive其他的就是负样本,来训练detection网络。最后才开始在detection上进行特征提取。在特征提取结束之后并且训练的labels都准备好了(这里的labels指的是在训练SVM的时候进行的标记,大于0.3认为是正样本,并且这里对SVM现行分类器的数据标记IOU到底是多少有严格的界限,很重要,很重要)就可以开始运行整个框架啦。对每一个特征feed into SVM进行分类,对score进行排序,在上canny。总之,好麻烦,好麻烦。那么问题是,fast rcnn有什么特点呢?他为什么就敢说自己比别人快呢?原因就是它直接产生一个层叫做ROI层,本质上相当于一个SPP的简化,只有一个平面。它会直接就会一次性输出分类的结果和bounding-box的那个框框。具体架构如下:


    上面显示的是fast-rcnn的框架,概述如下:fast rcnn的输入包括两个,一整张图片和一些候选区域(例如上面图片中的一个方框,这是用selective search选择的)。首先,在整幅图片上(region prosoal也进行相同的操作)进行卷积和最大化池操作,得到feature map.然后,用ROI层去从这些feature map中提取固定长度的feature vector,然后这些feature vector fed into 层,最终会产生两个分支,一个是和softmax相关的多分类器,另一个会输出bounding-box。

    那什么是RoI层呢?该层主要使用maxPooling把任意有效的ROI转化成比较小,大小固定的H*W区域。也就是把大小是h*w的ROI转化成为大小H*W的窗口,估计有(h/H)*(w/W)个子窗口,然后把这些对应的子窗口经过maxPooling输出到对应的cell上(cell不好翻译,具体去看SPP)。你可以认为ROI层是SPP层的特例--仅仅有一层金字塔。

    在pre-trained的时候主要改变了AlexNet的三个地方:

    1):最后一个maxPooling被RoI层所代替。

    2):最后一个fc层和softmax层被被两个姊妹层所代替,一个是softmax用于分类,一个是用于得到边框。

    3):该网络的输入是有两个输入层。

   

    你会想到,同事以下运行两个任务,那他是怎样进行工作的,这里需要看看他的损失函数的定义,来看看:

        

    上面的表达式分为两个部分,前一个是和classification相关的分类损失函数。u代表的是当前的class,p是一个vector,代表每一个输入属于一个class的概率。后一个是和bounding-box相关的损失函数,其中u>=1表示,当u>=1的时候u=1,否则就是说u=0,也就是意味当你的region被标记为false的时候,就不要边框啦,没必要存取训练后面这个损失函数。例如对于background,u就是0.其中代表预测的位置,V=代表的是目标的坐标。具体的表达式如下,这个表达式也会在faster中用到。

    之后就可以进行实验结果的测评了,具体的明儿再说。



0 1
原创粉丝点击