7.paddlepaddle之图像数据处理

前言

数据处理是ai算法工程师的基本功,一般数据可以分图片,语音,文本,以及结构化数据等等,数据的修改,清洗、增强以及不同采样都能直接影响模型的最终结果。

本章主要讲解paddlepaddle在图像数据处理方面的知识。

paddlepaddle图像处理

在paddle中有很好的图像处理,虽然其底层封装基本也是PIL库或者opencv。

其主要函数为paddle.vision.transforms,具体的处理方法如下:

import paddle
print('图像数据处理方法:', paddle.vision.transforms.__all__)
"""
['BaseTransform', 'Compose', 'Resize', 'RandomResizedCrop', 'CenterCrop', 
'RandomHorizontalFlip', 'RandomVerticalFlip', 'Transpose', 'Normalize', 
'BrightnessTransform', 'SaturationTransform', 'ContrastTransform', 'HueTransform', 
'ColorJitter', 'RandomCrop', 'Pad', 'RandomRotation', 'Grayscale', 'ToTensor', 
'to_tensor', 'hflip', 'vflip', 'resize', 'pad', 'rotate', 'to_grayscale', 'crop', 
'center_crop', 'adjust_brightness', 'adjust_contrast', 'adjust_hue', 'normalize']
"""

可以看到paddle里支持的图像数据处理方法相当的多,下面介绍几个经常使用的。

1.resize函数

import numpy as np
from PIL import Image
from paddle.vision.transforms import functional as F

img = (np.random.rand(256, 300, 3) * 255.).astype('uint8')

img = Image.fromarray(img)

converted_img = F.resize(img, 224)
print(converted_img.size)# (262, 224)

可以看到resize对图片进行了缩放,当高大于宽时,则被缩放到了300*(256/224)的大小即(262,224的大小)。

2.normalize函数

import numpy as np
from PIL import Image
from paddle.vision.transforms import functional as F
img = (np.random.rand(256, 300, 3) * 255.).astype('uint8')
img = Image.fromarray(img)
mean = [127.5, 127.5, 127.5]
std = [127.5, 127.5, 127.5]
normalized_img = F.normalize(fake_img, mean, std, data_format='HWC')
print(normalized_img.max(), normalized_img.min())
# 0.99215686 -1.0

normalize函数是对图片进行归一化的函数,可以看到,上述值被归一到[-1,1]的一个区间。

3.transpose函数

import numpy as np
from PIL import Image
from paddle.vision.transforms import Transpose

transform = Transpose()
img = Image.fromarray((np.random.rand(300, 320, 3) * 255.).astype(np.uint8))
img = transform(img)
print(img.shape)#(3,300,320)

transpose函数主要是将图片矩阵数据进行转置,如上述代码,将(300,320,3)的矩阵转置到(3,300,320)大小。

4.pad函数

import numpy as np
from PIL import Image
from paddle.vision.transforms import functional as F

img = (np.random.rand(256, 300, 3) * 255.).astype('uint8')
img = Image.fromarray(img)
padded_img = F.pad(img, padding=1)
print(padded_img.size)#(302, 258)

可以看到pad函数虽然设置的padding为1,但是其对图片上下左右两端均进行填充,所以最终大小变为了(302,258)。

5.center_crop函数

import numpy as np
from PIL import Image
from paddle.vision.transforms import functional as F

img = (np.random.rand(256, 300, 3) * 255.).astype('uint8')
img = Image.fromarray(img)
cropped_img = F.center_crop(img, (150, 100))
print(cropped_img.size)
# out: (100, 150) width,height

center_crop是中间裁剪,可以看到图片按我们所需的大小进行了裁剪。

6.to_tensor函数

import numpy as np
from PIL import Image
from paddle.vision.transforms import functional as F

img = (np.random.rand(256, 300, 3) * 255.).astype('uint8')
img = Image.fromarray(img)
tensor = F.to_tensor(img)
print(tensor.shape)#[3, 256, 300]

to_tensor就是将numpy或其他格式的向量转换为paddle的向量,可以看到paddle会自动将其转换为CHW的格式。

7.compose函数

from paddle.vision.datasets import Flowers
from paddle.vision.transforms import Normalize,Compose,Transpose,Resize

transform = Compose([Resize(227),Normalize(mean=[127.5, 127.5, 127.5], std=[127.5, 127.5, 127.5], data_format='HWC'),Transpose()])

用之前的举例,compose函数实际上就是将一系列图片处理的方法按顺序组合执行。

总结

在paddlepaddle里有相当多实用的图像处理方法,可供使用,可以说相当方便,简单,也能快速解决问题,当然具体情况还需具体分析,有时候手写图像处理也是必要的。 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kakaccys

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值