赞
踩
目前流行的CNN都需要固定size和scale的输入图片;所以基本上都是通过剪裁(crop)和wrap。这种处理方式有三个弊端
CNN网络对于固定输入的要求,主要在全连接的分类器层,而特征提取层可以通过控制子采样比例和filter尺寸来调节,来接受各种scale和size的输入,得到固定的特征输出。
Deep Residual Learning for Image Recognition :
引入Spatial PyramidPooling 层SPP,通过SPP来移除CNN对于固定输入的要求,SPP操作类似深层的信息“融合”。这种深层的信息融合类似人脑的分级信息处理方式;当我们看到一个物体时,在一开始我们把物体看成一个整体而不是剪裁一个部分;通过融合先前处理的信息,大脑处理在深层阶段识别各种形状的物体。(有点类似高斯金字塔/拉普拉斯金字塔对图像的处理)
SPP结构从细密和粗糙级别上分割图像,然后融合局部的特征。
SPP有3个优势:
通过融合各级bin的输出,最终每一个unpooled FM经过SPP处理后,得到了1+4+16维的SPPed FM输出特征,经过融合后输入分类器。
这样就可以在任意输入size和scale下获得固定的输出;不同scale下网络可以提取不同尺度的特征,有利于分类。
优点
Spp是一个处理multi-scale和multi-size灵活的方法,增加CNN的鲁棒性,提升分类效果。也同时证明一些经典的计算机视觉算法,在CNN中也是有用的。
SPP是一种可以提升CNN分类效果的实用方法,而且通过调整bin个数,还可以减少参数。感觉SPP结构使得最不同级别的bin对应的原始图像区域是不一样的,多个对应区域可以对应不同尺度的物体,从而使网络对于物体缩放的鲁棒性有所提升。感觉这个和GoogLeNet中的Inception多尺度提取信息,有些类似。通过调整filter或者pooling window的尺寸来调整每个激活值对应的区域,从而提取不同尺度的物体特征。
FC层需要固定长度输入 :全连接层的参数就和输入图像大小有关,因为它要把输入的所有像素点连接起来,需要指定输入层神经元个数和输出层神经元个数,所以需要规定输入的feature的大小。
传统的CNN由于全连接层的存在,限制了输入必须固定大小(比如AlexNet是224x224),所以在实际使用中往往需要对原图片进行crop或者warp的操作:
crop:截取原图片的一个固定大小的patch,物体可能会产生截断
warp:将原图片的RoI缩放到一个固定大小的patch,物体被拉伸,失去“原形”
无论是crop还是warp,都无法保证在不失真的情况下将图片传入到CNN当中。
缺点
SPP-Net只解决了R-CNN卷积层计算共享的问题,但是依然存在着其他问题:
多尺度的object detection算法:FPN(feature pyramid networks)【论文地址】。原来多数的object detection算法都是只采用顶层特征做预测,但我们知道低层的特征语义信息比较少,但是目标位置准确;高层的特征语义信息比较丰富,但是目标位置比较粗略。另外虽然也有些算法采用多尺度特征融合的方式,但是一般是采用融合后的特征做预测,而本文不一样的地方在于预测是在不同特征层独立进行的。
下图展示了4种利用特征的形式:
(a)图像金字塔,即将图像做成不同的scale,然后不同scale的图像生成对应的不同scale的特征。这种方法的缺点在于增加了时间成本。有些算法会在测试时候采用图像金字塔。
(b)像SPP net,Fast RCNN,Faster RCNN是采用这种方式,即仅采用网络最后一层的特征。
(c)像SSD(Single Shot Detector)采用这种多尺度特征融合的方式,没有上采样过程,即从网络不同层抽取不同尺度的特征做预测,这种方式不会增加额外的计算量。作者认为SSD算法中没有用到足够低层的特征(在SSD中,最低层的特征是VGG网络的conv4_3),而在作者看来足够低层的特征对于检测小物体是很有帮助的。 还没有考虑到各特征图之间的semantic gap。
(d)本文作者是采用这种方式,顶层特征通过上采样和低层特征做融合,而且每层都是独立预测的。
下图中:skip connection(残差连接)的网络结构在预测的时候是在finest level(自顶向下的最后一层)进行的,简单讲就是经过多次上采样并融合特征到最后一步,拿最后一步生成的特征做预测,提出初始为了解决深网络的梯度消失的问题。而下面一个网络结构和上面的类似,区别在于预测是在每一层中独立进行的。
作者提出FPN网络(上图右)
自底向上 其实就是网络的前向过程。在前向过程中,feature map的大小在经过某些层后会改变,而在经过其他一些层的时候不会改变,作者将不改变feature map大小的层归为一个stage,因此每次抽取的特征都是每个stage的最后一个层输出,这样就能构成特征金字塔。
对于ResNets,我们使用每个阶段的最后一个residual block输出的特征激活输出。 对于conv2,conv3,conv4和conv5输出,我们将这些最后residual block的输出表示为{C2,C3,C4,C5},并且它们相对于输入图像具有{4, 8, 16, 32} 的步长。 由于其庞大的内存占用,我们不会将conv1纳入金字塔中。
自顶向下 的过程采用上采样(upsampling)进行,而横向连接则是将上采样(特征图做2倍,使用最近邻上采样)的结果和自底向上生成的相同大小的feature map进行融合(merge),这样做可以利用底层定位细节信息。在融合之后还会再采用3*3的卷积核对每个融合结果进行卷积,目的是消除上采样的混叠效应(aliasing effect)。并假设生成的feature map结果是P2,P3,P4,P5,和原来自底向上的卷积结果C2,C3,C4,C5一一对应。
由于金字塔的所有层次都像传统的特征化图像金字塔一样使用共享分类器/回归器,因此我们在所有特征图中固定特征维度(通道数,记为d)。我们在本文中设置d = 256
,因此所有额外的卷积层都有256
个通道的输出。
横向连接:采用1×1
的卷积核进行连接(减少特征图数量,不同于堆叠)。
如下表。网络这些结果都是基于ResNet-50。评价标准采用AR,AR表示Average Recall,AR右上角的100表示每张图像有100个anchor,AR的右下角s,m,l表示COCO数据集中object的大小分别是小,中,大。feature列的大括号{}表示每层独立预测。
从(a)(b)(c)的对比可以看出FRN的作用确实很明显。另外(a)和(b)的对比可以看出高层特征并非比低一层的特征有效。
(d)表示只有横向连接,而没有自顶向下的过程,也就是仅仅对自底向上(bottom-up)的每一层结果做一个11的横向连接和33的卷积得到最终的结果,有点像Fig1的(b)。从feature列可以看出预测还是分层独立的。作者推测(d)的结果并不好的原因在于在自底向上的不同层之间的semantic gaps比较大。
(e)表示有自顶向下的过程,但是没有横向连接,即向下过程没有融合原来的特征。这样效果也不好的原因在于目标的location特征在经过多次降采样和上采样过程后变得更加不准确。
(f)采用finest level层做预测(参考Fig2的上面那个结构),即经过多次特征上采样和融合到最后一步生成的特征用于预测,主要是证明金字塔分层独立预测的表达能力。显然finest level的效果不如FPN好,原因在于PRN网络是一个窗口大小固定的滑动窗口检测器,因此在金字塔的不同层滑动可以增加其对尺度变化的鲁棒性。另外(f)有更多的anchor,说明增加anchor的数量并不能有效提高准确率。
Feature Pyramid Networks for Fast RCNN
a)(b)(c)的对比证明在基于区域的目标卷积问题中,特征金字塔比单尺度特征更有效。(c)(f)的差距很小,作者认为原因是ROI pooling对于region的尺度并不敏感。因此并不能一概认为(f)这种特征融合的方式不好,博主个人认为要针对具体问题来看待,像上面在RPN网络中,可能(f)这种方式不大好,但是在Fast RCNN中就没那么明显。
FPN(Feature Pyramid Networks)算法,是一种特征融合算法,将高层的特征与底层的信息融合,得到融合特征,并提取该特征进行预测,可以达到更好的预测效果。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。