## Default probability values¶

Compose, PadIfNeeded, CenterCrop, RandomCrop, Crop, Normalize, ToFloat, FromFloat, ToTensor, LongestMaxSize have default probability values equal to 1. All other are equal to 0.5

from albumentations import (
)
import numpy as np

def aug(p1):
return Compose([
RandomRotate90(p=p2),
OneOf([
GaussNoise(p=0.6),
], p3=0.2)
], p=p1)

image = np.ones((300, 300, 3), dtype=np.uint8)
whatever_data = "my name"
augmentation = aug(p=0.9)
augmented = augmentation(**data)


In the above augmentation pipeline, we have three types of probabilities. Combination of them is the primary factor that decides how often each of them will be applied.

1. p1: decides if this augmentation will be applied. The most common case is p1=1 means that we always apply the transformations from above. p1=0 will mean that the transformation block will be ignored.
2. p2: every augmentation has an option to be applied with some probability.
3. p3: decide if OneOf will be applied.

## OneOf Block¶

To decide which augmentation within OneOf block is used the following rule is applied.

1. We normalize all probabilities within a block to one. After this we pick augmentation based on the normalized probabilities. In the example above IAAAdditiveGaussianNoise has probability 0.9 and GaussNoise probability 0.6. After normalization, they become 0.6 and 0.4. Which means that we decide if we should use IAAAdditiveGaussianNoise with probability 0.6 and GaussNoise otherwise.
2. If we picked to consider GaussNoise the next step will be to decide if we should use it or not and p=0.6 will be used in this case.

## Example calculations¶

Thus, each augmentation in the example above will be applied with the probability:

1. RandomRotate90: p1 * p2
2. IAAAdditiveGaussianNoise: p1 * (0.9) / (0.9 + 0.6) * 0.9
3. GaussianNoise: p1 * (0.6) / (0.9 + 0.6) * 0.6