| |
| import torch |
| from torch import Tensor |
|
|
| from ..assigners import AssignResult |
| from .sampling_result import SamplingResult |
|
|
|
|
| class MultiInstanceSamplingResult(SamplingResult): |
| """Bbox sampling result. Further encapsulation of SamplingResult. Three |
| attributes neg_assigned_gt_inds, neg_gt_labels, and neg_gt_bboxes have been |
| added for SamplingResult. |
| |
| Args: |
| pos_inds (Tensor): Indices of positive samples. |
| neg_inds (Tensor): Indices of negative samples. |
| priors (Tensor): The priors can be anchors or points, |
| or the bboxes predicted by the previous stage. |
| gt_and_ignore_bboxes (Tensor): Ground truth and ignore bboxes. |
| assign_result (:obj:`AssignResult`): Assigning results. |
| gt_flags (Tensor): The Ground truth flags. |
| avg_factor_with_neg (bool): If True, ``avg_factor`` equal to |
| the number of total priors; Otherwise, it is the number of |
| positive priors. Defaults to True. |
| """ |
|
|
| def __init__(self, |
| pos_inds: Tensor, |
| neg_inds: Tensor, |
| priors: Tensor, |
| gt_and_ignore_bboxes: Tensor, |
| assign_result: AssignResult, |
| gt_flags: Tensor, |
| avg_factor_with_neg: bool = True) -> None: |
| self.neg_assigned_gt_inds = assign_result.gt_inds[neg_inds] |
| self.neg_gt_labels = assign_result.labels[neg_inds] |
|
|
| if gt_and_ignore_bboxes.numel() == 0: |
| self.neg_gt_bboxes = torch.empty_like(gt_and_ignore_bboxes).view( |
| -1, 4) |
| else: |
| if len(gt_and_ignore_bboxes.shape) < 2: |
| gt_and_ignore_bboxes = gt_and_ignore_bboxes.view(-1, 4) |
| self.neg_gt_bboxes = gt_and_ignore_bboxes[ |
| self.neg_assigned_gt_inds.long(), :] |
|
|
| |
| assign_result.gt_inds += 1 |
| super().__init__( |
| pos_inds=pos_inds, |
| neg_inds=neg_inds, |
| priors=priors, |
| gt_bboxes=gt_and_ignore_bboxes, |
| assign_result=assign_result, |
| gt_flags=gt_flags, |
| avg_factor_with_neg=avg_factor_with_neg) |
|
|