示例#1
0
def build_dynamic_backbone(cfg, input_shape: ShapeSpec):
    """
    Create a Dynamic Backbone from config.
    Args:
        cfg: a dl_lib CfgNode
    Returns:
        backbone (Backbone): backbone module, must be a subclass of :class:`Backbone`.
    """
    if input_shape is None:
        input_shape = ShapeSpec(channels=len(cfg.MODEL.PIXEL_MEAN))
    backbone = DynamicNetwork(init_channel=cfg.MODEL.BACKBONE.INIT_CHANNEL,
                              input_shape=input_shape,
                              cell_num_list=cfg.MODEL.BACKBONE.CELL_NUM_LIST,
                              layer_num=cfg.MODEL.BACKBONE.LAYER_NUM,
                              norm=cfg.MODEL.BACKBONE.NORM,
                              cal_flops=cfg.MODEL.CAL_FLOPS,
                              cell_type=cfg.MODEL.BACKBONE.CELL_TYPE,
                              max_stride=cfg.MODEL.BACKBONE.MAX_STRIDE,
                              sep_stem=cfg.MODEL.BACKBONE.SEPT_STEM,
                              using_gate=cfg.MODEL.GATE.GATE_ON,
                              small_gate=cfg.MODEL.GATE.SMALL_GATE,
                              gate_bias=cfg.MODEL.GATE.GATE_INIT_BIAS,
                              drop_prob=cfg.MODEL.BACKBONE.DROP_PROB)

    return backbone
    def __init__(self, cfg):
        super().__init__()

        self.device = torch.device(cfg.MODEL.DEVICE)
        self.cfg = cfg

        # fmt: off
        self.num_classes = cfg.MODEL.CENTERNET.NUM_CLASSES
        # Loss parameters:
        # Inference parameters:
        self.max_detections_per_image = cfg.TEST.DETECTIONS_PER_IMAGE
        # fmt: on
        self.backbone = cfg.build_backbone(
            cfg, input_shape=ShapeSpec(channels=len(cfg.MODEL.PIXEL_MEAN))
        )
        self.upsample = cfg.build_upsample_layers(cfg)
        self.head = cfg.build_head(cfg)
        # self.cls_head = cfg.build_cls_head(cfg)
        # self.wh_head = cfg.build_width_height_head(cfg)
        # self.reg_head = cfg.build_center_reg_head(cfg)

        # backbone_shape = self.backbone.output_shape()
        # feature_shapes = [backbone_shape[f] for f in self.in_features]

        self.mean, self.std = cfg.MODEL.PIXEL_MEAN, cfg.MODEL.PIXEL_STD
        pixel_mean = torch.Tensor(self.mean).to(self.device).view(3, 1, 1)
        pixel_std = torch.Tensor(self.std).to(self.device).view(3, 1, 1)
        self.normalizer = lambda x: (x - pixel_mean) / pixel_std
        self.to(self.device)
示例#3
0
 def output_shape(self):
     return {
         name: ShapeSpec(channels=self._out_feature_channels[name],
                         height=self._out_feature_resolution[name][0],
                         width=self._out_feature_resolution[name][0],
                         stride=self._out_feature_strides[name])
         for name in self._out_features
     }
示例#4
0
 def output_shape(self):
     """
     Returns:
         dict[str->ShapeSpec]
     """
     # this is a backward-compatible default
     return {
         name: ShapeSpec(channels=self._out_feature_channels[name],
                         stride=self._out_feature_strides[name])
         for name in self._out_features
     }
示例#5
0
def build_backbone(cfg, input_shape=None):
    """
    Build a backbone.

    Returns:
        an instance of :class:`Backbone`
    """
    if input_shape is None:
        input_shape = ShapeSpec(channels=len(cfg.MODEL.PIXEL_MEAN))

    backbone = ResnetBackbone(cfg, input_shape)
    assert isinstance(backbone, Backbone)
    return backbone
示例#6
0
def build_backbone(cfg, input_shape=None):
    """
    Build a backbone from `cfg.MODEL.BACKBONE.NAME`.

    Returns:
        an instance of :class:`Backbone`
    """
    if input_shape is None:
        input_shape = ShapeSpec(channels=len(cfg.MODEL.PIXEL_MEAN),
                                height=cfg.INPUT.FIX_SIZE_FOR_FLOPS[0],
                                width=cfg.INPUT.FIX_SIZE_FOR_FLOPS[1])

    backbone = build_dynamic_backbone(cfg, input_shape)
    assert isinstance(backbone, Backbone)
    return backbone
示例#7
0
 def output_shape(self):
     return {
         name: ShapeSpec(channels=self._out_feature_channels[name],
                         stride=self._out_feature_strides[name])
         for name in self._out_features
     }