Skip to content

univariate

ImageOnlyAlbumentation

Bases: NumpyOp

Operators which apply to single images (as opposed to images + masks or images + bounding boxes).

This is a wrapper for functionality provided by the Albumentations library: https://github.com/albumentations-team/albumentations. A useful visualization tool for many of the possible effects it provides is available at https://albumentations-demo.herokuapp.com.

Parameters:

Name Type Description Default
func ImageOnlyTransform

An Albumentation function to be invoked.

required
inputs Union[str, Sequence[str]]

Key(s) from which to retrieve data from the data dictionary. If more than one key is provided, the func will be run in replay mode so that the exact same augmentation is applied to each value.

required
outputs Union[str, Sequence[str]]

Key(s) under which to write the outputs of this Op back to the data dictionary.

required
mode Union[None, str, Iterable[str]]

What mode(s) to execute this Op in. For example, "train", "eval", "test", or "infer". To execute regardless of mode, pass None. To execute in all modes except for a particular one, you can pass an argument like "!infer" or "!train".

None
ds_id Union[None, str, Iterable[str]]

What dataset id(s) to execute this Op in. To execute regardless of ds_id, pass None. To execute in all ds_ids except for a particular one, you can pass an argument like "!ds1".

None
Source code in fastestimator/fastestimator/op/numpyop/univariate/univariate.py
@traceable()
class ImageOnlyAlbumentation(NumpyOp):
    """Operators which apply to single images (as opposed to images + masks or images + bounding boxes).

    This is a wrapper for functionality provided by the Albumentations library:
    https://github.com/albumentations-team/albumentations. A useful visualization tool for many of the possible effects
    it provides is available at https://albumentations-demo.herokuapp.com.

    Args:
        func: An Albumentation function to be invoked.
        inputs: Key(s) from which to retrieve data from the data dictionary. If more than one key is provided, the
            `func` will be run in replay mode so that the exact same augmentation is applied to each value.
        outputs: Key(s) under which to write the outputs of this Op back to the data dictionary.
        mode: What mode(s) to execute this Op in. For example, "train", "eval", "test", or "infer". To execute
            regardless of mode, pass None. To execute in all modes except for a particular one, you can pass an argument
            like "!infer" or "!train".
        ds_id: What dataset id(s) to execute this Op in. To execute regardless of ds_id, pass None. To execute in all
            ds_ids except for a particular one, you can pass an argument like "!ds1".
    """
    def __init__(self,
                 func: ImageOnlyTransform,
                 inputs: Union[str, Sequence[str]],
                 outputs: Union[str, Sequence[str]],
                 mode: Union[None, str, Iterable[str]] = None,
                 ds_id: Union[None, str, Iterable[str]] = None):
        super().__init__(inputs=inputs, outputs=outputs, mode=mode, ds_id=ds_id)
        assert len(self.inputs) == len(self.outputs), "Input and Output lengths must match"
        self.func = Compose(transforms=[func])
        self.replay_func = ReplayCompose(transforms=[deepcopy(func)])
        self.in_list, self.out_list = True, True

    def forward(self, data: List[np.ndarray], state: Dict[str, Any]) -> List[np.ndarray]:
        results = [self.replay_func(image=data[0]) if len(data) > 1 else self.func(image=data[0])]
        for i in range(1, len(data)):
            results.append(self.replay_func.replay(results[0]['replay'], image=data[i]))
        return [result["image"] for result in results]