CNN中常用的四种卷积详解( 二 )


3. 转置卷积转置卷积又叫反卷积、逆卷积 。不过转置卷积是目前最为正规和主流的名称,因为这个名称更加贴切的描述了卷积的计算过程,而其他的名字容易造成误导 。在主流的深度学习框架中,如TensorFlow,Pytorch,Keras中的函数名都是conv_transpose 。所以学习转置卷积之前,我们一定要弄清楚标准名称,遇到他人说反卷积、逆卷积也要帮其纠正,让不正确的命名尽早的淹没在历史的长河中 。有大佬一句话总结:转置卷积相对于卷积在神经网络结构的正向和反向传播中做相反的运算 。其实还是不是很理解 。我们先从转置卷积的用途来理解下,转置卷积通常用于几个方面:

  1. CNN可视化,通过反卷积将卷积得到的feature map还原到像素空间,来观察feature map对哪些pattern相应最大,即可视化哪些特征是卷积操作提取出来的;
  2. FCN全卷积网络中,由于要对图像进行像素级的分割,需要将图像尺寸还原到原来的大小,类似upsampling的操作,所以需要采用反卷积;
  3. GAN对抗式生成网络中,由于需要从输入图像到生成图像,自然需要将提取的特征图还原到和原图同样尺寸的大小,即也需要反卷积操作 。
我们先来看看卷积和反卷积的图,简直不要太形象 。如下图正常卷积(convolution):卷积核为 3x3;no padding , strides=1
CNN中常用的四种卷积详解

文章插图
 
正常卷积
转置卷积可以理解为upsample conv.如下图:
卷积核为:3x3; no padding , strides=1
CNN中常用的四种卷积详解

文章插图
 
转置卷积
从上面两个图可以看到,转置卷积和卷积有点类似,因为它产生与假设的反卷积层相同的空间分辨率 。但是,对值执行的实际数学运算是不同的 。转置卷积层执行常规卷积,但恢复其空间变换 。需要注意的是:反卷积只能恢复尺寸,不能恢复数值 。
4. 可分离卷积任何看过MobileNet架构的人都会遇到可分离卷积(separable convolutions)这个概念 。但什么是“可分离卷积”,它与标准的卷积又有什么区别?可分离卷积主要有两种类型:空间可分离卷积和深度可分离卷积 。
空间可分离卷积在可分离的卷积中,我们可以将内核操作分成多个步骤 。让我们将卷积表示为y = conv(x,k),其中y是输出图像,x是输入图像,k是核 。简单 。接下来,假设k可以通过以下公式计算:k = k1.dot(k2) 。这将使它成为可分离的卷积,因为我们可以通过用k1和k2进行2个1D卷积来得到相同的结果,而不是用k进行2D卷积 。
CNN中常用的四种卷积详解

文章插图
 
Sobel X和Y滤镜
以Sobel内核为例,它通常用于图像处理 。你可以通过乘以向量[1,0,-1]和[1,2,1] .T得到相同的内核 。在执行相同操作时,这将需要6个而不是9个参数 。上面的例子显示了所谓的空间可分卷积 。空间可分卷积的主要问题是并非所有卷积核都可以“分离”成两个较小的卷积核 。这在训练期间变得特别麻烦,因为网络可能采用所有可能的卷积核,它最终只能使用可以分成两个较小卷积核的一小部分 。
实际上,通过堆叠1xN和Nx1内核层,可以创建与空间可分离卷积非常相似的东西 。这最近在一个名为EffNet的架构中使用,显示了有希望的结果 。
深度可分离卷积在神经网络中,我们通常使用称为深度可分离卷积的东西 。这将执行空间卷积,同时保持通道分离,然后进行深度卷积 。这里,通过一个例子可以最好地理解它(以下参考文献2):以输入图像为12x12x3的RGB图像为例,正常卷积是卷积核对3个通道同时做卷积 。也就是说,3个通道,在一次卷积后,输出一个数 。而深度可分离卷积分为两步:
  • 第一步用三个卷积对三个通道分别做卷积,这样在一次卷积后,输出3个数 。
  • 这输出的三个数,再通过一个1x1x3的卷积核(pointwise核),得到一个数 。
所以深度可分离卷积其实是通过两次卷积实现的 。
第一步,对三个通道分别做卷积,输出三个通道的属性,如下图:
CNN中常用的四种卷积详解

文章插图
 
第二步,用卷积核1x1x3对三个通道再次做卷积,这个时候的输出就和正常卷积一样,是8x8x1:
CNN中常用的四种卷积详解

文章插图
 
如果要提取更多的属性,则需要设计更多的1x1x3卷积核心就可以(图片引用自原网站 。感觉应该将8x8x256那个立方体绘制成256个8x8x1,因为他们不是一体的,代表了256个属性):


推荐阅读