深度学习目标检测(object detection)系列(二) SPP-Net

栏目: 编程工具 · 发布时间: 6年前

内容简介:原文:SPP-Net简介在上一篇R-CNN的文章中,详细介绍了R-CNN算法,同时也说明了R-CNN的致命缺陷,超长的训练时间(84h)和测试时间(47s),造成这个问题的主要原因就是重复性的卷积计算,在R-CNN中,输入到CNN网络中的图片是ss算法提取到的区域,每一张待检测图都会产生1000-2000个区域,这也就意味着卷积计算要重复1000-2000次,但是由于ss算法提取到的区域本身就有很多重叠,所以这种重复计算是非常没有必要的。

原文: quant.la/Article/Vie…

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就一样了。

如何共享卷积计算

深度学习目标检测(object detection)系列(二) SPP-Net

在上面这个图中,说明了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:

深度学习目标检测(object detection)系列(二) SPP-Net

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

SPP-Net训练与测试

深度学习目标检测(object detection)系列(二) 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性能评价

深度学习目标检测(object detection)系列(二) 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一样,并为改进。

由于是多阶段训练,过程中需要存储大量特征。


以上所述就是小编给大家介绍的《深度学习目标检测(object detection)系列(二) SPP-Net》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Learn Python the Hard Way

Learn Python the Hard Way

Zed A. Shaw / Addison-Wesley Professional / 2013-10-11 / USD 39.99

Master Python and become a programmer-even if you never thought you could! This breakthrough book and CD can help practically anyone get started in programming. It's called "The Hard Way," but it's re......一起来看看 《Learn Python the Hard Way》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具