https://github.com/jbohnslav/opencv_transforms
OpenCV implementation of Torchvision's image augmentations
https://github.com/jbohnslav/opencv_transforms
Last synced: 5 days ago
JSON representation
OpenCV implementation of Torchvision's image augmentations
- Host: GitHub
- URL: https://github.com/jbohnslav/opencv_transforms
- Owner: jbohnslav
- License: mit
- Created: 2018-08-30T17:43:11.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2021-05-03T14:25:06.000Z (almost 4 years ago)
- Last Synced: 2025-01-16T01:20:15.511Z (about 1 month ago)
- Language: Python
- Homepage:
- Size: 1.7 MB
- Stars: 377
- Watchers: 13
- Forks: 46
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- Awesome-pytorch-list-CNVersion - opencv_transforms
- Awesome-pytorch-list - opencv_transforms
README
# opencv_transforms
This repository is intended as a faster drop-in replacement for [Pytorch's Torchvision augmentations](https://github.com/pytorch/vision/). This repo uses OpenCV for fast image augmentation for PyTorch computer vision pipelines. I wrote this code because the Pillow-based Torchvision transforms was starving my GPU due to slow image augmentation.
## Requirements
* A working installation of OpenCV. **Tested with OpenCV version 3.4.1, 4.1.0**
* Tested on Windows 10 and Ubuntu 18.04. There is evidence that OpenCV doesn't work well with multithreading on Linux / MacOS, for example `num_workers >0` in a pytorch `DataLoader`. I haven't run into this issue yet.## Installation
opencv_transforms is now a pip package! Simply use
* `pip install opencv_transforms`## Usage
**Breaking change! Please note the import syntax!**
* `from opencv_transforms import transforms`
* From here, almost everything should work exactly as the original `transforms`.
#### Example: Image resizing
```python
import numpy as np
image = np.random.randint(low=0, high=255, size=(1024, 2048, 3))
resize = transforms.Resize(size=(256,256))
image = resize(image)
```
Should be 1.5 to 10 times faster than PIL. See benchmarks## Performance
* Most transformations are between 1.5X and ~4X faster in OpenCV. Large image resizes are up to 10 times faster in OpenCV.
* To reproduce the following benchmarks, download the [Cityscapes dataset](https://www.cityscapes-dataset.com/).
* An example benchmarking file can be found in the notebook **bencharming_v2.ipynb** I wrapped the Cityscapes default directories with a HDF5 file for even faster reading.




The changes start to add up when you compose multiple transformations together.
## TODO
- [x] Initial commit with all currently implemented torchvision transforms
- [x] Cityscapes benchmarks
- [ ] Make the `resample` flag on `RandomRotation`, `RandomAffine` actually do something
- [ ] Speed up augmentation in saturation and hue. Currently, fastest way is to convert to a PIL image, perform same augmentation as Torchvision, then convert back to np.ndarray