卷积可分离卷积转置卷积(反卷积)

Posted 醉公子~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了卷积可分离卷积转置卷积(反卷积)相关的知识,希望对你有一定的参考价值。

卷积

卷积层的结构参数

卷积核大小(Kernel Size):定义卷积操作的感受野。

步幅(Stride): 定义卷积核遍历图像时的步幅大小。其默认值通常设置为1。设置大于1的值后对图像进行下采样,这种方式类似池化操作。

边界扩充(Padding): 定义了网络层处理样本边界的方式。当卷积核大于1且不进行边界扩充,输出尺寸将相应缩小;当卷积核以标准方式进行边界扩充,则输出数据的空间尺寸将与输入相等。

输入与输出通道(Channels): 构建卷积层时需定义输入通道I ,并由此确定输出通道O 。这样,可算出每个网络层的参数量I × O × K ,其中K 为卷积核的参数个数。例如,某个网络层有64个大小为3 × 3 的卷积核,则对应K 值为3 × 3 = 9 。

卷积实际上是 加权叠加,输出的维度小于输入的维度。如果需要输出的维度和输入的维度相等,就需要填充(padding)。


卷积的计算公式:
M = ( S + 2 ∗ P − K ) / S + 1 M = (S+2*P-K)/S + 1 M=(S+2PK)/S+1

  • M 卷积后的特征图大小
  • S 输入图大小
  • P 填充
  • K 卷积核(滤波器)大小
  • S 步长

转置(反)卷积(transposed convolution)

概念

转置卷积(transposed convolutions)又名反卷积(deconvolutions)或是分数步长卷积(fractially straced convolutions)。反卷积的概念第一次出现在Zeiler在2010年发表的论文Deconvolutional Networks中。

深度学习中的deconv是一种上采样upsampling过程,可以还原图像的大小形状,但是不能够完全恢复原来的像素值,因此并不是严格的逆运算。

反卷积从字面上理解就是卷积的逆过程。

反卷积虽然存在,但是在深度学习中并不常用。

而转置卷积虽然又名反卷积,却不是真正意义上的反卷积。因为根据反卷积的数学含义,通过反卷积可以将通过卷积的输出信号,完全还原输入信号。

而事实上,转置卷积只能还原shape大小,而不能还原value。至少在数值方面上,转置卷积不能实现卷积操作的逆过程。

所以转置卷积与真正的反卷积有点相似,因为两者产生了相同的空间分辨率。

2D转置卷积的计算基本原理如下图所示:

计算公式

转置卷积计算公式和卷积公式是可以互推的。

  • i:输入图像尺寸
  • o:输出特征图尺寸
  • k:卷积核kernel尺寸
  • p:填充数padding大小
  • s:步长大小


转置卷积应用领域

  • CNN可视化,通过转置卷积将卷积得到的feature map还原到像素空间,来观察feature
    map对哪些pattern响应最大,即可视化哪些特征是卷积操作提取出来的;
  • FCN全卷积网络中,由于要对图像进行像素级分割,需要将图像尺寸还原到原来的大小,类似upsampling的操作,所以需要采用转置卷积;
  • GAN对抗式生成网络中,由于需要从输入图像到生成图像,自然需要将提取的特征图还原到和原图同样尺寸的大小,即也需要转置卷积操作。

深度可分离卷积(depthwise separable convolution)

在可分离卷积(separable convolution)中,通常将卷积操作拆分成多个步骤。而在神经网络中通常使用的就是深度可分离卷积(depthwise separable convolution)。
举个例子,假设有一个3×3大小的卷积层,其输入通道为16、输出通道为32。
那么一般的操作就是用32个3×3的卷积核来分别同输入数据卷积,这样每个卷积核需要3×3×16个参数,得到的输出是只有一个通道的数据。之所以会得到一通道的数据,是因为刚开始3×3×16的卷积核的每个通道会在输入数据的每个对应通道上做卷积,然后叠加每一个通道对应位置的值,使之变成了单通道,那么32个卷积核一共需要(3×3×16)×32 =4068个参数。

深度可分离卷积结构是构建轻量化网络模型的利器之一,最早出现在相关的模型结构是以MobileNet为代表的轻量级网络模型,应用于图像分类、对象检测、语义分割当场景下。深度可分类卷积的图示如下:

标准卷积与深度可分离卷积的不同

用一张来解释深度可分离卷积,如下:

可以看到每一个通道用一个filter卷积之后得到对应一个通道的输出,然后再进行信息的融合。而以往标准的卷积过程可以用下面的图来表示:

深度可分离卷积的过程

而应用深度可分离卷积的过程是①用16个3×3大小的卷积核(1通道)分别与输入的16通道的数据做卷积(这里使用了16个1通道的卷积核,输入数据的每个通道用1个3×3的卷积核卷积),得到了16个通道的特征图,我们说该步操作是depthwise(逐层)的,在叠加16个特征图之前,②接着用32个1×1大小的卷积核(16通道)在这16个特征图进行卷积运算,将16个通道的信息进行融合(用1×1的卷积进行不同通道间的信息融合),我们说该步操作是pointwise(逐像素)的。这样我们可以算出整个过程使用了3×3×16+(1×1×16)×32 =656个参数。

深度可分离卷积的优点

可以看出运用深度可分离卷积比普通卷积减少了所需要的参数。
重要的是深度可分离卷积将以往普通卷积操作同时考虑通道和区域改变成,卷积先只考虑区域,然后再考虑通道。实现了通道和区域的分离。

  • 神经可分离卷积与普通卷积相比,减少了所需要的参数。
  • 深度可分离卷积将以往普通卷积操作同时考虑通道和区域变成先只考虑区域,在考虑通道,实现了通道和区域的分离。
  • 深度可以分离卷积也有通道信息融合,它的过程分为两个部分:depthwise(逐层)+pointwise(逐像素)。前者负责卷积运算,后者使用1
    × 1 卷积核进行通道的像素融合。

参考链接:
https://blog.csdn.net/Chaolei3/article/details/79374563?

https://zhuanlan.zhihu.com/p/366049539

https://www.cnblogs.com/jins-note/p/10834431.html

希望这篇文章对你有用!
谢谢点赞评论!

以上是关于卷积可分离卷积转置卷积(反卷积)的主要内容,如果未能解决你的问题,请参考以下文章

分组卷积和深度可分离卷积

『图解』深度可分离卷积

深度可分离卷积神经网络与卷积神经网络

深度可分离卷积--超详细介绍

深度学习中常用的几种卷积(上篇):标准二维卷积转置卷积1*1卷积(附Pytorch测试代码)

深度可分离卷积网络Xception 网络解析