RCNN:局部卷积神经网络。
结构分为:候选区域生成(采用selective search方法),特征提取网络(多个卷积层、relu,以及池化层),分类器(SVM),回归修正位置结构(线性脊回归器)。
流程为:
先在输入图像上进行SS,生成多层次的候选区域,
在候选区域上进行特征提取,
然后进行分类判断,
最后对候选区域位置进行修正。
Fast RCNN:快速局部卷积神经网络。
候选区域生成仍然采用SS方法,将分类器以及回归修正结构替换成网络中的窗口分类层和窗口位置修正层,与特征提取网络结构结合,成为新的网络结构,理论上加快了速度。
候选区域生成在整个结构中的位置后所改变,不再是放在最开始就在图像上使用SS,而是一开始将图像一体化送入特征提取网络,最后在特征提取输出层上进行SS,生成候选区域。(候选区域生成仍然独立于其他部分,可以独立变动)
Faster RCNN:
候选区域的生成替换为RPN(区域生成网络),让区域生成网络与剩余的网络结合起来。区域生成网络的位置有所改变,
一开始就进行特征提取,提取出原始的特征,然后经过候选区域生成网络生成候选区域,由候选区域与之前的特征进行分类以及位置判断。
YOLO:
进行全局卷积,而不是局部卷积,物体位置与类别处理并不分开,从原理上来说就非常不一样,分类与位置查找不再是分开的。物体位置窗口的中心格子负责分类,每个格子输出预测类的物体位置方框的预测。YOLO网络最终的全连接层的输出维度是 S*S*(B*5 + C)。每个格子输出B个bounding box(包含物体的矩形区域)信息,以及C个物体属于某种类别的概率信息。
疑问:B是预先设置好的?还是检测出来的?如何检测的?
解答:这个地方指的是全连接层的输出。多层卷积之后得到特征,而经过全连接层可以得到位置与类别。
SSD:
用一个修剪过的高质量分类网络的前置结构作为前面的基础网络,然后在后面加上辅助结构,辅助结构用以分类和定位。在基础结构后面,用卷积层得到大小逐级递减的特征图,每一层都输出box regression以及各类别的得分,这样可以得到多范围的卷积特征。每一层的卷积模型都不一样
疑问:各个卷积层是串联还是并联?
串联
疑问:在卷积后的特征层上使用bounding box能很好地返回到原图上吗?
可以,卷积之后对应的位置不变
YOLO最后是使用两层的全连接层来预测box位置以及类别判断,SSD使用卷积层。感觉SSD相比RCNN系列更接近YOLO,都是全局卷积,并且一次回归。其特点是在基础结构之后的多尺度卷积得到的特征图。
RFCN:
认为图片分类与位置检测存在较难调和的矛盾。图片分类需要平移不变性,目标检测需要平移变动。
整体架构是基于faster RCNN,进行全域卷积,然后将所有的卷积部分移到ROI池化之前,同时在池化之前通过将ROI区域分割,并组合的是分割之后的特征图,来保存ROI的位置信息,使其不至于在ROI池化的时候丢失位置信息,池化之后投票决定结果。
下面两张图是faster_RCNN 与RFCN都适用的
疑问:划分ROI为k*k个特征块是如何体现了位置信息的保留的?
“k^2(C+1)个feature map的物理意义: 共有k*k = 9个颜色,每个颜色的立体块(W*H*(C+1))表示的是不同位置存在目标的概率值(第一块黄色表示的是左上角位置,最后一块淡蓝色表示的是右下角位置)。共有k^2*(C+1)个feature map。每个feature map,z(i,j,c)是第i+k(j-1)个立体块上的第c个map(1<= i,j <=3)。(i,j)决定了9种位置的某一种位置,假设为左上角位置(i=j=1),c决定了哪一类,假设为person类。在z(i,j,c)这个feature map上的某一个像素的位置是(x,y),像素值是value,则value表示的是原图对应的(x,y)这个位置上可能是人(c=‘person’)且是人的左上部位(i=j=1)的概率值。”
理解为:将ROI区域分块之后,每一块对应每一类都有一张特征图,这张图表示了这个位置可能是该类物体这个位置的概率。
疑问:ROI池化会丢失位置信息,其他卷积层的池化会吗?为什么池化前卷积会减少计算量?
所以RFCN相对于faster RCNN的改进有两点:通过将卷积层移至ROI池化之前,减少计算量;
通过ROI划分,保留位置信息,提高准确率。