简 介: 尽管我们可以通过 下面命令获得paddle.vision.transforms中的所有的函数。那么这些函数的具体使用说明如何能够获得呢?

关键词数据预处理paddlevisiontransforms

#mermaid-svg-mZh31dizE1f6BwG1 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-mZh31dizE1f6BwG1 .error-icon{fill:#552222;}#mermaid-svg-mZh31dizE1f6BwG1 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-mZh31dizE1f6BwG1 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-mZh31dizE1f6BwG1 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-mZh31dizE1f6BwG1 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-mZh31dizE1f6BwG1 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-mZh31dizE1f6BwG1 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-mZh31dizE1f6BwG1 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-mZh31dizE1f6BwG1 .marker.cross{stroke:#333333;}#mermaid-svg-mZh31dizE1f6BwG1 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-mZh31dizE1f6BwG1 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-mZh31dizE1f6BwG1 .cluster-label text{fill:#333;}#mermaid-svg-mZh31dizE1f6BwG1 .cluster-label span{color:#333;}#mermaid-svg-mZh31dizE1f6BwG1 .label text,#mermaid-svg-mZh31dizE1f6BwG1 span{fill:#333;color:#333;}#mermaid-svg-mZh31dizE1f6BwG1 .node rect,#mermaid-svg-mZh31dizE1f6BwG1 .node circle,#mermaid-svg-mZh31dizE1f6BwG1 .node ellipse,#mermaid-svg-mZh31dizE1f6BwG1 .node polygon,#mermaid-svg-mZh31dizE1f6BwG1 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-mZh31dizE1f6BwG1 .node .label{text-align:center;}#mermaid-svg-mZh31dizE1f6BwG1 .node.clickable{cursor:pointer;}#mermaid-svg-mZh31dizE1f6BwG1 .arrowheadPath{fill:#333333;}#mermaid-svg-mZh31dizE1f6BwG1 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-mZh31dizE1f6BwG1 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-mZh31dizE1f6BwG1 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-mZh31dizE1f6BwG1 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-mZh31dizE1f6BwG1 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-mZh31dizE1f6BwG1 .cluster text{fill:#333;}#mermaid-svg-mZh31dizE1f6BwG1 .cluster span{color:#333;}#mermaid-svg-mZh31dizE1f6BwG1 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-mZh31dizE1f6BwG1 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

数据预处理
文章目录
飞桨框架内
置数据集
自定义数据集
直接对图片操作
总 结
附录

§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)相关推荐

  1. darknet图像预处理函数random_augment_image研究

    更多darknet训练图像分类图像预处理 random_augment_image() image random_augment_image(image im, float angle, float ...

  2. 『TensorFlow』第九弹_图像预处理_不爱红妆爱武装

    部分代码单独测试: 这里实践了图像大小调整的代码,值得注意的是格式问题: 输入输出图像时一定要使用uint8编码, 但是数据处理过程中TF会自动把编码方式调整为float32,所以输入时没问题,输出时 ...

  3. darknet训练图像分类图像预处理random_distort_image研究

    更多darknet训练图像分类图像预处理 random_distort_image() void random_distort_image(image im, float hue, float sat ...

  4. pytorch —— 图像预处理模块(Transforms)

    transforms运行机制 torchvision是pytorch的计算机视觉工具包,在torchvision中有三个主要的模块: torchvision.transforms,常用的图像预处理方法 ...

  5. kaggle aptos2019 的图像预处理

    kaggle aptos2019 的图像预处理 kaggle aptos2019 的图像预处理 图像预处理 1. 基于眼球的resize: scaleRadius() 2. 特征增强 3. 去除眼球周 ...

  6. 一阶微分算子锐化图像_【动手学计算机视觉】第三讲:图像预处理之图像分割...

    本讲完整代码>> 前言 图像分割是一种把图像分成若干个独立子区域的技术和过程.在图像的研究和应用中,很多时候我们关注的仅是图像中的目标或前景(其他部分称为背景),它们对应图像中特定的.具有 ...

  7. 图像预处理第7步:标准归一化

    图像预处理第7步:标准归一化 将分割出来的各个不同宽.高的数字字符宽.高统一 //图像预处理第7步:标准归一化 //将分割出来的各个不同宽.高的数字字符宽.高统一 void CChildView::O ...

  8. 如何利用图像预处理提高OCR的准确性?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 OCR代表光学字符识别,将文档照片或场景照片转换为机器编码的文本. ...

  9. opencv ocr字符识别_OCR深度实践系列:图像预处理

    近一个半月时间没更了,在这段时间里针对OCR业务进行了深入研究,业务也已上线,谨以此篇作为OCR系列的开篇. 目前NLP+OCR的落地应用在市场上愈加火热,如金融领域的研报分析.司法领域的合同审核甚至 ...

最新文章

  1. 深入理解Java Stream流水线,学到了!
  2. python基本使用-Python标准库详细介绍与基本使用方式,超详细!
  3. a*算法的时间复杂度_算法的时间和空间复杂度,就是这么简单
  4. 熟悉linux系统内核,[科普] Linux 的内核与 Linux 系统之间的关系
  5. wpf office 菜单_如何带回Office 2007中的旧菜单
  6. 装饰器3--装饰器作用原理
  7. 剑指offer第二版(150M超清分享PDF+源码)(转)
  8. dd命令烧写superboot.bin
  9. Colaboratory读取谷歌云盘(Google drive)中的数据(2020年3月28日更新)
  10. UVC协议学习2--UVC请求格式分析
  11. java把字符串转为日期_Java程序将字符串转换为日期
  12. iOS 安全锁原理集合
  13. 计算机io设备是cpu控制的吗,操作系统--IO设备
  14. matlab 坐标轴根号,在matlab图例中如何打数学符号---根号?
  15. 【Project】基于LD3320 的智能语音控制系统
  16. 如何快速填充表格公式
  17. 用Python走入史学经典《三国演义》中的社交网络
  18. 360全景视频panolens.js 实现代码
  19. Traceback (most recent call last): File “C:\ProgramData\Anaconda3\lib\site-packages\qtpy\QtWebEngine
  20. 1413 权势二进制

热门文章

  1. 常见问题:内存,循环引用,runloop的简单理解
  2. 数据预处理之独热编码(One-Hot Encoding)
  3. .net core出现Http Error 502.5 - Process Failure
  4. 编程感悟-建立好代码sop
  5. Git学习系列之Git基本操作克隆项目(图文详解)
  6. Delphi 的内存操作函数(2): 给数组指针分配内存
  7. Hadoop 4、Hadoop MapReduce的工作原理
  8. Python_03-数据类型
  9. ubuntu 查看内存和cpu使用情况
  10. XAML特殊字符 (转)