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