栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Python

图像数据处理

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

图像数据处理

文章目录
  • 1. Transforms图片预处理
  • 2. DataLoader数据加载

1. Transforms图片预处理

torchvision 是 torch 中计算机视觉库,提供了3种类型的接口,包括 datasets、transforms、model,其中 transforms 封装了各种图像增强的方法,代码实现可参考此处。transforms 中所涉及的数据增强函数如下:

  • ToPILImage:将 PIL Image 或 numpy.ndarray 转换成 tensor 再转成 PIL Image;

  • Normalize:提供一个所有通道的均值(mean) 和方差(std),会将原始数据进行归一化,操作的数据格式是 Tensor;

  • Resize(Scale 已废弃,由 Resize 替代):

size:一个值的话,高和宽共享,否则对应是 (h, w);
interpolation:插值方式默认为 PIL.Image.BILINEAR;

  • CenterCrop:以图片的中心往外裁剪一定 size 的图片;

size: 一个值的话,高和宽共享,否则对应是 (h, w),若是该值超过原始图片尺寸,则外围用 0 填充;

  • RandomCrop:从随机位置开始裁剪图片;

size
padding=None
pad_if_needed=False
fill=0
padding_mode=‘constant’

  • RandomResizedCrop:将给定的 PIL 图像裁剪为随机大小和纵横比。(RandomSizedCrop 已废弃,由 RandomResizedCrop 取代)

size
scale
ratio
interpolation

  • Pad:使用给定的pad值填充给定 PIL 图像的所有侧面

padding:填充的宽度,可以是一个值或元组,分别对应 4 个边;
fill:填充的值,padding_mode=constant 时起作用。可以是一个值(所有通道都用该值填充),或者一个 3 元组(RGB 三通道);
padding_mode:填充模式有 constant, edge(填充值为边缘), reflect (从边缘往内一个像素开始做镜像) or symmetric(从边缘做镜像);

  • Lambda:根据用户自定义的方式进行变换

  • RandomApply:给定一定概率从一组 transformations 应用

  • RandomChoice:应用从列表中随机挑选的单个变换

  • RandomOrder:以随机顺序应用转换列表

  • RandomHorizontalFlip & RandomVerticalFlip: 以给定的概率随机水平/垂直翻转给定的 PIL 图像

  • RandomResizedCrop:将给定的 PIL 图像裁剪为随机大小和纵横比(RandomSizedCrop 已废弃,由 RandomResizedCrop 取代)

size
scale
ratio
interpolation

  • FiveCrop:将给定的 PIL 图像裁剪成四个角和中间的裁剪

  • TenCrop:裁剪一张图片的 4 个角以及中间得到指定大小的图片,并且进行水平翻转 / 竖直翻转 共 10 张

size
vertical_flip=False:默认为水平翻转

  • LinearTransformation:白化变换

  • ColorJitter:随机改变图像的亮度、对比度和饱和度

brightness:亮度
contrast:对比度
saturation:饱和度
hue:色调 0<= hue <= 0.5 or -0.5 <= min <= max <= 0.5

  • RandomRotation: 一定角度旋转图像

degrees:旋转角度
resample=False:重采样过滤器,可选 {PIL.Image.NEAREST, PIL.Image.BILINEAR, PIL.Image.BICUBIC}
expand=False:为 True 则展开输出,使其足够大以容纳整个旋转后的图像;若为 Fales 或省略,则使输出图像的大小与输入图像相同
center:旋转中心

  • RandomAffine: 保持图像中心不变的随机仿射变换,可以进行随心所欲的变化

degrees:旋转角度
translate:水平偏移
scale
shear: 裁剪
resample: {PIL.Image.NEAREST, PIL.Image.BILINEAR, PIL.Image.BICUBIC}
fillcolor: 图像外部填充颜色

  • Grayscale: 转换图像灰度

num_output_channels:输出图像所需的通道数,1 或者 3

  • RandomGrayscale: 以一定的概率对图像进行灰度化,转换后的图片还是 3 通道的

  • RandomPerspective: 对给定的 PIL 图像以给定的概率随机进行透视变换

2. DataLoader数据加载

DataLoader 是 PyTorch 中数据读取的一个重要接口,该接口定义在dataloader.py中。该接口的目的:将自定义的Dataset根据batch size大小、是否shuffle等封装成一个Batch Size大小的Tensor,用于后面的训练。

torch.utils.data.DataLoader(dataset, batch_size=1, shuffle=False, sampler=None, 
    batch_sampler=None, num_workers=0, collate_fn=None, pin_memory=False, 
    drop_last=False, timeout=0, worker_init_fn=None, multiprocessing_context=None)

torch.utils.data.DataLoader的参数有:

  • dataset:PyTorch已有的数据读取接口,或自定义的数据接口的输出

  • batchsize:批大小,默认为1

  • shuffle:在每个 epoch 中对整个数据集进行 shuffle 重排,默认为False

  • sample:定义从数据集中加载数据所采用的策略,如果指定的话,shuffle 必须为 False

  • 对数据进行采样,默认采用SequentialSampler,它会按顺序一个一个进行采样
  • 当 dataloader 的 shuffle 参数为 True 时,,系统会自动调用RandomSampler采样器,实现数据打乱
  • WeightedRandomSampler会根据每个样本的权重选取数据,在样本比例不均衡的问题中,可用它来进行重采样
  • batch_sample:与 sample 类似,表示一次返回一批的 index

  • num_workers:表示开启多少个线程数去加载你的数据,默认为0,代表只使用主进程

  • pytorch 中 dataloader 一次性创建 num_workers 个子线程,然后用 batch_sampler 将指定 batch 分配给指定 worker,worker 将它负责的 batch 加载进 RAM,dataloader 就可以直接从 RAM 中找本轮迭代要用的 batch
  • 如果 num_worker 设置得大,好处是寻 batch 速度快,因为下一轮迭代的 batch 很可能在上一轮时已经加载好了。坏处是内存开销大,也加重了CPU负担(worker加载数据到RAM的进程是进行CPU复制)
  • 如果 num_worker=0,意味着每一轮迭代时,dataloader 不再有自主加载数据到 RAM 这一步骤,只有当你需要的时候再加载相应的 batch,速度当然就更慢
  • num_workers 的经验设置值是自己电脑/服务器的 CPU 核心数,如果 CPU 很强、RAM 也很充足,就可以设置得更大些,对于单机来说,单跑一个任务的话,直接设置为 CPU 的核心数最好
  • collate_fn:表示合并样本列表以形成小批量的 Tensor 对象
  • 合并样本列表以形成小批量的 Tensor 对象,如果标签不止一个的话,还可以支持自定义
  • pin_memory:是否将 load 进来的数据拷贝到 pin_memory 区中,其表示生成的 Tensor 数据属于内存中的锁页内存区,这样将 Tensor 数据转义到 GPU 中速度就会快一些,默认为 False

通常情况下,数据在内存中要么以锁页的方式存在,要么保存在虚拟内存(磁盘)中。设置为 True 后,数据直接保存在锁页内存中,后续直接传入 cuda (对内存大小要求较高);否则需要先从虚拟内存中传入锁页内存中,再传入 cuda 。

  • drop_last:当你的整个数据长度不能够整除你的 batchsize,选择是否要丢弃最后一个不完整的batch,默认为False
转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/280287.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号