SPP-Net

R-CNN检测一张图片需要47s?

    R-CNN对图像提取Region Proposal(2000个左右)之后,将每个Proposal当成一张图像进行后续处理(CNN特征提取+SVM分类),实际上是对一张图像进行了2000次特征提取和分类。

    这2000个Region Proposal都是图像的一部分,那么我们完全可以对图像进行一次特征提取的操作,然后将Region Proposal在原图的位置映射到卷积层特征图上,最后将每个Region Proposal的卷积层特征输入到全连接层做后续操作。(对于CNN来说,大部分运算都消耗在卷积操作上,这样做可以节省大量计算)

CNN为什么需要固定输入图像的尺寸?

    CNN有两部分组成:卷积层和全连接层。卷积层对于图像是没有尺寸限制要求的,全连接层需要固定输入向量的维数,因为全连接层输入向量的维数对应全连接层的神经元个数,所以如果输入向量的维数不固定,那么全连接的权值参数个数也是不固定的,这样网络就是变化的,而在卷积层中,我们需要学习的kernal filter 参数个数是固定的。

SPP-NET

传统固定尺寸的方法:

SPP-Net_第1张图片

由于传统的CNN限制了输入必须固定大小,所以在实际使用中往往需要对原图片进行crop或者warp的操作:

    crop:截取原图片的一个固定大小的patch

    warp:将原图片的ROI缩放到一个固定大小的patch

无论是crop还是warp都无法保证在不失真的情况下将图片传入到CNN当中:

    crop:物体可能会产生截断,尤其是长宽比大的图片

    warp:物体被拉伸,失去“原形”,尤其是长宽比大的图片

SPP-NET:

SPP-NET就是在卷积层后面,全连接层之前加入一层 SPP,用于解决CNN输入固定尺寸的限制问题

SPP-Net_第2张图片

    对于任意尺寸图像,卷积层都是可以接受的(多大尺寸进去,多大尺寸出来),即卷积层对图像尺寸大小不敏感。卷积之后得到一组特征图(feature maps), 文中指出第五个卷积层一共有256个滤波器,对应 256个 feature maps。 

1.  对每个 feature maps 进行 max pooling 操作得到一个输出, 于是256个feature maps,我们都 max pooling,将这256个池化结果组成一个向量,维数是 256。 这就是上图中间部分最右边 256-d 。

2.  中间的4×256-d,我们将一个 feature map 等分为4块(直观理解就是将一幅图像等分为4块区域,这里是对特征图进行等分)。对每个小块进行max pooling 操作,所以我们从每个特征小块得到一个输出,一个 feature map 就有4个输出,256个 feature maps 就有 4×256-d

3.  最左边的 16×256-d,显然就是将一个feature map 等分为16块,256个 feature maps 就有 16×256-d。

    如果只进行上面三个步骤,那么我们一共得到向量维数是: 256+4*256+16*256=(21*256)维度。 对于任何输入尺寸图像,经过卷积之后,再用 SPP层处理,我们都会得到这个固定维度的特征向量。这个向量维度固定之后,后面的全连接层就固定了,因为神经元个数固定下来了,就是这个向量维度。

你可能感兴趣的:(cnn,deep,learning)