前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Intensive Reading]目标检测(object detection)系列(二) SPP-Net:让卷积计算可以共享

[Intensive Reading]目标检测(object detection)系列(二) SPP-Net:让卷积计算可以共享

作者头像
chaibubble
发布2022-05-09 14:31:08
2300
发布2022-05-09 14:31:08
举报

目标检测系列:

目标检测(object detection)系列(一) R-CNN:CNN目标检测的开山之作

目标检测(object detection)系列(二) SPP-Net:让卷积计算可以共享

目标检测(object detection)系列(三) Fast R-CNN:end-to-end的愉快训练

目标检测(object detection)系列(四) Faster R-CNN:有RPN的Fast R-CNN

目标检测(object detection)系列(五) YOLO:目标检测的另一种打开方式

目标检测(object detection)系列(六) SSD:兼顾效率和准确性

目标检测(object detection)系列(七) R-FCN:位置敏感的Faster R-CNN

目标检测(object detection)系列(八) YOLOv2:更好,更快,更强

目标检测(object detection)系列(九) YOLOv3:取百家所长成一家之言

目标检测(object detection)系列(十) FPN:用特征金字塔引入多尺度

目标检测(object detection)系列(十一) RetinaNet:one-stage检测器巅峰之作

目标检测(object detection)系列(十二) CornerNet:anchor free的开端

目标检测(object detection)系列(十三) CenterNet:no Anchor,no NMS

目标检测(object detection)系列(十四)FCOS:用图像分割处理目标检测

目标检测扩展系列:

目标检测(object detection)扩展系列(一) Selective Search:选择性搜索算法

目标检测(object detection)扩展系列(二) OHEM:在线难例挖掘

目标检测(object detection)扩展系列(三) Faster R-CNN,YOLO,SSD,YOLOv2,YOLOv3在损失函数上的区别

简介: 让卷积计算可以共享

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

那么能不能只通过一次卷积计算就完成整张图像的特征提取工作呢?这就是SPP-Net的主要贡献,也是在R-CNN之后的很多网络结构的统一目标——如何共享卷积计算。SPP-Net的论文是《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》

SPP-Net原理

设计思路

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

  • 共享卷积计算
  • 空间金字塔池化 在SPP-Net中同样由这几个部分组成: 1.ss算法 2.CNN网络 3.SVM分类器 4.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一样,并没有改进。

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-11-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介: 让卷积计算可以共享
  • SPP-Net原理
    • 设计思路
      • 如何共享卷积计算
        • 坐标变换
          • 空间金字塔池化
            • SPP-Net训练与测试
            • SPP-Net性能评价
            • SPP-Net的问题
            相关产品与服务
            图像识别
            腾讯云图像识别基于深度学习等人工智能技术,提供车辆,物体及场景等检测和识别服务, 已上线产品子功能包含车辆识别,商品识别,宠物识别,文件封识别等,更多功能接口敬请期待。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档