def simple_test(self, img, img_meta, proposals=None, rescale=False): x = self.extract_feat(img) proposal_list = self.simple_test_rpn( x, img_meta, self.test_cfg.rpn) if proposals is None else proposals img_shape = img_meta[0]['img_shape'] scale_factor = img_meta[0]['scale_factor'] rcnn_test_cfg = self.test_cfg.rcnn rois = bbox2roi(proposal_list) bbox_feats = self.bbox_roi_extractor( x[:len(self.bbox_roi_extractor.featmap_strides)], rois) if self.with_shared_head: bbox_feats = self.shared_head(bbox_feats) cls_score, bbox_pred = self.bbox_head(bbox_feats) bbox_label = cls_score.argmax(dim=1) rrois = self.bbox_head.regress_by_class_rbbox(roi2droi(rois), bbox_label, bbox_pred, img_meta[0]) rrois_enlarge = copy.deepcopy(rrois) rrois_enlarge[:, 3] = rrois_enlarge[:, 3] * self.rbbox_roi_extractor.w_enlarge rrois_enlarge[:, 4] = rrois_enlarge[:, 4] * self.rbbox_roi_extractor.h_enlarge rbbox_feats = self.rbbox_roi_extractor( x[:len(self.rbbox_roi_extractor.featmap_strides)], rrois_enlarge) if self.with_shared_head_rbbox: rbbox_feats = self.shared_head_rbbox(rbbox_feats) rcls_score, rbbox_pred = self.rbbox_head(rbbox_feats) rbbox_label = rcls_score.argmax(dim=1) rrois = self.rbbox_head.regress_by_class_rbbox(rrois, rbbox_label, rbbox_pred, img_meta[0]) rbbox_feats = self.vertex_roi_extractor( x[:len(self.vertex_roi_extractor.featmap_strides)], rrois) if self.with_shared_head_rbbox: rbbox_feats = self.shared_head_rbbox(rbbox_feats) rcls_score, rbbox_pred = self.vertex_head(rbbox_feats) det_rbboxes, det_labels = self.vertex_head.get_det_rbboxes( rrois, rcls_score, rbbox_pred, img_shape, scale_factor, rescale=rescale, cfg=rcnn_test_cfg) rbbox_results = dbbox2result(det_rbboxes, det_labels, self.rbbox_head.num_classes) return rbbox_results
def simple_test(self, img, img_meta, proposals=None, rescale=False): x = self.extract_feat(img) proposal_list = self.simple_test_rpn( x, img_meta, self.test_cfg.rpn) if proposals is None else proposals img_shape = img_meta[0]['img_shape'] scale_factor = img_meta[0]['scale_factor'] rcnn_test_cfg = self.test_cfg.rcnn rois = bbox2roi(proposal_list) bbox_feats = self.bbox_roi_extractor( x[:len(self.bbox_roi_extractor.featmap_strides)], rois) if self.with_shared_head: bbox_feats = self.shared_head(bbox_feats) cls_score, bbox_pred = self.bbox_head(bbox_feats) det_rbboxes, det_labels = self.bbox_head.get_det_bboxes( rois, cls_score, bbox_pred, img_shape, scale_factor, rescale=rescale, cfg=rcnn_test_cfg) rbbox_results = dbbox2result(det_rbboxes, det_labels, self.bbox_head.num_classes) return rbbox_results
def simple_test(self, img, img_meta, proposals=None, rescale=False): """Test without augmentation.""" assert self.with_bbox, "Bbox head must be implemented." assert self.with_rbbox, "RBox head must be implemented." x = self.extract_feat(img) proposal_list = self.simple_test_rpn( x, img_meta, self.test_cfg.rpn) if proposals is None else proposals det_bboxes, det_labels = self.simple_test_bboxes(x, img_meta, proposal_list, self.test_cfg.rcnn, rescale=rescale) # TODO: implement the dbbox2result # bbox_results = dbbox2result(det_bboxes, det_labels, # self.bbox_head.num_classes) bbox_results = bbox2result(det_bboxes, det_labels, self.bbox_head.num_classes) if not self.with_rbbox: return bbox_results else: det_rbboxes, det_rlabels = self.simple_test_rbboxes_v2( x, img_meta, det_bboxes, self.test_cfg.rrcnn, rescale=rescale) # import pdb # pdb.set_trace() rbbox_results = dbbox2result(det_rbboxes, det_rlabels, self.rbbox_head.num_classes) return bbox_results, rbbox_results
def simple_test(self, img, img_meta, rescale=False): # TODO: make if more flexible to add hbb and obb x = self.extract_feat(img) rbbox_outs = self.rbbox_head(x) rbbox_inputs = rbbox_outs + (img_meta, self.test_cfg, rescale) rbbox_list = self.rbbox_head.get_bboxes(*rbbox_inputs) rbbox_results = [ dbbox2result(det_rbboxes, det_labels, self.rbbox_head.num_classes) for det_rbboxes, det_labels in rbbox_list ] return rbbox_results[0]
def aug_test(self, imgs, img_metas, proposals=None, rescale=None): # raise NotImplementedError # import pdb; pdb.set_trace() proposal_list = self.aug_test_rpn_rotate( self.extract_feats(imgs), img_metas, self.test_cfg.rpn) rcnn_test_cfg = self.test_cfg.rcnn aug_rbboxes = [] aug_rscores = [] for x, img_meta in zip(self.extract_feats(imgs), img_metas): # only one image in the batch img_shape = img_meta[0]['img_shape'] scale_factor = img_meta[0]['scale_factor'] flip = img_meta[0]['flip'] proposals = bbox_mapping(proposal_list[0][:, :4], img_shape, scale_factor, flip) angle = img_meta[0]['angle'] # print('img shape: ', img_shape) if angle != 0: try: proposals = bbox_rotate_mapping(proposal_list[0][:, :4], img_shape, angle) except: import pdb; pdb.set_trace() rois = bbox2roi([proposals]) # recompute feature maps to save GPU memory roi_feats = self.bbox_roi_extractor( x[:len(self.bbox_roi_extractor.featmap_strides)], rois) if self.with_shared_head: roi_feats = self.shared_head(roi_feats) cls_score, bbox_pred = self.bbox_head(roi_feats) bbox_label = cls_score.argmax(dim=1) rrois = self.bbox_head.regress_by_class_rbbox(roi2droi(rois), bbox_label, bbox_pred, img_meta[0]) rrois_enlarge = copy.deepcopy(rrois) rrois_enlarge[:, 3] = rrois_enlarge[:, 3] * self.rbbox_roi_extractor.w_enlarge rrois_enlarge[:, 4] = rrois_enlarge[:, 4] * self.rbbox_roi_extractor.h_enlarge rbbox_feats = self.rbbox_roi_extractor( x[:len(self.rbbox_roi_extractor.featmap_strides)], rrois_enlarge) if self.with_shared_head_rbbox: rbbox_feats = self.shared_head_rbbox(rbbox_feats) rcls_score, rbbox_pred = self.rbbox_head(rbbox_feats) rbboxes, rscores = self.rbbox_head.get_det_rbboxes( rrois, rcls_score, rbbox_pred, img_shape, scale_factor, rescale=rescale, cfg=None) aug_rbboxes.append(rbboxes) aug_rscores.append(rscores) merged_rbboxes, merged_rscores = merge_rotate_aug_bboxes( aug_rbboxes, aug_rscores, img_metas, rcnn_test_cfg ) det_rbboxes, det_rlabels = multiclass_nms_rbbox( merged_rbboxes, merged_rscores, rcnn_test_cfg.score_thr, rcnn_test_cfg.nms, rcnn_test_cfg.max_per_img) if rescale: _det_rbboxes = det_rbboxes else: _det_rbboxes = det_rbboxes.clone() _det_rbboxes[:, :4] *= img_metas[0][0]['scale_factor'] rbbox_results = dbbox2result(_det_rbboxes, det_rlabels, self.rbbox_head.num_classes) return rbbox_results
def simple_test(self, img, img_meta, proposals=None, rescale=False): x = self.extract_feat(img) proposal_list = self.simple_test_rpn( x, img_meta, self.test_cfg.rpn) if proposals is None else proposals img_shape = img_meta[0]['img_shape'] scale_factor = img_meta[0]['scale_factor'] rcnn_test_cfg = self.test_cfg.rcnn ms_bbox_result = {} ms_segm_result = {} ms_scores = [] bbox_pred = [] rois = bbox2roi(proposal_list) for i in range(self.num_stages): bbox_roi_extractor = self.bbox_roi_extractor[i] bbox_head = self.bbox_head[i] bbox_feats = bbox_roi_extractor( x[:len(bbox_roi_extractor.featmap_strides)], rois) if self.with_shared_head: bbox_feats = self.shared_head(bbox_feats) cls_score, bbox_pred = bbox_head(bbox_feats) ms_scores.append(cls_score) # if self.test_cfg.keep_all_stages: # det_bboxes, det_labels = bbox_head.get_det_bboxes( # rois, # cls_score, # bbox_pred, # img_shape, # scale_factor, # rescale=rescale, # cfg=rcnn_test_cfg) # bbox_result = bbox2result(det_bboxes, det_labels, # bbox_head.num_classes) # ms_bbox_result['stage{}'.format(i)] = bbox_result if i < self.num_stages - 1: bbox_label = cls_score.argmax(dim=1) rois = bbox_head.regress_by_class(rois, bbox_label, bbox_pred, img_meta[0]) cls_score = sum(ms_scores) / self.num_stages bbox_head = self.bbox_head[-1] bbox_label = cls_score.argmax(dim=1) rrois = bbox_head.regress_by_class_rbbox(roi2droi(rois), bbox_label, bbox_pred, img_meta[0]) rrois_enlarge = copy.deepcopy(rrois) rrois_enlarge[:, 3] = rrois_enlarge[:, 3] * self.rbbox_roi_extractor.w_enlarge rrois_enlarge[:, 4] = rrois_enlarge[:, 4] * self.rbbox_roi_extractor.h_enlarge rbbox_feats = self.rbbox_roi_extractor( x[:len(self.rbbox_roi_extractor.featmap_strides)], rrois_enlarge) if self.with_shared_head_rbbox: rbbox_feats = self.shared_head_rbbox(rbbox_feats) rcls_score, rbbox_pred = self.rbbox_head(rbbox_feats) det_rbboxes, det_labels = self.rbbox_head.get_det_rbboxes( rrois, rcls_score, rbbox_pred, img_shape, scale_factor, rescale=rescale, cfg=rcnn_test_cfg) rbbox_results = dbbox2result(det_rbboxes, det_labels, self.rbbox_head.num_classes) return rbbox_results