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.
51 lines
1.4 KiB
51 lines
1.4 KiB
import collections |
|
|
|
from mmcv.utils import build_from_cfg |
|
|
|
from ..builder import PIPELINES |
|
|
|
|
|
@PIPELINES.register_module() |
|
class Compose(object): |
|
"""Compose multiple transforms sequentially. |
|
|
|
Args: |
|
transforms (Sequence[dict | callable]): Sequence of transform object or |
|
config dict to be composed. |
|
""" |
|
|
|
def __init__(self, transforms): |
|
assert isinstance(transforms, collections.abc.Sequence) |
|
self.transforms = [] |
|
for transform in transforms: |
|
if isinstance(transform, dict): |
|
transform = build_from_cfg(transform, PIPELINES) |
|
self.transforms.append(transform) |
|
elif callable(transform): |
|
self.transforms.append(transform) |
|
else: |
|
raise TypeError('transform must be callable or a dict') |
|
|
|
def __call__(self, data): |
|
"""Call function to apply transforms sequentially. |
|
|
|
Args: |
|
data (dict): A result dict contains the data to transform. |
|
|
|
Returns: |
|
dict: Transformed data. |
|
""" |
|
|
|
for t in self.transforms: |
|
data = t(data) |
|
if data is None: |
|
return None |
|
return data |
|
|
|
def __repr__(self): |
|
format_string = self.__class__.__name__ + '(' |
|
for t in self.transforms: |
|
format_string += '\n' |
|
format_string += f' {t}' |
|
format_string += '\n)' |
|
return format_string
|
|
|