Exemplo n.º 1
0
    def get_all_proposal(self, conv_feat, im_info):
        if self._proposal is not None:
            return self._proposal

        p = self.p
        rpn_stride = p.anchor_generate.stride
        anchor_scale = p.anchor_generate.scale
        anchor_ratio = p.anchor_generate.ratio
        pre_nms_top_n = p.proposal.pre_nms_top_n
        post_nms_top_n = p.proposal.post_nms_top_n
        nms_thr = p.proposal.nms_thr
        min_bbox_side = p.proposal.min_bbox_side

        cls_logit, bbox_delta = self.get_output(conv_feat)

        # TODO: remove this reshape hell
        cls_logit_reshape = X.reshape(
            cls_logit,
            shape=(0, -4, 2, -1, 0, 0),  # (N,C,H,W) -> (N,2,C/2,H,W)
            name="rpn_cls_logit_reshape_"
        )
        cls_score = X.softmax(
            cls_logit_reshape,
            axis=1,
            name='rpn_cls_score'
        )
        cls_logit_reshape = X.reshape(
            cls_score,
            shape=(0, -3, 0, 0),
            name='rpn_cls_score_reshape'
        )

        # TODO: ask all to add is_train filed in RPNParam
        proposal = X.proposal(
            cls_prob=cls_logit_reshape,
            bbox_pred=bbox_delta,
            im_info=im_info,
            name='proposal',
            feature_stride=rpn_stride,
            scales=tuple(anchor_scale),
            ratios=tuple(anchor_ratio),
            rpn_pre_nms_top_n=pre_nms_top_n,
            rpn_post_nms_top_n=post_nms_top_n,
            threshold=nms_thr,
            rpn_min_size=min_bbox_side,
            iou_loss=False,
            output_score=True
        )

        self._proposal = proposal

        return proposal
Exemplo n.º 2
0
    def get_all_proposal(self, conv_feat, im_info):
        if self._proposal is not None:
            return self._proposal

        p = self.p
        rpn_stride = p.anchor_generate.stride
        anchor_scale = p.anchor_generate.scale
        anchor_ratio = p.anchor_generate.ratio
        pre_nms_top_n = p.proposal.pre_nms_top_n
        post_nms_top_n = p.proposal.post_nms_top_n
        nms_thr = p.proposal.nms_thr
        min_bbox_side = p.proposal.min_bbox_side

        cls_logit, bbox_delta = self.get_output(conv_feat)

        # TODO: remove this reshape hell
        cls_logit_reshape = X.reshape(
            cls_logit,
            shape=(0, -4, 2, -1, 0, 0),  # (N,C,H,W) -> (N,2,C/2,H,W)
            name="rpn_cls_logit_reshape_")
        cls_score = X.softmax(cls_logit_reshape, axis=1, name='rpn_cls_score')
        cls_logit_reshape = X.reshape(cls_score,
                                      shape=(0, -3, 0, 0),
                                      name='rpn_cls_score_reshape')

        # TODO: ask all to add is_train filed in RPNParam
        proposal = X.proposal(cls_prob=cls_logit_reshape,
                              bbox_pred=bbox_delta,
                              im_info=im_info,
                              name='proposal',
                              feature_stride=rpn_stride,
                              scales=tuple(anchor_scale),
                              ratios=tuple(anchor_ratio),
                              rpn_pre_nms_top_n=pre_nms_top_n,
                              rpn_post_nms_top_n=post_nms_top_n,
                              threshold=nms_thr,
                              rpn_min_size=min_bbox_side,
                              iou_loss=False,
                              output_score=True)

        if p.use_symbolic_proposal is not None:
            batch_size = p.batch_image
            max_side = p.anchor_generate.max_side
            assert max_side is not None, "symbolic proposal requires max_side of image"

            from mxnext.tvm.proposal import proposal as Proposal
            proposal = Proposal(cls_prob=cls_logit_reshape,
                                bbox_pred=bbox_delta,
                                im_info=im_info,
                                name='proposal',
                                feature_stride=rpn_stride,
                                scales=tuple(anchor_scale),
                                ratios=tuple(anchor_ratio),
                                rpn_pre_nms_top_n=pre_nms_top_n,
                                rpn_post_nms_top_n=post_nms_top_n,
                                threshold=nms_thr,
                                batch_size=batch_size,
                                max_side=max_side,
                                output_score=True,
                                variant="simpledet")

        self._proposal = proposal

        return proposal