Skip to content

builder

data.transform.augmentation.compose.builder

logger module-attribute

logger = getLogger('SaigeResearch')

_types module-attribute

_types = {None: {(__name__): _type for _type in _types}, None: {(pascal_to_snake(__name__)): _type for _type in _types}}

BaseCompose

BaseCompose(transforms: Sequence[Union[BaseTransform, BaseCompose]], prob: float = 1.0)

여러 Data Transform들을 하나로 묶어서 관리해주는 Compose의 기본 interface를 정의합니다.

Source code in SaigeToolkit/data/transform/augmentation/compose/base_compose.py
def __init__(
    self, transforms: Sequence[Union[BaseTransform, BaseCompose]], prob: float = 1.0
) -> None:
    self.transforms = transforms
    self.prob = prob

transforms instance-attribute

transforms = transforms

prob instance-attribute

prob = prob

__call__

__call__(*args, force_apply: bool = False, **data) -> Dict
Source code in SaigeToolkit/data/transform/augmentation/compose/base_compose.py
def __call__(self, *args, force_apply: bool = False, **data) -> Dict:
    if args:
        raise KeyError("Data must be passed as named arguments, for example: aug(image=image)")

    if (random.random() < self.prob) or force_apply:
        data = self.apply(**data)

    return data

apply

apply(**data) -> Dict
Source code in SaigeToolkit/data/transform/augmentation/compose/base_compose.py
def apply(self, **data) -> Dict:
    raise NotImplementedError

__len__

__len__() -> int
Source code in SaigeToolkit/data/transform/augmentation/compose/base_compose.py
def __len__(self) -> int:
    return len(self.transforms)

__getitem__

__getitem__(index: int) -> Union[BaseTransform, BaseCompose]
Source code in SaigeToolkit/data/transform/augmentation/compose/base_compose.py
def __getitem__(self, index: int) -> Union[BaseTransform, BaseCompose]:
    return self.transforms[index]

add_targets

add_targets(additional_targets: Dict[str, str]) -> None
Source code in SaigeToolkit/data/transform/augmentation/compose/base_compose.py
def add_targets(self, additional_targets: Dict[str, str]) -> None:
    for t in self.transforms:
        t.add_targets(additional_targets)

Compose

Compose(transforms: Sequence[Union[BaseTransform, BaseCompose]], prob: float = 1.0)

Bases: BaseCompose

Source code in SaigeToolkit/data/transform/augmentation/compose/base_compose.py
def __init__(
    self, transforms: Sequence[Union[BaseTransform, BaseCompose]], prob: float = 1.0
) -> None:
    self.transforms = transforms
    self.prob = prob

apply

apply(**data) -> Dict
Source code in SaigeToolkit/data/transform/augmentation/compose/compose.py
def apply(self, **data) -> Dict:
    for t in self.transforms:
        data = t(**data)

    return data

SomeOf

SomeOf(k: int, replacement: bool = False, **kwargs)

Bases: BaseCompose

Source code in SaigeToolkit/data/transform/augmentation/compose/compose.py
def __init__(self, k: int, replacement: bool = False, **kwargs) -> None:
    super().__init__(**kwargs)
    self.k = k
    self.replacement = replacement

k instance-attribute

k = k

replacement instance-attribute

replacement = replacement

apply

apply(**data) -> Dict
Source code in SaigeToolkit/data/transform/augmentation/compose/compose.py
def apply(self, **data) -> Dict:
    if self.replacement:
        cur_transforms = random.choices(self.transforms, k=self.k)
    else:
        cur_transforms = random.sample(self.transforms, k=min(len(self.transforms), self.k))

    for t in cur_transforms:
        data = t(**data)

    return data

BaseTransform

BaseTransform(prob: float = 0.5)

Transform의 기본 interface를 정의합니다.

Source code in SaigeToolkit/data/transform/augmentation/base_transform.py
def __init__(self, prob: float = 0.5) -> None:
    self.prob = prob
    self._additional_targets = {}

prob instance-attribute

prob = prob

_additional_targets instance-attribute

_additional_targets = {}

data_for_params property

data_for_params: List[str]

targets property

targets: Dict[str, Callable]

__call__

__call__(*args, force_apply: bool = False, **data) -> Any
Source code in SaigeToolkit/data/transform/augmentation/base_transform.py
def __call__(self, *args, force_apply: bool = False, **data) -> Any:
    if args:
        raise KeyError("Data must be passed as named arguments, for example: aug(image=image)")

    if (random.random() < self.prob) or force_apply:
        params = {}
        if self.data_for_params:
            data_for_params = {k: data[k] for k in self.data_for_params}
            params_from_data = self.get_params_from_data(data_for_params)
            params.update(params_from_data)

        apply_param = self.get_apply_params()
        params.update(apply_param)
        data = self.apply_with_params(params, **data)

    return data

get_apply_params

get_apply_params() -> ParamsType
Source code in SaigeToolkit/data/transform/augmentation/base_transform.py
def get_apply_params(self) -> ParamsType:
    return {}

get_params_from_data

get_params_from_data(data_for_params: ParamsType) -> ParamsType

이 함수는 input으로부터 parameter들을 뽑을 때 사용됩니다.

Parameters:

  • data_for_params (ParamsType) –

    params을 추출할 데이터를 입력으로 갖습니다.

Returns:

  • ParamsType ( ParamsType ) –

    params로 쓰일 데이터를 반환합니다.

Source code in SaigeToolkit/data/transform/augmentation/base_transform.py
def get_params_from_data(self, data_for_params: ParamsType) -> ParamsType:
    """이 함수는 input으로부터 parameter들을 뽑을 때 사용됩니다.

    Args:
        data_for_params (ParamsType): params을 추출할 데이터를 입력으로 갖습니다.

    Returns:
        ParamsType: params로 쓰일 데이터를 반환합니다.
    """
    return {}

apply_with_params

apply_with_params(params: ParamsType, **data) -> ParamsType
Source code in SaigeToolkit/data/transform/augmentation/base_transform.py
def apply_with_params(self, params: ParamsType, **data) -> ParamsType:
    def _apply_with_params(
        method: callable, target: str, data: Union[Dict, List], params: ParamsType
    ):
        output = []

        if isinstance(data, List) and target == "image":
            is_multipage = True
        else:
            is_multipage = False
            data = [data]

        for d in data:
            output.append(method(d, **params))

        if not is_multipage:
            output = output[0]

        return output

    for target, target_method in self.targets.items():
        if target in data:
            data[target] = _apply_with_params(target_method, target, data[target], params)
    for additional_target, target in self._additional_targets.items():
        if additional_target in data:
            target_method = self.targets[target]
            data[additional_target] = _apply_with_params(
                target_method, target, data[additional_target], params
            )
    return data

add_targets

add_targets(additional_targets: Dict[str, str]) -> None
Source code in SaigeToolkit/data/transform/augmentation/base_transform.py
def add_targets(self, additional_targets: Dict[str, str]) -> None:
    self._additional_targets = additional_targets

build_compose

build_compose(_target_: str, transforms: List[BaseTransform], **config) -> BaseCompose
Source code in SaigeToolkit/data/transform/augmentation/compose/builder.py
def build_compose(_target_: str, transforms: List[BaseTransform], **config) -> BaseCompose:
    return _types[_target_](transforms=transforms, **config)