0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

深度解析什么是转置卷积

智能感知与物联网技术研究所 来源:CSDN博客 作者:CSDN博客 2020-09-03 09:39 次阅读

这篇文章对转置卷积(反卷积)有着很好的解释,这里将其翻译为中文,以飨国人。

对于上采用的需求

当我们用神经网络生成图片的时候,经常需要将一些低分辨率的图片转换为高分辨率的图片。

对于这种上采样(up-sampling)操作,目前有着一些插值方法进行处理: 最近邻插值(Nearest neighbor interpolation) 双线性插值(Bi-Linear interpolation) 双立方插值(Bi-Cubic interpolation) 以上的这些方法都是一些插值方法,需要我们在决定网络结构的时候进行挑选。这些方法就像是人工特征工程一样,并没有给神经网络学习的余地,神经网络不能自己学习如何更好地进行插值,这个显然是不够理想的。

为什么是转置卷积

转置卷积(Transposed Convolution)常常在一些文献中也称之为反卷积(Deconvolution)和部分跨越卷积(Fractionally-strided Convolution),因为称之为反卷积容易让人以为和数字信号处理中反卷积混起来,造成不必要的误解,因此下文都将称为转置卷积,并且建议各位不要采用反卷积这个称呼。 如果我们想要我们的网络可以学习到最好地上采样的方法,我们这个时候就可以采用转置卷积。这个方法不会使用预先定义的插值方法,它具有可以学习的参数。理解转置卷积这个概念是很重要的,因为它在若干重要的文献中都有所应用,如: 1、在DCGAN中的生成器将会用随机值转变为一个全尺寸(full-size)的图片,这个时候就需要用到转置卷积。 2、在语义分割中,会使用卷积层在编码器中进行特征提取,然后在解码层中进行恢复为原先的尺寸,这样才可以对原来图像的每个像素都进行分类。这个过程同样需要用到转置卷积。

卷积操作

让我们回顾下卷积操作是怎么工作的,并且我们将会从一个小例子中直观的感受卷积操作。假设我们有一个的矩阵,我们将在这个矩阵上应用的卷积核,并且不添加任何填充(padding),步进参数(stride)设置为1,就像下图所示,输出为一个的矩阵。

这个卷积操作在输入矩阵和卷积核中,对每个元素的乘积进行相加。因为我们没有任何填充和使用1为步进,因此我们只能对这个操作进行4次,因此我们的输出矩阵尺寸为。

这种卷积操作使得输入值和输出值之间存在有位置上的连接关系,举例来说,输入矩阵左上方的值将会影响到输出矩阵的左上方的值。更具体而言,的卷积核是用来连接输入矩阵中的9个值,并且将其转变为输出矩阵的一个值的。一个卷积操作是一个多对一(many-to-one)的映射关系。让我们记住这个,我们接下来将会用得着。

反过来操作吧

现在,假设我们想要反过来操作。我们想要将输入矩阵中的一个值映射到输出矩阵的9个值,这将是一个一对多(one-to-many)的映射关系。这个就像是卷积操作的反操作,其核心观点就是用转置卷积。举个例子,我们对一个的矩阵进行上采样为的矩阵。这个操作将会维护一个1对应9的映射关系。

因此就结论而言,卷积操作是多对一,而转置卷积操作是一对多,如下图所示,每一个“对”而言,都需要维护一个权值。

但是我们将如何具体操作呢?为了接下来的讨论,我们需要定义一个卷积矩阵(convolution matrix)和相应的转置卷积矩阵(transposed convolution matrix)。

卷积矩阵

我们可以将一个卷积操作用一个矩阵表示。这个表示很简单,无非就是将卷积核重新排列到我们可以用普通的矩阵乘法进行矩阵卷积操作。如下图就是原始的卷积核:

我们对这个的卷积核进行重新排列,得到了下面这个的卷积矩阵:

这个便是卷积矩阵了,这个矩阵的每一行都定义了一个卷积操作。下图将会更加直观地告诉你这个重排列是怎么进行的。每一个卷积矩阵的行都是通过重新排列卷积核的元素,并且添加0补充(zero padding)进行的。

为了将卷积操作表示为卷积矩阵和输入矩阵的向量乘法,我们将输入矩阵摊平(flatten)为一个列向量,形状为,如下图所示。

我们可以将这个的卷积矩阵和的输入列向量进行矩阵乘法,这样我们就得到了输出列向量。

这个输出的的矩阵可以重新塑性为一个的矩阵,而这个矩阵正是和我们一开始通过传统的卷积操作得到的一模一样。

简单来说,这个卷积矩阵除了重新排列卷积核的权重之外就没有啥了,然后卷积操作可以通过表示为卷积矩阵和输入矩阵的列向量形式的矩阵乘积形式进行表达。 所以各位发现了吗,关键点就在于这个卷积矩阵,你可以从16()到4()因为这个卷积矩阵尺寸正是的,然后呢,如果你有一个的矩阵,你就可以从4()到16()了,这不就是一个上采样的操作吗?啊哈!让我们继续吧!

转置卷积矩阵

我们想要从4()到16(),因此我们使用了一个的矩阵,但是还有一件事情需要注意,我们是想要维护一个1到9的映射关系。 假设我们转置这个卷积矩阵变为。我们可以对和列向量进行矩阵乘法,从而生成一个的输出矩阵。这个转置矩阵正是将一个元素映射到了9个元素。

这个输出可以塑形为的矩阵:

我们只是对小矩阵进行上采样为一个更大尺寸的矩阵。这个转置卷积矩阵维护了一个1个元素到9个元素的映射关系,因为这个关系正表现在了其转置卷积元素上。需要注意的是:这里的转置卷积矩阵的参数,不一定从原始的卷积矩阵中简单转置得到的,转置这个操作只是提供了转置卷积矩阵的形状而已。

总结

转置卷积操作构建了和普通的卷积操作一样的连接关系,只不过这个是从反向方向开始连接的。我们可以用它进行上采样。另外,这个转置卷积矩阵的参数是可以学习的,因此我们不需要一些人为预先定义的方法。即使它被称为转置卷积,它并不是意味着我们将一些现存的卷积矩阵简单转置并且使用其转置后的值。 从本质来说,转置卷积不是一个卷积,但是我们可以将其看成卷积,并且当成卷积这样去用。我们通过在输入矩阵中的元素之间插入0进行补充,从而实现尺寸上采样,然后通过普通的卷积操作就可以产生和转置卷积相同的效果了。你在一些文章中将会发现他们都是这样解释转置卷积的,但是这个因为在卷积操作之前需要通过添加0进行上采样,因此是比较低效率的。注意:转置卷积会导致生成图像中出现棋盘效应(checkerboard artifacts),这篇文章《Deconvolution and Checkerboard Artifacts》推荐了一种上采样的操作(也就是插值操作),这个操作接在一个卷积操作后面以减少这种现象。如果你的主要目的是生成尽可能少棋盘效应的图像,那么这篇文章就值得你去阅读。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 卷积
    +关注

    关注

    0

    文章

    95

    浏览量

    18410

原文标题:一文搞懂转置卷积(反卷积)

文章出处:【微信号:tyutcsplab,微信公众号:智能感知与物联网技术研究所】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    使用PyTorch深度解析卷积神经网络

    卷积神经网络(CNN)是一种特殊类型的神经网络,在图像上表现特别出色。卷积神经网络由Yan LeCun在1998年提出,可以识别给定输入图像中存在的数字。
    发表于 09-21 10:12 685次阅读

    深度学习中常用的几种卷积 不同情况下的卷积定义方式

    在本文中,我尽量使用简单明了的方式向大家解释深度学习中常用的几种卷积,希望能够帮助你建立学习体系,并为你的研究提供参考。 Convolution VS Cross-correlation 卷积是一项
    的头像 发表于 10-08 23:59 6526次阅读
    <b class='flag-5'>深度</b>学习中常用的几种<b class='flag-5'>卷积</b> 不同情况下的<b class='flag-5'>卷积</b>定义方式

    什么是卷积码? 什么是卷积码的约束长度?

    长度,并把卷积码记为: (n, k, N) 。其码率也为Rc  =k/n  。非二进制卷积码的形式很容易以此类推。卷积码的描述方式分为解析法和图解法
    发表于 05-30 16:06

    I2C通信设计深度解析

    I2C通信设计深度解析
    发表于 08-12 21:31

    labview多维数组

    labvie多维数组
    发表于 12-10 16:28

    java经典面试题深度解析

    免费视频教程:java经典面试题深度解析对于很多初学者来说,学好java在后期面试的阶段都没什么经验,为了让大家更好的了解面试相关知识,今天在这里给大家分享了一个java经典面试题深度解析
    发表于 06-20 15:16

    卷积神经网络—深度卷积网络:实例探究及学习总结

    深度学习工程师-吴恩达》03卷积神经网络—深度卷积网络:实例探究 学习总结
    发表于 05-22 17:15

    卷积神经网络CNN介绍

    深度学习】卷积神经网络CNN
    发表于 06-14 18:55

    解析深度学习:卷积神经网络原理与视觉实践

    解析深度学习:卷积神经网络原理与视觉实践
    发表于 06-14 22:21

    AUTOSAR架构深度解析 精选资料推荐

    AUTOSAR架构深度解析本文转载于:AUTOSAR架构深度解析目录AUTOSAR架构深度解析A
    发表于 07-28 07:40

    AUTOSAR架构深度解析 精选资料分享

    AUTOSAR架构深度解析本文转载于:AUTOSAR架构深度解析AUTOSAR的分层式设计,用于支持完整的软件和硬件模块的独立性(Independence),中间RTE(Runtime
    发表于 07-28 07:02

    C语言深度解析

    C语言深度解析,本资料来源于网络,对C语言的学习有很大的帮助,有着较为深刻的解析,可能会对读者有一定的帮助。
    发表于 09-28 07:00

    探析深度学习中的各种卷积

    在信号处理、图像处理和其它工程/科学领域,卷积都是一种使用广泛的技术。在深度学习领域,卷积神经网络(CNN)这种模型架构就得名于这种技术。但是,深度学习领域的
    的头像 发表于 02-26 10:01 3138次阅读
    探析<b class='flag-5'>深度</b>学习中的各种<b class='flag-5'>卷积</b>

    如何采用FPGA技术实现深度卷积网络(2)

    卷积神经网络是一类包含卷积计算且具有深度结构的前馈神经网络,是深度学习的代表算法之一 。卷积神经网络具有表征学习能力,能够按其阶层结构对输入
    的头像 发表于 11-25 07:04 2070次阅读

    深度学习中的各种卷积原理解析

    从技术上讲,信号处理中的去卷积卷积运算的逆运算。但这里却不是这种运算。因此,某些作者强烈反对将转置卷积称为去卷积
    发表于 07-01 10:24 555次阅读
    <b class='flag-5'>深度</b>学习中的各种<b class='flag-5'>卷积</b>原理<b class='flag-5'>解析</b>