Exemplo n.º 1
0
    def get_prediction(self, conv_feat, im_info, proposal):
        p = self.p
        bbox_mean = p.regress_target.mean
        bbox_std = p.regress_target.std
        batch_image = p.batch_image
        num_class = p.num_class
        class_agnostic = p.regress_target.class_agnostic
        num_reg_class = 2 if class_agnostic else num_class

        cls_logit, bbox_delta = self.get_output(conv_feat)

        bbox_delta = X.reshape(bbox_delta,
                               shape=(batch_image, -1, 4 * num_reg_class),
                               name='bbox_delta_reshape')

        bbox_xyxy = X.decode_bbox(rois=proposal,
                                  bbox_pred=bbox_delta,
                                  im_info=im_info,
                                  name='decode_bbox',
                                  bbox_mean=bbox_mean,
                                  bbox_std=bbox_std,
                                  class_agnostic=class_agnostic)
        cls_score = X.softmax(cls_logit, axis=-1, name='bbox_cls_score')
        cls_score = X.reshape(cls_score,
                              shape=(batch_image, -1, num_class),
                              name='bbox_cls_score_reshape')
        return cls_score, bbox_xyxy
Exemplo n.º 2
0
    def get_all_proposal_with_filter(self, conv_feat, im_info, valid_ranges):
        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'
        )
        proposal = mx.sym.contrib.Proposal_v2(
            cls_prob=cls_logit_reshape,
            bbox_pred=bbox_delta,
            im_info=im_info,
            valid_ranges=valid_ranges,
            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,
            filter_scales=True,
            output_score=True
        )

        self._proposal = proposal

        return proposal
Exemplo n.º 3
0
    def get_prediction(self,
                       rois,
                       roi_feat,
                       fpn_conv_feats,
                       im_info,
                       play=False):
        '''
        Args:
            rois: [batch_image, image_roi, 4]
            roi_feat: [batch_image * image_roi, 256, roi_size, roi_size]
            fpn_conv_feats: dict of FPN features, each [batch_image, in_channels, fh, fw]
            im_info: ...
        Returns:
            cls_score: [batch_image, image_roi, num_class]
            bbox_xyxy: [batch_image, image_roi, num_class*4]
        '''
        p = self.p
        assert not p.regress_target.class_agnostic

        bbox_mean = p.regress_target.mean
        bbox_std = p.regress_target.std
        batch_image = p.batch_image
        num_class = p.num_class
        class_agnostic = p.regress_target.class_agnostic
        num_reg_class = num_class

        assert batch_image == 1

        cls_logit, bbox_delta, tsd_cls_logit, tsd_bbox_delta, delta_c, delta_r = self.get_output(
            fpn_conv_feats, roi_feat, rois, is_train=False)
        rois_r = self._get_delta_r_box(delta_r, rois)

        bbox_xyxy = X.decode_bbox(
            rois=rois_r,
            bbox_pred=X.reshape(tsd_bbox_delta,
                                (batch_image, -1, 4 * num_reg_class)),
            im_info=im_info,
            name='decode_bbox',
            bbox_mean=bbox_mean,
            bbox_std=bbox_std,
            class_agnostic=False)
        cls_score = X.reshape(X.softmax(tsd_cls_logit,
                                        axis=-1,
                                        name='bbox_cls_score'),
                              shape=(batch_image, -1, num_class),
                              name='bbox_cls_score_reshape')

        if not play:
            return cls_score, bbox_xyxy
        else:
            return cls_score, bbox_xyxy, rois, rois_r
Exemplo n.º 4
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)

        self._proposal = proposal

        return proposal
Exemplo n.º 5
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
Exemplo n.º 6
0
    def get_prediction(self, conv_feat, im_info, proposal):
        p = self.p
        bbox_mean = p.regress_target.mean
        bbox_std = p.regress_target.std
        batch_image = p.batch_image
        num_class = p.num_class
        class_agnostic = p.regress_target.class_agnostic
        num_reg_class = 2 if class_agnostic else num_class

        cls_logit, bbox_delta, cls_sec_logit, bbox_sec_delta, roi_feature = self.get_output(
            conv_feat)
        if p.refine_mode:
            refine_cls_logit, refine_bbox_delta, refine_cls_sec_logit, refine_bbox_sec_delta = \
                                self.get_refine_output(roi_feature, cls_logit, bbox_delta, cls_sec_logit, bbox_sec_delta)
            bbox_delta = refine_bbox_delta
            bbox_sec_delta = refine_bbox_sec_delta
            cls_logit = refine_cls_logit
            cls_sec_logit = refine_cls_sec_logit

        bbox_delta = X.reshape(bbox_delta,
                               shape=(batch_image, -1, 4 * num_reg_class),
                               name='bbox_delta_reshape')
        bbox_sec_delta = X.reshape(
            bbox_sec_delta,
            shape=(batch_image, -1, 4 * num_reg_class),
            name='bbox_sec_delta_reshape',
        )

        bbox_xyxy = X.decode_bbox(rois=proposal,
                                  bbox_pred=bbox_delta,
                                  im_info=im_info,
                                  name='decode_bbox',
                                  bbox_mean=bbox_mean,
                                  bbox_std=bbox_std,
                                  class_agnostic=class_agnostic)

        bbox_sec_xyxy = X.decode_bbox(
            rois=proposal,
            bbox_pred=bbox_sec_delta,
            im_info=im_info,
            name='decode_bbox_sec',
            bbox_mean=bbox_mean,
            bbox_std=bbox_std,
            class_agnostic=class_agnostic,
        )

        # NOTE: avoid name conflicts(potential bug from X.decode_bbox?)
        bbox_sec_xyxy = bbox_sec_xyxy * mx.sym.ones_like(bbox_sec_xyxy)

        cls_score = X.softmax(cls_logit, axis=-1, name='bbox_cls_score')
        cls_score = X.reshape(cls_score,
                              shape=(batch_image, -1, num_class),
                              name='bbox_cls_score_reshape')
        cls_sec_score = X.softmax(
            cls_sec_logit,
            axis=-1,
            name='bbox_cls_sec_score',
        )
        cls_sec_score = X.reshape(cls_sec_score,
                                  shape=(batch_image, -1, num_class),
                                  name='bbox_cls_sec_score_reshape')
        return cls_score, bbox_xyxy, cls_sec_score, bbox_sec_xyxy