Deconvolution(逆卷积)

2024-03-26 16:32
文章标签 卷积 deconvolution

本文主要是介绍Deconvolution(逆卷积),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目前网上关于Deconvolution的文章写的着实不知所云,这里详细整理一篇出来。不敢说“一文读懂deconv”,但是“一文入门deconv”的牛还是敢吹的。

Deconvolution一般和转置卷积(transposed conv)、微步卷积(fractionally strided conv)的叫法等价,其一些常见的用途包括:

  1. 在ZF-Net中用于对feature map做可视化:https://arxiv.org/abs/1311.2901
  2. 在FCN中用于生成等于原图shape的图像:https://arxiv.org/abs/1411.4038
  3. 无监督的autoencoder和deconvNet中用于解码器:https://docs.microsoft.com/en-us/cognitive-toolkit/Image-Auto-Encoder-Using-Deconvolution-And-Unpooling 、https://ftp.cs.nyu.edu/~fergus/papers/matt_cvpr10.pdf
  4. DSSD、GAN中的应用。
    … …


由上面的用途可以看到,deconv最大的作用是对feature map进行升采样,和双线性插值(bilinear interpolation)类似。下面我们来研究一下deconv本身。顾名思义,Deconvolution(逆卷积、去卷积)似乎应该是卷积(conv)的逆过程,然而实际上除了shape层面之外,二者在数值上没有任何可逆关系。deconv仅仅是一个普通的卷积层,在神经网络中也是需要通过梯度下降去学习的。所以,对于每个deconv层,我们实际上也能用另外一个deconv层去做恢复。(突然有个发现——如果用conv+deconv进行穿插排列组合是不是也能创造出许多新的网络架构emmm)
PyTorch代码见:https://pytorch.org/docs/stable/nn.html?highlight=trans#torch.nn.ConvTranspose2d。

核心原理

关于deconv的恢复原理,最核心的一条其实就是 (k-1) \textbf{(k-1)} (k-1)扩展(padding),来重要的事情说三遍: (k-1) \textbf{(k-1)} (k-1)扩展 (k-1) \textbf{(k-1)} (k-1)扩展 (k-1) \textbf{(k-1)} (k-1)扩展。不明白?先背下来再往下看。

最基本的形式

我们首先看看最基本的卷积形式:对于 ( m × m ) (m\times m) (m×m)特征图 I I I,用 ( k × k ) (k\times k) (k×k)的核做卷积,则得到的特征图 O O O ( m − k + 1 ) × ( m − k + 1 ) (m-k+1)\times(m-k+1) (mk+1)×(mk+1)。如果我们对 O O O (k-1) \textbf{(k-1)} (k-1)扩展得到 O ′ O' O,再用等大的 k × k k\times k k×k核做卷积,则得到的特征图 I ′ I' I边长是: ( m − k + 1 ) + 2 ( k − 1 ) − k + 1 = m (m-k+1)+2(k-1)-k+1=m (mk+1)+2(k1)k+1=m。示意图:
在这里插入图片描述在这里插入图片描述

如果加入了stride呢?

然后我们来看看加入stride之后的deconv。同样,对于 ( m × m ) (m\times m) (m×m)特征图 I I I,用 ( k × k ) (k\times k) (k×k)的核做卷积,计stride为 s s s。则得到的特征图 O O O ( m − k s + 1 ) × ( m − k s + 1 ) (\dfrac{m-k}{s}+1)\times(\dfrac{m-k}{s}+1) (smk+1)×(smk+1)。同样,我们对 O O O (k-1) \textbf{(k-1)} (k-1)扩展,再用等大的 k × k k\times k k×k核做卷积。和上面不同的是,这次我们加入相同的stride,也就是对 O O O做膨胀得到 O ′ O' O(抱歉我想不到更合适的词了,见下面的示意图),卷积过程中卷积核不做跨步。 O ′ O' O的边长是 ( m − k s + 1 ) + 2 ( k − 1 ) + ( s − 1 ) ( m − k s + 1 − 1 ) (\dfrac{m-k}{s}+1)+2(k-1)+(s-1)(\dfrac{m-k}{s}+1-1) (smk+1)+2(k1)+(s1)(smk+11),化简得到 ( m + k − 1 ) (m+k-1) (m+k1)。则用等大的 ( k × k ) (k\times k) (k×k)核做卷积之后同样能恢复原来的shape m m m。当然了,此处令 s = 1 s=1 s=1则能推出前一段的特殊情况。

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

如果加入了padding呢?

好了,我们现在似乎已经对于deconv的可逆原理有了一定的了解。于是问题来了,加入pad之后呢?道理其实是一样的,我们只需要把上面的 m m m换成 m + 2 p m+2p m+2p即可。下面我们来算一下stride 1的情况:

对于 ( m × m ) (m\times m) (m×m)特征图 I I I,先pad p p p,用 ( k × k ) (k\times k) (k×k)的核做卷积,则得到的特征图 O O O ( m + 2 p − k + 1 ) × ( m + 2 p − k + 1 ) (m+2p-k+1)\times(m+2p-k+1) (m+2pk+1)×(m+2pk+1)。如果我们对 O O O p ′ p' p扩展得到 O ′ O' O,再用等大的 k × k k\times k k×k核做卷积,则得到的特征图 I ′ I' I边长是: ( m + 2 p − k + 1 ) + 2 p ′ − k + 1 = m (m+2p-k+1)+2p'-k+1=m (m+2pk+1)+2pk+1=m

所以有:
2 p − 2 k + 2 + 2 p ′ = 0 2p-2k+2+2p'=0 2p2k+2+2p=0
p ′ = k − 1 − p p'=k-1-p p=k1p
所以第一节的核心原理要更新一下——做扩展 p ′ = k − 1 − p p'=k-1-p p=k1p之后再卷积。如图:

如果是最一般的形式,即既有padding,又有stride呢?

道理其实是一样的。这里大概列一个计算步骤,详细过程感兴趣的朋友可以自己推一遍。
特征图 I I I m × m m\times m m×m
做pad得到 I ′ I' I ( m + 2 p ) × ( m + 2 p ) (m+2p)\times (m+2p) (m+2p)×(m+2p)
卷积后得到特征图 O O O ( m + 2 p − k s + 1 ) × ( m + 2 p − k s + 1 ) (\dfrac{m+2p-k}{s}+1)\times(\dfrac{m+2p-k}{s}+1) (sm+2pk+1)×(sm+2pk+1)
做pad p ′ p' p得到 O ′ O' O ( m + 2 p − k s + 1 + 2 p ′ ) × ( m + 2 p − k s + 1 + 2 p ′ ) (\dfrac{m+2p-k}{s}+1+2p')\times(\dfrac{m+2p-k}{s}+1+2p') (sm+2pk+1+2p)×(sm+2pk+1+2p)
做stride s s s得到 O ′ ′ O'' O ( m + 2 p − k s + 1 + 2 p ′ + ( s − 1 ) ( m + 2 p − k s + 1 − 1 ) ) × ( m + 2 p − k s + 1 + 2 p ′ + ( s − 1 ) ( m + 2 p − k s + 1 − 1 ) ) (\dfrac{m+2p-k}{s}+1+2p'+(s-1)(\dfrac{m+2p-k}{s}+1-1))\times(\dfrac{m+2p-k}{s}+1+2p'+(s-1)(\dfrac{m+2p-k}{s}+1-1)) (sm+2pk+1+2p+(s1)(sm+2pk+11))×(sm+2pk+1+2p+(s1)(sm+2pk+11))
deconv之后得到的特征图 I ′ ′ I'' I边长是: O ′ ′ 的 边 长 − k + 1 O''的边长-k+1 Ok+1
I ′ ′ I'' I边长为 m m m。解得 p ′ = k − 1 − p p'=k-1-p p=k1p

To do

空洞卷积(dilated convolution)、从矩阵乘法的角度理解卷积和逆卷积。

ref:
https://github.com/vdumoulin/conv_arithmetic

这篇关于Deconvolution(逆卷积)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

基于深度学习 卷积神经网络resnext50的中医舌苔分类系统

项目概述 本项目旨在通过深度学习技术,特别是利用卷积神经网络(Convolutional Neural Networks, CNNs)中的ResNeXt50架构,实现对中医舌象图像的自动分类。该系统不仅能够识别不同的舌苔类型,还能够在PyQt5框架下提供一个直观的图形用户界面(GUI),使得医生或患者能够方便地上传舌象照片并获取分析结果。 技术栈 深度学习框架:采用PyTorch或其他

如何将卷积神经网络(CNN)应用于医学图像分析:从分类到分割和检测的实用指南

引言 在现代医疗领域,医学图像已经成为疾病诊断和治疗规划的重要工具。医学图像的类型繁多,包括但不限于X射线、CT(计算机断层扫描)、MRI(磁共振成像)和超声图像。这些图像提供了对身体内部结构的详细视图,有助于医生在进行准确诊断和制定个性化治疗方案时获取关键的信息。 1. 医学图像分析的挑战 医学图像分析面临诸多挑战,其中包括: 图像数据的复杂性:医学图像通常具有高维度和复杂的结构

深度学习基础--卷积的变种

随着卷积同经网络在各种问题中的广泛应用,卷积层也逐渐衍生出了许多变种,比较有代表性的有: 分组卷积( Group Convolution )、转置卷积 (Transposed Convolution) 、空洞卷积( Dilated/Atrous Convolution )、可变形卷积( Deformable Convolution ),下面分别介绍下。 1. 分组卷积 在普通的卷积操作中,一个

时序预测|变分模态分解-双向时域卷积-双向门控单元-注意力机制多变量时间序列预测VMD-BiTCN-BiGRU-Attention

时序预测|变分模态分解-双向时域卷积-双向门控单元-注意力机制多变量时间序列预测VMD-BiTCN-BiGRU-Attention 文章目录 一、基本原理1. 变分模态分解(VMD)2. 双向时域卷积(BiTCN)3. 双向门控单元(BiGRU)4. 注意力机制(Attention)总结流程 二、实验结果三、核心代码四、代码获取五、总结 时序预测|变分模态分解-双向时域卷积

卷积神经网络(二)CIFAR100类别分类

一.数据介绍 总共一百个类,每个类有600个图像。每类500个训练图像,100个测试图像。没填图像都带有一个"精细"标签(它所属的类)核一个粗糙标签(它所属的超类)  二.API使用 用于构建CNN模型的API Conv2D:实现卷积,kernel_size,strides,padding,datafromat,'NHWC'核'NCHW' MaxPool2D:池化操作 impo

【python 走进NLP】从零开始搭建textCNN卷积神经网络模型

无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。人工智能教程 1、众所周知,tensorflow 是一个开源的机器学习框架,它的出现大大降低了机器学习的门槛,即使你没有太多的数学知识,它也可以允许你用“搭积木”的方式快速实现一个神经网络,即使没有调节太多的参数,模型的表现一般还

REMEMBERING HISTORY WITH CONVOLUTIONAL LSTM FOR ANOMALY DETECTION——利用卷积LSTM记忆历史进行异常检测

上海科技大学的文章,上海科技大学有个组一直在做这方面的工作,好文章挺多的还有数据集。 ABSTRACT 本文解决了视频中的异常检测问题,由于异常是无界的,所以异常检测是一项极具挑战性的任务。我们通过利用卷积神经网络(CNN或ConvNet)对每一帧进行外观编码,并利用卷积长期记忆(ConvLSTM)来记忆与运动信息相对应的所有过去的帧来完成这项任务。然后将ConvNet和ConvLSTM与

线性代数|机器学习-P33卷积神经网络ImageNet和卷积规则

文章目录 1. ImageNet2. 卷积计算2.1 两个多项式卷积2.2 函数卷积2.3 循环卷积 3. 周期循环矩阵和非周期循环矩阵4. 循环卷积特征值4.1 卷积计算的分解4.2 运算量4.3 二维卷积公式 5. Kronecker Product 1. ImageNet ImageNet 的论文paper链接如下:详细请直接阅读相关论文即可 通过网盘分享的文件:image

【深度学习 卷积】利用ResNet-50模型实现高效GPU图片预测

本文介绍了如何使用训练好的ResNet-50模型进行图片预测。通过详细阐述模型原理、训练过程及预测步骤,帮助读者掌握基于深度学习的图片识别技术。 一、引言 近年来,深度学习技术在计算机视觉领域取得了显著成果,特别是卷积神经网络(CNN)在图像识别、分类等方面表现出色。ResNet-50作为一种经典的CNN模型,以其强大的特征提取能力和较高的预测准确率,在众多领域得到了广泛应用。本文将介绍如何使

吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)1.9-1.10

目录 第四门课 卷积神经网络(Convolutional Neural Networks)第一周 卷积神经网络(Foundations of Convolutional Neural Networks)1.9 池化层(Pooling layers)1.10 卷 积 神 经 网 络 示 例 ( Convolutional neural network example) 第四门课