CV/DL基础知识 之 反卷积参数推导

神经网络卷积反卷积及池化计算公式、特征图通道数(维度)变化实例 阅读详情

1,卷积参数表达式:

输入size    :in
输出size    :out
卷积核size:k
步长            :s
padding    : p

out = [ (in - k + 2p)/s ] + 1     (1)
             其中“ [] ”表示向下取整

那么:

in = ( out - 1 )*s + k - 2p + x          (2)
             其中 x = (in - k + 2p)%s,是公式(1)向下取整时丢掉的部分,%求余

2,反卷积的运算过程:

反卷积的作用是: 恢复某个卷积(k, p, s)造成的特征图size变化(下降)。

反卷积的参数和卷积的参数在数量和作用上基本一致,因为卷积和反卷积本质上是同一个操作(这一点后面会详细说明)

相应的,我们使用下列符号标记:
    输入size    :din
    输出size    :dout
    卷积核size:dk
    步长            :ds
    padding    : dp
除此之外,反卷积还有一个output_padding参数,我们用dpout表示

反卷积的计算过程等价于:
1,首先根据ds,对输入特征图进行填充。填充的方式是在输入特征图的相邻两个元素之间填充(ds-1)个0,如图1(a->b)所示(假设ds=2)。填充后特征图size为:(din-1) * ds + 1
2,对1的结果使用(dk-dp-1)进行padding(和卷积操作中的padding一致),如图1(b->c)所示(假设dp=1,dk=3) , padding后的特征图size为:(din-1) * ds + 1 + 2 * (dk-dp-1)
3,对2的结果使用dpout进行output_padding,即在特征图的上方和右侧各填充dpout个元素。注意output_padding与padding不同,仅在特征图的一侧进行填充,如图1(c->d)所示(假设dpout=1)。如果你细心的话,看到这里你应该发现,dpout和其他反卷积参数一样,也在卷积操作中有对应的参数,只不过是个隐参数,没错,就是x。output_padding后特征图size为:(din-1) * ds + 1 + 2*(dk-dp-1) + dpout
4,在3的结果上进行**【步长为1,卷积核为dk,padding为0】的卷积操作**,得到的结果就是反卷积的结果了,那么,反卷积输出的size为: [(din-1) * ds + 1 + 2*(dk-dp-1) + dpout - dk ] / 1 + 1 = (din-1) * ds + dk - 2 * dp + dpout
在这里插入图片描述

3,反卷积参数的推导

如前所述,我们使用反卷积的目的是:恢复某个卷积(k, p, s)造成的特征图size变化(下降)。

即,反卷积的输入din = out,我们希望找到合适的参数[dk, ds, dp, dpout],使得反卷积的输出dout=in
将其带入公式(2),有:
dout = ( din - 1 )*s + k - 2p + x          (3)

通过 2中对反卷积计算过程的讨论,我们知道有:
dout = (din-1) * ds + dk - 2 * dp + dpout          (4)

联立(3)(4),消去dout:
( din - 1 )*s + k - 2p + x = (din-1) * ds + dk - 2 * dp + dpout          (5)

通过公式(5)我们可以选定合适的[dk, ds, dp, dpout],当然,可能的组合有很多种

一般在实际应用中,我们使用ds = s,你可以通过我们在第2部分讨论的ds的作用思考为什么这么做。
我们也经常使用dk = k

那么就有:
– 2 * dp + dpout = - 2 * p + x          (6)

一般来说,选择dp = p, dpout = x,不过,正如我们在第2部分关于dpout的讨论,它填充到特征图一侧的,而(dk-dp-1)是填充到特征图两侧的,所以我更倾向于建议选择尽可能小的dpout。

值得注意的是,上面的推导是我们想构造一个针对某特定卷积(k, p, s)的反卷积的参数计算方法。
很多时候,我们只考虑将某个输入din上采样为dout,即不关心特征图从in=dout下采样到out=din的方式是怎样的(即不关心用一个还是多个卷积层还是池化进行的下采样)。
这时候,我们可以直接使用公式(4)计算反卷积的参数,当然,这有很多种参数组合
或者,更一般的,我们这样做:

假设in=dout下采样到out=din是通过一个卷积层完成的,推测这个卷积层应该有的参数k, s, p,然后按照前述方法计算反卷积参数。

4,后记

有一点不明白的地方是,为什么反卷积使用(dk-dp-1)进行padding,直接使用dp进行padding,即定义dp的含义为padding的size不是更直观吗?

《深度学习100问》 本篇列出常见的深度学习基础问题,并拟打算在2020年3月31日前,出一个《深度学习100答》系列,针对这里列出的问题,一一作出简要的回答。 注: 如果只列出名词,则问题是:它的定义,推导与应用是什么? 神经网络的基本组成; 神经网络的输出计算; 常用的神经网络模型; 机器学习与深度学习的区别; 为什么训练深层网络很困难? 前向传播推导; 反向传播推导; 超参数; 超参数的一般搜索过程; 常见... 阅读详情

相关推荐

读懂diffusion model需要知道的前置知识(持续更新)

没有系统学习过ML/DL/CV/NLP的情况下,读懂并使用diffusion model(持续更新)

qq_44324007的博客 2842

反卷积(Transposed Convolution, Fractionally Strided Convolution or Deconvolution)

关于反卷积Deconvolution,转置卷积Transposed Convolution 的一些介绍。

wakaka的博客 5万+

反卷积通俗详细解析与nn.ConvTranspose2d重要参数解释

反卷积的作用 卷积中padding的几个概念 No Padding Half(Same) Padding Full Padding 反卷积 反卷积中的Padding参数 反卷积的stride参数 反卷积总结 参考资料

iioSnail的博客 2万+

反卷积学习笔记

最近在学习InversionNet的过程中,对于反卷积有部分疑问,因此查阅资料详细学习,形成这一篇学习笔记。

XLyu233的博客 1158

【反卷积算法】Richardson-Lucy (RL) :通过不断迭代更新图像估计值

Richardson-Lucy(RL)反卷积算法:是一种基于最大似然估计(Maximum Likelihood Estimation, MLE)的图像去卷积方法,常用于去模糊和图像增强。通过不断地更新图像估计值,来最小化模糊图像和恢复图像之间的误差,逐步消除模糊,最终接近真实的原始图像,每次迭代都会根据当前估计的图像来修正下次迭代的结果。

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 3034

医疗领域BGE-M3模型微调全流程:从数据准备到效果评估

本文详细介绍了医疗领域BGE-M3模型的微调全流程,从数据准备到效果评估。通过医疗数据微调,BGE-M3模型在临床问答、病历检索等场景中表现显著提升,能够准确理解医学术语之间的细微差别。文章还提供了实战练习代码和效果评估指标,帮助开发者快速掌握医疗文本嵌入模型的应用技巧。

weixin_29098367的博客 281

卷积、反卷积、转置卷积和微步幅卷积

卷积 首先定义本文要用到的符号 输入图片的大小: i1=i2=ii_1=i_2=i。 卷积核的大小: k1=k2=kk_1=k_2=k。 卷积步长:s1=s2=ss_1=s_2=s。 填充padding=ppadding=p。 下图表示参数为(i=5,k=3,s=2,p=1)(i=5,k=3,s=2,p=1)的卷积计算过程,可以看出输出的图片大小是(3∗3)(3 * 3)。 下图是参数为(i

qq_34535410的博客 7059

Canoe CAPL TCP通信避坑指南:从OnTcpConnect回调不触发到Socket句柄管理

本文详细解析了Canoe CAPL中TCP通信的常见问题与解决方案,包括OnTcpConnect回调不触发的三大原因、Socket句柄管理的内存泄漏风险、数据发送截断规则等。通过实战案例和代码示例,帮助开发者规避TCP通信中的典型陷阱,提升车载网络测试的稳定性和可靠性。

weixin_26976635的博客 358

卷积和反卷积

卷积示意图A:卷积核矩阵,M卷积核的数量,也是输出的channel,K为卷积核的大小,K可以理解为k*k(卷积核的长、宽)。B:输入图像矩阵,K为对应卷积核大小的矩阵块。N为输出矩阵特征的长和宽。 N=((image_h + 2*pad_h – kernel_h)/stride_h+ 1)*((image_w +2*pad_w – kernel_w)/stride_w + 1) ...

kwame211的博客 626

基于51单片机的贪吃蛇游戏设计

本科时候做的一个课程作业,自己打一个很简易的电路,比较有意思且易上手,故将之记录下来。(全套的仿真及代码,演示视频,课程报告以及PPT展示上传在优快云下载区) 一. 实验目的 (1) 通过对C51语言的理解,编写程序实现对贪吃蛇的有效控制; (2) 通过对51单片机硬件的学习,学会运用面包板,独立按键、点阵屏等,完成对完整电路的搭建过程; (3) 通过对Proteus仿真软件的学习,实现基于STC89C52单片机的8*8点阵贪吃蛇的硬件电路仿真。 二. 实验介绍 贪吃蛇是一款经典小游戏,其游戏的规则是:玩

山山の十三先生 2万+

绕开华为通道,获取解锁码解锁BootLoader

刷机有风险,操作需谨慎,如果因为各种因素导致手机变砖无法开机,本教程概不负责,望悉知 前言 这篇文章的大多内容是根据我自己找的一篇文章《绕开华为通道,获取解锁码解锁BootLoader》来编写的,里面的大部分内容是文章的原内容。下面的都是我参考文章中做了一些小部分的修改,增加了我华为P8手机的一些操作,下面开始讲述我的解锁过程。 因为华为官方在2018年的七八月份吧,关闭了解锁码的申请通道,这...

Martin.Mu `s Special Column 5万+

人工智能AI:TensorFlow Keras PyTorch MXNet PaddlePaddle 深度学习实战 part1

日萌社 github标星11600+:最全的吴恩达机器学习课程资源(完整笔记、中英文字幕视频、python作业,提供百度云镜像!) Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战 用户画像 C、C++笔记 JavaWeb+大数据笔记 CDH 6、CDH5 Python笔记 链接:https://pan.baidu.com/s/1...

あずにゃん梓喵的博客 3万+

海康SDK实战:如何从PS流中提取H264裸流并实现前端播放(附完整代码)

本文详细介绍了如何利用海康SDK从PS流中提取H264裸流,并构建无插件前端播放的完整链路。通过解析PS流结构、提取H264 ES流,结合WebSocket实时传输与WFS.js前端播放器,实现了低延迟、高可控性的视频流处理方案,为开发者提供了从数据源到前端渲染的实战代码与清晰指南。

weixin_29051811的博客 474

从ResNet到语义分割:反卷积(转置卷积)在CV任务中的保姆级应用指南

本文深入解析反卷积(转置卷积)在计算机视觉任务中的关键应用,从ResNet特征图上采样到语义分割网络的像素级预测。通过详细讲解参数配置、边界效应及避免棋盘伪影的实用技巧,帮助开发者掌握这一核心上采样技术。特别针对deconvolution在FCN、U-Net等网络中的实践问题提供保姆级解决方案。

weixin_31293685的博客 254

Diffusion Models扩散模型与深度学习(数学原理和代码解读)

​ 此前GANs霸占各大顶会很多年,DDPM的出现让人耳目一新!经过这两年的发展,Diffusion Models能在图像生成、超分辨率重建、点云生成、语音生成等领域达到SOTA。这篇文章旨在帮助没有了解过的读者入门,《Diffusion Models与深度学习专栏》已经写了将近三十篇文章,既有原理公式和必备基础知识的讲解,也有代码详细实战解读,还有前沿热门应用,欢迎读者订阅。

沉迷单车的追风少年 4万+

HFSS 3D Layout仿真PCB操作说明

本文介绍一种特别适合PCB这种叠层结构的仿真软件,HFSS 3D Layout既有操作的简便性,又有同3D软件仿真所有的精确性,仿真速度上又比3D软件快很多。

sinat_15150363的博客 3937

Deep Learn 各种卷积理解

本文撰写的初衷是记录下学习各种卷积的笔记,论文:A guide to convolution arithmetic for deep learning. 1. 反卷积/转置卷积(Tranpose Convolution) 比较易懂的博文见反卷积(Transposed Convolution)详细推导。 通俗来理解,由于某些计算机视觉任务(CV)需要还原输入图像的尺寸或者经过特征提取之后的尺寸跟原图几乎一样,比如语义分割任务。因此,就想到了通过 来获得输入图像相同的尺寸,但是这个操作应该不需...

acrith 221

【Java基础】还看不懂JDK7 HashMap环的产生原理你来打我

JDK7对旧table数据重定位到新table的函数transfer如下,其中重点关注部分以标出。 头插法正常情况下: 并发情况下 线程1只执行了Entry<K,V> next = e.next就被挂起了,而线程2正常执行完毕,结果图如下: 线程1接着下面继续执行: 通过逐步分析跟绘图可以知道红色部分会有环产生。 ...

sowhat 4242

了解CV和RoboMaster视觉组(五)目标跟踪:概述与光流法

介绍了目标跟踪算法的概述,还有经典的跟踪算法之一——光流法。

HNU跃鹿战队的博客 4782

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Python深度学习:从入门到实战

亲爱的读者,欢迎您翻开这本书。我们即将探索的,是深度学习的宇宙——一个由数据、算法与算力构筑的奇妙世界。它既是严谨的科学,也是创造的艺术,更是一条通往未来智慧的修行之路。本书将带您从最基础的数学原理出发,亲手搭建神经网络,驾驭Transformer等前沿模型,最终将智慧转化为现实世界的价值。请放下畏惧,保持好奇。这不仅是一次知识的学习,更是一场思维的远行。来,随我一起,开启这趟非凡的旅程吧。

weixin_45747731的博客 449

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

2021入坑图像分割,我该从哪儿入手?

推荐入门论文:《Fully Convolutional Networks for Semantic Segmentation》。FCN,卷积神经网络用于图像语义分割的开山之作。目前已经引用...

zandaoguang的博客 266

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

上一篇: CV/DL基础知识 之 卷积网络感受野计算公式推导
isErik
博客等级 码龄9年 38粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值