【论文阅读】2d目标检测:综述

最近在恶补2d目标检测的文章,把他们整理了一下,写一下综述,方便以后查看。 写得比较简略,主要是自己对于 一些网络的理解。

- sppnet

中心思想很简单,就是采取不同大小的块来进行特征提取。分别是44,22,1*1,将这三张网格放到下面这张特征图上,就可以得到16+4+1=21种不同的块(Spatial bins).我们从这21个块中,每个块提取出一个特征,这样刚好就是我们要提取的21维特征向量。这种以不同的大小格子的组合方式来池化的过程就是空间金字塔池化(SPP)。输出向量大小为Mk,M=#bins(块数),k=#filters(卷积核个数),作为全连接层的输入。例如上图,Conv5计算出的feature map是任意大小的,经过SPP之后,变成固定大小的输出了,以上图为例,共输出(16+4+1)*256的特征。(有256个卷积核)。

- R-FCN

Backbone architecture: ResNet 101——去掉原始ResNet101的最后一层全连接层,保留前100层,再接一个111024的全卷积层(100层输出是2048,为了降维,再引入了一个11的卷积层)。 k^2(C+1)的conv: ResNet101的输出是WH1024,用K2(C+1)个1024*1*1的卷积核去卷积即可得到K2(C+1)个大小为WH的position sensitive的score map。这步的卷积操作就是在做prediction。k = 3,表示把一个ROI划分成33,对应的9个位置分别是:上左(左上角),上中,上右,中左,中中,中右,下左,下中,下右(右下角) k^2(C+1)个feature map的物理意义: 共有kk = 9个颜色,每个颜色的立体块(WH(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 pooling: 就是faster RCNN中的ROI pooling,也就是一层的SPP结构。主要用来将不同大小的ROI对应的feature map映射成同样维度的特征,思路是不论对多大的ROI,规定在上面画一个nn 个bin的网格,每个网格里的所有像素值做一个pooling(平均),这样不论图像多大,pooling后的ROI特征维度都是nn。注意一点ROI pooling是每个feature map单独做,不是多个channel一起的。

ROI pooling的输入和输出:ROI pooling操作的输入(对于C+1个类)是k^2*(C+1)*W’ H’(W’和H’是ROI的宽度和高度)的score map上某ROI对应的那个立体块,且该立体块组成一个新的k^2(C+1)*W’ H’的立体块:每个颜色的立体块(C+1)都只抠出对应位置的一个bin,把这kk个bin组成新的立体块,大小为(C+1)*W’*H’。例如,下图中的第一块黄色只取左上角的bin,最后一块淡蓝色只取右下角的bin。所有的bin重新组合后就变成了类似右图的那个薄的立体块(图中的这个是池化后的输出,即每个面上的每个bin上已经是一个像素。池化前这个bin对应的是一个区域,是多个像素)。ROI pooling的输出为为一个(C+1)kk的立体块,如下图中的右图。

- SSD 没啥好讲的 看图

- DSSD 主要做了三处改进:加强backbone、新增Deconvolutinonal module、新增prediction module。

Backbone: 换vgg16为resnet 可以看到map降低了。。。

Deconvoluational Module

DSSD是SSD的改进版,在SSD的基础上增加了Deconvoluational Module和Prediction Module,使得其对于小目标检测的效果得到显著提升,但是DSSD的缺点也尤为明显,就是在速度上远不及SSD。

**

    TDM

**

为了兼顾大目标和小目标,目前主流方法是 用 skip connections 综合利用更多的卷积特征图信息。

    FPN Densenet
经验分享 程序员 微信小程序 职场和发展