OpenMMLab Detection Toolbox and Benchmark
https://mmdetection.readthedocs.io/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.2 KiB
39 lines
1.2 KiB
from functools import partial |
|
|
|
import torch |
|
from six.moves import map, zip |
|
|
|
|
|
def multi_apply(func, *args, **kwargs): |
|
"""Apply function to a list of arguments. |
|
|
|
Note: |
|
This function applies the ``func`` to multiple inputs and |
|
map the multiple outputs of the ``func`` into different |
|
list. Each list contains the same type of outputs corresponding |
|
to different inputs. |
|
|
|
Args: |
|
func (Function): A function that will be applied to a list of |
|
arguments |
|
|
|
Returns: |
|
tuple(list): A tuple containing multiple list, each list contains \ |
|
a kind of returned results by the function |
|
""" |
|
pfunc = partial(func, **kwargs) if kwargs else func |
|
map_results = map(pfunc, *args) |
|
return tuple(map(list, zip(*map_results))) |
|
|
|
|
|
def unmap(data, count, inds, fill=0): |
|
"""Unmap a subset of item (data) back to the original set of items (of size |
|
count)""" |
|
if data.dim() == 1: |
|
ret = data.new_full((count, ), fill) |
|
ret[inds.type(torch.bool)] = data |
|
else: |
|
new_size = (count, ) + data.size()[1:] |
|
ret = data.new_full(new_size, fill) |
|
ret[inds.type(torch.bool), :] = data |
|
return ret
|
|
|