Data augmentation libarary for Deep Learning, which supports images, segmentation masks, labels and keypoints. Furthermore, SOLT is fast and has OpenCV in its backend. Full auto-generated docs and examples are available here: https://mipt-oulu.github.io/solt/.
- Support of Images, masks and keypoints for all the transforms (including multiple items at the time)
- Fast and PyTorch-integrated
- Convenient and flexible serialization API
- Excellent documentation
- Easy to extend
- 100% Code coverage
Images: Images + Keypoints: Medical Images + Binary Masks: Medical Images + Multiclass Masks
E.g. the last row is generated using the following transforms stream.
stream = solt.Stream([
slt.Rotate(angle_range=(-20, 20), p=1, padding='r'),
slt.Crop((256, 256)),
solt.SelectiveStream([
slt.GammaCorrection(gamma_range=0.5, p=1),
slt.Noise(gain_range=0.1, p=1),
slt.Blur()
], n=3)
])
img_aug, mask_aug = stream({'image': img, 'mask': mask})
If you want to visualize the results, you need to modify the execution of the transforms:
img_aug, mask_aug = stream({'image': img, 'mask': mask}, return_torch=False).data
The most recent version is available in pip:
pip install solt
You can fetch the most fresh changes from this repository:
pip install git+https://github.com/MIPT-Oulu/solt
We propose a fair benchmark based on the refactored version of the one proposed by albumentations team, but here, we also convert the results into a PyTorch tensor and do the ImageNet normalization. The following numbers support a realistic and honest comparison between the libraries (number of images per second, the higher - the better):
albumentations 0.4.3 |
torchvision (Pillow-SIMD backend) 0.5.0 |
augmentor 0.2.8 |
solt 0.1.9 |
|
---|---|---|---|---|
HorizontalFlip | 2253 | 2549 | 2561 | 3530 |
VerticalFlip | 2380 | 2557 | 2572 | 3740 |
RotateAny | 1479 | 1389 | 670 | 2070 |
Crop224 | 2566 | 1966 | 1981 | 4281 |
Crop128 | 5467 | 5738 | 5720 | 7186 |
Crop64 | 9285 | 9112 | 9049 | 10345 |
Crop32 | 11979 | 10550 | 10607 | 12348 |
Pad300 | 1642 | 109 | - | 2631 |
VHFlipRotateCrop | 1574 | 1334 | 616 | 1889 |
HFlipCrop | 2391 | 1943 | 1917 | 3572 |
Python and library versions: Python 3.7.0 (default, Oct 9 2018, 10:31:47) [GCC 7.3.0], numpy 1.18.1, pillow-simd 7.0.0.post3, opencv-python 4.2.0.32, scikit-image 0.16.2, scipy 1.4.1.
The code was run on AMD Threadripper 1900. Please find the details about the benchmark here.
Follow the guidelines described here.
Aleksei Tiulpin, Research Unit of Medical Imaging, Physics and Technology, University of Oulu, Finalnd.
If you use SOLT and cite it in your research, please, don't hesitate to sent an email to Aleksei Tiulpin. All the papers that use SOLT are listed here.
@misc{solt2019,
author = {Aleksei Tiulpin},
title = {SOLT: Streaming over Lightweight Transformations},
month = jul,
year = 2019,
version = {v0.1.9},
doi = {10.5281/zenodo.3702819},
url = {https://doi.org/10.5281/zenodo.3702819}
}