首页 > 编程知识 正文

卷积公式怎么用,卷积和图解法

时间:2023-05-03 15:01:11 阅读:128242 作者:3933

本文链接原文以转载文章

0、标准卷积默认你已经对卷积有一定的了解,这里就不谈标准卷积了。

例如,假设您有一个33大小的卷积层,输入通道为16,输出通道为32。

在中,常见操作是使用32个33卷积内核分别与输入数据进行卷积。 这样,每个卷积内核需要3316个参数,得到的输出只有一个通道的数据。 可以获得一个通道的数据,这是因为在前3316个卷积核心的每个通道中,对输入数据的每个对应通道进行卷积,并且如果将与每个通道相对应的位置的值重叠在单通道上,则由32个卷积核心合计(即

1、深卷积

可以看到,每个通道用一个过滤器折叠,得到每个通道的输出,进行信息的融合。 传统的标准卷积过程可以用下图表示。

1.1在深度可分离卷积过程中应用深度可分离卷积的过程包括:分别与16个33大小的卷积核(一个通道)输入的16通道数据进行卷积(其中使用16个一通道的卷积核, 输入数据的每个通道用一个33的卷积核进行卷积) )得到16个通道的特征图,该步骤操作为深度wise ) )的16个特征图在重叠之前, 接下来用32个11大小的卷积内核(16个通道)对这16个特征图进行卷积运算,融合16个通道的信息(11的卷积进行不同通道之间的信息融合),该步骤操作为点窗口因此,可以计算出在整个过程中使用了3316(1116 )32=656个参数。

可见,1.2深度可分离卷积的优点是使用深度可分离卷积比常规卷积减少了所需的参数。 重要的是,可深度分离的卷积方法是改为在常规卷积操作中同时考虑信道和区域,并且卷积首先仅考虑区域,然后考虑信道。 实现了频道和区域的分离。

2、组卷积分组卷积最早出现在bhdfhNet上,由于当时硬件资源有限,在训练bhdfhNet时卷积操作不能全部由同一个GPU处理为此,作者将feature maps分为多个GPU分别进行处理,最后融合了多个GPU的结果。

2.1在解释什么是数据包卷积之前,先在图中体验一下常见的卷积操作。

从上图可以看到,常规卷积对整个输入数据执行卷积操作。 即,输入数据: H1W1C1; 另外一方面,卷积核大小为h1w1,共有C2个,通过卷积得到的输出数据为H2W2C2。 这里假设输出和输出的分辨率不变。 主要是这个过程一下子完成的,这对内存的容量提出了更高的要求。

但是,分组卷积显然没有那么多参数。 首先,让我们直观地感受一下用图像将卷积分组的过程。 对于与上述相同的问题,数据包卷积如下图所示。

在图中可以看到,将输入数据分为两组。 组数为g。 请注意,该组仅按深度划分。 也就是说,一些信道被分组在一起,这个具体数据由C1/g决定。 由于输出数据的变更,因此卷积核也需要相应地进行同样的变更。 也就是说,各组卷积核的深度也为(C1/g ),但卷积核的大小不需要改变,此时各组卷积核的个数为(C2/g )个,而不是原来的C2。 接着,通过各个组的卷积内核与它们所对应的组内的输入数据进行卷积,并在得到输出数据之后,通过concatenate方式进行组合,最终输出数据的通道保持C2。 也就是说,组数g决定后,并行运算g个相同的卷积过程,每个过程,输入数据为H1W1C1/g,卷积核心大小为H1W1C1/g,共有C2/g个,输出数据为H2

2.2分组卷积的具体例子从具体例子来看,Group conv本身大幅减少了参数。 例如,如果输入通道是256,则输出通道也是256,关键尺寸是33,而不具有组控制顶点的参数是25633256。 实施分组卷积时,组为8时,各组的输入通道和输出通道均为32,参数为8323332,为原八分之一。 组conv的最后各组输出的功能图应该像concatenate那样进行组合。

bhdfh认为组连接的方式可以提高滤波器之间的对角相关性,并且可以减少训练参数,不易拟合,这类似于正则效果。

3、扩展卷积是针对图像语义分割问题中下采样降低图像分辨率、丢失信息提出的卷积思路。 增加空洞扩大感受区,使原有的3x3卷积核具有相同参数量和计算量、5x5(dilatedrate=2)以上的感受区,无需下采样。 “展开卷积”(dilated convolutions )又名空腔卷积(atrous convolutions ),在卷积层中引入一个称为“扩张率”(dilation rate )的新参数,该参数也就是说,与原始标准卷积相比,延迟卷积具有更多的hyper-parame

ter(超参数)称之为dilation rate(扩张率),指的是kernel各点之前的间隔数量,【正常的convolution 的 dilatation rate为 1】。

图说空洞卷积的概念

(a)图对应3x3的1-dilated conv,和普通的卷积操作一样。(b)图对应3x3的2-dilated conv,实际的卷积kernel size还是3x3,但是空洞为1,需要注意的是空洞的位置全填进去0,填入0之后再卷积即可。【此变化见下图】(c)图是4-dilated conv操作。

在上图中扩张卷积的感受野可以由以下公式计算得到;其中i+1表示dilated rate。
比如上图中(a),dilated=1,F(dilated) = 3×3;图(b)中,dilated=2,F(dilated)=7×7;图(c)中,dilated=4, F(dilated)=15×15。

dilated=2时具体的操作,即按照下图在空洞位置填入0之后,然后直接卷积就可以了。 

 

空洞卷积的动态过程

在二维图像上直观地感受一下扩张卷积的过程:

上图是一个扩张率为2的3×3卷积核,感受野与5×5的卷积核相同,而且仅需要9个参数。你可以把它想象成一个5×5的卷积核,每隔一行或一列删除一行或一列。
在相同的计算条件下,空洞卷积提供了更大的感受野。空洞卷积经常用在实时图像分割中。当网络层需要较大的感受野,但计算资源有限而无法提高卷积核数量或大小时,可以考虑空洞卷积。

Dilated Convolution感受野指数级增长

对于标准卷积核情况,比如用3×3卷积核连续卷积2次,在第3层中得到1个Feature点,那么第3层这个Feature点换算回第1层覆盖了多少个Feature点呢?
                                                                                              第3层:

                                                                                              第2层:

                                                                                              第1层:

第一层的一个5×5大小的区域经过2次3×3的标准卷积之后,变成了一个点。也就是说从size上来讲,2层3*3卷积转换相当于1层5*5卷积。题外话,从以上图的演化也可以看出,一个5×5的卷积核是可以由2次连续的3×3的卷积代替。
但对于dilated=2,3*3的扩张卷积核呢?
                                                                                              第3层的一个点:

                                                                                            第2层:

                                                                                              第一层

可以看到第一层13×13的区域,经过2次3×3的扩张卷积之后,变成了一个点。即从size上来讲,连续2层的3×3空洞卷积转换相当于1层13×13卷积。

 

4、反卷积(转置卷积)

转置卷积(transposed Convolutions)又名反卷积(deconvolution)或是分数步长卷积(fractially straced convolutions)。反卷积(Transposed Convolution, Fractionally Strided Convolution or Deconvolution)的概念第一次出现是Zeiler在2010年发表的论文Deconvolutional networks中。

转置卷积和反卷积的区别

那什么是反卷积?从字面上理解就是卷积的逆过程。值得注意的反卷积虽然存在,但是在深度学习中并不常用。而转置卷积虽然又名反卷积,却不是真正意义上的反卷积。因为根据反卷积的数学含义,通过反卷积可以将通过卷积的输出信号,完全还原输入信号。而事实是,转置卷积只能还原shape大小,而不能还原value。你可以理解成,至少在数值方面上,转置卷积不能实现卷积操作的逆过程。所以说转置卷积与真正的反卷积有点相似,因为两者产生了相同的空间分辨率。但是又名反卷积(deconvolutions)的这种叫法是不合适的,因为它不符合反卷积的概念。

转置卷积的动态图

△卷积核为3×3、步幅为2和无边界扩充的二维转置卷积
需要注意的是,转置前后padding,stride仍然是卷积过程指定的数值,不会改变。

例子

由于上面只是理论的说明了转置卷积的目的,而并没有说明如何由卷积之后的输出重建输入。下面我们通过一个例子来说明感受下。

比如有输入数据:3×3,Reshape之后,为A :1×9,B(可以理解为滤波器):9×4(Toeplitz matrix) 那么A*B=C:1×4;Reshape C=2×2。所以,通过B 卷积,我们从输入数据由shape=3×3变成了shape=2×2。反过来。当我们把卷积的结果拿来做输入,此时A:2×2,reshape之后为1×4,B的转置为4×9,那么A*B=C=1×9,注意此时求得的C,我们就认为它是卷积之前的输入了,虽然存在偏差。然后reshape为3×3。所以,通过B的转置 - “反卷积”,我们从卷积结果shape=2×2得到了shape=3×3,重建了分辨率。
也就是输入feature map A=[3,3]经过了卷积B=[2,2] 输出为 [2,2] ,其中padding=0,stride=1,反卷积(转置卷积)则是输入feature map A=[2,2],经过了反卷积滤波B=[2,2].输出为[3,3]。其中padding=0,stride=1不变。那么[2,2]的卷积核(滤波器)是怎么转化为[4,9]或者[9,4]的呢?通过Toeplitz matrix。

至于这其中Toeplitz matrix是个什么东西,此处限于篇幅就不再介绍了。但即使不知道这个矩阵,转置卷积的具体工作也应该能够明白的。

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。