Detectron2 Faster R-CNN 代码流程
- Trainer.train()
-
-
- engine/train_loop.py
- modeling/meta_arch/rcnn.py
- modeling/proposal_generator/rpn.py
- modeling/proposal_generator/proposal_utils.py
- modeling/proposal_generator/rpn.py
- modeling/meta_arch/rcnn.py
- modeling/roi_heads/roi_heads.py
- modeling/roi_heads/fast_rcnn.py
- modeling/roi_heads/roi_heads.py
- modeling/roi_heads/fast_rcnn.py
- modeling/meta_arch/rcnn.py
- engine/train_loop.py
-
self.build_model(cfg)
modeling/meta_arch/build.py
meta_arch = cfg.MODEL.META_ARCHITECTURE #注册机制建立网络
META_ARCH_REGISTRY.get(meta_arch)(cfg)
modeling/meta_arch/rcnn.py
self.backbone = build_backbone(cfg) #建立backbone
self._SHAPE_ = self.backbone.output_shape() #获取backbone最后输出通道数
self.proposal_generator = build_proposal_generator(cfg, self._SHAPE_) #建立RPN
self.roi_heads = build_roi_heads(cfg, self._SHAPE_) #建立ROIHead
build_backbone(cfg)
建立res50网络结构,最后输出层为res4 block,输出通道数为1024
build_proposal_generator(cfg, self.SHAPE)
包含RPNHead和AnchorGenerator:
RPN(
(rpn_head): StandardRPNHead(
(conv): Conv2d(
1024, 1024, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)
(activation): ReLU()
)
(objectness_logits): Conv2d(1024, 15, kernel_size=(1, 1), stride=(1, 1))
(anchor_deltas): Conv2d(1024, 60, kernel_size=(1, 1), stride=(1, 1))
)
(anchor_generator): DefaultAnchorGenerator(
(cell_anchors): BufferList()
)
)
build_roi_heads(cfg, self.SHAPE)
Res5ROIHeads(
(pooler): ROIPooler(
(level_poolers): ModuleList(
(0): ROIAlign(output_size=(7, 7), spatial_scale=0.0625, sampling_ratio=0, aligned=True)
)
)
(res5): Sequential(
(0): BottleneckBlock(
(shortcut): Conv2d(
1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False
(norm): FrozenBatchNorm2d(num_features=2048, eps=1e-05)
)
(conv1): Conv2d(
1024, 512, kernel_size=(1, 1), stride=(2, 2), bias=False
(norm): FrozenBatchNorm2d(num_features=512, eps=1e-05)
)
(conv2): Conv2d(
512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False
(norm): FrozenBatchNorm2d(num_features=512, eps=1e-05)
)
(conv3): Conv2d(
512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False
(norm): FrozenBatchNorm2d(num_features=2048, eps=1e-05)
)
)
(1): BottleneckBlock(
(conv1): Conv2d(
2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False
(norm): FrozenBatchNorm2d(<