關于轉置卷積

🧠 具體講解神經網絡中的轉置卷積(Transposed Convolution)


🧭 1. 轉置卷積的動機:為什么我們需要它?

標準卷積通常會降低特征圖的空間尺寸(比如從 64x64 → 32x32),這對于提取高級特征很有用。但在某些任務中,比如:

  • 圖像生成(如 GAN)
  • 圖像分割(如 U-Net 的解碼器)
  • 上采樣(upsampling)

我們需要把特征圖的尺寸還原回來(比如從 32x32 → 64x64),而且希望這個還原是可學習的,也就是說參數可訓練。

這時候就需要 轉置卷積(也叫反卷積、fractionally strided convolution)。


🧱 2. 什么是轉置卷積?直覺理解

我們先從標準卷積的矩陣乘法視角出發來看。

標準卷積可以被視為:
y = K x y = Kx y=Kx
其中 K K K 是一個稀疏的矩陣(由卷積核擴展而來)。

那么轉置卷積就是這個線性變換的轉置矩陣乘法

轉置卷積是:
x = K T y x = K^T y x=KTy

直覺上:

  • 標準卷積:壓縮/整合信息
  • 轉置卷積:擴展/重建信息

🧮 3. 數學公式和計算流程

設輸入特征圖大小為 C i n × H i n × W i n C_{in} \times H_{in} \times W_{in} Cin?×Hin?×Win?
卷積核大小為 K × K K \times K K×K,步長為 S S S,padding 為 P P P,輸出通道數為 C o u t C_{out} Cout?

標準卷積輸出尺寸計算:

H o u t = ? H i n + 2 P ? K S ? + 1 H_{out} = \left\lfloor \frac{H_{in} + 2P - K}{S} \right\rfloor + 1 Hout?=?SHin?+2P?K??+1

轉置卷積輸出尺寸計算:

H o u t = ( H i n ? 1 ) ? S ? 2 P + K H_{out} = (H_{in} - 1) \cdot S - 2P + K Hout?=(Hin??1)?S?2P+K

你可以看到,轉置卷積公式中是乘而不是除,所以它有上采樣的效果。


🔄 4. 轉置卷積是怎么運作的?圖示直覺(描述)

  1. 在輸入之間插入空格(步長為 2 就在像素間插入 1 個零)
  2. 在這個“稀疏圖像”上進行普通卷積
  3. 因為插入了零,卷積核掃描時會“擴大視野”,從而生成更大的輸出

這種方式又叫 “fractionally strided convolution”(因為它“模擬”了小于 1 的步長)


🧠 5. 與標準卷積的反向傳播的關系

這其實是轉置卷積名字的由來!

  • 在實現標準卷積的 反向傳播 時,梯度傳播過程中的某一步就需要一個類似轉置卷積的操作來“還原”梯度。
  • 這也是為什么 PyTorch 中 ConvTranspose2dConv2d 的“梯度反向過程”的實現。

所以:

轉置卷積并不是“把卷積反過來”,而是在反向傳播中自然出現的操作。


📦 6. PyTorch 實現

import torch
import torch.nn as nn# 轉置卷積層:輸入通道3,輸出通道16,kernel_size=3,stride=2,padding=1
conv_transpose = nn.ConvTranspose2d(in_channels=3, out_channels=16, kernel_size=3, stride=2, padding=1, output_padding=1)x = torch.randn(1, 3, 32, 32)
y = conv_transpose(x)
print(y.shape)  # torch.Size([1, 16, 64, 64])

注意:

output_padding 是為了調節輸出大小(因為整數除法/乘法可能不是精確反轉)

轉置卷積參數量和普通卷積一樣: C i n × C o u t × K 2 C_{in} \times C_{out} \times K^2 Cin?×Cout?×K2

🔁 7. 參數與輸出尺寸公式總結

對于 ConvTranspose2d,輸出大小計算公式為:

H o u t = ( H i n ? 1 ) ? S ? 2 P + K + output_padding H_{out} = (H_{in} - 1) \cdot S - 2P + K + \text{output\_padding} Hout?=(Hin??1)?S?2P+K+output_padding

這里:

  • H i n H_{in} Hin?:輸入高度
  • S S S:stride(步長)
  • P P P:padding
  • K K K:kernel size(卷積核大小)
  • output_padding:用于解決無法精確還原的邊界問題

🔬 8. 轉置卷積 vs 上采樣+卷積

我們也可以用非轉置卷積實現上采樣 + 卷積操作:

import torch.nn.functional as Fx = torch.randn(1, 3, 32, 32)
x_up = F.interpolate(x, scale_factor=2, mode='nearest')  # 最近鄰上采樣
conv = nn.Conv2d(3, 16, kernel_size=3, padding=1)
y = conv(x_up)

區別在于:

方法可學習參數是否精確上采樣計算效率
轉置卷積? 是? 是? 快
上采樣 + 卷積? 是? 是較慢,但更可控

💣 9. 轉置卷積的常見問題:Checkerboard Artifacts

因為卷積核在插值時可能導致像素間不均勻的覆蓋區域,轉置卷積有時會出現“棋盤格偽影”。

🛠? 解決方式:

  • 使用 上采樣 + 卷積 替代
  • 使用更小的 kernel 和 stride
  • 加強正則化,或使用 PixelShuffle 等替代方式

🧪 10. 實際應用:U-Net 解碼器

在 U-Net 的上采樣階段,我們希望將低分辨率特征圖還原為高分辨率(最終恢復為原圖大小)。

self.upconv = nn.ConvTranspose2d(64, 32, kernel_size=2, stride=2)

然后 concat encoder 輸出 + decoder 輸出,再繼續卷積。

轉置卷積在這一步:

  • 學習“如何恢復圖像細節”
  • 與 skip connection 保持 spatial 對齊
  • 輸出最終的分割圖像或生成圖像

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/75927.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/75927.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/75927.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JavaScript 模塊化詳解( CommonJS、AMD、CMD、ES6模塊化)

一.CommonJS 1.概念 CommonJS 規范概述了同步聲明依賴的模塊定義。這個規范主要用于在服務器端實現模塊化代碼組 織,但也可用于定義在瀏覽器中使用的模塊依賴。CommonJS 模塊語法不能在瀏覽器中直接運行;在瀏覽器端,模塊需要提前編譯打包處理…

TCP BBR 的優化

前段時間,老板發了篇資料,下面是我學習的相關記錄整理。 https://aws.amazon.com/cn/blogs/china/talking-about-network-optimization-from-the-flow-control-algorithm/ PS:ubuntu24默認使用的tcp控制算法。還是 cubic sysctl net.ipv4.tc…

什么是異步?

什么是異步? 異步是一個術語,用于描述不需要同時行動或協調就能獨立運行的流程。這一概念在技術和計算領域尤為重要,它允許系統的不同部分按自己的節奏運行,而無需等待同步信號或事件。在區塊鏈技術中,異步是指網絡中…

SSM婚紗攝影網的設計

🍅點贊收藏關注 → 添加文檔最下方聯系方式咨詢本源代碼、數據庫🍅 本人在Java畢業設計領域有多年的經驗,陸續會更新更多優質的Java實戰項目希望你能有所收獲,少走一些彎路。🍅關注我不迷路🍅 項目視頻 SS…

石頭剪刀布游戲

自己寫的一個石頭剪刀布游戲&#xff0c;如果有需要更改的地方請指出 #define _CRT_SECURE_NO_WARNINGS // scanf_s編寫起來太過于麻煩&#xff0c;直接把這個警告關掉&#xff0c;便于編寫。 #include <stdio.h> #include <stdlib.h> #include <time.h> //…

大數據系列之:Kerberos

大數據系列之&#xff1a;Kerberos 基本概念工作流程安全特性應用場景總結加密原理Kerberos認證流程更改您的密碼授予賬戶訪問權限票證管理Kerberos 票據屬性使用 kinit 獲取票據使用 klist 查看票據使用 kdestroy 銷毀票據.k5identity 文件描述 Kerberos 是一種網絡認證協議&a…

WPF 免費UI 控件HandyControl

示例效果和代碼 直接可以用 Button 按鈕 | HandyOrg 1.安裝 , 輸入 HandyControl 2.<!--配置HandyControl--> <!--配置HandyControl--> <ResourceDictionary Source"pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml"/> …

windows部署docker

1.下載docker 打開瀏覽器&#xff0c;訪問 Docker Desktop 下載頁面。 2.安裝 Docker Desktop 運行安裝程序&#xff1a; 雙擊下載的 Docker Desktop 安裝包&#xff0c;啟動安裝程序。 選擇安裝選項&#xff1a; 按照屏幕上的指示進行操作。建議選擇默認選項&#xff0c;包…

【Linux】遠程登錄時,使用圖形界面報錯:MoTTY X11 proxy: Unsupported authorisation protocol

1、問題描述 使用 MobaXterm 遠程登錄Ubuntu后,使用sudo權限運行圖形界面程序報錯: MoTTY X11 proxy: Unsupported authorisation protocol (gpartedbin:10518): Gtk-WARNING **: 22:01:34.377: cannot open display: localhost:10.02、查看SSH配置 修改 SSH 服務端配置,…

解決 Hugging Face SentenceTransformer 下載失敗的完整指南:ProxyError、SSLError與手動下載方案

問題背景 在使用 Hugging Face 的 SentenceTransformer 加載預訓練模型 all-MiniLM-L6-v2 時&#xff0c;遇到了以下錯誤&#xff1a; 代理連接失敗&#xff08;ProxyError / SSLError: KRB5_S_TKT_NYV&#xff09;大文件下載中斷&#xff08;unexpected EOF while reading&a…

MySQL——DQL的單表查詢

1、查詢表中所有的字段&#xff08;列&#xff09; 語法&#xff1a;select * from 表名; * 是通配符&#xff0c;用來表示所有的字段&#xff08;列&#xff09;。 select 表示查詢哪些列。 from 表示從哪張表中查詢。 2、查詢表中指定的字段 語法&#xff1a;select 列…

開源RuoYi AI助手平臺的未來趨勢

近年來&#xff0c;人工智能技術的迅猛發展已經深刻地改變了我們的生活和工作方式。 無論是海外的GPT、Claude等國際知名AI助手&#xff0c;還是國內的DeepSeek、Kimi、Qwen等本土化解決方案&#xff0c;都為用戶提供了前所未有的便利。然而&#xff0c;對于那些希望構建屬于自…

[WUSTCTF2020]CV Maker1

進來是個華麗的界面&#xff0c;我們先跟隨這個網頁創造一個用戶 發現了一個上傳端口&#xff0c;嘗試上傳一個php文件并抓包 直接上傳進不去&#xff0c;加個GIF89A uploads/d41d8cd98f00b204e9800998ecf8427e.php 傳入 并且報告了 上傳路徑&#xff0c;然后使用蟻劍連接

Spring 中的 IOC

&#x1f331; 一、什么是 IOC&#xff1f; &#x1f4d6; 定義&#xff08;通俗理解&#xff09;&#xff1a; IOC&#xff08;Inversion of Control&#xff0c;控制反轉&#xff09; 是一種設計思想&#xff1a;對象不再由你自己創建和管理&#xff0c;而是交給 Spring 容器…

Vue2-實現elementUI的select全選功能

文章目錄 使用 Element UI 的全選功能自定義選項來模擬全選 在使用 Element UI 的 el-select組件時&#xff0c;實現“全選”功能&#xff0c;通常有兩種方式&#xff1a;一種是使用內置的全選功能&#xff0c;另一種是通過自定義選項來模擬全選。 使用 Element UI 的全選功能…

小菜Go:Ubuntu下Go語言開發環境搭建

前置要求Ubuntu環境搭建 文章推薦 此處推薦一個比較好的文章&#xff0c;基本按部就班就歐克~ 安裝虛擬機&#xff08;VMware&#xff09;保姆級教程&#xff08;附安裝包&#xff09;_vmware虛擬機-CSDN博客 安裝可能遇到的問題 虛擬機安裝遇到的問題如&#xff1a;Exception…

安卓中app_process運行報錯Aborted,怎么查看具體的報錯日志

我在pc端生成了一個jar包&#xff0c;可以正常執行&#xff0c;但是導入到安卓的/data/local/tmp下面執行就會報錯 執行命令如下&#xff1a; adb shell cd /data/local/tmp app_process -Djava.class.path/data/local/tmp/demo.jar /data/local/tmp com.example.demo.Hello然…

Python 面向對象 - 依賴倒置原則 (DIP)

1. 核心概念 依賴倒置原則(Dependency Inversion Principle, DIP) 是SOLID原則中的"D"&#xff0c;包含兩個關鍵點&#xff1a; 高層模塊不應依賴低層模塊&#xff0c;二者都應依賴抽象抽象不應依賴細節&#xff0c;細節應依賴抽象 2. 使用場景 典型應用場景 系…

centos7 yum install docker 安裝錯誤

1、錯誤信息&#xff1a; [rootlocalhost atguigu]# yum install docker 已加載插件&#xff1a;fastestmirror, langpacks Repository base is listed more than once in the configuration Loading mirror speeds from cached hostfile Could not retrieve mirrorlist http:…

【Gorm】模型定義

intro package mainimport ("gorm.io/gorm""gorm.io/driver/sqlite" // GORM 使用該驅動來連接和操作 SQLite 數據庫。 )type Product struct {gorm.Model // 嵌入GORM 內置的模型結構&#xff0c;包含 ID、CreatedAt、UpdatedAt、DeletedAt 四個字段Cod…