深度学习-推荐系统-CV-NLP程序员

基于Oppencv的Pytorch图像变换Torchvision

2019-03-22  本文已影响55人  bdb87b292706

原始的torchvision工具包只支持PIL图像的各种增强操作,模型转换为caffe后,输入图像存在偏差,导致模型性能下降。为了消除该问题,需要实现一套基于opencv的图像增强工具,本文在原先torchvision.transform的基础上进行修改,主要涉及两个文件:functional.py和transforms.py,

详细代码见Github主页:TransformsbyOpencv

functional.py (function)

(*为较为常用的函数)

目前原始输入只支持输入为RGB彩色图像和灰度图像

1. _is_pil_image

原始:判断图片是否为PIL格式的数据

修改:删除

2. _is_tensor_image

原始:判断是否图像类型为tensor

修改:不变

3. _is_numpy_image

原始:判断图像是否为numpy,由于opencv读入之后默认为numpy,故该函数用于判断是否为图像

修改:不变

4. to_tensor

原始:支持PIL和numpy类型的图像

修改:去掉对PIL图像的支持

5. to_pil_image

原始:将PIL或numpy转换为PIL图片

修改:现在没有这个需求了,删除该函数

6. normalize*

原始:tensor均一化

修改:pytorch的均一化方法和caffe不同,两条路,保持原有方法,修改caffe源码,或修改此函数,现将该函数保留另增加函数normalize_caffe

7. normalize_caffe*

说明:按照caffe的均一化方式计算,需提供scale(默认为1)和mean_value

8. resize*

原始:基于PIL实现

修改:基于opencv实现,注意逻辑保持和pytorch一样,若只指定一个resize参数,保证的是短边和该数一样,长边做等比例缩放,指定两个参数(h,w),则严格按照该参数进行

9. scale

原始:等价于resize

修改:不变

10. pad*

原始:按指定的方式填充图片边缘支持RGB和灰度

修改:由于CV2读取灰度图会自动填充为三通道,故删去对单通道图片的支持。

11. crop*

原始:基于PIL实现

修改:基于cv2实现

12. center_crop*

同上

13. resized_crop*

同上

14. hflip*

同上

15. vflip*

同上

16. five_crop*

同上

17. ten_crop*

原始:基于five_crop和flip实现

修改:不变

18. adjust_brightness

原始:基于PIL的ImageEnhance工具库实现,源码不可见。输入为图像和亮度变换的比例(0,+∞)(等比例相乘)

修改:实现方式不同,只能说达到了相同的功能,输入为图像和亮度变换的数值(-∞,+∞)(数值相加,当像素范围超过[0,255]时设为0或255)

19. adjust_contrast

原始:基于PIL的ImageEnhance工具库实现,源码不可见。输入为图像和对比度变换的比例(0,+∞)

修改:a * image,用于修改对比度。

20. adjust_saturation

原始:同上

修改:基于opencv实现,由于没有现成的函数,只能自己设计算法,考虑到该函数不常用,使用了一个较为简单的手法,将BGR的图像转为HSV,然后修改S通道的值,之后再转回BGR

21. adjust_hue

同上

22. adjust_gamma

原始:对图像进行伽马矫正,在图像增强中很少用

修改:转为CV2实现

23. affine

原始:图像的仿射变换,基于PIL的工具包实现

修改:虽然opencv也有仿射变换的实现方法,要实现此功能是可行的,但是变换原理和现有的原理差别较大,基于opencv复现后不能保证和PIL的实现方式等价。考虑该函数使用较少,先放弃修改该函数。若之后有需求再做深究

24. to_grayscale

原始:将原始的RGB图像转为灰度图,并且可选单通道或相同的三通道输出。

修改:考虑opencv的灰度图本来就是相同的三个通道,故不修改该函数。

tranforms (class)

1. Compose

保持原样

2. ToTensor

保持原样

3. Normalize

保持原样,Pytorch的均一化方法

4. NormalizeCaffe(新增)

input: mean(eg:[0.5, 0.5, 0.5]); scale(defult:[1,1,1])
按照caffe的均一化方法计算

5. Resize

修改PIL的差值方法设置为opencv

6. Scale

保持原样

7. CenterCrop

保持原样

8. Pad

保持原样

9. Lambda

保持原样

10. RandomTransforms

保持原样

11. RandomApply

保持原样

12. RandomOrder

保持原样

13. RandomChoice

保持原样

14. RandomCrop

修改PIL的差值方法设置为opencv

15. RandomHorizontalFlip

保持原样

16. RandomVerticalFlip

保持原样

17. RandomResizedCrop

修改PIL的差值方法设置为opencv

18. RandomSizedCrop

保持原样

19. FiveCrop

保持原样

20. TenCrop

保持原样

21. LinearTransformation

保持原样

22. ColorJitter

保持原样

23. RandomRotation

保持原样

24. RandomAffine

暂时删除

25. Grayscale

删除

26. RandomGrayscale

删除

上一篇下一篇

猜你喜欢

热点阅读