为什么ssd和yolo没有roi池化层?

Why does ssd and yolo has no roi pooling layer?

我们知道像faster-rcnnmask-rcnn这样的对象检测框架有一个roi pooling layerroi align layer。但是为什么ssd和yolo框架没有这样的层呢?

首先,我们应该了解 roi pooling 的目的是什么:在特征图 上从提案区域获得固定大小的特征表示。因为建议的区域可能有各种大小,如果我们直接使用来自这些区域的特征,它们的形状会不同,因此不能馈送到全连接层进行预测。 (正如我们已经知道的,全连接层需要固定形状的输入)。要进一步阅读, 是一个很好的答案。

因此我们了解到 roi 池化本质上需要两个输入, 提议区域 特征图 。正如下面figure .

中清楚描述的那样

那么为什么 YOLOSSD 不使用 roi pooling?仅仅是因为他们不使用 区域提案 !它们的设计本质上不同于 R-CNN、Fast R-CNN、Faster R-CNN 等模型,事实上 YOLOSSD 被归类为 one-stage 检测器,而 r-cnn 系列(R-CNN、Fast R-CNN、Faster R-CNN)被称为 two-stage 个检测器,因为它们首先提出区域,然后执行 class 化和回归。

对于 one-stage 检测器,它们直接从特征图 执行预测(class化和回归)。他们的方法是将图像划分为网格,每个网格将预测固定数量的具有置信度分数和 class 分数的边界框。原来的YOLO使用的是单尺度特征图,而SSD使用的是多尺度特征图,如下图fig

我们可以看到 YOLO 和 SSD ,最终输出是一个固定形状的张量。因此它们的行为与 linear regression 等问题非常相似,因此它们被称为 one-stage 检测器。