← Back to all transforms
FDA
Description
Fourier Domain Adaptation (FDA) for simple "style transfer" in the context of unsupervised domain adaptation (UDA). FDA manipulates the frequency components of images to reduce the domain gap between source and target datasets, effectively adapting images from one domain to closely resemble those from another without altering their semantic content. This transform is particularly beneficial in scenarios where the training (source) and testing (target) images come from different distributions, such as synthetic versus real images, or day versus night scenes. Unlike traditional domain adaptation methods that may require complex adversarial training, FDA achieves domain alignment by swapping low-frequency components of the Fourier transform between the source and target images. This technique has shown to improve the performance of models on the target domain, particularly for tasks like semantic segmentation, without additional training for domain invariance. The 'beta_limit' parameter controls the extent of frequency component swapping, with lower values preserving more of the original image's characteristics and higher values leading to more pronounced adaptation effects. It is recommended to use beta values less than 0.3 to avoid introducing artifacts. Args: reference_images (Sequence[Any]): Sequence of objects to be converted into images by `read_fn`. This typically involves paths to images that serve as target domain examples for adaptation. beta_limit (tuple[float, float] | float): Coefficient beta from the paper, controlling the swapping extent of frequency components. If one value is provided beta will be sampled from uniform distribution [0, beta_limit]. Values should be less than 0.5. read_fn (Callable): User-defined function for reading images. It takes an element from `reference_images` and returns a numpy array of image pixels. By default, it is expected to take a path to an image and return a numpy array. Targets: image Image types: uint8, float32 Reference: - https://github.com/YanchaoYang/FDA - https://openaccess.thecvf.com/content_CVPR_2020/papers/Yang_FDA_Fourier_Domain_Adaptation_for_Semantic_Segmentation_CVPR_2020_paper.pdf Example: >>> import numpy as np >>> import albumentations as A >>> image = np.random.randint(0, 256, [100, 100, 3], dtype=np.uint8) >>> target_image = np.random.randint(0, 256, [100, 100, 3], dtype=np.uint8) >>> aug = A.Compose([A.FDA([target_image], p=1, read_fn=lambda x: x)]) >>> result = aug(image=image) Note: FDA is a powerful tool for domain adaptation, particularly in unsupervised settings where annotated target domain samples are unavailable. It enables significant improvements in model generalization by aligning the low-level statistics of source and target images through a simple yet effective Fourier-based method.
Parameters
- reference_images: Sequence[Any] (default: null)
- beta_limit: int | tuple[int, int] | float | tuple[float, float] (default: (0, 0.1))
- read_fn: Callable[[typing.Any], ndarray] (default: '(path: str | Path) -> np.ndarray')
- p: float (default: 0.5)
Targets
- Image
Try it out
ⓘ
Original Image:
Reference Image:
Result:
Transform result will appear here