快速了解一个网络: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后我就可以得到固定的输出。
对于目标检测任务,我们只用CNN对整张图像推理一遍,在提取的feature maps上提取region proposals区域(来自原始图像region proposals的映射)作SPP即可。这样就可以大规模降低推理延时。
亿些细节
如何训练网络
TODO
进一步了解
Bag-of-Words (BoW) approach(TODO)
原文和代码
https://arxiv.org/abs/1406.4729
参考资料
暂无