当前位置: 首页 > article >正文

卷积神经网络进阶:转置卷积与棋盘效应详解

【内容摘要】
本文深入解析卷积神经网络中的转置卷积(反卷积)技术,重点阐述标准卷积转置卷积的计算过程、转置卷积上采样作用,以及其常见问题——棋盘效应的产生原因与解决方法,为图像分割、超分辨率等任务提供理论支持。

关键词: 转置卷积 反卷积 棋盘效应 标准卷积 上采样 卷积神经网络


卷积神经网络(CNN)中,转置卷积(Transposed Convolution,又称反卷积Deconvolution)是实现特征图上采样的关键技术,广泛应用于语义分割、超分辨率等需要恢复空间分辨率的任务中。本文将从标准卷积的计算原理出发,详细解析转置卷积的操作过程,并重点讨论其常见问题——棋盘效应的产生机制与解决方法。

一、标准卷积的计算过程

要理解转置卷积,首先需要明确标准卷积的运算方式。标准卷积是通过卷积核对输入特征图进行滑窗点乘求和的过程,其核心步骤包括卷积核旋转(通常为180°)、中心对齐与局部区域计算。

以图1所示的标准卷积输出计算为例,输入为一个3×3的像素矩阵,卷积核为3×3的矩阵(值为[-1,-2,-1;0,0, 0;1,2, 1])。计算左上角(第1行第1列)像素的卷积值时,需将卷积核旋转180°后与输入矩阵的左上角3×3区域对齐,逐元素相乘后求和:

  1. (x)矩阵和(h)矩阵

    • (x)矩阵:

      X = [ x [ − 1 , − 1 ] x [ 0 , − 1 ] x [ 1 , − 1 ] x [ − 1 , 0 ] x [ 0 , 0 ] x [ 1 , 0 ] x [ − 1 , 1 ] x [ 0 , 1 ] x [ 1 , 1 ] ] = [ 0 0 0 0 1 2 0 4 5 ] X=\begin{bmatrix} x[-1,-1]&x[0,-1]&x[1,-1]\\ x[-1,0]&x[0,0]&x[1,0]\\ x[-1,1]&x[0,1]&x[1,1] \end{bmatrix}=\begin{bmatrix} 0&0&0\\ 0&1&2\\ 0&4&5 \end{bmatrix} X= x[1,1]x[1,0]x[1,1]x[0,1]x[0,0]x[0,1]x[1,1]x[1,0]x[1,1] = 000014025

    • (h)矩阵:

      H = [ h [ 1 , 1 ] h [ 1 , 0 ] h [ 1 , − 1 ] h [ 0 , 1 ] h [ 0 , 0 ] h [ 0 , − 1 ] h [ − 1 , 1 ] h [ − 1 , 0 ] h [ − 1 , − 1 ] ] = [ 1 0 − 1 2 0 − 2 1 0 − 1 ] H=\begin{bmatrix} h[1,1]&h[1,0]&h[1,-1]\\ h[0,1]&h[0,0]&h[0,-1]\\ h[-1,1]&h[-1,0]&h[-1,-1] \end{bmatrix}=\begin{bmatrix} 1&0& - 1\\ 2&0& - 2\\ 1&0& - 1 \end{bmatrix} H= h[1,1]h[0,1]h[1,1]h[1,0]h[0,0]h[1,0]h[1,1]h[0,1]h[1,1] = 121000121

  2. 矩阵运算过程

    • 这里计算(y[0,0])相当于计算矩阵(X)和(H)的一种特殊卷积形式(在这种小矩阵情况下类似矩阵乘法的元素对应相乘再求和),从矩阵乘法角度看,可看作是对矩阵元素对应相乘后求和。
    • 按照矩阵乘法规则( C i j = ∑ k = 1 n A i k B k j C_{ij}=\sum_{k = 1}^{n}A_{ik}B_{kj} Cij=k=1nAikBkj)(这里(n = 3) ),对于(y[0,0]),它等于(X)和(H)对应元素乘积之和。
    • 具体计算:

y [ 0 , 0 ] = X ⋅ H T = x [ − 1 , − 1 ] ⋅ h [ 1 , 1 ] + x [ 0 , − 1 ] ⋅ h [ 0 , 1 ] + x [ 1 , − 1 ] ⋅ h [ − 1 , 1 ] + x [ − 1 , 0 ] ⋅ h [ 1 , 0 ] + x [ 0 , 0 ] ⋅ h [ 0 , 0 ] + x [ 1 , 0 ] ⋅ h [ − 1 , 0 ] + x [ − 1 , 1 ] ⋅ h [ 1 , − 1 ] + x [ 0 , 1 ] ⋅ h [ 0 , − 1 ] + x [ 1 , 1 ] ⋅ h [ − 1 , − 1 ] = 0 × 1 + 0 × 2 + 0 × 1 + 0 × 0 + 1 × 0 + 2 × 0 + 0 × ( − 1 ) + 4 × ( − 2 ) + 5 × ( − 1 ) \begin{align*} y[0,0]=X \cdot\ H^T&=x[-1,-1]\cdot h[1,1]+x[0,-1]\cdot h[0,1]+x[1,-1]\cdot h[-1,1]\\ &+x[-1,0]\cdot h[1,0]+x[0,0]\cdot h[0,0]+x[1,0]\cdot h[-1,0]\\ &+x[-1,1]\cdot h[1,-1]+x[0,1]\cdot h[0,-1]+x[1,1]\cdot h[-1,-1]\\ &=0\times1 + 0\times2+0\times1+0\times0 + 1\times0+2\times0+0\times(-1)+4\times(-2)+5\times(-1) \end{align*} y[0,0]=X HT=x[1,1]h[1,1]+x[0,1]h[0,1]+x[1,1]h[1,1]+x[1,0]h[1,0]+x[0,0]h[0,0]+x[1,0]h[1,0]+x[1,1]h[1,1]+x[0,1]h[0,1]+x[1,1]h[1,1]=0×1+0×2+0×1+0×0+1×0+2×0+0×(1)+4×(2)+5×(1)

通过滑动卷积核(步长为1),最终得到3×3的输出特征图(图2为更直观的卷积值计算过程示意图)。

在这里插入图片描述
在这里插入图片描述

图1:标准卷积输出计算

在这里插入图片描述

图2:更直观的卷积值计算过程示意图

二、转置卷积的操作原理

转置卷积的核心目标是将小尺寸的特征图上采样为大尺寸特征图,其名称源于其数学本质是标准卷积转置操作(即矩阵运算中的转置)。以下通过具体示例说明其计算过程。

假设输入特征图大小为2×2,卷积核大小为4×4,滑动步长为3,输出特征图大小可通过公式计算:
o u t = ( i n − 1 ) × s + k out = (in-1)×s + k out=(in1)×s+k
其中,in为输入大小,s为步长,k为卷积核大小。代入数值得:
o u t = ( 2 − 1 ) × 3 + 4 = 7 out = (2-1)×3 + 4 = 7 out=(21)×3+4=7
即输出特征图为7×7。

转置卷积的具体步骤如下(图3为图像的转置卷积过程示意图):

  1. 全卷积展开:输入特征图的每个像素独立进行全卷积(即填充后卷积),每个像素生成一个4×4的特征图(大小为1+4-1=4)。输入有4个像素,因此生成4个4×4的特征图。
  2. 步长叠加:将4个特征图按步长3进行叠加,重叠区域的像素值相加。例如,输出的第1行第4列像素由第一个特征图的第1行第4列与第二个特征图的第1行第1列相加得到。

在这里插入图片描述

图3:图像的转置卷积过程

三、棋盘效应的产生与解决

转置卷积虽能有效上采样常伴随“棋盘效应”(Checkerboard Artifacts),即输出图像中出现类似棋盘格的不均匀色块(图4为棋盘效应示意图)。

在这里插入图片描述

图4:棋盘效应示意图

(一)产生原因

棋盘效应的本质是卷积核大小无法被步长整除时的不均匀重叠。以图5为例,当卷积步长为2,卷积核尺寸为3或5时,输出像素接收到的输入信息量不一致:

  • 若卷积核尺寸能被步长整除(如步长2、核尺寸4),输出像素的信息重叠均匀,无棋盘效应
  • 若无法整除(如步长2、核尺寸3),相邻像素的信息重叠量不同,导致局部颜色深浅不一。

在这里插入图片描述

图5:卷积步长改为2时的棋盘效应示意图

(二)解决方法

为减轻或避免棋盘效应,可采用以下策略:

  1. 匹配核尺寸与步长:确保卷积核大小能被步长整除,例如步长2时选择核尺寸4,避免不均匀重叠;
  2. 使用步长1的转置卷积:步长为1时,卷积核的重叠区域均匀,可有效减少棋盘效应
  3. 替代上采样方法:如采用双线性插值、最近邻插值等传统上采样方法,或结合转置卷积与像素重组(Pixel Shuffle)技术。

四、总结

转置卷积是CNN中实现上采样的重要工具,但其引入的棋盘效应需特别关注。通过理解标准卷积转置卷积的数学本质,合理设计卷积核尺寸与步长,可有效规避棋盘效应,提升模型在语义分割、超分辨率等任务中的性能。

http://www.lryc.cn/news/2379682.html

相关文章:

  • 用 Kotlin 脚本(KTS)重塑 Android 工程效能:2000 字终极实践指南
  • 2025年5月13日第一轮
  • HarmonyOs开发之———使用HTTP访问网络资源
  • 小结:Android系统架构
  • 单物理机上部署多个TaskManager与调优 Flink 集群
  • 基于C#的MQTT通信实战:从EMQX搭建到发布订阅全解析
  • VUE3_ref和useTemplateRef获取组件实例,ref获取dom对象
  • ISP中拖影问题的处理
  • C++.备考知识点
  • SQLMesh 模型管理指南:从创建到验证的全流程解析
  • HarmonyOS AVPlayer 音频播放器
  • ⭐️白嫖的阿里云认证⭐️ 第二弹【课时1:提示词(Prompt)技巧】for 「大模型Clouder认证:利用大模型提升内容生产能力」
  • Filament引擎(一) ——渲染框架设计
  • c++从入门到精通(六)--特殊工具与技术-完结篇
  • JDK 1.8 全解析:从核心特性到企业实战的深度实践
  • MCP实战:在扣子空间用扣子工作流MCP,一句话生成儿童故事rap视频
  • 分布式微服务系统架构第134集:笔记1运维服务器经验,高并发,大数据量系统
  • 【SSL证书系列】客户端如何验证https网站服务器发的证书是否由受信任的根证书签发机构签发
  • SpringBoot基础项目搭建
  • Rust 学习笔记:关于 HashMap 的练习题
  • C语言-8.数组
  • Kotlin Android单元测试MockK指南
  • C# lock
  • 《算法导论(第4版)》阅读笔记:p83-p85
  • Go 后端中双 token 的实现模板
  • 【拥抱AI】Deer-Flow字节跳动开源的多智能体深度研究框架
  • 第六天——贪心算法——字符串分隔
  • Python 条件语句详解
  • 前端获取用户的公网 IP 地址
  • 在Maven中替换文件内容的插件和方法