一文让你看懂转置卷积(反卷积,分数卷积),非常详细的图解描述

2024-06-21 09:32

本文主要是介绍一文让你看懂转置卷积(反卷积,分数卷积),非常详细的图解描述,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击上方“AI公园”,关注公众号,选择加“星标“或“置顶”


者:Naoki Shibuya

编译:ronghuaiyang

导读

    如果你听说过转置卷积并对它的实际含义感到困惑,这篇文章就是为你写的

如果你听说过转置卷积并对它的实际含义感到困惑,这篇文章就是为你写的。

上采样的需求

当我们使用神经网络来生成图像的时候,通常需要从低分辨率的图像上采样成高分辨率的图像。

640?wx_fmt=png

有很多的方法来实现上采样的操作:

  • 最近邻插值

  • 双线性插值

  • 双三次插值

这些方法都涉及插值,需要在确定网络结构时进行选择。它就像一个手工的特征工程,网络对此一无所知。

为什么用转置卷积?

如果我们想要我们的网络学习到如何最优化的进行上采样,我们可以使用转置卷积。它没有使用预先定义好的插值方法,具有可学习的参数。

理解转置卷积的概念非常有用,因为在一些重要的论文和工程都都会用到,比如:

  • 在DCGAN中,生成器使用随机采样的值来生成全尺寸的图像。

  • 在语义分割中,在编码阶段使用卷积层来抽取特征,然后在解码阶段,恢复原始的图像尺寸,对原始图像的每一个像素进行分类。

转置卷积也称为:

  • 分数步长的卷积

  • 反卷积

在文中,我们只会使用反卷积,但是你需要在其他的文章中注意一下其他的名字。

卷积操作

我们用一个简单的例子来解释一下卷积是怎么工作的。假设我们有一个4x4的矩阵,需要在上面使用一个3x3的卷积核进行卷积操作,不做padding,步长为1。如下面所示,输出为2x2的矩阵。

640?wx_fmt=png

卷积操作


卷积运算计算输入矩阵和核矩阵之间的元素乘积的和。因为我们没有padding,步长为1,我们只能做4次。因此,输出矩阵是2x2的 。

640?wx_fmt=png

对应元素相乘再求和


这种卷积运算的一个重要特点是输入值和输出值之间存在位置连通性。

例如,输入矩阵的左上角值影响输出矩阵的左上角值。

更具体地说,3x3卷积核用于连接输入矩阵中的9个值和输出矩阵中的1个值。卷积运算形成多对一关系。让我们记住这一点,因为我们以后需要它。

反过来

现在,假设我们想要反过来操作。我们想把一个矩阵中的1个值和另一个矩阵中的9个值联系起来。这是一对多的关系。这就像是卷积运算的反运算,它是转置卷积的核心思想。

例如,我们上采样一个2x2矩阵到一个4x4矩阵。这个操作维护了一个1到9的关系。

640?wx_fmt=png

卷积运算反过来

但是我们怎么来进行这样的操作呢?

为了讨论如何进行这个操作,我们需要定义卷积矩阵转置卷积矩阵

卷积矩阵

我们可以用矩阵来表示卷积运算。它只是一个重新排列的卷积核矩阵,这样我们就可以用矩阵乘法来进行卷积运算了。

640?wx_fmt=png

我们将3x3卷积核重新排列为4x16的矩阵如下:

640?wx_fmt=png

这就是卷积矩阵。每一行定义一个卷积运算。如果你看不懂上面的图的话,下面的图表可能会有所帮助。卷积矩阵的每一行只是一个重新排列的卷积核矩阵,在不同的地方用零来填充。

640?wx_fmt=png

为了使用这个矩阵,我们把输入矩阵 (4x4)拉平成一个列向量 (16x1)。

640?wx_fmt=png

拉平了的输入矩阵

我们可以将4x16卷积矩阵与16x1输入矩阵(16维列向量)相乘。

640?wx_fmt=png

输出的4x1矩阵可以被reshape成2x2的矩阵,得到与之前相同的结果。

640?wx_fmt=png

总之,卷积矩阵就是对卷积核权值重新排列的矩阵,卷积运算可以通过使用卷积矩阵表示。

那又怎样呢?

重点是使用卷积矩阵,你可以从16 (4x4)到4 (2x2)因为卷积矩阵是4x16。然后,如果你有一个16x4的矩阵,你可以从4 (2x2)到16 (4x4)。

是不是有点懵逼?

请继续读下去。

转置卷积矩阵

我们想要从4 (2x2)到16 (4x4),所以,我们使用一个16x4的矩阵。但是,还有一样,我们要得到一个1到9的关系。

假设我们将卷积矩阵C (4x16)转置到C.T (16x4)。我们可以对C用一个列向量(4x1)使用矩阵乘法,生成一个输出矩阵(16x1)。转置矩阵将1个值与输出中的9个值连接起来。

640?wx_fmt=png

使用矩阵乘法来做卷积

将输出reshape成4x4。

640?wx_fmt=png

我们刚刚将一个较小的矩阵(2x2)上采样到一个较大的矩阵(4x4)。由于转置卷积重新排列权值的方式,它保持了1到9的关系。

注意:矩阵中的实际权值不一定来自原始卷积矩阵。重要的是权重的排布是由卷积矩阵的转置得来的。

总结

转置卷积运算与普通卷积形成相同的连通性,但方向是反向的。

我们可以用它来进行上采样。此外,转置卷积的权值是可以学习的。所以我们不需要一个预定义的插值方法。

尽管它被称为转置卷积,但这并不意味着我们取某个已有的卷积矩阵并使用转置后的版本。重点是,与标准卷积矩阵(一对多关联而不是多对一关联)相比,输入和输出之间的关联是以反向的方式处理的。

因此,转置卷积不是卷积。但是我们可以用卷积来模拟转置卷积。我们通过在输入矩阵的值之间加零来对输入进行上采样,这样直接卷积就会产生与转置卷积相同的效果。你可能会发现一些文章用这种方式解释了转置卷积。但是,由于需要在卷积之前对输入进行上采样,所以效率较低。

注意事项:转置卷积是生成图像中棋盘伪影的原因。本文推荐上采样操作(即插值的方法),然后进行卷积运算来减少这些问题。如果你的主要目标是生成没有这些伪影的图像,那么阅读本文以了解更多信息是值得的。

640?wx_fmt=png— END—

英文原文:https://towardsdatascience.com/up-sampling-with-transposed-convolution-9ae4f2df52d0

640?wx_fmt=jpeg

请长按或扫描二维码关注本公众号

喜欢的话,请给我个好看吧640?wx_fmt=gif

这篇关于一文让你看懂转置卷积(反卷积,分数卷积),非常详细的图解描述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1080847

相关文章

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

一文详解SpringBoot中控制器的动态注册与卸载

《一文详解SpringBoot中控制器的动态注册与卸载》在项目开发中,通过动态注册和卸载控制器功能,可以根据业务场景和项目需要实现功能的动态增加、删除,提高系统的灵活性和可扩展性,下面我们就来看看Sp... 目录项目结构1. 创建 Spring Boot 启动类2. 创建一个测试控制器3. 创建动态控制器注

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

Python设置Cookie永不超时的详细指南

《Python设置Cookie永不超时的详细指南》Cookie是一种存储在用户浏览器中的小型数据片段,用于记录用户的登录状态、偏好设置等信息,下面小编就来和大家详细讲讲Python如何设置Cookie... 目录一、Cookie的作用与重要性二、Cookie过期的原因三、实现Cookie永不超时的方法(一)

SpringBoot整合liteflow的详细过程

《SpringBoot整合liteflow的详细过程》:本文主要介绍SpringBoot整合liteflow的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...  liteflow 是什么? 能做什么?总之一句话:能帮你规范写代码逻辑 ,编排并解耦业务逻辑,代码

一文详解Git中分支本地和远程删除的方法

《一文详解Git中分支本地和远程删除的方法》在使用Git进行版本控制的过程中,我们会创建多个分支来进行不同功能的开发,这就容易涉及到如何正确地删除本地分支和远程分支,下面我们就来看看相关的实现方法吧... 目录技术背景实现步骤删除本地分支删除远程www.chinasem.cn分支同步删除信息到其他机器示例步骤

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

一文详解Java Stream的sorted自定义排序

《一文详解JavaStream的sorted自定义排序》Javastream中的sorted方法是用于对流中的元素进行排序的方法,它可以接受一个comparator参数,用于指定排序规则,sorte... 目录一、sorted 操作的基础原理二、自定义排序的实现方式1. Comparator 接口的 Lam

HTML img标签和超链接标签详细介绍

《HTMLimg标签和超链接标签详细介绍》:本文主要介绍了HTML中img标签的使用,包括src属性(指定图片路径)、相对/绝对路径区别、alt替代文本、title提示、宽高控制及边框设置等,详细内容请阅读本文,希望能对你有所帮助... 目录img 标签src 属性alt 属性title 属性width/h