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里支持的图像数据处理方法相当的多,下面介绍几个经常使用的。

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的大小)。

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]的一个区间。

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)大小。

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)。

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是中间裁剪,可以看到图片按我们所需的大小进行了裁剪。

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的格式。

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

Original: https://blog.csdn.net/kakaccys/article/details/125939084
Author: kakaccys
Title: 7.paddlepaddle之图像数据处理

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/701582/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球