pytorch中padding应用总结

news2024/10/7 0:05:38

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

        padding 的操作就是在图像块的周围加上格子, 从而使得图像经过卷积过后按照预期大小变化,这种操作是使得图像的边缘数据也能得到利用,以更好地扩张整张图像的边缘特征。

        卷积操作的输出大小如上式所示,需要注意的是,当前面一部分不能整除时,卷积操作的输出为上式向下取整(也就是四舍五入)的结果,而池化操作的计算结果为向上取整(即进一位)

        卷积核中size的选择可能会导致input中的某几行(或者最后 几行)没有关联起来,这个可能是因为我们使用的模式是valid(即不填充边缘),而不是same。

        TensorFlow中的padding取值为valid对应pytorch中取值为1;TensorFlow中的padding取值为same对应pytorch中取值为0。

        【举个例子】输入信号的格式:(N, C, H, W),其中N表示Batch size,C表示channel,H和W分别表示特征图的高和宽。

        在nn.Conv2d中padding可以补0操作,也可补其他的。

        padding=(1,1):第一个参数表示在高度上面的padding,第二个参数表示在宽度上面的padding。如下图:

填充完值不是0 ,而是0.9862,是因为其加上了偏置值0.9862 

 pytorch中默认的padding类型是vaild


创建一个2dTensor用于测试后面的填充操作:

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

1、零填充 ZeroPad2d

        最常用的是nn.ZeroPad2d,也就是对Tensor使用0进行边界填充,我们可以指定tensor的四个方向上的填充数,比如左边添加1列、右边添加2列、上边添加3行、下边添加4行,即指定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,这里选择四个方向上均填充为1行或者列,即padding为(1,1,1,1),代码如下:

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

y = pad(x)

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

3、镜像填充ReflectionPad2d

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

pad = nn.ReflectionPad2d(padding=(1, 1, 1, 1))

y = pad(x) 

从下图结果可以看出第一行第一列的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,并且填充方式的选择对于图像较小的情况下比较重要,对于尺寸较大的图像来说如何填充影响可能并不大。 

 参考pytorch必须掌握的4种边界Padding方法 - 知乎 (zhihu.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/362861.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据处理学习笔记1.3 使用Scala集成开发环境

文章目录零、本讲学习目标一、搭建Scala的IntelliJ IDEA开发环境(一)启动IDEA(二)安装Scala插件(三)配置IDEA使用的默认JDK(四)创建Scala项目1、创建Scala项目 - ScalaDemo2、创建Sc…

求选择最少的区间数目可以覆盖连续区间 [0,n]:跳跃游戏,视频拼接,灌溉花园的最少水龙头数目

选择最少区间数目覆盖区间。 贪心方法 假设有一个人想过桥,0 和 n 分别是河的两岸,一开始,人在 0 给你一些小区间,我们把这些区间视作桥。一开始我们肯定要选择包含 0 的区间,且要保证尽可能走得远。假如我们已经走到…

解析Java中的class文件

解析class文件需要把class文件当成文件流来处理,定义ClassReader结构体 type ClassReader struct {data []byte }go语言中的reslice语法可以跳过已经读过的数据。 同时定义了ClassFile数据结构来描述class文件的各个部分,该数据结构如下所示&#xff1…

Scala流程控制(第四章:分支控制、嵌套分支、switch分支、for循环控制全、while与do~while、多重与中断)

文章目录第 4 章 流程控制4.1 分支控制 if-else4.1.1 单分支4.1.2 双分支4.1.3 多分支4.2 嵌套分支4.3 Switch 分支结构4.4 For 循环控制4.4.1 范围数据循环(To)4.4.2 范围数据循环(Until)4.4.3 循环守卫4.4.4 循环步长4.4.5 嵌套…

华为OD机试 - 最小传递延迟(C++) | 附带编码思路 【2023】

刷算法题之前必看 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:https://blog.csdn.net/hihell/category_12199283.html 华为OD详细说明:https://dream.blog.csdn.net/article/details/128980730 华为OD机试题…

户外跑步用什么耳机,最适合跑步用蓝牙耳机推荐

户外运动使用的蓝牙耳机,耳机在佩戴时需要考虑出行安全,耳机完全封闭耳道的耳机,会让我们对周围的情况不能及时做出反应,造成不必要的安全事故。如果在运动当中还不知道选择哪一些运动蓝牙耳机,可以看看下面这些分享~ …

【Azure 架构师学习笔记】-Azure Data Factory (2)-触发器

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Data Factory】系列。 接上文【Azure 架构师学习笔记】-Azure Data Factory (1)-调度入门 前言 上文介绍了ADF 的调度,在调度演示中,还有几个小按钮可以深究,如下图,有【…

小米AI 连接智能生活

近年来,人工智能(AI)技术在多个领域落地并不断取得发展与突破。在互联网的推动下,AI语音助理、智能家居、眼镜相机等产品相继推出,打造了更加便捷的生活体验。秉承着“技术为本”的理念,小米始终致力于前沿…

【Go基础】数据库编程

文章目录1. SQL语法简介2. MySQL最佳实践3. Go SQL驱动接口解读4. 数据库增删改查5. stmt6. SQLBuilder6.1 Go-SQLBuilder6.2 Gendry6.3 自行实现SQLBuilder7. GORM8. Go操作MongoDB1. SQL语法简介 SQL(Structured Query Language)是一套语法标准&#…

2023美赛参赛经历分享

今天早上登录MCM: The Mathematical Contest in Modeling (comap.com)发现论文提交已经显示Received。虽然这几天连连有开学恶补的期末考试,但还是忙里偷闲趁着新鲜写一篇关于美赛的参赛个人感受。跟我一起打这次美赛的都是软件等专业的hxd,他们之前没有…

SpringBoot + Lock4j实现高性能分布式锁

1. 简介 在分布式业务开发中,很多场景都需要添加分布式锁。在具体实践过程中,研发人员都需要自行实现,导致实现方式不统一,代码风格迥异,难以维护。 在Mybatis-Plus生态中,Lock4j提供了支持redission、re…

华为OD机试 - 最大排列(C++) | 附带编码思路 【2023】

刷算法题之前必看 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:https://blog.csdn.net/hihell/category_12199283.html 华为OD详细说明:https://dream.blog.csdn.net/article/details/128980730 华为OD机试题…

python--matplotlib(4)

前言 Matplotlib画图工具的官网地址是 http://matplotlib.org/ Python环境下实现Matlab制图功能的第三方库,需要numpy库的支持,支持用户方便设计出二维、三维数据的图形显示,制作的图形达到出版级的标准。 其他matplotlib文章 python--matpl…

Spring Cloud Gateway Nacos 实现动态路由

微服务都是互相独立的,假如我们的网关和其他服务都在线上已经运行了好久,这个时候增加了一个微服务,这个时候要通过网关访问的话需要通过修改配置文件来增加路由规则,并且需要重启项目,所以我们需要实现动态路由 方式一…

34. 应用监控【监控端点配置】

当一个 Spring Boot 项目运行时,开发者需要对 Spring Boot 项目进行实时监控来获取项目的运行情况,在项目出错时能够实现自动报警等。 Spring Boot 提供了actuator 来帮助开发者获取应用程序的实时运行数据。开发者可以选择使用 HTTP 端点或JMX来管理和监…

九龙证券|银行资本管理办法迎“大修” 信用风险权重法调整优化

1年期AAA中债商业银行同业存单到期收益率 日前迎来“大修”的商业银行本钱办理方法,在债券商场激起“涟漪”——债券商场一改此前平静态势,连续两日跌落。 2月21日,10年期国债收益率较上星期五上行2.9个基点,至2.919%&#xff1b…

记录charles手机端配置https的成功过程

1.百度 https://www.likecs.com/show-204025787.html https://blog.csdn.net/enthan809882/article/details/117572094?spm1001.2101.3001.6650.6&utm_mediumdistribute.pc_relevant.none-task-blog-2defaultBlogCommendFromBaiduRate-6-117572094-blog-122959902.pc_rele…

余承东:问界就是华为生态汽车,不涉及20万以下车型

今天界面新闻发布了一篇余承东的专访文章,谈到了外界对华为造车的质疑,以及回应了与赛力斯的合作,后续HI模式与智选车模式如何推进的话题。摘录重点如下:1.首先,继续「不造车」“华为没有必要自己下场造车。”在他看来…

Spring MVC 源码 - HandlerMapping 组件(四)之 AbstractUrlHandlerMapping

HandlerMapping 组件HandlerMapping 组件,请求的处理器匹配器,负责为请求找到合适的 HandlerExecutionChain 处理器执行链,包含处理器(handler)和拦截器们(interceptors)handler 处理器是 Objec…

【GO】k8s 管理系统项目[前端部分–Header]

【GO】k8s 管理系统项目[前端部分–Header] 1. 实现功能 面包屑展开关闭按钮用户信息(退出按钮) 2. 代码部分 src/layout/Layout.vue 在之前预留header位置补上 <!-- header --><el-header class"header"><el-row :gutter"20"><e…