| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 图解转置卷积原理 -> 正文阅读 |
|
[人工智能]图解转置卷积原理 |
声明:本文大部分搬运自【机器学习】详解 转置卷积 (Transpose Convolution) 1 转置卷积的背景通常,对图像进行多次卷积运算后,特征图的尺寸会不断缩小。而对于某些特定任务 (如图像分割和图像生成等),需将图像恢复到原尺寸再操作。这个将图像由小分辨率映射到大分辨率的尺寸恢复操作,称为上采样 (Upsample),如下图所示: 上采样方法有很多,详见【图像处理】详解 最近邻插值、线性插值、双线性插值、双三次插值。然而,这些上采样方法都是基于人们的先验经验来设计的,规则固定且不可学习,在很多场景中效果并不理想。因此,我们希望神经网络自己学习如何更好地插值,即接下来要介绍的转置卷积。 2 转置卷积的应用曾经,转置卷积也被称为反卷积(Deconvolution)。与传统的上采样方法相比,转置卷积的上采样方式并非预设的插值方法,而是同标准卷积一样,具有可学习的参数,可通过网络学习来获取最优的上采样方式。
3 转置卷积的区别标准卷积的运算操作其实是对卷积核中的元素与输入矩阵上对应位置的元素进行逐像素的乘积并求和。然后,卷积核在输入矩阵上以步长为单位进行滑动,直到遍历完输入矩阵的所有位置。 在上例中,输入矩阵右上角 3×3 范围的值 (黄色 2 3 4) 会影响输出矩阵右上角的值 (黄色 27),这其实也对应了标准卷积中感受野的概念。所以,可以说 3×3 标准卷积核 建立了 输入矩阵中 9 个值 到 输出矩阵中 1 个值 的映射关系。 4 转置卷积的推导定义一个 4×4 输入矩阵 input: 再定义一个 3×3 标准卷积核 kernel: 设步长 stride=1、填充 padding=0,可得 2×2 输出矩阵 output: 这里开始我们换一个表达方式,将输入矩阵 input 和输出矩阵 output 展开成 16×1 列向量 X 和 4×1 列向量 Y,可分别表示为: 接着再用矩阵运算来描述标准卷积运算,设有 新卷积核矩阵 C: 经卷积运算关系推导,可得 4×16 稀疏矩阵 C: 以下用图 4 展示矩阵运算过程: 而转置卷积其实就是要对这个过程进行逆运算,即 通过 C 和 Y 得到 X: 此时, C T C^T CT即为新的 16×4 稀疏矩阵。以下通过图 5 展示转置后的卷积矩阵运算。需要注意的是,用于转置卷积的权重矩阵 C T C^T CT 不一定来自于原卷积矩阵 C C C (通常不会如此恰巧),但其形状和原卷积矩阵 C C C 的转置相同。 最后,将 16×1 的输出结果重新排序,即可通过 2×2 输入矩阵得到 4×4 输出矩阵。 5 转置卷积的输出这里主要想说明的是,转置卷积其实也是一种卷积,转置卷积可以等价于标准卷积。 5.1 stride = 1, padding=0同样,使用上文中的 3×3 卷积核矩阵 C: 输出矩阵 output 仍为: 将输出矩阵展开为 列向量 Y: 带入到上文中的转置卷积计算公式,则转置卷积的计算结果为: 这其实等价于 先填充 padding=2 的输入矩阵 input: 然后,将标准卷积核 kernel朝上翻转,再朝左翻转,得到转置标准卷积核 kernel: 根据上面的方法,同理我们可以得到 3x3 的转置标准卷积核 kernel: 最后,在 填零的输入矩阵 input 上使用 经转置的标准卷积核 kernel 执行 标准卷积运算,如图 6 所示:
更一般地,对于卷积核尺寸 kernel size = k,步长 stride = s = 1,填充 padding = p = 0 的转置卷积,其 等价的标准卷积 在原尺寸为 i ′ i' i′ 的输入矩阵上进行运算,输出特征图的尺寸 o ′ o' o′ 为:
即 kernel size = k,步长 stride = s = 1,填充 padding = p = 0 的转置卷积(注意这里的k、s、p都是针对转置卷积的)等价于这样的标准卷积:输入矩阵 input 在卷积运算前,需先进行 p a d d i n g ′ = k ? 1 padding' = k-1 padding′=k?1 的填充,得到尺寸 i ′ ′ = i ′ + 2 ( k ? 1 ) i'' = i' + 2(k-1) i′′=i′+2(k?1)。 因此,转置卷积输出尺寸可以由标准卷积输入输出尺寸公式推算出来,根据标准卷积输入输出尺寸计算公式可得 (等价的标准卷积的步长 s ′ = 1 s' = 1 s′=1,因为padding已经在 i ′ ′ i'' i′′内进行了,所以下面公式的 p = 0 p=0 p=0):
5.2 stride > 1, padding=0在实际中,我们大多数时候会使用 stride>1 的转置卷积,从而获得较大的上采样倍率。 如下,令输入尺寸为 5 × 5 5×5 5×5,标准卷积核同上 k e r n e l s i z e = k = 3 kernel size = k = 3 kernelsize=k=3,步长 s t r i d e = s = 2 stride = s = 2 stride=s=2,填充 p a d d i n g = p = 0 padding = p = 0 padding=p=0,标准卷积运算后,输出矩阵尺寸为 2 × 2 2×2 2×2: 此处,转换后的稀疏矩阵尺寸变为 25×4,由于矩阵太大这里不展开进行罗列。最终转置卷积的结果为: 此时,等价于 输入矩阵同时添加了 空洞 和 填充,再由转置的标准卷积核进行运算,过程如图 7 所示: 更一般地,对于卷积核尺寸 k e r n e l s i z e = k kernel size = k kernelsize=k,步长 s t r i d e = s > 1 stride = s > 1 stride=s>1,填充 p a d d i n g = p = 0 padding = p = 0 padding=p=0 的转置卷积,其 等价的标准卷积 在原尺寸为 i ′ i' i′ 的输入矩阵上进行运算,输出特征图的尺寸 o ′ o' o′ 为: 即卷积核尺寸 k e r n e l s i z e = k kernel size = k kernelsize=k,步长 s t r i d e = s > 1 stride = s > 1 stride=s>1,填充 p a d d i n g = p = 0 padding = p = 0 padding=p=0 的转置卷积等价于这样的标准卷积:输入矩阵 input 在卷积运算前,需先进行 p a d d i n g ′ = k ? 1 padding' = k-1 padding′=k?1 的填充;然后,相邻元素间的空洞数为 s ? 1 s-1 s?1,共有 i ′ ? 1 i' - 1 i′?1 组空洞需插入;从而,实际尺寸为 i ′ ′ = i ′ + 2 ( k ? 1 ) + ( i ′ ? 1 ) × ( s ? 1 ) = s × ( i ′ ? 1 ) + 2 k ? 1 i'' = i' + 2(k-1) + (i' -1) \times (s-1) = s \times (i' - 1) + 2k - 1 i′′=i′+2(k?1)+(i′?1)×(s?1)=s×(i′?1)+2k?1。 因此,根据标准卷积输入输出尺寸计算公式得 (等价的标准卷积的步长 s ′ = 1 s' = 1 s′=1,因为padding已经在 i ′ ′ i'' i′′内进行了,所以下面公式的 p = 0 p=0 p=0): 可见,通过控制步长 s t r i d e = s stride = s stride=s 的大小可以控制上采样的倍率。 5.3 stride=s, padding=p我们来讨论更一般的情况,这里我直接给出结论。 6 小结
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/9 15:54:11- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |