为什么ssd和yolo没有roi池化层?
Why does ssd and yolo has no roi pooling layer?
我们知道像faster-rcnn
和mask-rcnn
这样的对象检测框架有一个roi pooling layer
或roi align layer
。但是为什么ssd和yolo框架没有这样的层呢?
首先,我们应该了解 roi pooling
的目的是什么:在特征图 上从提案区域获得固定大小的特征表示。因为建议的区域可能有各种大小,如果我们直接使用来自这些区域的特征,它们的形状会不同,因此不能馈送到全连接层进行预测。 (正如我们已经知道的,全连接层需要固定形状的输入)。要进一步阅读, 是一个很好的答案。
因此我们了解到 roi
池化本质上需要两个输入, 提议区域 和 特征图 。正如下面figure .
中清楚描述的那样
那么为什么 YOLO 和 SSD 不使用 roi pooling
?仅仅是因为他们不使用 区域提案 !它们的设计本质上不同于 R-CNN、Fast R-CNN、Faster R-CNN 等模型,事实上 YOLO 和 SSD 被归类为 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
检测器。
我们知道像faster-rcnn
和mask-rcnn
这样的对象检测框架有一个roi pooling layer
或roi align layer
。但是为什么ssd和yolo框架没有这样的层呢?
首先,我们应该了解 roi pooling
的目的是什么:在特征图 上从提案区域获得固定大小的特征表示。因为建议的区域可能有各种大小,如果我们直接使用来自这些区域的特征,它们的形状会不同,因此不能馈送到全连接层进行预测。 (正如我们已经知道的,全连接层需要固定形状的输入)。要进一步阅读,
因此我们了解到 roi
池化本质上需要两个输入, 提议区域 和 特征图 。正如下面figure
那么为什么 YOLO 和 SSD 不使用 roi pooling
?仅仅是因为他们不使用 区域提案 !它们的设计本质上不同于 R-CNN、Fast R-CNN、Faster R-CNN 等模型,事实上 YOLO 和 SSD 被归类为 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
检测器。