转置卷积和孔洞卷积(扩张卷积)

链接:https://pan.baidu.com/s/15NsS8WtYQiahM6p_z_YBNQ 
提取码:3q96 

本文对A guide to convolution arithmetic for deep 的第四章部分翻译,纯属个人学习的。

这一篇是讲空洞卷积的:https://www.zhihu.com/question/54149221

膨胀卷积:https://blog.youkuaiyun.com/zhangjunhit/article/details/70157920

前面大部分都讲的是卷积操作,包括卷积核、步长、pad,(pad表示一个维度左右各补充几个0,总共是2*pad的补充)

这几个怎么影响输出的size的,公式:

i是原尺寸,p是补充的pad,k是卷积核的长,s是步长,are you ok? 哈哈

图解:

           

下面这个才是重点

基本意思就是,有一个输入4*4的图片,暂定为一个通道,然后flattened拉平成一行,shape是(16,)用X表示,然后将3*3的卷积核表达成一个稀疏矩阵C,其中的值没有变化。原矩阵:

[[w00,w01,w02],

[w10,w11,w12],

[w20,w21,w22]

]

稀疏矩阵C

然后是CX=result,再reshape成2*2,注意图2.1。这样结果与正常卷积是一样的。

在反向传播时用的就是CT(C的转置),很容易得到。

转置卷积——也称为分阶跃卷积或反卷积-通过交换卷积的正向和反向传递来实现。一种方法是注意到核函数定义了卷积,但是

它是直接卷积还是转置卷积是由如何计算向前和向后传递。

For instance, although the kernel w defines a convolution whose forward and backward passes are computed by multiplying with C and CT respectively, it also defines a transposed convolution whose forward and backward passes are computed by multiplying with CT and (CT ) T = C respectively.

例如,虽然核w定义了一个卷积,它的前向传播和反向传播通过C或者CT乘计算,还定义了一个转置卷积,它的前向和反向传播是用CT和(CT)T的乘计算。

Finally note that it is always possible to emulate a transposed convolution with a direct convolution.The disadvantage is that it usually involves adding many columns and rows of zeros to the input, resulting in a much less efficient implementation

最后请注意,总是可以通过用直接卷积模拟一个转置卷积。缺点是,它通常需要在输入中添加许多列和行0,导致实现效率大大降低.(也就说作者不赞成正向卷积操作,转置卷积操作高效)

直接卷积模拟转置卷积:C.T × result = X (大家可以推推维度),

对于X[0] = *result[0] + 0*result[1] + 0*result[2] + 0*result[3]

转置卷积也称为分阶跃卷积或反卷积( fractionally strided convolutions or deconvolutions),其工作原理是交换卷积的正反向传递。一种方法是注意到核函数定义了卷积,但是它是直接卷积还是转置卷积是由计算正向和反向传递的方式决定的。

考虑对给定输入的用转置卷积的最简单的方法是:

       把输入想象成直接卷积的结果-特征图。因此,转置卷积可以被认为是允许恢复此初始特征映射的形状的操作。

下面的图表示:

        一种可以认为对2*2的恢复成了4*4的,先填充pad=2,然后用3*3卷积核,得到4*4的特征图;

        一种认为对4*4的做了转置卷积操作,得到2*2特征图。(高效  )

最后这几个,我还没看懂,暂时放图上来

5.1 孔卷积

膨胀卷积通过在内核元素之间插入空格使内核膨胀。膨胀率由一个额外的超参数d来控制。实现可能不同,但通常在内核元素之间插入d-1空格,使d = 1对应于一个正则卷积。 

扩展卷积用于在不增加内核大小的情况下廉价地增加输出单元的感受野,当多个扩展卷积一个接一个叠加时,这种方法尤其有效。具体例子见Oord等人(2016),其中提出的WaveNet模型实现了原始音频的自回归生成模型,该模型使用扩展卷积在过去音频帧的大上下文中设置新的音频帧。

为了理解膨胀率d与输出大小o之间的关系,考虑d对有效内核大小的影响是很有用的。大小为k的核被因子d膨胀后具有有效大小:

形成膨胀卷积的关系如下:

<think>好的,我需要回答用户关于转置卷积卷积的区别及应用场景的问题。首先,我得回顾一下用户提供的引用内容,特别是引用[2]引用[3],因为这两个引用直接提到了这两个概念。 根据引用[2],反卷积(Deconvolution)这个术语最早出现在Zeiler的论文中,用于神经网络的可视化。而转置卷积(Transposed Convolution)分数步长卷积(Fractional Strided Convolution)是反卷积的其他名称。这里似乎指出转置卷积卷积是同一个概念的不同叫法,但用户的问题是关于它们的区别,所以可能存在需要澄清的地方。 接下来,引用[3]提到,反卷积在CNN可视化中实际上是卷积转置操作,而不是数学上的逆运算。同时,转置卷积在这里被用作上采样的一种方法,比如在图像分割或生成模型中。这暗示转置卷积可能更多是指技术实现中的转置操作,而反卷积可能是一个更广泛的概念,但有时候被混用。 我需要明确区分这两个术语。根据我的知识,转置卷积在数学上是通过对卷积核进行转置并使用步长来扩大输入尺寸的操作,而反卷积在数学上本应是卷积的逆运算,但在深度学习中通常指的是转置卷积。可能存在术语的混淆,需要指出这一点。 应用场景方面,引用[3]提到了三个方面:无监督学习中的稀疏编码、CNN可视化上采样。转置卷积主要用于上采样生成模型,而反卷积在文献中有时可能指不同的操作,但实际使用中两者常被混用。 因此,我的回答需要明确: 1. 转置卷积卷积在深度学习中的常见用法,指出它们的区别更多是术语上的,但有时可能有不同含义。 2. 转置卷积的具体数学操作应用场景。 3. 反卷积在数学上的原始意义与深度学习中的实际应用的区别。 4. 应用场景如生成模型、图像分割等。 需要确保回答结构清晰,分点说明概念、区别应用场景,并正确使用LaTeX格式,引用用户提供的引用内容,并在末尾添加相关问题。</think>### 转置卷积与反卷积的区别及应用场景 #### 1. **基本概念** - **转置卷积(Transposed Convolution)** 是一种通过调整卷积核的排列方式实现输入特征图尺寸放大的操作。数学上,其核心是**对标准卷积的矩阵运算进行转置**。例如,标准卷积的矩阵形式为$Y = WX + b$,则转置卷积可表示为$X' = W^T Y'$。它通过填充(padding)步长(stride)的调整实现上采样,常用于图像生成或分割任务[^2][^3]。 - **反卷积(Deconvolution)** 在数学上本应指卷积运算的逆运算(即解卷积),但在深度学习中这一术语常被**误用**为转置卷积的同义词。例如,Zeiler在CNN可视化中使用的“反卷积”实质是转置卷积操作,而非数学上的逆运算[^2][^3]。 #### 2. **核心区别** | 特性 | 转置卷积 | 反卷积(数学定义) | |---------------------|-----------------------------------|-----------------------------------| | **数学本质** | 卷积核的转置运算 | 严格意义上的卷积逆运算 | | **实现目标** | 上采样或特征图尺寸放大 | 从输出恢复原始输入信号 | | **深度学习中的应用**| 广泛用于生成模型、图像分割等任务 | 极少直接使用,多被转置卷积替代 | #### 3. **应用场景** - **转置卷积的典型应用** - **图像生成**:如GAN中生成高分辨率图像,通过转置卷积逐步扩大特征图尺寸。 - **语义分割**:在U-Net等模型中,通过转置卷积恢复空间分辨率以实现像素级预测。 - **特征可视化**:将深层特征映射回像素空间,解释网络的学习模式[^3]。 - **反卷积的原始意义** 数学上的反卷积在信号处理中用于去模糊或消除卷积效应,但在深度学习中几乎不直接应用,仅作为术语与转置卷积混淆使用[^2][^3]。 #### 4. **实现对比** - **转置卷积的步长与填充** 若标准卷积的步长为$s$,转置卷积通过插入$s-1$个零实现输入扩大。例如,输入尺寸为$n$,输出尺寸为$n' = s(n-1) + k$($k$为卷积核大小)[^3]。 - **代码示例(PyTorch)** ```python import torch.nn as nn # 转置卷积层:输入通道1,输出通道1,核大小3,步长2 transposed_conv = nn.ConvTranspose2d(1, 1, kernel_size=3, stride=2) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值