当前位置:网站首页>转置卷积详解
转置卷积详解
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
边栏推荐
- 2021-04-22: given many line segments, each line segment has two numbers [start, end],
- 2021-05-02: given the path of a file directory, write a function
- D. Solve The Maze(思维+bfs)Codeforces Round #648 (Div. 2)
- #夏日挑战赛# HarmonyOS - 实现带日期效果的待办事项
- Goby+AWVS 实现攻击面检测
- Why is it easy for enterprises to fail in implementing WMS warehouse management system
- 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
- Introduction to new features of ECMAScript 2019 (ES10)
- Learning these 10 kinds of timed tasks, I'm a little floating
- leetcode 139. Word Break 单词拆分(中等)
猜你喜欢

Intelij 中的 Database Tools可以连接但是无法显示SCHEMA, TABLES

VNC Viewer方式的远程连接树莓派

I just came back from the Ali software test. I worked for Alibaba P7 in 3+1, with an annual salary of 28*15

一文详解JackSon配置信息

How to easily realize online karaoke room and sing "mountain sea" with Wang Xinling

CAP:多重注意力机制,有趣的细粒度分类方案 | AAAI 2021

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

一文理解OpenStack网络

60 divine vs Code plug-ins!!
![[download attached] installation and simple use of Chinese version of awvs](/img/3b/f26617383690c86edff465c9a1099e.png)
[download attached] installation and simple use of Chinese version of awvs
随机推荐
Nature publishes significant progress in quantum computing: the first quantum integrated circuit implementation in history
Istio practical tips: Customize Max_ body_ size
PHP application container deployment practice
Introduction to new features of ECMAScript 2019 (ES10)
Global and Chinese market of training dance clothes 2022-2028: Research Report on technology, participants, trends, market size and share
ZOJ——4104 Sequence in the Pocket(思维问题)
日志记录真没你想的那么简单
Easy installation of Jenkins
leetcode 139. Word break word split (medium)
Global and Chinese market of computer protective film 2022-2028: Research Report on technology, participants, trends, market size and share
Istio FAQ: region awareness does not take effect
Detailed explanation of estab of Stata regression table output
Goby+AWVS 实现攻击面检测
Remain true to our original aspiration
Several characteristics of pharmaceutical industry
安装ImageMagick7.1库以及php的Imagick扩展
基于STM32的MD5校验
Some experiences of K project: global template highlights
Solution of intelligent all in one machine in expressway service area
Software test [high frequency] interview questions sorted out by staying up late (latest in 2022)