【Detectron2】简介:基本网络架构和Repo结构
【深度研究Detectron2】,基于文档Digging into Detectron2。本篇主要对Detectron2 进行总体结构的概述。
1. Detectron 2是什么?
Detectron 2 ²是Facebook AI Research的下一代开源对象检测系统。通过该repo,您可以使用和训练各种最先进的模型,用于检测任务,如边界框检测、实例和语义分割以及人的关键点检测。
你可以按照版本库的说明——安装和入门——来运行演示,但如果你想走得更远,而不仅仅是运行示例命令,那就需要了解版本库的工作原理。
2. Faster R-CNN FPN架构
作为一个例子,我选择了以特征金字塔网络(Feature Pyramid Network³)(BASE-RCNN-FPN)为基础的 Faster R-CNN,它是基本的边界盒探测器,可扩展到Mask R-CNN。以FPN为骨架的Faster R-CNN探测器是一种多尺度的探测器,实现了从微小物体到大物体的高精度检测,使自己成为事实上的标准探测器(见图1)。
BASE R-CNN FPN的结构如下:
上面的示意图显示了网络的元架构。你可以看到里面有三块,分别是。
- Backbone Network:从输入图像中提取不同比例的特征图。Base-RCNN-FPN的输出特征称为P2(1/4比例)、P3(1/8)、P4(1/16)、P5(1/32)和P6(1/64)。请注意,非FPN('C4')架构的输出特征只是从1/16比例。
- Region Proposal Network:从多尺度特征中检测对象区域。可获得1000个带置信度分数的Proposal Box(提案框)(默认情况下)。
- Box head:将使用提案框的特征图裁剪和扭曲成多个固定大小的特征,并通过全连接层获得微调的箱体位置和分类结果。最后利用非最大抑制(NMS)过滤掉最大的100个盒子(默认)。框头是ROI Heads的子类之一。例如Mask R-CNN有更多的ROI头,如Mask Head。
每个块里面都有什么?图3显示了详细的架构。
后面的文章将详细对其中的每一个部分进行讲解。
3. Detectron2 repo的结构
以下是 detectron 2 的目录树(在detectron2目录下⁶)。请看‘modeling’目录即可。Base-RCNN-FPN架构是由该目录下的几个类构建的。
Meta Architecture 元架构
GeneralizedRCNN (meta_arch/rcnn.py),它有:
Backbone Network
FPN (backbone/fpn.py)
└ ResNet (backbone/resnet.py)Region Proposal Network。
RPN(proposal_generator/rpn.py)
├标准RPNHead(proposal_generator/rpn.py)
└RPNOutput(proposal_generator/rpn_outputs.py)**ROI Heads(Box Head)**。
标准ROIHeads (roi_heads/roi_heads.py)
├ROIPooler (poolers.py)
├FastRCNNConvFCHead (roi_heads/box_heads.py)
├FastRCNNNOutputLayers (roi_heads/fast_rcnn.py)
└FastRCNNNOutputs (roi_heads/fast_rcnn.py)
每个区块都有一个主类和子类。
现在请看图3上的蓝色标签。你可以看到哪个类对应于pipeline的哪个部分。在这里,我添加了没有类名的架构图。