|
|
|
|
| import random
|
| import torch
|
|
|
| from .densepose_base import DensePoseBaseSampler
|
|
|
|
|
| class DensePoseUniformSampler(DensePoseBaseSampler):
|
| """
|
| Samples DensePose data from DensePose predictions.
|
| Samples for each class are drawn uniformly over all pixels estimated
|
| to belong to that class.
|
| """
|
|
|
| def __init__(self, count_per_class: int = 8):
|
| """
|
| Constructor
|
|
|
| Args:
|
| count_per_class (int): the sampler produces at most `count_per_class`
|
| samples for each category
|
| """
|
| super().__init__(count_per_class)
|
|
|
| def _produce_index_sample(self, values: torch.Tensor, count: int):
|
| """
|
| Produce a uniform sample of indices to select data
|
|
|
| Args:
|
| values (torch.Tensor): an array of size [n, k] that contains
|
| estimated values (U, V, confidences);
|
| n: number of channels (U, V, confidences)
|
| k: number of points labeled with part_id
|
| count (int): number of samples to produce, should be positive and <= k
|
|
|
| Return:
|
| list(int): indices of values (along axis 1) selected as a sample
|
| """
|
| k = values.shape[1]
|
| return random.sample(range(k), count)
|
|
|