目标检测(二):OverFeat

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

1 分类

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

1.1 多尺度处理

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

1.2 特征提取

对于上述的每一个尺度的图像,将其输入至CNN中,经过前5层卷积层后可以得到带有空间信息的特征张量。在此作者主要提出了一种offset池化方法,用于Layer5特征的池化处理(也就是上表中的从Layer5 pre-pool到post-pool的过程)。接下来对其进行详细介绍。
结合上面的表进行理解,这里我们用scale2来进行举例。offset池化输入的空间大小为20 * 23(对应于Layer5 pre-pool),为了方便理解,这里先用一个维度进行解释,即其短边20。处理过程如下图所示:
offset池化
图中(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. ( b 1 ∗ , b 2 ∗ ) = a r g m i n b 1 ≠ b 2 ∈ B m a t c h _ s c o r e ( b 1 , b 2 ) (b^*_1,b^∗_2)=argmin_{b_1\ne b_2\in B}match\_score(b_1,b_2) (b1,b2)=argminb1̸=b2Bmatch_score(b1,b2)
    2. 假如 m a t c h _ s c o r e ( b 1 , b 2 ) > t match\_score(b_1,b_2)>t match_score(b1,b2)>t,则停止
    3. 否则, B ← B B←B BB\ { b 1 ∗ , b 2 ∗ } ∪ b o x _ m e r g e ( b 1 ∗ , b 2 ∗ ) \{b^*_1,b^∗_2\}∪box\_merge(b^*_1,b^∗_2) {b1,b2}box_merge(b1,b2)

其中 m a t c h _ s c o r e ( b 1 , b 2 ) match\_score(b_1,b_2) match_score(b1,b2)计算的是两个边界框中点的距离和交集区域的面积之和,当它大于某个阈值时算法停止; b o x _ m e r g e ( b 1 ∗ , b 2 ∗ ) 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 ↩︎

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值