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脚本实现下载合并SAE日志
Feb 10 Python
python的numpy模块安装不成功简单解决方法总结
Dec 23 Python
python中kmeans聚类实现代码
Feb 23 Python
flask中过滤器的使用详解
Aug 01 Python
Python-Flask:动态创建表的示例详解
Nov 22 Python
python使用正则来处理各种匹配问题
Dec 22 Python
Python实现队列的方法示例小结【数组,链表】
Feb 22 Python
Selenium启动Chrome时配置选项详解
Mar 18 Python
Python的历史与优缺点整理
May 26 Python
快速了解Python开发环境Spyder
Jun 29 Python
Python 解析简单的XML数据
Jul 24 Python
如何让PyQt5中QWebEngineView与JavaScript交互
Oct 21 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
ThinkPHP与PHPExcel冲突解决方法
2011/08/08 PHP
解析crontab php自动运行的方法
2013/06/24 PHP
关于PHPDocument 代码注释规范的总结
2013/06/25 PHP
php实现的返回数据格式化类实例
2014/09/22 PHP
PHP动态生成指定大小随机图片的方法
2016/03/25 PHP
js右键菜单效果代码
2007/07/21 Javascript
jQuery 名称冲突的解决方法
2011/04/08 Javascript
js中scrollHeight,scrollWidth,scrollLeft,scrolltop等差别介绍
2012/05/16 Javascript
jQuery实现表头固定效果的实例代码
2013/05/24 Javascript
javascript常见操作汇总
2014/09/03 Javascript
在JavaScript里防止事件函数高频触发和高频调用的方法
2014/09/06 Javascript
JS获取当前脚本文件的绝对路径
2016/03/02 Javascript
老生常谈Javascript中的原型和this指针
2016/10/09 Javascript
JS实现探测网站链接的方法【测试可用】
2016/11/08 Javascript
AngularJS实现tab选项卡的方法详解
2017/07/05 Javascript
[js高手之路]寄生组合式继承的优势详解
2017/08/28 Javascript
解决vue 更改计算属性后select选中值不更改的问题
2018/03/02 Javascript
微信小程序 scroll-view 水平滚动实现过程解析
2019/10/12 Javascript
javascript实现弹幕墙效果
2019/11/28 Javascript
如何用vue-cli3脚手架搭建一个基于ts的基础脚手架的方法
2019/12/12 Javascript
Angular5整合富文本编辑器TinyMCE的方法(汉化+上传)
2020/05/26 Javascript
ElementUI 修改默认样式的几种办法(小结)
2020/07/29 Javascript
Ant design vue中的联动选择取消操作
2020/10/31 Javascript
[02:25]DOTA2英雄基础教程 虚空假面
2014/01/02 DOTA
[04:44]显微镜下的DOTA2第二期——你所没有注意到的细节
2014/06/20 DOTA
Python使用pyodbc访问数据库操作方法详解
2018/07/05 Python
Python Web版语音合成实例详解
2019/07/16 Python
Python如何优雅获取本机IP方法
2019/11/10 Python
wxPython窗体拆分布局基础组件
2019/11/19 Python
4行Python代码生成图像验证码(2种)
2020/04/07 Python
西班牙英格列斯百货法国官网:El Corte Inglés法国
2017/07/09 全球购物
Old Navy加拿大官网:美式休闲服饰品牌
2017/09/26 全球购物
UGG澳洲官网:UGG Australia
2018/04/26 全球购物
公司开业庆典策划方案
2014/06/04 职场文书
物联网工程专业推荐信
2014/09/08 职场文书
Golang二维切片初始化的实现
2021/04/08 Golang