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
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