nn.Conv1d\nn.Conv2d以及groups\dilation参数的理解

article/2025/11/6 13:12:02

文章目录

  • nn.Conv1d
  • nn.Conv2d
  • nn.Conv2d中groups参数和dilation参数的理解
    • groups
    • dilation
  • 参考

nn.Conv1d

代码:

nn.Conv1d(in_channels = 16, out_channels = 16, kernel_size = (3,2,2), stride = (2,2,1), padding = [2,2,2])

如果输入为:

x = torch.randn(10,16,30,32,34)

则:

  • 10代表:batch_size
  • 16代表:输入的通道数
  • 30,32,34代表图片(或其他)的大小

那么经过这个nn,输出的规格为[10,16,16,18,37]
公式如下:
d o u t = ( d i n − k e r n e l s i z e + 2 ∗ p a d d i n g ) / s t r i d e + 1 ) d_{out} = (d_{in} - kernel_size + 2 * padding)/ stride + 1) dout=(dinkernelsize+2padding)/stride+1)

  • (30- 3 + 2*2) / 2 + 1 = 16
  • (32 - 2 + 2*2) / 2 + 1 = 18
  • (34 - 2 + 2*2) / 1 + 1 = 37

可以理解为: 大小为3/3/2的三个卷积核,分别在输入图片的三个维度上,进行滑动

nn.Conv2d

代码:

nn.Conv2d(16, 32 , kernel_size(3,2), stride = (2,1))

如果输入为:

x = torch.rand(10,16,30,32)

则输出规格为[10,32,14,31]:

  • 10 : batch_size
  • 32 : 输出通道数
  • (30 - 3 + 2 * 0)/ 2 + 1 = 14
  • (32 - 2 + 2*0)/1 + 1 = 31

nn.Conv2d中groups参数和dilation参数的理解

groups

在这里插入图片描述
当groups=1的时候,假设此时 输入的通道数为n,输出的通道数为m,那么理解为把输入的通道分成1组(不分组),每一个输出通道需要在所有的输入通道上做卷积,也就是一种参数共享的局部全连接。
如果把groups改成2,可以理解为把 输入的通道分成两组,此时每一个输出通道只需要在其中一组上做卷积。
如果groups=in_channels,也就是把 输入的通道分成in_channels组(每一组也就一个通道),此时每一个输出通道只需要在其中一个输入通道上做卷积。

dilation

conv_arithmetic
dilation体现了一种叫做à trous的思想,引入dilation后的输出计算公式为 :

d o u t = ( d i n − d i l a t i o n ∗ ( k e r n e l s i z e − 1 ) − 1 + 2 ∗ p a d d i n g ) / s t r i d e + 1 ) d_{out} = (d_{in} - dilation*(kernelsize-1) -1 + 2 * padding)/ stride + 1) dout=(dindilation(kernelsize1)1+2padding)/stride+1)
更新(2021/1/6-23:45):这个公式可以这样理解:
引入了dilation之后,整个的new_kernelsize就变成了
n e w _ k e r n e l s i z e = d i l a t i o n ∗ ( k e r n e l s i z e − 1 ) + 1 new\_kernelsize = dilation*(kernelsize-1)+1 new_kernelsize=dilation(kernelsize1)+1
所以
d o u t = ( d i n − n e w _ k e r n e l s i z e + 2 ∗ p a d d i n g ) / s t r i d e + 1 ) d_{out} = (d_{in} - new\_kernelsize + 2 * padding)/ stride + 1) dout=(dinnew_kernelsize+2padding)/stride+1)
我们定义一个3 * 3的卷积核,如果dilation参数为默认(1),那就是按照常规理解来做卷积,如下图所示:
在这里插入图片描述
如果我们把dilation设置成2,其实也就是在两两卷积点中插入一个空白,使得3*3的卷积核,变为了5 * 5:
在这里插入图片描述

dilation = 1:

import torch.nn as nn
m = nn.Conv2d(1, 1, (3, 3), dilation=(1, 1))  # `dilation=(1,1)` = `dilation=1`
input = torch.randn(1, 1, 7, 7)
output = m(input)
print(output.shape)
>>>输出:[1,1,5,5]

dilation = 2:

import torch.nn as nn
m = nn.Conv2d(1, 1, (3, 3), dilation=(2, 2))  # `dilation=(2,2)` = `dilation=2`
input = torch.randn(1, 1, 7, 7)
output = m(input)
print(output.shape)
>>>输出:[1,1,3,3]

在这里插入图片描述

参考

conv_arithmetic
pytorch官网


http://chatgpt.dhexx.cn/article/AyGrERT4.shtml

相关文章

剪胀角 angle of dilation

Abaqus选择库伦摩尔塑性模型的时候,需要选择摩擦角和剪胀角。摩擦角物理意义明确,但何为剪胀角?如何影响结果呢?(这两个问题,暂无统一解,Abaqus默认剪胀角最小是0.1) The angle of d…

3.TransposedConv2d实现 (含dilation)

[C 基于Eigen库实现CRN前向推理] 第三部分:TransposedConv2d实现 (含dilation) 前言:(Eigen库使用记录)第一部分:WavFile.class (实现读取wav/pcm,实现STFT)第二部分:Conv2d实现第三部分:Tran…

对卷积层dilation膨胀的作用的理解,caffe-ssd dilation Hole算法解析

先转一篇大佬的博客论文阅读笔记:图像分割方法deeplab以及Hole算法解析 下面是caffe-ssd的vgg16输出后的变化,减少了一个pooling,stride1,然后下一层采用了 dilation方法,作用按上面博客说是 既想利用已经训练好的模…

理解Dilation convolution

论文:Multi-scale context aggregation with dilated convolutions 简单讨论下dilated conv,中文可以叫做空洞卷积或者扩张卷积。首先介绍一下dilated conv诞生背景[4],再解释dilated conv操作本身,以及应用。 首先是诞生背景&a…

卷积膨胀 Dilation

参考:卷积的dilation操作 如果我们设置的dilation0的话,效果如图: 蓝色为输入,绿色为输出,可见卷积核为3*3的卷积核 如果我们设置的是dilation1,那么效果如图: 蓝色为输入,绿色为输出,卷积核仍…

卷积核膨胀(dilation)解析

本文转自http://blog.csdn.net/tangwei2014和https://blog.csdn.net/jiongnima/article/details/69487519,转载目的便于自己查看学习 第一位大神解析: deeplab发表在ICLR 2015上。论文下载地址:Semantic Image Segmentation with Deep Conv…

【DL】卷积膨胀 Dilation

Backto DeepLearning Index dilation dilation 是对 kernel 进行膨胀,多出来的空隙用 0 padding。用于克服 stride 中造成的 失真问题。 对应关系是 k d = ( k − 1 ) d + 1 k_{d} = (k -1)\times d + 1 kd​

Pytorch中dilation(Conv2d)参数详解

目录 一、Conv2d 二、Conv2d中的dilation参数 一、Conv2d 首先我们看一下Pytorch中的Conv2d的对应函数(Tensor通道排列顺序是:[batch, channel, height, width]): torch.nn.Conv2d(in_channels, out_channels, kernel_size, str…

Linux的入门

文章目录 1 Linux应用场景2 Linux的应用领域2.1 个人桌面的应用2.2 服务器领域2.3 嵌入式领域 3 Linux 介绍4 Linux 和 Unix 的关系4.1 Linux 的由来:4.2 Linux 与 Unix 的关系 5 安装 vm 和CentOS5.1 基本说明5.2 网络连接的理解 6 虚拟机克隆7 虚拟机快照8 虚拟机…

Linux 快速入门到实战【一】

一、操作系统概述 1. 计算机原理 ​ 现代计算机大部分都是基于冯.诺依曼结构,该结构的核心思想是将程序和数据都存放在计算机中,按存储器的存储程序首地址执行程序的第一条指令,然后进行数据的处理计算。 ​ 计算机应包括运算器、控制器、…

linux快速入门 --- 常用指令 学习

目录 为什么要学Linux? Linux的安装 安装 使用finalshell连接虚拟机 了解一下Linux的目录结构(不需要记忆) Linux中常用的命令(重点) Linux命令初体验--几个常用命令 Linux命令格式 显示指定目录下的内容 ls和…

Linux命令快速入门

Linux命令初体验----01几个常用命令 序号命令对应英文作用1lslist查看当前目录下的内容2pwdprint work directory查看当前所在目录3cd[目录名]change directory切换目录4touch[文件名]touch如果文件不存在,新建文件5mkdir[目录名]make directory创建目录6rm[文件名…

如何快速入门并轻松简单的学习Linux?

首先,写这篇文章的初衷是写给那些想学习linux,并真正想用它做些有意义事情的人。希望能帮助初学者找到正确的学习linux思维或者方向。 1、做好思想准备 如果你想系统的学习linux,你必须做好思想准备。如果你真正想系统的学习linux&#xff0c…

linux基础-快速入门

主要内容介绍 1、LINUX操作系统安装及初始化配置(熟悉); 2、LINUX操作系统目录组成结构及文件级增删改查操作(重点); 3、LINUX操作系统用户、权限管理(重点); 4、开源软…

Linux快速入门打开你的学习之道

附Java/C/C/机器学习/算法与数据结构/前端/安卓/Python/程序员必读书籍书单大全: 书单导航页(点击右侧 极客侠栈 即可打开个人博客):极客侠栈 ①【Java】学习之路吐血整理技术书从入门到进阶最全50本(珍藏版) ②【算法…

快速入门:LINUX基础 ——教你使用 linux 操作

文章目录 一、LINUX介绍二、环境搭建三、如何在LINUX下做开发1.LINUX 中—vi的使用 四、LINUX常用初级指令介绍和使用五、Linux虚拟机和windows间的文件传输方式LINUX和WINDOWS文件共享 六、VMware虚拟接网络连接的三种方式LINUX虚拟机网络配置: 七、Linux线程概念引…

Linux 入门

Linux 入门 一、Linux简介 1.Linux介绍 Linux 是一种自由和开放源码的类 UNIX 操作系统。 Linux 英文解释为 Linux is not Unix。 Linux 是在 1991 由林纳斯托瓦兹在赫尔辛基大学上学时创立的,主要受到 Minix 和 Unix 思想的启发。 Linux 内核最初只是由芬兰人…

【Linux快速入门】文件目录操作

文章目录 概念1. Linux文件系统概述2. Linux文件目录结构3. Linux文件和目录操作3.1 文件操作3.1.1 创建文件3.1.2 复制文件3.1.3 移动文件3.1.4 删除文件3.1.5 查看文件3.1.6 输出指令3.1.7 >和>>指令 3.2 目录操作3.2.1 创建目录3.2.2 复制目录3.2.3 移动目录3.2.4 …

liunx快速入门

文章目录 第一章、Liunx基础知识1.1 Liunx和Windows和区别1、操作和配置:2、Liunx命令提示符:3、Liunx命令格式:4、Liunx和Windows的用户和密码:5、Liunx中用户和组:6、Liunx和Windows浏览文件:7、Liunx和Windows软件的…

入门必备 | 零基础如何快速入门Linux?

-------首先我们还是来普及以下概念,讲点虚的。现在是图形系统的天下,windows我们用了20年。成功归功与它图形界面,你会点鼠标吗你会敲键盘吗?所以你会上网会聊天会玩游戏了。 第一步 选个linux系统 -------现在发行的Linux系统很多redhat&a…