当前位置:网站首页>转置卷积详解
转置卷积详解
2022-06-24 15:46:00 【全栈程序员站长】
大家好,又见面了,我是你们的朋友全栈君。
转置卷积详解
前面文章对卷积做了讲解,感觉既然重新整理,就将系列概念整体做个梳理,也算是将自己知道的所有东西拿来献丑把。 转置卷积(Transposed Convolution)是后来的叫法,一开始大家都是称逆卷积/反卷积(Deconvolution),这个概念是在图像分割任务中被提出来的,图像分割需要逐像素的操作,对每一个像素做一个分割,将其归类到不同的物体当中。 这个任务大家很自然的想要使用卷积神经网络来完成,那就得先使用卷积神经网络提取特征,但是卷积神经网络中的两大主要构件,卷积层和下采样层会使得图像的尺寸不断缩小。这个就与逐像素的分类不符,因为逐像素分割的话是需要输出和输入大小是一致的。 针对这个问题,有人提出了先使用卷积核下采样层逐层的提取特征,然后通过上采样再将特征图逐渐的恢复到原图的尺寸。而这个上采样一开始就是通过反卷积来实现的。如果说卷积核下采样的过程特征图是变小的,那么上采样之后特征图应该变大。 我们应该熟悉卷积的输出尺寸公式 o u t = ( F − K + 2 P ) / s + 1 out=(F-K+2P)/s+1 out=(F−K+2P)/s+1,其中F表示输入特征图的尺寸,K表示卷积核的尺寸,P表示padding,S表示卷积的步长。我们都通过这个公式来计算卷积的输出特征图尺寸。举例来说明,一个4×4的输入特征图,卷积核为3×3,如果不使用paddng,步长为1,则带入计算 o u t = ( 4 − 3 ) / 1 + 1 out=(4-3)/1+1 out=(4−3)/1+1为2。 我们已经在im2col算法的介绍中讲解了卷积的实现,实际上这个步骤是通过两个矩阵的乘法来完成的,我们不妨记为 y = C x y=Cx y=Cx,如果要上采样,我们希望给输出特征图乘一个参数矩阵,然后把尺寸还原回去,根据数学知识,我们给特征图矩阵 y y y左乘一个{C^T},就能得到 C T y = C T C x C^Ty=C^TCx CTy=CTCx, C C C的列数等于 x x x的行数, C T C C^TC CTC的行数和列数都等于x的行数,乘完之后,得到的结果与 x x x形状相同。这就是转置卷积名字的来源。有一些工作确实是这样实现的。 我们也能很自然的得出结论,我们不需要给输出特征图左乘 C T C^T CT,显然只要和这个矩阵形状相同,输出的结果就和原特征图尺寸相同,而且这个操作同样可以使用卷积来实现,那我们只要保证形状一致,然后参数我们可以自己训练,这样尺寸的问题解决了,而且特征的对应也有了,是可以训练的,一举两得。 im2col讲解的内容,卷积是 ( C o u t , C i n ∗ K h ∗ K w ) (C_{out},C_{in}*K_h*K_w) (Cout,Cin∗Kh∗Kw)的卷积核乘 ( C i n ∗ K h ∗ K w , H N ∗ W N ) (C_{in}*K_h*K_w,H_N*W_N) (Cin∗Kh∗Kw,HN∗WN)的特征图,得到 ( C o u t , H N ∗ W N ) (C_{out},H_N*W_N) (Cout,HN∗WN)的结果。现在对卷积核做一个转置 ( C i n ∗ K h ∗ K w , C o u t ) (C_{in}*K_h*K_w,C_{out}) (Cin∗Kh∗Kw,Cout)乘 ( C o u t , H N ∗ W N ) (C_{out},H_N*W_N) (Cout,HN∗WN)得到一个 ( C i n ∗ K h ∗ K w , H N ∗ W N ) (C_{in}*K_h*K_w,H_N*W_N) (Cin∗Kh∗Kw,HN∗WN)的特征图。 除了以上内容这里还有一点其他需要补充的东西,比如在caffe中除了im2col函数之外,还有一个函数是col2im,也就是im2col的逆运算。所以对于上面的结果caffe是通过col2im来转换成特征图的。但是col2im函数对于im2col只是形状上的逆函数,事实上,如果对于一个特征图先执行im2col再执行col2im得到的结果和原来是不相等的。 而在tensorflow和pytorch中,这一点是有差异的,两者是基于特征图膨胀实现的转置卷积操作,两者是是通过填充来进行特征图膨胀的,之后可能还会有一个crop操作。之所以需要填充,是因为想要直接通过卷积操作来实现转置卷积,干脆填充一些值,这样卷积出来的特征图尺寸自然就更大。 但是两者从运算上来讲都无法对原卷积进行复原,只是进行了形状复原而已。 到了最后就可以讨论形状的计算了,转置卷积是卷积的形状逆操作,所以形状计算就是原来计算方式的逆函数。 o u t = ( F − K + 2 P ) / s + 1 out=(F-K+2P)/s+1 out=(F−K+2P)/s+1这个函数的逆函数反解一下,其中mod是上公式除s的余数。
就是通过这个公式来计算反卷积的输出,因为mod是除s得到的余数,也就是说mod是小于s的,当s=1的时候只能为0,一个解,当 s > 1 s>1 s>1时,就会有多个解,这个时候,指定了好参数之后,pytorch和tensorflow就会对特征图四周进行填充,然后再做卷积。这个公式里有一个乘s,这个怎么实现,就是对特征图进行膨胀的操作。在特征图两个cell之间,填充上s-1个值,膨胀之后特征图就会变成 ( o u t − 1 ) s + 1 (out-1)s+1 (out−1)s+1,这个时候还需要根据mod来进行外部的填充。做一个卷积,然后事实上这里还会继续根据特征图的输出尺寸做填充,这个计算就更加复杂一些,但是我的目的主要是为了把膨胀这里讲的通透,下面用一张图来说明这种膨胀,如下图是s=2的膨胀。
大家可以自行把这个公式和tf或者pytroch的接口的参数对应上,因为我不想讲接口,所以这里不赘述。为了进一步方便理解,我还画了下面一张图。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/151928.html原文链接:https://javaforall.cn
边栏推荐
- MongoDB入門實戰教程:學習總結目錄
- 企业安全攻击面分析工具
- How does the effective date of SAP PP ECM affect the work order?
- The penetration of 5g users of operators is far slower than that of 4G. The popularity of 5g still depends on China Radio and television
- Learning these 10 kinds of timed tasks, I'm a little floating
- My network relationship with "apifox"
- leetcode 139. Word break word split (medium)
- How to easily realize online karaoke room and sing "mountain sea" with Wang Xinling
- The equipment is connected to the easycvr platform through the national standard gb28181. How to solve the problem of disconnection?
- 国产芯片的赶超,让美国手机芯片龙头高通害怕了,出招应对竞争
猜你喜欢

Mongodb Getting started Practical Tutoriel: Learning Summary Table des matières

【应用推荐】最近大火的Apifox & Apipost 上手体验与选型建议

打破内存墙的新利器成行业“热搜”!持久内存让打工人也能玩转海量数据+高维模型

存在安全隐患 路虎召回部分混动揽运

Using oasis to develop a hop by hop (I) -- Scene Building
![clang: warning: argument unused during compilation: ‘-no-pie‘ [-Wunused-command-line-argument]](/img/f0/42f394dbc989d381387c7b953d2a39.jpg)
clang: warning: argument unused during compilation: ‘-no-pie‘ [-Wunused-command-line-argument]

The equipment is connected to the easycvr platform through the national standard gb28181. How to solve the problem of disconnection?

Mysql之Binlog

使用阿里云RDS for SQL Server性能洞察优化数据库负载-初识性能洞察

C. Three displays(动态规划)Codeforces Round #485 (Div. 2)
随机推荐
[interview high frequency questions] sequential DP questions with difficulty of 3/5 and direct construction
The equipment is connected to the easycvr platform through the national standard gb28181. How to solve the problem of disconnection?
安装ImageMagick7.1库以及php的Imagick扩展
安裝ImageMagick7.1庫以及php的Imagick擴展
运营商5G用户渗透远远比4G慢,5G的普及还得看中国广电
C. K-th Not Divisible by n(数学+思维) Codeforces Round #640 (Div. 4)
April 30, 2021: there are residential areas on a straight line, and the post office can only be built on residential areas. Given an ordered positive array arr
Solution of intelligent all in one machine in expressway service area
CAP:多重注意力机制,有趣的细粒度分类方案 | AAAI 2021
2021-04-24: handwriting Code: topology sorting.
ZOJ——4104 Sequence in the Pocket(思维问题)
[log service CLS] Tencent cloud log4j/logback log collection best practices
Wi-Fi 7 来啦,它到底有多强?
Flink kubernetes application deployment
clang: warning: argument unused during compilation: ‘-no-pie‘ [-Wunused-command-line-argument]
One article explains Jackson configuration information in detail
Global and Chinese market of training dance clothes 2022-2028: Research Report on technology, participants, trends, market size and share
Wechat official account debugging and natapp environment building
New de debugging
60 divine vs Code plug-ins!!