roi pooling详细讲解

学习回顾roi pooling

项目场景:上次被师兄问了一下roi pooling的作用,才发现虽然之前已经学历很久的faster rcnn ,还是有很多细节自己没有学习透

重修:

目标检测typical architecture 通常可以分为两个阶段:
(1)region proposal:给定一张输入image找出objects可能存在的所有位置。这一阶段的输出应该是一系列object可能位置的bounding box。这些通常称之为region proposals或者 regions of interest(ROI)。
(2)final classification:确定上一阶段的每个region proposal是否属于目标之一还是背景。
roi pooling详细讲解_第1张图片
通常,在建议阶段,我们必须产生很多感兴趣的区域。
但是为什么呢?因为如果在第一阶段(区域建议)中未检测到对象,那我们无法在第二阶段正确分类对象。这就是为什么对于region proposals来说,进行高度召回是非常重要的。这是通过生成大量建议(例如,每帧几千个)来实现的。在检测算法的第二阶段,大部分将被归类为背景。

但是这样又很容易会有很多问题出现:

  1. 产生大量的region proposals 会导致performance problems,很难达到实时目标检测。
  2. 在处理速度方面是suboptimal。(处理速度不理想)
  3. 无法做到end-to-end training。(在yolo中解决了)

这些问题则引出了roi pooling。
在论文中提到:Its purpose is to perform max pooling on inputs of nonuniform sizes to obtain fixed-size feature maps

Roi 池实际上做什么?

**对于输入列表中的每个感兴趣区域,它采用与其对应的输入要素映射的一部分,并缩放到某些预定义的大小(例如 7×7)。**缩放由以下时间完成:

将区域建议划分为大小相等的部分(其数量与输出的维度相同)
查找每个部分中的最大值
将这些最大值复制到输出缓冲区
结果是,从不同大小的矩形列表中,我们可以快速获取具有固定大小的相应要素贴图的列表。请注意,RoI 池输出的维度实际上并不取决于输入要素图的大小,也不取决于区域建议的大小。它完全取决于我们将建议划分为多个部分的数量。RoI 池的好处是什么?其中之一是处理速度。如果框架上有多个对象建议(通常有很多对象建议),我们仍然可以对所有这些方案使用相同的输入要素映射。由于在处理的早期阶段计算卷积非常昂贵,因此这种方法可以节省我们很多时间。

具体操作:

(1)根据输入image,将ROI映射到feature map对应位置;
(2)将映射后的区域划分为相同大小的sections(sections数量与输出的维度相同);
(3)对每个sections进行max pooling操作;
这样我们就可以从不同大小的方框得到固定大小的相应 的feature maps。(重点)
值得一提的是,输出的feature maps的大小取决于ROI和卷积feature maps大小。
ROI pooling 最大的好处就在于极大地提高了处理速度。(再三强调)

实例

(1)输入的固定大小的feature map roi pooling详细讲解_第2张图片
(2)region proposal 投影之后位置(左上角,右下角坐标):(0,3),(7,8)。
roi pooling详细讲解_第3张图片
我一开始不太理解region proposal 投影之后的位置坐标讲解 这一部分,然后去问了一下学长才搞明白了(我把坐标原点位置搞反了啊哈哈哈哈)roi pooling详细讲解_第4张图片

(3)将其划分为(22)个sections(因为输出大小为22),我们可以得到:

roi pooling详细讲解_第5张图片
(4)对每个section做max pooling,可以得到:

roi pooling详细讲解_第6张图片
如果有错误,欢迎提出哦。
roi层原文链接

你可能感兴趣的:(算法)