def merge_aug_results(self, aug_bboxes, aug_poses, aug_scores, aug_areas, aug_vis, img_metas): recovered_bboxes = [] recovered_poses = [] recovered_areas = [] for bboxes, poses, areas, img_info in zip(aug_bboxes, aug_poses, aug_areas, img_metas): img_shape = img_info[0]['img_shape'] scale_factor = img_info[0]['scale_factor'] flip = img_info[0]['flip'] # assert not flip bboxes = bbox_mapping_back(bboxes, img_shape, scale_factor, flip) if flip: kpt_name, kpt_flip_map = get_keypoints() poses = poses.view(poses.shape[0], -1, 2) poses = flip_keypoints(kpt_name, kpt_flip_map, poses, img_shape[1]) poses = poses.view(poses.shape[0], -1) poses = poses / scale_factor areas = areas / (scale_factor * scale_factor) recovered_bboxes.append(bboxes) recovered_poses.append(poses) recovered_areas.append(areas) bboxes = torch.cat(recovered_bboxes, dim=0) poses = torch.cat(recovered_poses, dim=0) areas = torch.cat(recovered_areas, dim=0) scores = torch.cat(aug_scores, dim=0) vis = torch.cat(aug_vis, dim=0) return bboxes, poses, areas, scores, vis
def merge_aug_results(self, aug_bboxes, aug_scores, img_metas): """Merge augmented detection bboxes and scores. Args: aug_bboxes (list[Tensor]): shape (n, 4*#class) aug_scores (list[Tensor] or None): shape (n, #class) img_shapes (list[Tensor]): shape (3, ). Returns: tuple: (bboxes, scores) """ recovered_bboxes = [] for bboxes, img_info in zip(aug_bboxes, img_metas): img_shape = img_info[0]['img_shape'] scale_factor = img_info[0]['scale_factor'] flip = img_info[0]['flip'] flip_direction = img_info[0]['flip_direction'] bboxes = bbox_mapping_back(bboxes, img_shape, scale_factor, flip, flip_direction) recovered_bboxes.append(bboxes) bboxes = torch.cat(recovered_bboxes, dim=0) if aug_scores is None: return bboxes else: scores = torch.cat(aug_scores, dim=0) return bboxes, scores
def merge_aug_results(self, aug_results, img_metas): """Merge augmented detection bboxes and score. Args: aug_results (list[list[Tensor]]): Det_bboxes and det_labels of each image. img_metas (list[list[dict]]): Meta information of each image, e.g., image size, scaling factor, etc. Returns: tuple: (bboxes, labels) """ recovered_bboxes, aug_labels = [], [] for bboxes_labels, img_info in zip(aug_results, img_metas): img_shape = img_info[0]['img_shape'] # using shape before padding scale_factor = img_info[0]['scale_factor'] flip = img_info[0]['flip'] bboxes, labels = bboxes_labels bboxes, scores = bboxes[:, :4], bboxes[:, -1:] bboxes = bbox_mapping_back(bboxes, img_shape, scale_factor, flip) recovered_bboxes.append(torch.cat([bboxes, scores], dim=-1)) aug_labels.append(labels) bboxes = torch.cat(recovered_bboxes, dim=0) labels = torch.cat(aug_labels) if bboxes.shape[0] > 0: out_bboxes, out_labels = self.bbox_head._bboxes_nms( bboxes, labels, self.bbox_head.test_cfg) else: out_bboxes, out_labels = bboxes, labels return out_bboxes, out_labels
def merge_aug_vote_results(self, aug_bboxes, aug_labels, img_metas): """Merge augmented detection bboxes and scores. Args: aug_bboxes (list[Tensor]): shape (n, 4*#class) aug_scores (list[Tensor] or None): shape (n, #class) img_shapes (list[Tensor]): shape (3, ). rcnn_test_cfg (dict): rcnn test config. Returns: tuple: (bboxes, scores) """ recovered_bboxes = [] for bboxes, img_info in zip(aug_bboxes, img_metas): img_shape = img_info[0]['img_shape'] scale_factor = img_info[0]['scale_factor'] flip = img_info[0]['flip'] bboxes[:, :4] = bbox_mapping_back(bboxes[:, :4], img_shape, scale_factor, flip) recovered_bboxes.append(bboxes) bboxes = torch.cat(recovered_bboxes, dim=0) if aug_labels is None: return bboxes else: labels = torch.cat(aug_labels, dim=0) return bboxes, labels
def merge_aug_results(self, aug_bboxes, aug_masks, aug_scores, img_metas): recovered_bboxes = [] recovered_masks = [] for bboxes, masks, img_info in zip(aug_bboxes, aug_masks, img_metas): img_shape = img_info[0]['img_shape'] scale_factor = img_info[0]['scale_factor'] flip = img_info[0]['flip'] bboxes = bbox_mapping_back(bboxes, img_shape, scale_factor, flip) masks = bbox_mapping_back(masks, img_shape, scale_factor, flip) recovered_bboxes.append(bboxes) recovered_masks.append(masks) bboxes = torch.cat(recovered_bboxes, dim=0) masks = torch.cat(recovered_masks, dim=0) if aug_scores is None: return bboxes, masks else: scores = torch.cat(aug_scores, dim=0) return bboxes, masks, scores
def merge_aug_results(self, aug_bboxes, aug_scores, aug_points, aug_masks, img_metas): """ Merge augmented detection bboxes and scores. Args: aug_bboxes (list[Tensor]): shape (n, 4*#class) aug_scores (list[Tensor] or None): shape (n, #class) aug_points (list[Tensor]): shape (n, pts_num*#class) img_shapes (list[Tensor]): shape (3, ). rcnn_test_cfg (dict): rcnn test config. Returns: tuple: (bboxes, scores) """ def points_mapping_back(points, img_shape, scale_factor, flip): flipped = points.clone() if flip: flipped[:, 0] = img_shape[1] - points[:, 0] flipped = flipped / scale_factor return flipped recovered_bboxes = [] recovered_points = [] for bboxes, points, img_info in zip(aug_bboxes, aug_points, img_metas): img_shape = img_info[0]['img_shape'] scale_factor = img_info[0]['scale_factor'] flip = img_info[0]['flip'] bboxes = bbox_mapping_back(bboxes, img_shape, scale_factor, flip) points = points_mapping_back(points, img_shape, scale_factor, flip) recovered_bboxes.append(bboxes) recovered_points.append(points) bboxes = torch.cat(recovered_bboxes, dim=0) points = torch.cat(recovered_points, dim=0) if aug_scores is None: return bboxes else: scores = torch.cat(aug_scores, dim=0) masks = torch.cat(aug_masks, dim=0) return bboxes, scores, points, masks