Ejemplo n.º 1
0
    def __init__(self, cfg, in_channels):
        super(RPNModule, self).__init__()

        self.cfg = cfg.clone()

        anchor_generator = make_anchor_generator(cfg)

        rpn_head = registry.RPN_HEADS[cfg.MODEL.RPN.RPN_HEAD]
        head = rpn_head(cfg, in_channels,
                        anchor_generator.num_anchors_per_location()[0])

        rpn_box_coder = BoxCoder(weights=(1.0, 1.0, 1.0, 1.0))

        box_selector_train = make_rpn_postprocessor(cfg,
                                                    rpn_box_coder,
                                                    is_train=True)
        box_selector_test = make_rpn_postprocessor(cfg,
                                                   rpn_box_coder,
                                                   is_train=False)

        loss_evaluator = make_rpn_loss_evaluator(cfg, rpn_box_coder)

        self.anchor_generator = anchor_generator
        self.head = head
        self.box_selector_train = box_selector_train
        self.box_selector_test = box_selector_test
        self.loss_evaluator = loss_evaluator
        self.return_objectness = False
Ejemplo n.º 2
0
    def __init__(
        self,
        pre_nms_thresh,
        pre_nms_top_n,
        nms_thresh,
        fpn_post_nms_top_n,
        min_size,
        num_classes,
        box_coder=None,
    ):
        """
        Arguments:
            pre_nms_thresh (float)
            pre_nms_top_n (int)
            nms_thresh (float)
            fpn_post_nms_top_n (int)
            min_size (int)
            num_classes (int)
            box_coder (BoxCoder)
        """
        super(RetinaNetPostProcessor, self).__init__(pre_nms_thresh, 0,
                                                     nms_thresh, min_size)
        self.pre_nms_thresh = pre_nms_thresh
        self.pre_nms_top_n = pre_nms_top_n
        self.nms_thresh = nms_thresh
        self.fpn_post_nms_top_n = fpn_post_nms_top_n
        self.min_size = min_size
        self.num_classes = num_classes

        if box_coder is None:
            box_coder = BoxCoder(weights=(10., 10., 5., 5.))
        self.box_coder = box_coder
Ejemplo n.º 3
0
Archivo: loss.py Proyecto: amsword/FCOS
def make_roi_box_loss_evaluator(cfg):
    matcher = Matcher(
        cfg.MODEL.ROI_HEADS.FG_IOU_THRESHOLD,
        cfg.MODEL.ROI_HEADS.BG_IOU_THRESHOLD,
        allow_low_quality_matches=False,
    )

    bbox_reg_weights = cfg.MODEL.ROI_HEADS.BBOX_REG_WEIGHTS
    box_coder = BoxCoder(weights=bbox_reg_weights)
    attribute_on = cfg.MODEL.ATTRIBUTE_ON

    fg_bg_sampler = BalancedPositiveNegativeSampler(
        cfg.MODEL.ROI_HEADS.BATCH_SIZE_PER_IMAGE,
        cfg.MODEL.ROI_HEADS.POSITIVE_FRACTION)

    cls_agnostic_bbox_reg = cfg.MODEL.CLS_AGNOSTIC_BBOX_REG

    classification_loss_type = cfg.MODEL.ROI_BOX_HEAD.CLASSIFICATION_LOSS
    num_classes = cfg.MODEL.ROI_BOX_HEAD.NUM_CLASSES
    cfg = cfg
    loss_evaluator = FastRCNNLossComputation(
        matcher,
        fg_bg_sampler,
        box_coder,
        cls_agnostic_bbox_reg,
        classification_loss_type,
        num_classes,
        attribute_on=attribute_on,
        boundingbox_loss_type=cfg.MODEL.ROI_BOX_HEAD.BOUNDINGBOX_LOSS_TYPE,
        cfg=cfg,
    )

    return loss_evaluator
Ejemplo n.º 4
0
    def __init__(
        self,
        pre_nms_top_n,
        post_nms_top_n,
        nms_thresh,
        min_size,
        box_coder=None,
        fpn_post_nms_top_n=None,
    ):
        """
        Arguments:
            pre_nms_top_n (int)
            post_nms_top_n (int)
            nms_thresh (float)
            min_size (int)
            box_coder (BoxCoder)
            fpn_post_nms_top_n (int)
        """
        super(RPNPostProcessor, self).__init__()
        self.pre_nms_top_n = pre_nms_top_n
        self.post_nms_top_n = post_nms_top_n
        self.nms_thresh = nms_thresh
        self.min_size = min_size

        if box_coder is None:
            box_coder = BoxCoder(weights=(1.0, 1.0, 1.0, 1.0))
        self.box_coder = box_coder

        if fpn_post_nms_top_n is None:
            fpn_post_nms_top_n = post_nms_top_n
        self.fpn_post_nms_top_n = fpn_post_nms_top_n
Ejemplo n.º 5
0
def make_roi_box_post_processor(cfg):
    use_fpn = cfg.MODEL.ROI_HEADS.USE_FPN

    bbox_reg_weights = cfg.MODEL.ROI_HEADS.BBOX_REG_WEIGHTS
    box_coder = BoxCoder(weights=bbox_reg_weights)

    score_thresh = cfg.MODEL.ROI_HEADS.SCORE_THRESH
    nms_thresh = cfg.MODEL.ROI_HEADS.NMS
    detections_per_img = cfg.MODEL.ROI_HEADS.DETECTIONS_PER_IMG
    cls_agnostic_bbox_reg = cfg.MODEL.CLS_AGNOSTIC_BBOX_REG

    postprocessor = PostProcessor(score_thresh, nms_thresh, detections_per_img,
                                  box_coder, cls_agnostic_bbox_reg)
    return postprocessor
Ejemplo n.º 6
0
    def __init__(
        self,
        pre_nms_top_n,
        post_nms_top_n,
        nms_thresh,
        min_size,
        box_coder=None,
        fpn_post_nms_top_n=None,
        fpn_post_nms_conf_th=-1,
        fpn_post_nms_top_n_each_image_train=0,
        nms_policy=None,
    ):
        """
        Arguments:
            pre_nms_top_n (int)
            post_nms_top_n (int)
            nms_thresh (float)
            min_size (int)
            box_coder (BoxCoder)
            fpn_post_nms_top_n (int)
        """
        super(RPNPostProcessor, self).__init__()
        self.pre_nms_top_n = pre_nms_top_n
        self.post_nms_top_n = post_nms_top_n
        self.nms_thresh = nms_thresh
        self.min_size = min_size

        if box_coder is None:
            box_coder = BoxCoder(weights=(1.0, 1.0, 1.0, 1.0))
        self.box_coder = box_coder

        if fpn_post_nms_top_n is None:
            fpn_post_nms_top_n = post_nms_top_n
        self.fpn_post_nms_top_n = fpn_post_nms_top_n
        self.fpn_post_nms_conf_th = fpn_post_nms_conf_th
        self.fpn_post_nms_top_n_each_image_train = fpn_post_nms_top_n_each_image_train
        if nms_thresh != nms_policy.THRESH:
            if nms_policy.TYPE == 'nms':
                import logging
                logging.info('num_policy.THRESH changed from {} to {}'.format(
                    nms_policy.THRESH, nms_thresh))
                nms_policy.THRESH = nms_thresh

        from qd.layers.boxlist_nms import create_nms_func
        self.nms_func = create_nms_func(nms_policy,
                                        max_proposals=self.post_nms_top_n,
                                        score_field='objectness')
Ejemplo n.º 7
0
 def __init__(
     self,
     score_thresh=0.05,
     nms=0.5,
     detections_per_img=100,
     box_coder=None,
     cls_agnostic_bbox_reg=False,
     bbox_aug_enabled=False,
     classification_activate='softmax',
     cfg=None,
 ):
     """
     Arguments:
         score_thresh (float)
         nms (float)
         detections_per_img (int)
         box_coder (BoxCoder)
     """
     super(PostProcessor, self).__init__()
     self.score_thresh = score_thresh
     self.nms = nms
     self.detections_per_img = detections_per_img
     if box_coder is None:
         box_coder = BoxCoder(weights=(10., 10., 5., 5.))
     self.box_coder = box_coder
     self.cls_agnostic_bbox_reg = cls_agnostic_bbox_reg
     self.bbox_aug_enabled = bbox_aug_enabled
     self.nms_on_max_conf_agnostic = cfg.MODEL.ROI_HEADS.NMS_ON_MAX_CONF_AGNOSTIC
     if not self.cls_agnostic_bbox_reg:
         assert not self.nms_on_max_conf_agnostic
     self.classification_activate = classification_activate
     if classification_activate == 'softmax':
         self.logits_to_prob = lambda x: F.softmax(x, -1)
         self.cls_start_idx = 1
     elif classification_activate == 'sigmoid':
         self.logits_to_prob = torch.nn.Sigmoid()
         self.cls_start_idx = 0
     elif classification_activate == 'tree':
         from qd.layers import SoftMaxTreePrediction
         self.logits_to_prob = SoftMaxTreePrediction(
             tree=cfg.MODEL.ROI_BOX_HEAD.TREE_0_BKG,
             pred_thresh=self.score_thresh)
         self.cls_start_idx = 1
     else:
         raise NotImplementedError()
Ejemplo n.º 8
0
    def __init__(self, cfg, in_channels):
        super(FADRetinaNetModule, self).__init__()

        self.cfg = cfg.clone()

        anchor_generator = make_anchor_generator_retinanet(cfg)
        head = FADRetinaNetHead(cfg, in_channels)
        box_coder = BoxCoder(weights=(10., 10., 5., 5.))

        box_selector_test = make_retinanet_postprocessor(cfg,
                                                         box_coder,
                                                         is_train=False)

        loss_evaluator = make_retinanet_loss_evaluator(cfg, box_coder)

        self.anchor_generator = anchor_generator
        self.head = head
        self.box_selector_test = box_selector_test
        self.loss_evaluator = loss_evaluator
Ejemplo n.º 9
0
def make_roi_box_loss_evaluator(cfg):
    matcher = Matcher(
        cfg.MODEL.ROI_HEADS.FG_IOU_THRESHOLD,
        cfg.MODEL.ROI_HEADS.BG_IOU_THRESHOLD,
        allow_low_quality_matches=False,
    )

    bbox_reg_weights = cfg.MODEL.ROI_HEADS.BBOX_REG_WEIGHTS
    box_coder = BoxCoder(weights=bbox_reg_weights)

    fg_bg_sampler = BalancedPositiveNegativeSampler(
        cfg.MODEL.ROI_HEADS.BATCH_SIZE_PER_IMAGE,
        cfg.MODEL.ROI_HEADS.POSITIVE_FRACTION)

    cls_agnostic_bbox_reg = cfg.MODEL.CLS_AGNOSTIC_BBOX_REG

    loss_evaluator = FastRCNNLossComputation(matcher, fg_bg_sampler, box_coder,
                                             cls_agnostic_bbox_reg)

    return loss_evaluator
Ejemplo n.º 10
0
 def __init__(self,
              score_thresh=0.05,
              nms=0.5,
              detections_per_img=100,
              box_coder=None,
              cls_agnostic_bbox_reg=False):
     """
     Arguments:
         score_thresh (float)
         nms (float)
         detections_per_img (int)
         box_coder (BoxCoder)
     """
     super(PostProcessor, self).__init__()
     self.score_thresh = score_thresh
     self.nms = nms
     self.detections_per_img = detections_per_img
     if box_coder is None:
         box_coder = BoxCoder(weights=(10., 10., 5., 5.))
     self.box_coder = box_coder
     self.cls_agnostic_bbox_reg = cls_agnostic_bbox_reg
Ejemplo n.º 11
0
def make_roi_box_post_processor(cfg):
    use_fpn = cfg.MODEL.ROI_HEADS.USE_FPN

    bbox_reg_weights = cfg.MODEL.ROI_HEADS.BBOX_REG_WEIGHTS
    box_coder = BoxCoder(weights=bbox_reg_weights)

    score_thresh = cfg.MODEL.ROI_HEADS.SCORE_THRESH
    nms_thresh = cfg.MODEL.ROI_HEADS.NMS
    detections_per_img = cfg.MODEL.ROI_HEADS.DETECTIONS_PER_IMG
    cls_agnostic_bbox_reg = cfg.MODEL.CLS_AGNOSTIC_BBOX_REG
    bbox_aug_enabled = cfg.TEST.BBOX_AUG.ENABLED
    classification_activate = cfg.MODEL.ROI_BOX_HEAD.CLASSIFICATION_ACTIVATE

    postprocessor = PostProcessor(
        score_thresh,
        nms_thresh,
        detections_per_img,
        box_coder,
        cls_agnostic_bbox_reg,
        bbox_aug_enabled,
        classification_activate=classification_activate,
        cfg=cfg,
    )
    return postprocessor
Ejemplo n.º 12
0
    def test_box_decoder(self):
        """ Match unit test UtilsBoxesTest.TestBboxTransformRandom in
            caffe2/operators/generate_proposals_op_util_boxes_test.cc
        """
        box_coder = BoxCoder(weights=(1.0, 1.0, 1.0, 1.0))
        bbox = torch.from_numpy(
            np.array([
                175.62031555,
                20.91103172,
                253.352005,
                155.0145874,
                169.24636841,
                4.85241556,
                228.8605957,
                105.02092743,
                181.77426147,
                199.82876587,
                192.88427734,
                214.0255127,
                174.36262512,
                186.75761414,
                296.19091797,
                231.27906799,
                22.73153877,
                92.02596283,
                135.5695343,
                208.80291748,
            ]).astype(np.float32).reshape(-1, 4))

        deltas = torch.from_numpy(
            np.array([
                0.47861834,
                0.13992102,
                0.14961673,
                0.71495209,
                0.29915856,
                -0.35664671,
                0.89018666,
                0.70815367,
                -0.03852064,
                0.44466892,
                0.49492538,
                0.71409376,
                0.28052918,
                0.02184832,
                0.65289006,
                1.05060139,
                -0.38172557,
                -0.08533806,
                -0.60335309,
                0.79052375,
            ]).astype(np.float32).reshape(-1, 4))

        gt_bbox = (np.array([
            206.949539,
            -30.715202,
            297.387665,
            244.448486,
            143.871216,
            -83.342888,
            290.502289,
            121.053398,
            177.430283,
            198.666245,
            196.295273,
            228.703079,
            152.251892,
            145.431564,
            387.215454,
            274.594238,
            5.062420,
            11.040955,
            66.328903,
            269.686218,
        ]).astype(np.float32).reshape(-1, 4))

        results = box_coder.decode(deltas, bbox)

        np.testing.assert_allclose(results.detach().numpy(),
                                   gt_bbox,
                                   atol=1e-4)