-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added text on how probabilities are calculated (#36)
- Loading branch information
Showing
4 changed files
with
78 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
About probabilities. | ||
===================== | ||
|
||
.. toctree:: | ||
:maxdepth: 2 | ||
|
||
|
||
Default probability values | ||
****************************** | ||
|
||
**Compose**, **PadIfNeeded**, **CenterCrop**, **RandomCrop**, **Normalize**, **ToFloat**, **FromFloat**, **ToTensor** have default | ||
probability values equal to **1**. All other are equal to **0.5** | ||
|
||
|
||
.. code-block:: python | ||
from albumentations import ( | ||
RandomRotate90, IAAAdditiveGaussianNoise, GaussNoise | ||
) | ||
import numpy as np | ||
def aug(p1): | ||
return Compose([ | ||
RandomRotate90(p=p2), | ||
OneOf([ | ||
IAAAdditiveGaussianNoise(p=0.9), | ||
GaussNoise(p=0.6), | ||
], p3=0.2) | ||
], p=p1) | ||
image = np.ones((300, 300, 3), dtype=np.uint8) | ||
mask = np.ones((300, 300), dtype=np.uint8) | ||
whatever_data = "my name" | ||
augmentation = aug(p=0.9) | ||
data = {"image": image, "mask": mask, "whatever_data": whatever_data, "additional": "hello"} | ||
augmented = augmentation(**data) | ||
image, mask, whatever_data, additional = augmented["image"], augmented["mask"], augmented["whatever_data"], augmented["additional"] | ||
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` |