news 2026/7/15 21:33:25

转置卷积(Transposed Convolution)—— 上采样

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
转置卷积(Transposed Convolution)—— 上采样

核心思想:每个输入像素"铺开"成一个核

普通卷积是多个输入像素合并成1个输出像素

转置卷积反过来:1个输入像素"生成"多个输出像素


具体例子

设定

  • 输入:2×2 的特征图
  • 卷积核:2×2(为了简单,实际常用 3×3)
  • 步长 stride = 2
输入: 卷积核: ┌───┬───┐ ┌───┬───┐ │ a │ b │ │ w │ x │ ├───┼───┤ ├───┼───┤ │ c │ d │ │ y │ z │ └───┴───┘ └───┴───┘

转置卷积的"铺砖"过程

核心操作:每个输入像素 × 整个卷积核,然后按 stride 间隔铺到输出图上。

第一步:输入像素 a 铺开

a 位于左上角,在输出图的 (0,0) 位置铺一个 2×2 的块:

列0 列1 列2 列3 ┌─────┬─────┬─────┬─────┐ 行0 │ a·w │ a·x │ │ │ ├─────┼─────┼─────┼─────┤ 行1 │ a·y │ a·z │ │ │ ├─────┼─────┼─────┼─────┤ 行2 │ │ │ │ │ ├─────┼─────┼─────┼─────┤ 行3 │ │ │ │ │ └─────┴─────┴─────┴─────┘

第二步:输入像素 b 铺开

b 在输入的右边,所以向右移动 stride=2 格,在 (0,2) 位置铺:

列0 列1 列2 列3 ┌─────┬─────┬─────┬─────┐ 行0 │ a·w │ a·x │ b·w │ b·x │ ├─────┼─────┼─────┼─────┤ 行1 │ a·y │ a·z │ b·y │ b·z │ ├─────┼─────┼─────┼─────┤ 行2 │ │ │ │ │ ├─────┼─────┼─────┼─────┤ 行3 │ │ │ │ │ └─────┴─────┴─────┴─────┘

第三步:输入像素 c 铺开

c 在输入的下边,向下移动 stride=2 格,在 (2,0) 位置铺:

列0 列1 列2 列3 ┌─────┬─────┬─────┬─────┐ 行0 │ a·w │ a·x │ b·w │ b·x │ ├─────┼─────┼─────┼─────┤ 行1 │ a·y │ a·z │ b·y │ b·z │ ├─────┼─────┼─────┼─────┤ 行2 │ c·w │ c·x │ │ │ ├─────┼─────┼─────┼─────┤ 行3 │ c·y │ c·z │ │ │ └─────┴─────┴─────┴─────┘

第四步:输入像素 d 铺开

d 在右下角,向右下各移 2 格,在 (2,2) 位置铺:

列0 列1 列2 列3 ┌───────┬───────┬───────┬───────┐ 行0 │ a·w │ a·x │ b·w │ b·x │ ├───────┼───────┼───────┼───────┤ 行1 │ a·y │ a·z │ b·y │ b·z │ ├───────┼───────┼───────┼───────┤ 行2 │ c·w │ c·x │ d·w │ d·x │ ├───────┼───────┼───────┼───────┤ 行3 │ c·y │ c·z │ d·y │ d·z │ └───────┴───────┴───────┴───────┘

关键观察

在这个例子里,没有重叠!

因为:

  • 输入 2×2,核 2×2,stride=2
  • 每个核铺开后刚好填满 2×2 的区域
  • 四个核铺开后刚好填满 4×4,互不重叠

输出尺寸 = 输入尺寸 × stride = 2 × 2 = 4


如果核更大,就会重叠!

假设核是 3×3,输入还是 2×2,stride=2:

输入: 卷积核: ┌───┬───┐ ┌───┬───┬───┐ │ a │ b │ │w1 │w2 │w3 │ ├───┼───┤ ├───┼───┼───┤ │ c │ d │ │w4 │w5 │w6 │ └───┴───┘ ├───┼───┼───┤ │w7 │w8 │w9 │ └───┴───┴───┘

a 铺开(左上角):

列0 列1 列2 列3 列4 ┌──────┬──────┬──────┬──────┬──────┐ 行0 │a·w1 │a·w2 │a·w3 │ │ │ ├──────┼──────┼──────┼──────┼──────┤ 行1 │a·w4 │a·w5 │a·w6 │ │ │ ├──────┼──────┼──────┼──────┼──────┤ 行2 │a·w7 │a·w8 │a·w9 │ │ │ ├──────┼──────┼──────┼──────┼──────┤ 行3 │ │ │ │ │ │ ├──────┼──────┼──────┼──────┼──────┤ 行4 │ │ │ │ │ │ └──────┴──────┴──────┴──────┴──────┘

b 铺开(向右移 2 格):

┌──────┬──────┬──────┬──────┬──────┐ 行0 │a·w1 │a·w2 │a·w3+b·w1│b·w2 │b·w3│ ← 列2重叠了! ├──────┼──────┼──────┼──────┼──────┤ 行1 │a·w4 │a·w5 │a·w6+b·w4│b·w5 │b·w6│ ← 列2重叠了! ├──────┼──────┼──────┼──────┼──────┤ 行2 │a·w7 │a·w8 │a·w9+b·w7│b·w8 │b·w9│ ← 列2重叠了! ├──────┼──────┼──────┼──────┼──────┤ ... (c 和 d 继续往下铺,行2也会重叠)

重叠区域 = 对应位置相加!

这就是棋盘格伪影的来源——重叠不均匀时,某些位置被多加或少加。


直观类比

普通卷积转置卷积
类比把4块小瓷砖压成1块大瓷砖把1块瓷砖敲碎成4块,铺到4个位置
输入→输出多个→1个(合并)1个→多个(铺开)
形象理解“压缩”“膨胀”

输出尺寸公式

输出尺寸 = (输入尺寸 - 1) × stride - 2 × padding + kernel_size + output_padding

最常用配置(让输出刚好是输入的整数倍):

stride=2, kernel=3, padding=1, output_padding=1 输出 = (输入 - 1) × 2 + 1 = 输入 × 2 - 1... 不对 正确配置: stride=2, kernel=4, padding=1, output_padding=0 输出 = (2-1)×2 - 2×1 + 4 = 2 - 2 + 4 = 4 ✓ (输入2×2 → 输出4×4)

实际上 PyTorch 的ConvTranspose2d会自动计算,你只需要告诉它:

  • in_channels,out_channels
  • kernel_size
  • stride
  • padding

一句话总结

转置卷积 = 每个输入像素 × 卷积核,然后按 stride 间隔"铺"到输出图上,重叠的地方相加。

它不是真正的"反卷积",只是一种能放大特征图的可学习上采样方法

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/15 21:30:09

磁悬浮压缩机的一些介绍

磁悬浮是利用磁性“同性相斥,异性相吸”的原理,在轴承的转子和定子间加上相应的电磁场,通过控制电磁场,使之处于相对“悬浮”状态。磁悬浮系统,它是由转子、传感器、控制器和执行器4部分组成,其中执行器包括…

作者头像 李华
网站建设 2026/7/15 21:28:51

从数据库到 Fiori 页面,Field Extensibility 如何让自定义字段贯穿整条应用链路

一张销售订单页面里,业务部门增加了一个很具体的要求,订单项目除了物料、数量、净值,还要记录客户包装等级。这个字段既不是临时备注,也不能只停留在浏览器页面里。它需要写入数据库,参与查询,通过 OData 服务传到前端,在 SAP Fiori 页面上显示,还可能进入报表、打印表…

作者头像 李华
网站建设 2026/7/15 21:25:09

TUSB8044A USB集线器配置寄存器详解与I2C/SMBus编程实战

1. 项目概述与核心价值在嵌入式硬件和USB外设开发领域,尤其是设计USB 3.2集线器或扩展坞时,我们常常会遇到一个核心需求:如何让同一颗硬件芯片,在不同的产品形态和应用场景下,表现出不同的“性格”?这里的“…

作者头像 李华
网站建设 2026/7/15 21:23:42

WebGL集成:在ArkUI Web端使用3D图形(157)

在 HarmonyOS ArkUI 中集成 WebGL 进行 3D 图形渲染,最标准且高效的方式是使用 Web 组件。通过该组件,你可以无缝复用现有的 Web 端 WebGL 代码,将 3D 渲染逻辑嵌入到 ArkUI 的声明式页面中。一、 核心架构:Web 组件与 ArkUI 的桥…

作者头像 李华
网站建设 2026/7/15 21:23:21

Matt Pocock 把他 Claude Code 的 170K 星技能库开源了,我直接抄了一份

TypeScript 圈的「行走的文档」把他自己的 AI 编程技能配置开源了,复制到你的项目里就能用。这个项目解决什么问题? 你用 Claude Code 写 TypeScript 时,有没有遇到过「它生成的代码风格跟我不一样」「它不知道我的项目用 pnpm 还是 yarn」「…

作者头像 李华
网站建设 2026/7/15 21:19:33

Python xlwings调用WPS的底层原理与实战避坑指南

1. xlwings与WPS交互的底层机制 当你用Python的xlwings库操作WPS表格时,背后其实上演着一场"跨语言对话"。这场对话的核心翻译官就是Windows系统的COM(Component Object Model)接口。想象一下,Python是讲中文的工程师&a…

作者头像 李华