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