训练图像预处理函数功能(paddle)
简 介: 尽管我们可以通过 下面命令获得paddle.vision.transforms中的所有的函数。那么这些函数的具体使用说明如何能够获得呢?
关键词
: 数据预处理,paddle,vision,transforms
置数据集
§01 数据预处理
对于神经网络的 输入数据进行预处理主要是为:
- 为了解决训练过程中的过拟合问题,其中一个方法就是对于训练数据进行增强;
- 使得输入图片满足网络的输入层对于数据尺寸的要求;
在 paddlepaddle的框架下,进行数据的预处理方法包括:
- 基于框架内置的数据集合;
- 基于自定义的数据集合;
下面是从 数据预处理-使用文档-PaddlePaddle深度学习平台 获得的一些关于paddle下数据预处理的内容。
1.1 飞桨框架内置数据集
对飞桨框架内置图像数据集的预处理,飞桨框架将这部分API
整合到paddle.vision.transforms
下,你可以通过以下方式查看:
import sys,os,math,time
import matplotlib.pyplot as plt
from numpy import *import paddleprint('Dataset process all method: {}'.format(paddle.vision.transforms.__all__))
Dataset process all method: ['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']
BaseTransform Compose Resize RandomResizedCrop CenterCrop RandomHorizontalFlipRandomVerticalFlip Transpose Normalize BrightnessTransformSaturationTransform 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
strid = 5
strall = tspgetdopstring(strid)
strall = strall.replace(':', '')
strall = strall.replace('\'', '').replace(']','').replace('[','').replace(':','').split(',')maxlen = max(len(s.strip(' ')) for s in strall)
strall = [s+' '*(maxlen - len(s)) for s in strall]
for s in list(zip(*([iter(strall)]*2))):printff(*s)
你可以同构以下方式随机调整图像的亮度、对比度、饱和度,并调整图像的大小,对图像的其他调整,可以参考相关的API
文档。
1.1.1 测试预处理功能
通过 Compose,将Resize, ColorJitter增加到对于内置数据集合预处理中。
from paddle.vision.transforms import Compose,Resize,ColorJittertransform = Compose([ColorJitter(), Resize(size=32)])
train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=transform)
查看所获得的数据:
data = train_dataset[0]
print(data)
plt.imshow(data[0])
plt.show()
下面是所获得数据的格式。可以看到与处理前的不同包括:
- 图像的尺寸从28×28 变成了32×32;
- 由于图片是黑白图像,所以ColorJitter没有看到效果。
(<PIL.Image.Image image mode=L size=32x32 at 0x7F64D6557790>, array([5]))
▲ 图1.1.1 所获得的5 数字图片
▲ 图1.1.2 将图片Resize到64×64效果
1.2 自定义数据集
对于自定义的数据集,你可以在数据集的构造函数中进行数据增强方法的定义,之后对 __getitem__
中返回的数据进行应用,就可以完成自定义数据增强。
import paddle
from paddle.io import Dataset
from paddle.vision.transforms import Compose, ResizeBATCH_SIZE = 64
BATCH_NUM = 20IMAGE_SIZE = (28, 28)
CLASS_NUM = 10class MyDataset(Dataset):def __init__(self, num_samples):super(MyDataset, self).__init__()self.num_samples = num_samples# 在 `__init__` 中定义数据增强方法,此处为调整图像大小self.transform = Compose([Resize(size=32)])def __getitem__(self, index):data = paddle.uniform(IMAGE_SIZE, dtype='float32')# 在 `__getitem__` 中对数据集使用数据增强方法data = self.transform(data.numpy())label = paddle.randint(0, CLASS_NUM-1, dtype='int64')return data, labeldef __len__(self):return self.num_samples# 测试定义的数据集
custom_dataset = MyDataset(BATCH_SIZE * BATCH_NUM)print('=============custom dataset=============')
for data, label in custom_dataset:print(data.shape, label.shape)break
=============custom dataset=============
(32, 32) [1]
1.3 直接对图片操作
从 【1.2:自定义数据集】给出的示例程序可以看出:
- 是可以直接对于图片数据应用 paddle.vision.transforms中的各种处理方法。
- 如果将图片预处理放置在MyDataset中 getitme 进行处理,这样会在生成训练数据集合的时候每次都重复调用这些数据预处理,这会降低网络训练速度。对于数据预处理应该放置在MyDataset中的外部进行。
1.3.1 测试图片
import cv2picfile = '/home/aistudio/data/211217153712.BMP'
img = cv2.imread(picfile).T[::-1].T
plt.figure(figsize=(10,8))
plt.imshow(img)
plt.show()
▲ 图1.3.1 测试图片
1.3.2 不同的图片预处理方法
(1)Resize
from paddle.vision.transforms import Compose,Resize,ColorJitterimg1 = Resize(size=32)(img)
plt.figure(figsize=(10,8))
plt.imshow(img1)
plt.show()
▲ 图1.3.2 Resize(32)之后处理的效果
(2)ColorJitter
img1 = ColorJitter()(img)
ColorJitter处理后的效果,没有看出什么效果.
▲ 图1.3.3 ColorJitter处理后的效果,没有看出什么效果
(3)hflip,vflip
from paddle.vision.transforms import Compose,Resize,ColorJitter
from paddle.vision import transforms as PVTimg1 = PVT.hflip(img)
plt.figure(figsize=(10,8))
plt.imshow(img1)
plt.show()
vflip处理后的图像效果
▲ 图1.3.4 vflip处理后的图像效果
hflip处理后的效果。
▲ 图1.3.5 hflip处理后的效果
(4)rotate
img1 = PVT.rotate(img, 45)
旋转之后的图片效果。
▲ 图1.3.6 旋转之后的图片效果
import paddle
from paddle.vision.transforms import Compose,Resize,ColorJitter
from paddle.vision import transforms as PVTfor id,angle in enumerate(linspace(0, 360, 20)):img1 = PVT.rotate(img, angle)plt.figure(figsize=(10,8))plt.imshow(img1)plt.savefig('/home/aistudio/work/GIF/%d.jpg'%id)plt.show()
▲ 图1.3.7 旋转的图片
※ 总 结 ※
尽管我们可以通过 下面命令获得paddle.vision.transforms中的所有的函数。那么这些函数的具体使用说明如何能够获得呢?
2.1 附录
import sys,os,math,time
import matplotlib.pyplot as plt
from numpy import *import paddle
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST1.PY -- by Dr. ZhuoQing 2021-12-17
#
# Note:
#============================================================from headm import * # =import paddle#printf('Dataset process all method: {}'.format(paddle.vision.transforms.__all__))#------------------------------------------------------------from paddle.vision.transforms import Compose,Resize,ColorJittertransform = Compose([ColorJitter(), Resize(size=64)])
train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=transform)
#train_dataset = paddle.vision.datasets.MNIST(mode='train')#train_dataset = paddle.vision.datasets.Cifar10(mode='train', transform=transform)
#train_dataset = paddle.vision.datasets.Cifar10(mode='train')#------------------------------------------------------------data = train_dataset[0]
printf(data)
plt.imshow(data[0])
plt.show()#------------------------------------------------------------import cv2picfile = '/home/aistudio/data/211217153712.BMP'
img = cv2.imread(picfile).T[::-1].T
plt.figure(figsize=(10,8))
plt.imshow(img)
plt.show()#------------------------------------------------------------
import paddle
from paddle.vision.transforms import Compose,Resize,ColorJitter
from paddle.vision import transforms as PVTimg1 = PVT.RandomCrop(0.2, img)
plt.imshow(img1)#------------------------------------------------------------
for id,angle in enumerate(linspace(0, 360, 20)):img1 = PVT.rotate(img, angle)plt.figure(figsize=(10,8))plt.imshow(img1)plt.savefig('/home/aistudio/work/GIF/%d.jpg'%id)plt.show()#------------------------------------------------------------#------------------------------------------------------------
# END OF FILE : TEST1.PY
#============================================================
■ 相关文献链接:
- 数据预处理-使用文档-PaddlePaddle深度学习平台
● 相关图表链接:
- 图1.1.1 所获得的5 数字图片
- 图1.1.2 将图片Resize到64×64效果
- 图1.3.1 测试图片
- 图1.3.2 Resize(32)之后处理的效果
- 图1.3.3 ColorJitter处理后的效果,没有看出什么效果
- 图1.3.4 vflip处理后的图像效果
- 图1.3.5 hflip处理后的效果
- 图1.3.6 旋转之后的图片效果
- 图1.3.7 旋转的图片
训练图像预处理函数功能(paddle)相关推荐
- darknet图像预处理函数random_augment_image研究
更多darknet训练图像分类图像预处理 random_augment_image() image random_augment_image(image im, float angle, float ...
- 『TensorFlow』第九弹_图像预处理_不爱红妆爱武装
部分代码单独测试: 这里实践了图像大小调整的代码,值得注意的是格式问题: 输入输出图像时一定要使用uint8编码, 但是数据处理过程中TF会自动把编码方式调整为float32,所以输入时没问题,输出时 ...
- darknet训练图像分类图像预处理random_distort_image研究
更多darknet训练图像分类图像预处理 random_distort_image() void random_distort_image(image im, float hue, float sat ...
- pytorch —— 图像预处理模块(Transforms)
transforms运行机制 torchvision是pytorch的计算机视觉工具包,在torchvision中有三个主要的模块: torchvision.transforms,常用的图像预处理方法 ...
- kaggle aptos2019 的图像预处理
kaggle aptos2019 的图像预处理 kaggle aptos2019 的图像预处理 图像预处理 1. 基于眼球的resize: scaleRadius() 2. 特征增强 3. 去除眼球周 ...
- 一阶微分算子锐化图像_【动手学计算机视觉】第三讲:图像预处理之图像分割...
本讲完整代码>> 前言 图像分割是一种把图像分成若干个独立子区域的技术和过程.在图像的研究和应用中,很多时候我们关注的仅是图像中的目标或前景(其他部分称为背景),它们对应图像中特定的.具有 ...
- 图像预处理第7步:标准归一化
图像预处理第7步:标准归一化 将分割出来的各个不同宽.高的数字字符宽.高统一 //图像预处理第7步:标准归一化 //将分割出来的各个不同宽.高的数字字符宽.高统一 void CChildView::O ...
- 如何利用图像预处理提高OCR的准确性?
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 OCR代表光学字符识别,将文档照片或场景照片转换为机器编码的文本. ...
- opencv ocr字符识别_OCR深度实践系列:图像预处理
近一个半月时间没更了,在这段时间里针对OCR业务进行了深入研究,业务也已上线,谨以此篇作为OCR系列的开篇. 目前NLP+OCR的落地应用在市场上愈加火热,如金融领域的研报分析.司法领域的合同审核甚至 ...
最新文章
- 深入理解Java Stream流水线,学到了!
- python基本使用-Python标准库详细介绍与基本使用方式,超详细!
- a*算法的时间复杂度_算法的时间和空间复杂度,就是这么简单
- 熟悉linux系统内核,[科普] Linux 的内核与 Linux 系统之间的关系
- wpf office 菜单_如何带回Office 2007中的旧菜单
- 装饰器3--装饰器作用原理
- 剑指offer第二版(150M超清分享PDF+源码)(转)
- dd命令烧写superboot.bin
- Colaboratory读取谷歌云盘(Google drive)中的数据(2020年3月28日更新)
- UVC协议学习2--UVC请求格式分析
- java把字符串转为日期_Java程序将字符串转换为日期
- iOS 安全锁原理集合
- 计算机io设备是cpu控制的吗,操作系统--IO设备
- matlab 坐标轴根号,在matlab图例中如何打数学符号---根号?
- 【Project】基于LD3320 的智能语音控制系统
- 如何快速填充表格公式
- 用Python走入史学经典《三国演义》中的社交网络
- 360全景视频panolens.js 实现代码
- Traceback (most recent call last): File “C:\ProgramData\Anaconda3\lib\site-packages\qtpy\QtWebEngine
- 1413 权势二进制
热门文章
- 常见问题:内存,循环引用,runloop的简单理解
- 数据预处理之独热编码(One-Hot Encoding)
- .net core出现Http Error 502.5 - Process Failure
- 编程感悟-建立好代码sop
- Git学习系列之Git基本操作克隆项目(图文详解)
- Delphi 的内存操作函数(2): 给数组指针分配内存
- Hadoop 4、Hadoop MapReduce的工作原理
- Python_03-数据类型
- ubuntu 查看内存和cpu使用情况
- XAML特殊字符 (转)