目录​​​​​​​

1、零填充ZeroPad2d

2、常数填充ConstantPad2d

3、镜像填充ReflectionPad2d

4、重复填充ReplicationPad2d


卷积操作作为卷积神经网络的核心模块,在其计算过程中必须考虑图像“边缘像素”的卷积方式。我们可以采用“卷积之前进行边界填充”或“卷积之后进行边界填充两种方式”,同时边界填充的具体手段包含常量填充、零填充、镜像填充以及重复填充等。

在具体分析各种Padding之前,先创建一个2dTensor用于测试后面的填充操作:

import torch
x = torch.Tensor([[1, 2], [3, 4]])
print(x)

1、零填充ZeroPad2d

我们最常用的是nn.ZeroPad2d,也就是对Tensor使用0进行边界填充,我们可以指定tensor的四个方向上的填充数,比如左边添加1dim、右边添加2dim、上边添加3dim、下边添加4dim,即指定paddin参数为(1,2,3,4),如下:

pad = nn.ZeroPad2d(padding=(1, 2, 3, 4))
y = pad(x)

得到的y是x在四个方向上按照(1,2,3,4)进行的补零操作,如下图:

2、常数填充ConstantPad2d

零填充是常数填充的一个特例,常数填充nn.ConstantPad2d()需要我们指定填充所用的常数值value核填充数padding,这里选择四个方向上均填充为1dim,即padding为(1,1,1,1),代码如下:

pad = nn.ConstantPad2d(padding=(1, 1, 1, 1), value=666)
y = pad(x)

得到的y在四周分别用666进行填充:

3、镜像填充ReflectionPad2d

镜像填充的方式相比于前面使用固定数值进行填充,有可能获得更好的卷积结果。镜像填充封装在nn.ReflectionPad2d中,其填充方式为新的dim值使用反方向的最下边元素的值,代码如下:

import torch
import torch.nn as nn
x = torch.Tensor([[[[1, 2], [3, 4]]]])
pad = nn.ReflectionPad2d(padding=(1, 1, 1, 1))
y = pad(x)
print(y)

从下图结果可以看出第一行第一列的4是原来右下角的4,第一行第二列的3原来左下角的3:

4、重复填充ReplicationPad2d

重复填充即重复图像的边缘像素值,将新的边界像素值用边缘像素值扩展,封装于nn.ReplicationPad2d()中,同样可以指定4个方向的填充数量:

pad = nn.ReplicationPad2d(padding=(1, 1, 1, 1))
y = pad(x)

从下图得到的结果可以看出,填充后边界像素值是原来的1、2、3、4的复制:

总结:

对于pytorch是在卷积之前还是卷积之后进行padding这个问题,应该是卷积之前进行的填充;上文中dim并不是维度的意思,自己没有找到合适的词描述添加的“行或列”,就用了dim一词;填充方式的选择对于图像较小的情况下比较重要,对于尺寸较大的图像来说如何填充影响可能并不大。

pytorch必须掌握的4种边界Padding方法 - 知乎

pytorch的4种边界Padding方法--ZeroPad2d、ConstantPad2d、ReflectionPad2d、ReplicationPad2d相关推荐

  1. android 层级边框,有没有一种简单的方法可以在Android视图的顶部和底部添加边框?...

    有没有一种简单的方法可以在Android视图的顶部和底部添加边框? 我有一个TextView,我想沿其顶部和底部边框添加黑色边框. 我尝试将android:drawableTop和android:dr ...

  2. PyTorch框架学习七——自定义transforms方法

    PyTorch框架学习七--自定义transforms方法 一.自定义transforms注意要素 二.自定义transforms步骤 三.自定义transforms实例:椒盐噪声 虽然前面的笔记介绍 ...

  3. pytorch保存和加载文件的方法,从断点处继续训练

    '''本文件用于举例说明pytorch保存和加载文件的方法'''import torch as torch import torchvision as tv import torch.nn as nn ...

  4. OpenCV-Python实战(14)——人脸检测详解(仅需6行代码学会4种人脸检测方法)

    OpenCV-Python实战(14)--人脸检测详解(仅需6行代码学会4种人脸检测方法) 0. 前言 1. 人脸处理简介 2. 安装人脸处理相关库 2.1 安装 dlib 2.2 安装 face_r ...

  5. 14种异常检测方法汇总

    今天给大家分享一篇关于异常检测的文章,重点介绍了14种公开网络上一些常见的异常检测方法(附资料来源和代码). 一.基于分布的方法 1. 3sigma 基于正态分布,3sigma准则认为超过3sigma ...

  6. 图像滤波边界处理方法对图像滤波的影响

    %边缘效应与滤波 %实现空间滤波领域处理时的一个重要考虑因素,当滤波掩模的中心靠近图像轮廓时发生的情况 % 当一个n*n的方形掩模,其中心距离图像边缘为(n-1)/2个像素时,该掩模至少有一条边与图像 ...

  7. 用四种不同的方法实现 tab栏切换

    基础片段 <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8& ...

  8. 论文阅读笔记——利用枪口模式识别作为一种生物特征识别方法

    利用枪口模式识别作为一种生物特征识别方法 论文简介 标题 期刊情况 论文内容 摘要 介绍 材料与方法 从提取的墨迹识别枪口模式 枪口模式识别算法 提升油墨印刷的程序 灰度数字图像的枪口模式识别 枪口模 ...

  9. OpenCV函数应用:基于二值图像的三种孔洞填充方法记录(附python,C++代码)

    系列文章目录 函数系列: OpenCV函数简记_第一章数字图像的基本概念(邻域,连通,色彩空间) OpenCV函数简记_第二章数字图像的基本操作(图像读写,图像像素获取,图像ROI获取,图像混合,图形 ...

最新文章

  1. OpenCV 4.5发布!更强的SIFT,OCR,RANSAC算法,新增目标跟踪网络SiamRPN++
  2. docker逃逸漏洞复现 cve-2019-5736
  3. nginx源代码执行过程(一)
  4. DescriptionAttribute Class
  5. tftp刷路由器 linux,TP-Link无线路由器HTTP/TFTP后门漏洞
  6. VS2012 快捷键 VS RESHARPER 设置
  7. 程序员必知的 Python 陷阱与缺陷列表
  8. 小米这两款手机沦为“难兄难弟”,再降价也清不了库存
  9. Android自定义控件学习(二)-----自定义attr Style styleable以及其应用
  10. robotframework 测试工具添加PDF文件内容匹配插件
  11. css之max-width属性
  12. 谁说“IT 不理解 OT”?开放自动化来破局!
  13. arp 已知mac找ip_ARP协议修订版
  14. 对Java语言的byte类型变量进行无符号提升
  15. hypermesh optistruct 形状优化
  16. 精品思维导图模板合集,锻炼你的逻辑思维,提升能力空间
  17. 电力系统潮流计算中的导纳矩阵计算,matlab源程序
  18. Linux 鼠标可以移动但是无法点击。
  19. 0x80070091目录不是空的,处理方法
  20. 黑喵桌面音乐播放器汉化版

热门文章

  1. 荷兰籍空乘服务中国春运:对春节有着别样的感受
  2. Maven 打包war文件
  3. python-opencv学习笔记(三)
  4. [转]在Windows中安装PhpUnit
  5. Java设计模式(二) 观察者模式
  6. 配置cacti 监控squid
  7. C核心技术手册(四十二)
  8. Lotus,协作领域的常青树
  9. 深度分析DROP,TRUNCATE与DELETE的区别【我的数据库之路系列】
  10. SQL Server2005还原数据库攻略