目标检测(二):OverFeat

  • 1 分类
    • 1.1 多尺度处理
    • 1.2 特征提取
    • 1.3 分类
  • 2 定位
    • 2.1 边界框预测
    • 2.2 预测边界框的组合
  • 3 检测

说实话这篇论文1看得有点头大,很多过程理解得不够透彻,论文里的插图也并没有看懂,只能结合其他资料大概了解了一下。
本篇论文中作者主要使用了一个共享的CNN来同时解决视觉任务中的分类、定位和检测三个问题。

1 分类

论文使用的CNN网络分为极速版和精准版两个版本,其中极速版的结构如下图所示。整个CNN可以看作一个全卷积网络,并可以作为两个部分看待:前五层为一个特征提取器,得到图像特征;后面的全连接层(实质也为卷积层)为分类层。

其具体的分类步骤为(以下为个人理解):

1.1 多尺度处理

对图像进行缩放,得到6个不同scale的图像,并对其进行翻转,得到6 * 2个输入。(AlexNet是裁剪四个角落和中间区域,并对图像做翻转得到5 * 2个输入图像,然后送进网络里面得到10个结果求平均来进行预测。这样的做法有两个问题,裁剪时可能忽略了图像的一些区域,以及10张图像有很多重叠部分导致了冗余计算。)6个scale如下表所示:

1.2 特征提取

对于上述的每一个尺度的图像,将其输入至CNN中,经过前5层卷积层后可以得到带有空间信息的特征张量。在此作者主要提出了一种offset池化方法,用于Layer5特征的池化处理(也就是上表中的从Layer5 pre-pool到post-pool的过程)。接下来对其进行详细介绍。
结合上面的表进行理解,这里我们用scale2来进行举例。offset池化输入的空间大小为20 * 23(对应于Layer5 pre-pool),为了方便理解,这里先用一个维度进行解释,即其短边20。处理过程如下图所示:

图中(a)是一维的输入,长度为20个单位。max-pooling核大小为3,且不重叠,这样正常情况下得到的是6个单位的输出(对应b中的Δ=0\Delta=0Δ=0的情况)。但是作者在此将核的初始位置进行了调整,分别向后调整一个单位(Δ=1\Delta=1Δ=1)和两个单位(Δ=2\Delta=2Δ=2),这样pooling后的输出就变为6 * 3了,其中3代表pooling核的3种初始位置。
拓展到二维空间中,核的初始位置有了3 * 3种情况,这样20 * 23的输入对应的输出也就变为了(6 * 7) * (3 * 3),对应于上表的Layer5 post-pool。

1.3 分类

上面说到特征提取最终得到的特征图大小为(6 * 7) * (3 * 3)。之后还需将此特征图作为输入提交给分类器(第一张图的6-8层)。
在此首先单独考虑一个6 * 7的输入,分类器的卷积核大小为5 * 5,通过卷积核在空间上步长为1的滑动过程,得到输出的大小为2 * 3。故最终分类的输出为(2 * 3)*(3 * 3) * C,其中C是类别总数,这一结果对应于上表中的Classifier map(Pre-reshape)。最后进行reshape得到三维输出6 * 9 * C,对应于上表中Classifier map size。
三维输出6 * 9 * C会进行最大化处理(相当于全局max-pooling),得到一个长度为C的预测结果。注意这只是一个scale的分类结果,还需对总共12个结果求均值得到最终的预测结果。

之前的一些方法是在原始图像上滑动窗口,将所有窗口部分图像输入到CNN进行处理。虽然OverFeat免去了这一步骤,只需输入一次图像,但是工作量都转移到了offset池化这一操作上,这一步骤也使需要处理的数据量大大增加,整个流程还是比较繁琐的,况且还需要输入12个不同scale的图像进行处理。
下图是其分类效果,其中coarse stride表示Δ=0\Delta=0Δ=0,fine stride表示Δ=0,1,2\Delta=0,1,2Δ=0,1,2。个人感觉offset处理效果并不是很明显,反而是accurate model提升效果比较显著,还有多个模型融合也帮助了大量提升。

2 定位

定位任务只需将之前的分类层改为回归网络即可,1-5层不用改动。

2.1 边界框预测

同样以scale2的Layer5池化后的特征为例,通过回归预测边界框的过程如下图所示。输入大小为(6 * 7) * (3 * 3),卷积核大小依然为5 * 5,最终的输出为(2 * 3) * (3 * 3),channel数目为4,代表边界框的位置信息。这还只是一个scale下生成的边界框预测,一幅图像最终会预测出(2 * 3) * (3 * 3) * (6 * 2)个边界框。

这里有一个问题:是对每个类别分别训练一个边界框回归器还是对所有类别训练一个统一的边界框回归器?作者在文中进行了讨论,发现只使用一个统一的回归器效果更好。推测原因是某些类别样本太少,导致这些类别的错误率偏高,后续可以对相似类别训练一个回归器来提升效果(如各种狗类训练一个回归器,各种猫类训练一个回归器)。

2.2 预测边界框的组合

得到这么多预测的边界框后,自然需要对其进行过滤,不同于经常使用的NMS操作,作者在这里使用了一种独特的方法Combining Predictions,借用别人的描述2,其步骤如下:

  1. 首先对于每个scale计算出前k个类别,对每个类别计算出所有的bouding box。
  2. 然后合并所有scale的bounding box得到集合B,重复以下步骤
    1. (b1∗,b2∗)=argminb1≠b2∈Bmatch_score(b1,b2)(b^*_1,b^∗_2)=argmin_{b_1\ne b_2\in B}match\_score(b_1,b_2)(b1∗​,b2∗​)=argminb1​̸​=b2​∈B​match_score(b1​,b2​)
    2. 假如match_score(b1,b2)>tmatch\_score(b_1,b_2)>tmatch_score(b1​,b2​)>t,则停止
    3. 否则, B←BB←BB←B\{b1∗,b2∗}∪box_merge(b1∗,b2∗)\{b^*_1,b^∗_2\}∪box\_merge(b^*_1,b^∗_2){b1∗​,b2∗​}∪box_merge(b1∗​,b2∗​)

其中match_score(b1,b2)match\_score(b_1,b_2)match_score(b1​,b2​)计算的是两个边界框中点的距离和交集区域的面积之和,当它大于某个阈值时算法停止;box_merge(b1∗,b2∗)box\_merge(b^∗_1,b^∗_2)box_merge(b1∗​,b2∗​)计算的是两个边界框坐标的平均值。
这是通过合并具有高置信度的边界框来得到最终预测。这种方法可以淘汰那些低置信度以及低连续(多个边界框相差很远)的类别,会更加鲁棒。

3 检测

检测这部分作者并没有做细致的介绍,只提到以下两点:

  1. 检测的训练和分类的训练差不多,只是以一种spatial的方式,一张图像的多个位置被同时训练。
  2. 和定位任务相比,最主要的是在一个图像中没有物体时,需要加入一个背景类别。

其实检测的目的也就是对物体进行定位和分类,所以上面两个部分的介绍基本可以沿用至此。


  1. Sermanet P, Eigen D, Zhang X, et al. OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks[J]. arXiv: Computer Vision and Pattern Recognition, 2013. ↩︎

  2. 论文笔记:OverFeat ↩︎

目标检测(二):OverFeat相关推荐

  1. 数字图像处理拓展题目——利用Matlab实现动态目标检测 二帧差法、ViBe法、高斯混合模型法,可应用于学生递东西行为检测

    1.二帧差法实现动态目标检测 先上效果图: 利用GUI界面显示出来效果图为: 实现流程 1.利用matlab中的VideoReader函数读取视频流. 2.帧差法:获得视频帧数,用for循环对图像每相 ...

  2. 目标检测(二)——SPPNet

    简介 SPPNet是出自2015发表在IEEE上的论文-<Spatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual Rec ...

  3. 深度篇——目标检测史(二) 细说 R-CNN 目标检测

    返回主目录 返回 目标检测史 目录 上一章:深度篇--目标检测史(一) 关于 古典 目标检测 下一章:深度篇--目标检测史(三)  细说 SPP-Net 目标检测 论文地址:<Rich feat ...

  4. 目标检测(四)——xml快速上手(可完整实现)

    文章目录 什么是xml xml解析讲解 一.标签介绍 filename标签 size标签 object标签 二.xml解析的API xml单个文件的解析 构建类别索引(category_id) 构建x ...

  5. 目标检测框架网络模型分析(二 双塔奇兵)

    前言 我很长一段时间一直都在做自动驾驶的物体检测性能调优,所以想总结整理一些小网络和检测框架的经验. 文章会分成三个部分: 第一部分将参照知乎@YaqiLYU 对小网络(经典网络)的分析并且结合的自己 ...

  6. 【CV】RetinaNet:使用二分类类别不平衡损失 Focal Loss 实现更好的目标检测

    论文名称:Focal Loss for Dense Object Detection 论文下载:https://arxiv.org/abs/1610.02357 论文年份:ICCV 2017 论文被引 ...

  7. 深度学习论文阅读目标检测篇(二):Fast R-CNN《Fast R-CNN》

    深度学习论文阅读目标检测篇(二):Fast R-CNN<Fast R-CNN> Abstract 摘要 1. Introduction 引言 1.1 RCNN and SPPnet 1.2 ...

  8. 3D目标检测深度学习方法之voxel-represetnation内容综述(二)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 前言 前面的一篇文章:3D目标检测深度学习方法中voxel-represetnation内容综述(一) ...

  9. 使用pytorch从零开始实现YOLO-V3目标检测算法 (二)

    原文:https://blog.csdn.net/u011520516/article/details/80212960 博客翻译 这是从零开始实现YOLO v3检测器的教程的第2部分.在上一节中,我 ...

  10. sklearn逻辑回归 极大似然 损失_收藏!攻克目标检测难点秘籍二,非极大值抑制与回归损失优化之路...

    点击上方"AI算法修炼营",选择加星标或"置顶" 标题以下,全是干货 前面的话 在前面的秘籍一中,我们主要关注了模型加速之轻量化网络,对目标检测模型的实时性难点 ...

最新文章

  1. 梯度下降背后的数学原理几何?
  2. Python匿名函数——lambda表达式
  3. 布局文件中出现的错误
  4. MVC 程序开发对汽车种类的联动查询。厂商,系列,型号
  5. shell中shift作用
  6. c++的set_unexpected不起作用
  7. aix-裸设备文件大小查看
  8. (四)伪分布式下jdk1.6+Hadoop1.2.1+HBase0.94+Eclipse下运行wordCount例子
  9. java练习题库_大一java题库练习题.doc
  10. 西门子200plc与英威腾GD变频器modbus通讯
  11. 基层干部计算机培训方案,基层管理干部培训方案
  12. 在VMware16虚拟机安装Ubuntu详细教程
  13. 计算机专业毕设论文题目大全(二)
  14. 网络API接口的使用
  15. POI加密Excel文件导出
  16. 一次HTTP(S)请求究竟需要多少流量?Wireshark抓包分析
  17. 设计测试用例的万能公式 + 6大具体方法 = 面试就像聊天?
  18. 鸿蒙遗石是什么意思,《走近》:一方歙砚,这是徽州千年遗石,也是一生匠心...
  19. team配置网络链路聚合
  20. Excel vba按照表头字段选择列复制表

热门文章

  1. oracle 常用调优方法
  2. 并联串联混合的电压和电流_电子电路基础,教你看懂电子电路,简单的串并联...
  3. 2021年秋季Python程序设计相关课程教材推荐
  4. goahead(嵌入式Web服务器)之asp、goform篇
  5. mysql maxscale mha_maxscale配合MHA搭建读写分离的高可用架构(基于GTID replication主从架构,mysql5.6)...
  6. agentweb回到首页_AgentWeb , 一个简洁易用的 Android Web 库
  7. 100道经典的c语言面试题
  8. Macbook Pro 安装 win10 单操作系统
  9. LCS算法和背包算法
  10. php中字符串分割函数是,php分割字符串的函数是什么