目标检测——SPPNet算法解读

论文:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

作者:Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun

链接:https://arxiv.org/abs/1406.4729

目录

  • 1、算法概述
  • [2、Deep Networks with Spatial Pyramid Pooling](#2、Deep Networks with Spatial Pyramid Pooling)
    • [2.1 SPP Layer](#2.1 SPP Layer)
    • [2.2 网络训练](#2.2 网络训练)
  • 3、实验结果
    • [3.1 分类](#3.1 分类)
    • [3.2 检测](#3.2 检测)
  • 4、创新点和不足

1、算法概述

之前的工作,神经网络都要求固定尺寸的输入,比如:224x224,这就限制了输入图像的宽高比,当对于其他任意尺寸图像时,基本都是通过裁剪或直接拉伸的方式变换到固定尺寸。但是裁剪有可能不能完全包含目标,直接拉伸也会造成目标的形变及失真,这都会造成识别精度下降。

为什么卷积神经网络需要固定尺寸的输入?CNN由两部分组成:卷积层和全连接层,实际上卷积层不需要固定尺寸的输入,它可以对任意尺寸的图像生成任意尺寸的特征图;而全连接层根据其定义来看才需要固定尺寸的输入。全连接层通常在CNN的深层阶段,所以本文作者提出空间金字塔池化(SPP, Spatial Pyramid Pooling)层用于固定CNN中最后一层卷积层的输出,使得全连接层的输入得到统一。这一操作使得CNN可以接受任意尺寸的输入,不必经过裁剪(crop)和扭曲拉伸(warp)。在目标检测方面,加入这一操作的SPP-Net比R-CNN快24到102倍,全过程下来速度为0.5s/image。

SPP的优势有:

1、针对不同尺寸的输入可以得到相同维度的输出,而siding window pooling 做不到;

2、SPP使用multi-level spatial bins, 而siding window pooling采用的单一的窗口,multi-level对目标变形非常鲁棒;

3、由于输入尺寸的可变性,SPP可以提取不同尺度的特征。

4、SPP-Net能使得我们在训练中使用多尺度训练,避免过拟合,使得最终的精度相比固定尺寸训练有所提升。

2、Deep Networks with Spatial Pyramid Pooling

2.1 SPP Layer

作者首先可视化了网络特征图,表明了特征图不仅反映了相应的强度和涉及到它们的空间位置。卷积层可以接受任意大小的输入并输出任意尺寸的特征图,但分类器(SVM/softmax)或者全连接层只能接受固定尺寸的输入。

为了让CNN适应任意大小的图像,作者将最后一个池化层(例如,在最后一个卷积层之后的pool5层)替换为空间金字塔池化层。如上图所示,空间金字塔池化的输出是kM维向量,桶(bins)的数量记为M,k是最后一个卷积层的输出特征图数量,图中k为256。每个特征图的尺寸为axa,被切分为nxn的bins,那么采用窗口为win=ceil(a/n)和步长为str=floor(a/n)的max-pooling。最后将所有的特征级联起来(固定维度kM)作为全连接层的输入。这样就保证了无论输入图像的尺寸,输入全连接层的输入都有同样的大小。

网络处理流程如下:

2.2 网络训练

单尺度训练,固定裁剪输入图像为224x224,最后一层卷积层输出特征图大小为13x13,设置三个级别的空间金字塔池化操作,SPP设置如下:

多尺度训练,采用两个尺度训练,180x180,224x224;180尺寸的图片是224尺寸的直接resize得到,而不是通过裁剪得到,所以两种尺度的区域只在分辨率上不同,而在内容/布局上没有区别。对于180x180的输入图像,最后一层卷积层输出特征图大小为10x10,通过SPP层,180x180的输入大小和224x224的输入大小得到相同维度的全连接层输入。

以上单/多尺度训练主要应用于训练阶段,在测试推理阶段,SPPNet可以接受任意大小的输入图像。

3、实验结果

3.1 分类

数据集采用ImageNet 2012,输入图片固定为224x224,Baseline model的结构如下

将网络最后一个池化层替换成SPP层后,对应的结果分别为:

可见多尺度训练对模型也有提升

ILSVRC2014分类竞赛的结果如下,SPP-Net取到第三名的结果,第一名是GoogLeNet,第二名VGG

3.2 检测

SPP-Net也可以用于目标检测。相较于R-CNN的2000次提取特征,SPP-Net只从整个图像中提取一次特征映射(可能在多个尺度上)。然后对特征图上的每个候选框应用空间金字塔池操作,该候选框对应的特征通过SPP操作将变成固定长度的向量,如下图所示。由于只应用一次卷积操作,所以我们的方法可以运行速度提高几个数量级。

实验设置:相对于R-CNN,SPP-Net还是用selective search提出区域候选框(测试阶段2000个),SPP-Net的backbone部分采用ZF-5,SPP层采用4级空间金字塔(1x1,2x2,3x3,6x6,共50个bins),这样每个候选框区域这就会生成12800维(256x50)的特征向量用于全连接层的输入。后面训练每个类别的SVM分类器也是用这个12800维的特征。训练SVM的样本设置方案和R-CNN一致,也采用负样本难度挖掘技术。

因为SPP-Net和R-CNN采用的方式差不多,只是SPP-Net将R-CNN的2000次提取特征的过程集中到一次完成,所以它们最终的mAP区别不大,但SPP-Net的速度比R-CNN的快非常多。

4、创新点和不足

  • 创新点:
    1、针对不同尺寸的输入可以得到相同维度的输出,实现了多尺度训练的可能,能让网络见到多尺度图片,增加鲁棒性。
    2、首次提出单尺度/多尺度交替训练。
    3、改进R-CNN的提取特征方式,合并2000次提取为一次提取,大大提升了速度。
  • 不足:
    1、还是没有改进候选框区域生成;
    2、特征提取、SVM分类、边框回归这三个阶段是独立的,需分别进行训练和推理,效率较低。
相关推荐
万米商云4 分钟前
企业物资集采平台解决方案:跨地域、多仓库、百部门——大型企业如何用一套系统管好百万级物资?
大数据·运维·人工智能
新加坡内哥谈技术7 分钟前
Google AI 刚刚开源 MCP 数据库工具箱,让 AI 代理安全高效地查询数据库
人工智能
慕婉03079 分钟前
深度学习概述
人工智能·深度学习
大模型真好玩10 分钟前
准确率飙升!GraphRAG如何利用知识图谱提升RAG答案质量(额外篇)——大规模文本数据下GraphRAG实战
人工智能·python·mcp
198911 分钟前
【零基础学AI】第30讲:生成对抗网络(GAN)实战 - 手写数字生成
人工智能·python·深度学习·神经网络·机器学习·生成对抗网络·近邻算法
6confim11 分钟前
AI原生软件工程师
人工智能·ai编程·cursor
阿里云大数据AI技术12 分钟前
Flink Forward Asia 2025 主旨演讲精彩回顾
大数据·人工智能·flink
i小溪13 分钟前
在使用 Docker 时,如果容器挂载的数据目录(如 `/var/moments`)位于数据盘,只要服务没有读写,数据盘是否就不会被唤醒?
人工智能·docker
程序员NEO15 分钟前
Spring AI 对话记忆大揭秘:服务器重启,聊天记录不再丢失!
人工智能·后端
柠檬味拥抱16 分钟前
基于YOLOv8的100种中药分类识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!
人工智能