我们知道对象检测框架喜欢faster-rcnn
和mask-rcnn
有一个roi pooling layer
or roi align layer
。但是为什么ssd和yolo框架没有这样的层呢?
1 回答
首先,我们应该了解其目的是什么roi pooling
:在特征图上从提议区域获得固定大小的特征表示。因为提议的区域可以有各种大小,如果我们直接使用这些区域的特征,它们的形状会不同,因此不能被馈送到全连接层进行预测。(我们已经知道全连接层需要固定的形状输入)。为了进一步阅读,这是一个很好的答案。
所以我们理解roi
池化本质上需要两个输入,建议区域和特征图。如下图所示 。
那么为什么不使用YOLO和SSDroi 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
检测器,是因为它们首先提出区域,然后执行分类和回归。
对于one-stage
检测器,它们直接从特征图执行预测(分类和回归)。他们的方法是将图像划分为网格,每个网格将预测具有置信度分数和类别分数的固定数量的边界框。原YOLO使用的是单尺度特征图,而SSD使用的是多尺度特征图,如下图所示
我们可以看到YOLO 和 SSD,最终输出是一个固定形状的张量。因此它们的行为与 类似的问题非常相似linear regression
,因此它们被称为one-stage
检测器。