an opencv based rewriting of the "transforms" in torchvision package
Project description
opencv_torchvision_transform
-
This is an opencv based rewriting of the "transforms" in torchvision package.
-
All functions depend on only cv2 and pytorch (PIL-free). As the article says, cv2 is three times faster than PIL.
-
Most functions in transforms are reimplemented, except that:
-
ToPILImage(opencv we used :)), Scale and RandomSizedCrop which are deprecated in the original version are ignored.
-
The affine transform in the original one only has 5 degrees of freedom, I implement an Affine transform with 6 degress of freedom called RandomAffine6(can be found in master/cvtorchvision/cvtransforms/cvtransforms.py). The original method(RandomAffine) is still retained and reimplemented with opencv.
-
My rotate function is clockwise, however the original one is anticlockwise.
-
Adding some new methods which can be found in Support(the bolded ones).
-
All the outputs of the opencv version are almost the same as the original one's(test in master/cvtorchvision/cvtransforms/cvfunctional.py: if name == 'main':...).
-
Support:
-
Compose, ToTensor, ToCVImage, Normalize
-
Resize, CenterCrop, Pad
-
Lambda(doesn't work well in multiprocess in wihdows)
-
RandomApply, RandomOrder, RandomChoice, RandomCrop,
-
RandomHorizontalFlip, RandomVerticalFlip, RandomResizedCrop,
-
FiveCrop, TenCrop, LinearTransformation, ColorJitter,
-
RandomRotation, RandomAffine, RandomAffine6, RandomPerspective
-
RandomGaussianNoise", "RandomPoissonNoise", "RandomSPNoise
-
Grayscale, RandomGrayscale
How to use:
-
git clone https://github.com/YU-Zhiyang/opencv_torchvision_transforms.git .
-
Add cvtorchvision to your python path.
-
Add "from cvtorchvision import cvtransforms" in your pythion file.
-
You can use all functions as the original version, for example:
transform = cvtransforms.Compose([ cvtransforms.RandomAffine(degrees=10, translate=(0.1, 0.1), scale=(0.9, 1.1), shear=(-10, 0), cvtransforms.Resize(size=(350, 350), interpolation='BILINEAR'), cvtransforms.ToTensor(), cvtransforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]), ])
more details can be found in the examples of official tutorials.
Attention:
The multiprocessing used in dataloader of pytorch is not friendly with lambda function in Windows as lambda function can't be pickled (https://docs.python.org/3/library/pickle.html#what-can-be-pickled-and-unpickled).
So the Lambda in cvtransform.py may not work properly in Windows.
Requirements
python >=3.5.2
numpy >=1.10 ('@' operator may not be overloaded before this version)
pytorch>=0.4.1
torchvision>=0.2.1
opencv-contrib-python-3.4.2 (test with this version, but any version of opencv3 is ok, I think)
Postscript
Welcome to point out and help to fix bugs !
Watches, Stars and Forks won鈥檛 be rejected :smile:
Thanks HongChu who helps a lot.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Hashes for opencv_torchvision_transforms_yuzhiyang-0.0.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 67f793d6d9d368b9a4c6fbfff517ad86c59606174caeafb3f2695b0406ba4e20 |
|
MD5 | 4730125e2049eebafd310ce93d8be18d |
|
BLAKE2b-256 | c2cc49c7801943377c2c20c2bcb538ce53fd684cfcc270e749b24b89cd931cfc |