Figure 1. Inference result of Faster (Base) R-CNN with Feature Pyramid Network.
嗨,我是计算机视觉研究员 Hiroto Honda¹[homepage] [twitter] 在这篇文章中,我想分享我对 Detectron 2 的了解——repo 结构、构建和训练网络、处理数据集等等。 2019 年,我使用Detectron 2所基于的 maskrcnn-benchmark 在 Open Images 竞赛 (ICCV 2019) 中获得了第 6 名。理解整个框架对我来说并不是一件容易的事,所以我希望这篇文章能帮助那些渴望了解系统细节并开发自己的模型的研究人员和工程师。
之前我们已经介绍了基础网络架构和代码库结构,特征金字塔网络, 数据加载器和Ground Truth实例 。本篇文章,我们将深入到最复杂但最重要的部分——Region Proposal Network(见图2)
Figure 2. Detailed architecture of Base-RCNN-FPN. Blue labels represent class names.
正如我们在第 2 部分中看到的,特征金字塔网络(Feature Pyramid Network)的输出特征图是:
output[“p2”].shape -> torch.Size([1, 256, 200, 320]) # stride = 4
output[“p3”].shape -> torch.Size([1, 256, 100, 160]) # stride = 8
output[“p4”].shape -> torch.Size([1, 256, 50, 80]) # stride = 16
output[“p5”].shape -> torch.Size([1, 256, 25, 40]) # stride = 32
output[“p6”].shape -> torch.Size([1, 256, 13, 20]) # stride = 64
这也是 RPN 的输入。每个张量大小代表(批次、通道、高度、宽度)。我们在本博客部分中使用上述特征维度。
同时我们也有从数据集里面加载的真实标签值(参考数据加载器和Ground Truth实例)
'gt_boxes': Boxes(tensor([
[100.58, 180.66, 214.78, 283.95],
[180.58, 162.66, 204.78, 180.95]
])),
'gt_classes': tensor([9, 9]) # not used in RPN!
对象检测器(object detectors)如何连接特征图和真实框位置和大小?让我们看看 RPN——RCNN 检测器的核心组件——是如何工作的。
图 3 显示了 RPN 的详细示意图。 RPN 由神经网络(RPN Head)和非神经网络功能组成。在 Detectron 2 中, RPN³ 中的所有计算都 GPU 上执行。
Figure 3. Schematic of Region Proposal Network. Blue and red labels represent class names and chapter titles respectively.
首先,让我们看看RPN head是如何出来来自于FPN的特征图。
1. RPN Head
RPN的神经网络部分很简单。它被称为 RPN Head,由 StandardRPNHHead 类中定义的三个卷积层组成。
1. conv (3×3, 256 -> 256 ch)
2. objectness logits conv (1×1, 256 -> 3 ch)
3. anchor deltas conv (1×1, 256 -> 3×4 ch)
五个级别(P2 到 P6)的特征图被一个接一个依次馈送到网络。 每一层的输出两个特征图,如下
1. pred_objectness_logits (B, 3 ch, Hi, Wi): probability map of object existence
2. pred_anchor_deltas (B, 3×4 ch, Hi, Wi): relative box shape to anchors
其中 B 代表批量(batch)大小,Hi 和 Wi 对应于 P2 到 P6 的特征图大小。
他们实际上是什么样子的?在图 4 中,每个级别的 objectness logits map 覆盖在输入图像上。您会发现在 P2 和 P3 处检测到小物体,在 P4 到 P6 处检测到较大的物体。这正是特征金字塔网络的目标。多尺度网络可以检测单尺度检测器无法发现的微小物体。
Figure 4. Visualization of objectness maps. Sigmoid function has been applied to the objectness_logits map. The objectness maps for 1:1 anchor are resized to the P2 feature map size and overlaid on the original image.
接下来,让我们接着会讲锚(anchor)的生成,这个是将真实框(ground truth box)与上面的两个输出特征图相关联的必要条件。
2.锚框生成Anchor Generation
要将对象图(objectness maps)和锚点增量图(anchor deltas map)关联到真实标签框,这就有必要使用称为“锚点(anchor)”的参考框。
未完待续。。。。