文章

快速了解一个网络:SPP-net, Spatial Pyramid Pooling net

快速了解一个网络:SPP-net, Spatial Pyramid Pooling net

以下内容偏向于记录个人学习过程及思考,非常规教学内容

背景

RCNN算法,在CNN输入部分需要固定的图像大小(如224x224)。这就需要对所有不同大小的region proposals进行crop(切割)或者wrap(变形)来满足CNN部分的输入要求,而这会导致看不到检测目标全貌或使得待检测目标变形。另外,RCNN对于一张图像的推理时间会相对比较长。

为什么CNN输入部分需要固定的图像大小?

核心原因:CNN最后的全连接层,需要固定大小的输入。

为什么RCNN的推理时间会很长?

核心原因:因为RCNN需要对所有的region proposals走一遍CNN。

核心思想

如果有一个层放在RCNN最后的全连接层之前,可以接收任意大小的输入,并输出固定大小的输出,就可以解决第一个问题…

Spatial Pyramid Pooling Layer!(空间金字塔池化层!)

如果可以只用CNN对整张图像推理一遍,即可大幅度提升RCNN的推理时间,就可以解决第二个问题…

将原始图像的region proposals按照CNN结构映射到feature maps上,只用CNN对原始输入图像推理一遍,后续直接在提取的feature maps上做分类或检测!

Pipeline

对于输入大小不同的feature maps,我们设置如图中对4x4,2x2,1x1大小的网格,对每个网格区域内的feature作pooling,即可得到一个固定大小的输出。

核心是:虽然输入大小不同,但我分成了固定数量的bin(每个bin的大小根据输入大小不同会变化),那么pooling后我就可以得到固定的输出。

spp-net-pipeline

对于目标检测任务,我们只用CNN对整张图像推理一遍,在提取的feature maps上提取region proposals区域(来自原始图像region proposals的映射)作SPP即可。这样就可以大规模降低推理延时。

spp-net-object-detection-pipeline

亿些细节

如何训练网络

TODO

进一步了解

RCNN

Bag-of-Words (BoW) approach(TODO)

原文和代码

https://arxiv.org/abs/1406.4729

参考资料

暂无

本文由作者按照 CC BY 4.0 进行授权