Object Detection系列(二) SPP-Net

作者:张 旭

编辑:黄俊嘉

该内容是目标检测系列的第二篇,第一篇请移步:

Object Detection系列(一) R-CNN

SPP-Net简介

在上一篇R-CNN的文章中,详细介绍了R-CNN算法,同时也说明了R-CNN的致命缺陷,超长的训练时间(84h)和测试时间(47s),造成这个问题的主要原因就是重复性的卷积计算,在R-CNN中,输入到CNN网络中的图片是ss算法提取到的区域,每一张待检测图都会产生1000-2000个区域,这也就意味着卷积计算要重复1000-2000次,但是由于ss算法提取到的区域本身就有很多重叠,所以这种重复计算是非常没有必要的。 那么能不能只通过一次卷积计算就完成整张图像的特征提取工作呢?这就是SPP-Net的主要贡献,也是在R-CNN之后的很多网络结构的统一目标——如何共享卷积计算。

SPP-Net主要改进有下面两个:

1.共享卷积计算 2.空间金字塔池化

在SPP-Net中同样由这几个部分组成:

ss算法 CNN网络 SVM分类器 bounding box

ss算法的区域建议框同样在原图上生成,但是却在Conv5上提取,当然由于尺寸的变化,在Conv5层上提取时要经过尺度变换,这是它R-CNN最大的不同,也是SPP-Net能够大幅缩短时长的原因。因为它充分利用了卷积计算,也就是每张图片只卷积一次,但是这种改进带来了一个新的问题,由于ss算法生成的推荐框尺度是不一致的,所以在cov5上提取到的特征尺度也是不一致的,这样是没有办法做全尺寸卷积的(Alexnet)。

所以SPP-Net需要一种算法,这种算法能够把不一致的输入产生统一的输出,这就SPP,即空间金字塔池化,由它替换R-CNN中的pooling层,除此之外,它和R-CNN就一样了。

如何共享卷积计算

在上面这个图中,说明了R-CNN与SPP-Net的区别,R-CNN的卷积神经网络的输入是ss生成的建议区域(经过尺寸的归一化),而SPP-Net的中的卷积神经网络的输入是整幅图,经过卷积特征提取后,在Conv5上做建议区域的提取。这里有一个问题是一张图经过卷积之后图像的尺寸会发生变化,那么在原图上生成的ss区域,没有办法直接扣在Conv5层上,所以需要做一下坐标变换,使之适应Conv5层的宽高尺寸。

坐标变换

在CNN中特征的宽和高发生变化是因为步长的选取,当步长选择为2时,图像的宽高尺寸会变为原来的一半,那么对于在建议区域内的一个点(x,y),对应的Conv5层上的位置(x’,y’),应该满足如下关系: (x,y)=(S*x’,S*y’) 其中S为所有层的步长的乘积。 而又由于卷积过程中的padding问题,Conv5上的特征会更靠近图像的中心,个人认为这也是为什么左上角的点要做像素加1,右下角的点做像素减1: 左上:x’=(x/S)+1 右下:x’=(x/S)-1

空间金字塔池化

经过坐标变化之后,在原图上生成的区域建议框就可以映射在Conv5上,但是这样一来就有出现了新的问题,提取到的特征由于尺寸不一致,没办法送到全连接层,解决方法在上面就提到了—SPP:

上面这张图解释了SPP的原理,那么对于任意尺寸的输入,SPP可以将输入特征平均分为16份,4份和1份,并在每一份(Bin)上做Max pooling,同时特征的厚度保持不变,最后将这些特征串接作为全连接层的输入,如上图所示,假设特征的厚度为256,那么SPP后的特征长度(一维特征)就是(16+4+1)*256,于是维度就统一了。

SPP-Net训练与测试

SPP-Net的训练过程:

首先拿到在ImageNet预训练的AlexNet模型,用AlexNet计算Conv5层特征,根据ss生成的区域建议,从Conv5上提取到对应的SPP特征,用提取到的特征finetune全连接层(把AlexNet当做分类模型来训练)。 AlexNet训练好之后,用fc7层的特征训练SVM分类器,用SPP特征训练bounding box(这里和R-CNN一样了)。

SPP-Net的测试过程:

首先在一张图片上用训练好的AlexNet网络提取整张图片的Conv5和fc7层特征,同时在图片上用ss算法生成1000-2000个区域建议,将区域建议框坐标变换之后在Conv5上提取SPP特征,fc7层特征送入SVM做类别的预测,SPP特征送入bounding box做边界框的修正。

SPP-Net性能评价

上面这张图说明了下SPP-Net与R-CNN的性能对比,其中训练时间SPP-Net需要25个小时,而R-CNN需要84小时;单张图片的测试时间SPP-Net只需要2.3s,而R-NN需要47s,这就是共享卷积计算带来的速度上的提升,也是SPP-Net最重要的贡献;最后一个指标,SPP-Net的mAP相比R-CNN反而更低了,这是因为SPP-Net的结构无法fintune卷积层。

SPP-Net的问题

最后,通过上面的性能评价可以看到,SPP-Net在速度上有大幅的提升,其所提出的共享卷积计算的思想在后续的Fast R-CNN与Faster R-CNN中都在沿用,但是从SPP-Net的训练过程可以看出,它是无法finetune卷积层的,这个问题在Fast RCNN中通过多任务损失函数与Roi Pooling提出得以解决。

SPP-Net的训练过程依然是一个多阶段的训练,这一点和R-CNN一样,并为改进。 由于是多阶段训练,过程中需要存储大量特征。

原文发布于微信公众号 - 机器学习算法全栈工程师(Jeemy110)

原文发表时间:2017-12-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SIGAI学习与实践平台

人脸检测算法之 S3FD

原创声明:本文为 SIGAI 原创文章,仅供个人学习使用,未经允许,不得转载,不能用于商业目的。

1394
来自专栏深度学习与计算机视觉

Object Detection系列(二) SPP-Net

Object Detection系列(一) R-CNN Object Detection系列(二) SPP-Net Object Detectio...

2267
来自专栏专知

深度学习目标检测从入门到精通:第一篇

【导读】近日,CV-Tricks.com发布一篇文章,总结了近年来目标检测的各种方法。目标检测可谓是近年来计算机视觉领域热门的研究领域,也具有广阔的应用前景,如...

3966
来自专栏AI科技评论

开发 | 三年来,CNN在图像分割领域经历了怎样的技术变革?

AI科技评论按:卷积神经网络CNN是深度学习中最典型的算法之一,它可以将图片通过一系列的卷积、非线性、池(采样)、全连接层之后得到一个输出。这篇文章中,我们会一...

3506
来自专栏AI研习社

你必须知道的CNN在图像分割领域的技术变革史!

CNN 远远不止于处理分类问题。 这篇文章中,我们会一起来看在图像实例分割领域,CNN 的发展简史:它可被如何使用,以得到惊人的结果。 在 2012 年,Ale...

3227
来自专栏计算机视觉与深度学习基础

目标检测算法:RCNN、YOLO vs DPM

以下内容节选自我的研究报告。 1. 背景 目标检测(object detection)简单说就是框选出目标,并预测出类别的一个任务。它是一种基于目标几何和统计...

3266
来自专栏机器学习原理

深度学习——目标检测(2)Fast-RCNNFASTER RCNNRCNN网络的演进

前言:RCNN虽然能进行目标检测,但检测的精确度,尤其是速度方面太慢了,没秒才0.03帧。在RCNN基础上做了改进就有了FAST RCNN和FASTER RCN...

642
来自专栏目标检测和深度学习

综述:深度学习时代的目标检测算法

来源:https://zhuanlan.zhihu.com/p/33277354 目前目标检测领域的深度学习方法主要分为两类:two stage的目标检测算法;...

3785
来自专栏机器学习、深度学习

多尺度人脸检测--Face Detection through Scale-Friendly Deep Convolutional Networks

Face Detection through Scale-Friendly Deep Convolutional Networks http://shuoy...

2115
来自专栏新智元

Facebook 开源文本分类工具,不用深度学习也可以又快又准

【新智元导读】作为最大的社交网站,每天Facebook上,用户分享的信息超过几十亿。为了利用这些数据,Facebook使用了各种各样的工具来对文本进行分类。传统...

33514

扫描关注云+社区