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

    浏览量

    18499

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

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

收藏 人收藏

    评论

    相关推荐

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

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

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

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

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

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

    C语言教程之矩阵的

    C语言教程之矩阵的,很好的C语言资料,快来学习吧。
    发表于 04-25 15:41 0次下载

    如何使用基于卷积操作改进进行单阶段多边框目标检测方法

    针对单阶段多边框目标检测( SSD)模型在以高交并比(IoU)评估平均检测精度(mAP)时出现的精度下降问题,提出一种使用卷积操作构建的循环特征聚合模型。该模型以SSD模型为
    发表于 12-12 11:49 4次下载
    如何使用基于<b class='flag-5'>转</b><b class='flag-5'>置</b><b class='flag-5'>卷积</b>操作改进进行单阶段多边框目标检测方法

    深度学习中的各种卷积网络大家知多少

    对于那些听说过却又对它们没有特别清晰的认识的小伙伴们,这篇文章非常值得一读。Kunlun Bai 是一位人工智能、机器学习、物体学以及工程学领域的研究型科学家,在本文中,他详细地介绍了 2D、3D、1x1 、 、空洞(扩张)、空间可分离、
    的头像 发表于 02-22 09:44 4153次阅读

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

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

    一篇文章搞定CNN卷积

    在CNN中,卷积是一种上采样(up-sampling)的方法。如果你对转卷积感到困惑,那么就来读读这篇文章吧。
    的头像 发表于 01-31 17:32 4610次阅读

    深度学习&计算机视觉方向的相关面试题

    卷积也称为卷积,如果用矩阵乘法实现卷积操作,将卷积核平铺为矩阵,则
    的头像 发表于 09-24 13:04 2538次阅读
    <b class='flag-5'>深度</b>学习&计算机视觉方向的相关面试题

    深入理解深度学习中的反()卷积

    本文首发于 GiantPandaCV :深入理解神经网络中的反()卷积作者:梁德澎本文主要是把之前在知乎上的回答:反卷积和上采样+卷积
    发表于 02-07 11:17 0次下载
    深入理解<b class='flag-5'>深度</b>学习中的反(<b class='flag-5'>转</b><b class='flag-5'>置</b>)<b class='flag-5'>卷积</b>

    PyTorch教程14.10之卷积

    电子发烧友网站提供《PyTorch教程14.10之卷积.pdf》资料免费下载
    发表于 06-05 11:11 0次下载
    PyTorch教程14.10之<b class='flag-5'>转</b><b class='flag-5'>置</b><b class='flag-5'>卷积</b>

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

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

    MATLAB | 这是我见过最离谱的操作

    注:此操作与 t-product 积相对应,在其他类型张量运算中的操作可能有不同的定义方式,请注意区分。
    的头像 发表于 07-21 11:50 791次阅读
    MATLAB | 这是我见过最离谱的<b class='flag-5'>转</b><b class='flag-5'>置</b>操作

    卷积神经网络的工作原理和应用

    卷积神经网络(FCN)是深度学习领域中的一种特殊类型的神经网络结构,尤其在计算机视觉领域表现出色。它通过全局平均池化或卷积处理任意尺寸
    的头像 发表于 07-11 11:50 951次阅读

    如何在Tensorflow中实现反卷积

    在TensorFlow中实现反卷积(也称为卷积或分数步长卷积)是一个涉及多个概念和步骤的过程。反卷积
    的头像 发表于 07-14 10:46 540次阅读