Awesome
opencv_torchvision_transform
-
This is a "transforms" in torchvision based on opencv.
-
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 cvtransforms.py). The original methodRandomAffine
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 cvfunctional.py).
-
Support:
-
Compose
,ToTensor
,ToCVImage
,Normalize
-
Resize
,CenterCrop
,Pad
-
Lambda
(doesn't work well in multiprocess in Windows) -
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 python 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.
Good News:
You can install this package via pip install opencv-torchvision-transforms-yuzhiyang
(Old version only)
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 cvtransforms.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 fixing bugs!
Thanks HongChu who helps a lot.