PyTorch之图像和Tensor填充的实例


Posted in Python onAugust 18, 2019

在PyTorch中可以对图像和Tensor进行填充,如常量值填充,镜像填充和复制填充等。在图像预处理阶段设置图像边界填充的方式如下:

import vision.torchvision.transforms as transforms
 
img_to_pad = transforms.Compose([
    transforms.Pad(padding=2, padding_mode='symmetric'),
    transforms.ToTensor(),
   ])

对Tensor进行填充的方式如下:

import torch.nn.functional as F
 
feature = feature.unsqueeze(0).unsqueeze(0)
avg_feature = F.pad(feature, pad = [1, 1, 1, 1], mode='replicate')

这里需要注意一点的是,transforms.Pad只能对PIL图像格式进行填充,而F.pad可以对Tensor进行填充,目前F.pad不支持对2D Tensor进行填充,可以通过unsqueeze扩展为4D Tensor进行填充。

F.pad的部分源码如下:

@torch._jit_internal.weak_script
def pad(input, pad, mode='constant', value=0):
 # type: (Tensor, List[int], str, float) -> Tensor
 r"""Pads tensor.
 Pading size:
  The number of dimensions to pad is :math:`\left\lfloor\frac{\text{len(pad)}}{2}\right\rfloor`
  and the dimensions that get padded begins with the last dimension and moves forward.
  For example, to pad the last dimension of the input tensor, then `pad` has form
  `(padLeft, padRight)`; to pad the last 2 dimensions of the input tensor, then use
  `(padLeft, padRight, padTop, padBottom)`; to pad the last 3 dimensions, use
  `(padLeft, padRight, padTop, padBottom, padFront, padBack)`.
 Padding mode:
  See :class:`torch.nn.ConstantPad2d`, :class:`torch.nn.ReflectionPad2d`, and
  :class:`torch.nn.ReplicationPad2d` for concrete examples on how each of the
  padding modes works. Constant padding is implemented for arbitrary dimensions.
  Replicate padding is implemented for padding the last 3 dimensions of 5D input
  tensor, or the last 2 dimensions of 4D input tensor, or the last dimension of
  3D input tensor. Reflect padding is only implemented for padding the last 2
  dimensions of 4D input tensor, or the last dimension of 3D input tensor.
 .. include:: cuda_deterministic_backward.rst
 Args:
  input (Tensor): `Nd` tensor
  pad (tuple): m-elem tuple, where :math:`\frac{m}{2} \leq` input dimensions and :math:`m` is even.
  mode: 'constant', 'reflect' or 'replicate'. Default: 'constant'
  value: fill value for 'constant' padding. Default: 0
 Examples::
  >>> t4d = torch.empty(3, 3, 4, 2)
  >>> p1d = (1, 1) # pad last dim by 1 on each side
  >>> out = F.pad(t4d, p1d, "constant", 0) # effectively zero padding
  >>> print(out.data.size())
  torch.Size([3, 3, 4, 4])
  >>> p2d = (1, 1, 2, 2) # pad last dim by (1, 1) and 2nd to last by (2, 2)
  >>> out = F.pad(t4d, p2d, "constant", 0)
  >>> print(out.data.size())
  torch.Size([3, 3, 8, 4])
  >>> t4d = torch.empty(3, 3, 4, 2)
  >>> p3d = (0, 1, 2, 1, 3, 3) # pad by (0, 1), (2, 1), and (3, 3)
  >>> out = F.pad(t4d, p3d, "constant", 0)
  >>> print(out.data.size())
  torch.Size([3, 9, 7, 3])
 """
 assert len(pad) % 2 == 0, 'Padding length must be divisible by 2'
 assert len(pad) // 2 <= input.dim(), 'Padding length too large'
 if mode == 'constant':
  ret = _VF.constant_pad_nd(input, pad, value)
 else:
  assert value == 0, 'Padding mode "{}"" doesn\'t take in value argument'.format(mode)
  if input.dim() == 3:
   assert len(pad) == 2, '3D tensors expect 2 values for padding'
   if mode == 'reflect':
    ret = torch._C._nn.reflection_pad1d(input, pad)
   elif mode == 'replicate':
    ret = torch._C._nn.replication_pad1d(input, pad)
   else:
    ret = input # TODO: remove this when jit raise supports control flow
    raise NotImplementedError
 
  elif input.dim() == 4:
   assert len(pad) == 4, '4D tensors expect 4 values for padding'
   if mode == 'reflect':
    ret = torch._C._nn.reflection_pad2d(input, pad)
   elif mode == 'replicate':
    ret = torch._C._nn.replication_pad2d(input, pad)
   else:
    ret = input # TODO: remove this when jit raise supports control flow
    raise NotImplementedError
 
  elif input.dim() == 5:
   assert len(pad) == 6, '5D tensors expect 6 values for padding'
   if mode == 'reflect':
    ret = input # TODO: remove this when jit raise supports control flow
    raise NotImplementedError
   elif mode == 'replicate':
    ret = torch._C._nn.replication_pad3d(input, pad)
   else:
    ret = input # TODO: remove this when jit raise supports control flow
    raise NotImplementedError
  else:
   ret = input # TODO: remove this when jit raise supports control flow
   raise NotImplementedError("Only 3D, 4D, 5D padding with non-constant padding are supported for now")
 return ret

以上这篇PyTorch之图像和Tensor填充的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python使用PDFMiner解析PDF代码实例
Mar 27 Python
Python 通过pip安装Django详细介绍
Apr 28 Python
浅谈pycharm的xmx和xms设置方法
Dec 03 Python
详解Python循环作用域与闭包
Mar 21 Python
Python学习笔记之While循环用法分析
Aug 14 Python
解析Python3中的Import
Oct 13 Python
Python中顺序表原理与实现方法详解
Dec 03 Python
Numpy 理解ndarray对象的示例代码
Apr 03 Python
基于python实现数组格式参数加密计算
Apr 21 Python
完美解决jupyter由于无法import新包的问题
May 26 Python
python与pycharm有何区别
Jul 01 Python
pytorch model.cuda()花费时间很长的解决
Jun 01 Python
Pytorch Tensor的索引与切片例子
Aug 18 #Python
在PyTorch中Tensor的查找和筛选例子
Aug 18 #Python
对Pytorch神经网络初始化kaiming分布详解
Aug 18 #Python
pytorch中的embedding词向量的使用方法
Aug 18 #Python
Pytorch加载部分预训练模型的参数实例
Aug 18 #Python
在pytorch中查看可训练参数的例子
Aug 18 #Python
浅析PyTorch中nn.Module的使用
Aug 18 #Python
You might like
实现分十页分向前十页向后十页的处理
2006/10/09 PHP
php中将字符串转为HTML的实体引用的一个类
2013/02/03 PHP
深入分析php中接口与抽象类的区别
2013/06/08 PHP
php中opendir函数用法实例
2014/11/15 PHP
jQuery获取json后使用zy_tmpl生成下拉菜单
2015/03/27 PHP
浅谈Laravel中的三种中间件的作用
2019/10/13 PHP
用js控制组织结构图可以任意拖拽到指定位置
2014/01/17 Javascript
JS实现图片产生波纹一样flash效果的方法
2015/02/27 Javascript
JS实现的3D拖拽翻页效果代码
2015/10/31 Javascript
jQuery中的100个技巧汇总
2016/12/15 Javascript
使用Promise链式调用解决多个异步回调的问题
2017/01/15 Javascript
微信小程序 合法域名校验出错详解及解决办法
2017/03/09 Javascript
JS点击缩略图整屏居中放大图片效果
2017/07/04 Javascript
JS中双击和单击事件冲突的解决方法
2018/04/09 Javascript
vue配置多页面的实现方法
2018/05/22 Javascript
使用watch在微信小程序中实现全局状态共享
2019/06/03 Javascript
Vue 组件注册全解析
2020/12/17 Vue.js
[36:13]Mineski vs iG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python读取sqlite数据库文件的方法分析
2017/08/07 Python
Python 网络编程之UDP发送接收数据功能示例【基于socket套接字】
2019/10/11 Python
Python包,__init__.py功能与用法分析
2020/01/07 Python
python检查目录文件权限并修改目录文件权限的操作
2020/03/11 Python
一篇文章搞懂python的转义字符及用法
2020/09/03 Python
欧缇丽英国官方网站:Caudalie英国
2016/08/17 全球购物
新加坡网上化妆品店:Best Buy World
2018/05/18 全球购物
英国曼彻斯特宠物用品品牌:Bunty Pet Products
2019/07/27 全球购物
优秀志愿者事迹材料
2014/02/03 职场文书
《盘古开天地》教学反思
2014/02/28 职场文书
广告语设计及教案
2014/03/21 职场文书
应届大专生自荐书
2014/06/16 职场文书
社保代办委托书怎么写
2014/10/06 职场文书
遗嘱继承权公证书
2015/01/26 职场文书
护理工作心得体会
2016/01/22 职场文书
《鸟的天堂》教学反思
2016/02/19 职场文书
婚前协议书怎么写,才具有法律效力呢 ?
2019/06/28 职场文书
mysql备份策略的实现(全量备份+增量备份)
2021/07/07 MySQL