Bounding box(bbox) 预测

在出现Bounding box预测之前,一般都是通过滑动窗口进行目标检测。本文前两部分介绍滑动窗口算法,这样是为了更好介绍 bounding box如何引出、为了解决什么问题而引出的。也可直接跳跃到第三部分看有关bounding box内容。

一、滑动窗口

简单来说,就是那个框,在图片上移动,就看框里面有没有你要找的目标
在这里插入图片描述
其实就是用不同大小的图,在图片上从左到右,从上到下的搜索,找到你要的目标,因为目标的大小不一样,所以很多时候你看你需要很多个尺寸的框来搜索,所以基本是属于穷举法啦,找到适合的为止。
在这里插入图片描述
然后将每个尺寸的框input到网络中进行预测。假设向滑动窗口卷积网络输入14x14x3的图片,经过卷积、池化、全连接(通过卷积层代替的全连接层,参考论文:Sermanet, Pierre, et al. “OverFeat: Integrated Recognition, Localization and
Detection using Convolutional Networks.” Eprint Arxiv (2013). )神经网络最后的输出层,即softmax单元的输出是1×1×4。
在这里插入图片描述
滑动窗口目标检测算法也有很明显的缺点,就是计算成本,因为你在图片中剪切出太多小方块,卷积网络要一个个地处理。如果你选用的步幅很大,显然会减少输入卷积网络的窗口个数,但是粗糙间隔尺寸可能会影响性能。反之,如果采用小粒度或小步幅,传递给卷积网络的小窗口会特别多,这意味着超高的计算成本。

二、卷积滑动窗口的实现

以前的滑动窗口是用很多不同大小的窗口进行移动(根据步长来移动),把图片分成很多个小窗口(如:14x14),然后把每个窗口喂给分类器,如果给出较高的分类分数,那就说明这个窗口有物体,那就留着,这样处理完所有窗口。
假设输入给卷积网络的图片大小是14x14x3,测试图片是16x16x3,现在给输入图片加一个黄色条块,在最初的算法中,会将蓝色区域输入给卷积网络,生成0或1分类。接着窗口步幅为2像素,向右滑动2像素变成绿色方框,然后输入卷积网络,生成0或1分类。下面以此类推,,,我们在这个 16×16×3 的小图像上滑动窗口,卷积网络运行了 4 次,于是输出了了 4 个标签。
在这里插入图片描述
结果发现,这4次操作很多计算是重复的。所以在执行滑动窗口卷积的卷积网络中,可以使卷积网络在这4次向前传播中共享很多权值。从一开始操作中,卷积网络运行同样的参数,使得相同的5x5X16的过滤器进行卷积操作,得到12x12x16的输出层,然后进行2x2x16的最大池化,输出6x6x16,,,最后经过1x1x4的卷积得到2x2x4的输出层。最终,输出层的蓝色方块是图像左上角14x14的输出,右上角的方块是图像右上14x14的输出。
所以该卷积操作的原理是我们不需要把输入图像分割成四个子集,分别执行前向传播,而是把它们作为一张图片输入给卷积网络进行计算,其中的公共区域可以共享很多计算,就像这里我们看到的这个 4 个 14×14 的方块一样。
以上就是在卷积层上应用滑动窗口算法的内容,它提高了整个算法的效率。不过这种算法仍然存在一个缺点,就是边界框的位置可能不够准确。因此提出了Bounding box预测。

三、Bounding Box预测(Bounding box predictions)

比如你的输入图像是 100×100 的,然后在图像上放一个网格。为了介绍起
来简单一些,我用 3×3 网格,实际实现时会用更精细的网格,可能是 19×19。
在这里插入图片描述
你需要这样定义训练标签,所以对于 9 个格子中的每一个指定一个标签
𝑦,𝑦是 8 维的,和你之前看到的一样,
𝑦 = [𝑝𝑐 𝑏𝑥 𝑏𝑦 𝑏ℎ 𝑏𝑤 𝑐1 𝑐2 𝑐3 ]T ,
𝑝𝑐等于 0 或 1 取决于这个绿色格子中是否有图像。然后𝑏𝑥、𝑏𝑦、𝑏ℎ和𝑏𝑤作用就是,如果那个格子里有对象,那么就给出边界框坐标。然后𝑐1、𝑐2和𝑐3就是你想要识别的三个类别,背景类别不算,所以你尝试在背景类别中识别行人、汽车和摩托车,那么𝑐1、𝑐2和𝑐3可以是行人、汽车和摩托车类别。这张图里有 9 个格
子,所以对于每个格子都有这么一个向量。
我们看看左上方格子,这里这个(编号 1),里面什么也没有,所以左上格子的标签向量
𝑦 = [0 ? ? ? ? ? ? ?]T
然后这个格子(编号 2)的输出标签𝑦也是一样,这个格子(编号 3),还有其他
什么也没有的格子都一样。
现在这个格子呢?讲的更具体一点,这张图有两个对象,YOLO 算法做的就是,取两个对象的中点,然后将这个对象分配给包含对象中点的格子。所以左边的汽车就分配到这个格子上(编号 4),然后右边车分配给这个格子(编号 6)。所以即使中心格子(编号 5)同时有两辆车的一部分,我们就假装中心格子没有任何我们感兴趣的对象,所以对于中心格子,分类标签𝑦和这个向量类似,和这个没有对象的向量类似,即
𝑦 = [0 ? ? ? ? ? ? ?]
而对于这个格子,这个用绿色框起来的格子(编号 4),目标标签就是这样的,
这里有一个对象,𝑝𝑐 = 1,然后你写出𝑏𝑥、𝑏𝑦、𝑏ℎ和𝑏𝑤来指定边界框位置,然后还有类别 1是行人,那么𝑐1 = 0,类别 2 是汽车,所以𝑐2 = 1,类别 3 是摩托车,则数值𝑐3=0,即
𝑦 =[1 𝑏𝑥 𝑏𝑦 𝑏ℎ 𝑏𝑤 0 1 0 ]T
右边这个格子(编号 6)也是类似的,因为这里确实有一个对象,它的向量应该是这个样子的,
𝑦 =[1 𝑏𝑥 𝑏𝑦 𝑏ℎ 𝑏𝑤 0 1 0 ]T
作为目标向量对应右边的格子。 所以对于这里 9 个格子中任何一个,你都会得到一个 8 维输出向量,因为这里是 3×3 的网格,所以有 9 个格子,总的输出尺寸是 3×3×8,所以目标输出是 3×3×8。因为这里有 3×3格子,然后对于每个格子,你都有一个 8 维向量𝑦,所以目标输出尺寸是 3×3×8。

参考:
Bounding Box是怎么得到的-RCNN目标检测初探

卷积神经网络

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值