Ejemplo n.º 1
0
    def _onnx_get_fine_grained_point_feats(self, x, rois, rel_roi_points):
        """Export the process of sampling fine grained feats to onnx.

        Args:
            x (tuple[Tensor]): Feature maps of all scale level.
            rois (Tensor): shape (num_rois, 5).
            rel_roi_points (Tensor): A tensor of shape (num_rois, num_points,
                2) that contains [0, 1] x [0, 1] normalized coordinates of the
                most uncertain points from the [mask_height, mask_width] grid.

        Returns:
            Tensor: The fine grained features for each points,
                has shape (num_rois, feats_channels, num_points).
        """
        batch_size = x[0].shape[0]
        num_rois = rois.shape[0]
        fine_grained_feats = []
        for idx in range(self.mask_roi_extractor.num_inputs):
            feats = x[idx]
            spatial_scale = 1. / float(
                self.mask_roi_extractor.featmap_strides[idx])

            rel_img_points = rel_roi_point_to_rel_img_point(
                rois, rel_roi_points, feats, spatial_scale)
            channels = feats.shape[1]
            num_points = rel_img_points.shape[1]
            rel_img_points = rel_img_points.reshape(batch_size, -1, num_points,
                                                    2)
            point_feats = point_sample(feats, rel_img_points)
            point_feats = point_feats.transpose(1, 2).reshape(
                num_rois, channels, num_points)
            fine_grained_feats.append(point_feats)
        return torch.cat(fine_grained_feats, dim=1)
 def _get_target_single(self, rois, rel_roi_points, pos_assigned_gt_inds,
                        gt_masks, cfg):
     """Get training target of MaskPointHead for each image."""
     num_pos = rois.size(0)
     num_points = cfg.num_points
     if num_pos > 0:
         gt_masks_th = (gt_masks.to_tensor(rois.dtype,
                                           rois.device).index_select(
                                               0, pos_assigned_gt_inds))
         gt_masks_th = gt_masks_th.unsqueeze(1)
         rel_img_points = rel_roi_point_to_rel_img_point(
             rois, rel_roi_points, gt_masks_th.shape[2:])
         point_targets = point_sample(gt_masks_th,
                                      rel_img_points).squeeze(1)
     else:
         point_targets = rois.new_zeros((0, num_points))
     return point_targets
Ejemplo n.º 3
0
    def _get_fine_grained_point_feats(self, x, rois, rel_roi_points,
                                      img_metas):
        """Sample fine grained feats from each level feature map and
        concatenate them together.

        Args:
            x (tuple[Tensor]): Feature maps of all scale level.
            rois (Tensor): shape (num_rois, 5).
            rel_roi_points (Tensor): A tensor of shape (num_rois, num_points,
                2) that contains [0, 1] x [0, 1] normalized coordinates of the
                most uncertain points from the [mask_height, mask_width] grid.
            img_metas (list[dict]): Image meta info.

        Returns:
            Tensor: The fine grained features for each points,
                has shape (num_rois, feats_channels, num_points).
        """
        num_imgs = len(img_metas)
        fine_grained_feats = []
        for idx in range(self.mask_roi_extractor.num_inputs):
            feats = x[idx]
            spatial_scale = 1. / float(
                self.mask_roi_extractor.featmap_strides[idx])
            point_feats = []
            for batch_ind in range(num_imgs):
                # unravel batch dim
                feat = feats[batch_ind].unsqueeze(0)
                inds = (rois[:, 0].long() == batch_ind)
                if inds.any():
                    rel_img_points = rel_roi_point_to_rel_img_point(
                        rois[inds], rel_roi_points[inds], feat.shape[2:],
                        spatial_scale).unsqueeze(0)
                    point_feat = point_sample(feat, rel_img_points)
                    point_feat = point_feat.squeeze(0).transpose(0, 1)
                    point_feats.append(point_feat)
            fine_grained_feats.append(torch.cat(point_feats, dim=0))
        return torch.cat(fine_grained_feats, dim=1)
Ejemplo n.º 4
0
 def _get_fine_grained_point_feats(self, x, rois, rel_roi_points,
                                   img_metas):
     """Sample fine grained feats from each level feature map and
     concatenate them together."""
     num_imgs = len(img_metas)
     fine_grained_feats = []
     for idx in range(self.mask_roi_extractor.num_inputs):
         feats = x[idx]
         spatial_scale = 1. / float(
             self.mask_roi_extractor.featmap_strides[idx])
         point_feats = []
         for batch_ind in range(num_imgs):
             # unravel batch dim
             feat = feats[batch_ind].unsqueeze(0)
             inds = (rois[:, 0].long() == batch_ind)
             if inds.any():
                 rel_img_points = rel_roi_point_to_rel_img_point(
                     rois[inds], rel_roi_points[inds], feat.shape[2:],
                     spatial_scale).unsqueeze(0)
                 point_feat = point_sample(feat, rel_img_points)
                 point_feat = point_feat.squeeze(0).transpose(0, 1)
                 point_feats.append(point_feat)
         fine_grained_feats.append(torch.cat(point_feats, dim=0))
     return torch.cat(fine_grained_feats, dim=1)