查看原文
其他

对转置卷积、可变形卷积、通道加权卷积的通俗理解(下篇)

草yang年华 机器学习与python集中营 2021-09-10

python进阶教程

机器学习

深度学习

长按二维码关注

进入正文


对转置卷积、可变形卷积、通道可分离卷积的通俗理解

声明:卷积神经网络经过这些年的发展已经非常成熟,有着非常繁多的网络类型,其核心机制都在于“卷积核”的设计,现在涌现出了非常多的卷积思想,在各个领域各领风骚,比如深度可分离卷积、分组卷积、空洞(扩张)卷积、转置(反)卷积、可变性卷积、通道加权卷积等。这里只介绍这六种,限于篇幅,将分为两篇系列文章进行说明,本篇为下篇,介绍后三个。

文章较长,阅读全文约20min。


目录

四 转置(反)卷积

Transposed Convolution/Deconcolution

4.1 转置卷积

4.2 转置卷积和反卷积的区别

4.3 转置卷积的应用领域

4.4 转置卷积的动态图

4.5 例子

五 可变形卷积

六 通道加权卷积

七 关于卷积的思考

04


转置(反)卷积



转置卷积的定义

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


那究竟什么是“反卷积”呢?深度学习中的deconv,是一种上采样upsample过程,他可以还原原图像的大小形状,但是不能够完全恢复原来的像素值,因此他并不是严格的逆运算。



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

转置卷积常见的应用领域
反卷积(转置卷积)通常用于以下几个方面:

1. CNN可视化,通过反卷积将卷积得到的feature map还原到像素空间,来观察feature map对哪些pattern相应最大,即可视化哪些特征是卷积操作提取出来的;

2. FCN全卷积网络中,由于要对图像进行像素级的分割,需要将图像尺寸还原到原来的大小,类似upsampling的操作,所以需要采用反卷积;

3. GAN对抗式生成网络中,由于需要从输入图像到生成图像,自然需要将提取的特征图还原到和原图同样尺寸的大小,即也需要反卷积操作。




转置卷积的动态图

(1)以3x3,no padding , strides=1为例

卷积(convolution)过程:

 "反卷积"(the transpose of conv) 可以理解为upsample conv.
卷积核为:3x3; no padding , strides=1

注意:上面的过程中,下方的“蓝色”表示输入;上方的“绿色”表示输出。可以看出,反卷积过程恢复了原来的图像的大小,即Shape。


(2)以3x3,no padding , strides=2为例

卷积过程:

反卷积:

(3)卷积过程与反卷积过程的动态展示过程


卷积过程:

反卷积过程:

注意图中蓝色(下面)是输入,绿色(上面)是输出,卷积和反卷积在 p、s、k  p、s、k 等参数一样时,是相当于输入和 输出 调了个位。 

这里说明了反卷积的时候,是有补0的,即使人家管这叫no padding( padding=0 )。


例子

假设一个卷积操作,它的输入是 4x4,卷积核大小是 3x3,步长为 1x1,填充方式为 Valid 的情况下,输出则为 2x2,如下图所示:

我们将其从左往右,从上往下以的方式展开,

  • 输入矩阵可以展开成维数为 [16, 1] 的矩阵,记作 x

  • 输出矩阵可以展开成维数为 [4, 1] 的矩阵,记作 y

  • y要想完成[16,1]到[4,1]的映射,卷积核可以表示为 [4, 16] 的矩阵,记作 C,其中非 0 的值表示卷积对应的第 i 行 j 列的权重。

  • 所以卷积可以用 y = C * x ([4, 1] = [4, 16] * [16, 1])来表示

总结:卷积过程为:

y=C*x

那么,转置卷积就可以理解为是

x=CT*y


05


可变形卷积


卷积核形状一定是矩形吗?-- Deformable convolution 可变形卷积核

传统的卷积核一般都是长方形或正方形,但MSRA提出了一个相当反直觉的见解,认为卷积核的形状可以是变化的,变形的卷积核能让它只看感兴趣的图像区域 ,这样识别出来的特征更佳。可变形的卷积核,可以看成是视觉领域的新“视”界

那么可变形的卷积核到底怎么实现呢?

其实它的实现依然是基于标准的卷积核的,只不过在标准卷积核中没一个卷积核单元还附带两个位置偏移量(x,y),x,y表示像素相对于中心像素的位置偏移,即现在每个像素的值是一个形如(value,x,y)的三元组,x,y为偏移量,但是具体的偏移量不是人为指定的,虽然也可以这么做,具体的偏移多少,每一个像素的偏移是不一样的,让网络去学习这个x,y。


06


通道加权卷积


通道间的特征都是平等的吗? -- SEnet

无论是在Inception、DenseNet或者ShuffleNet里面,我们对所有通道产生的特征都是不分权重直接结合的,那为什么要认为所有通道的特征对模型的作用就是相等的呢? 这是一个好问题,于是,ImageNet2017 冠军SEnet就出来了。

SEnet 结构

一组特征在上一层被输出,这时候分两条路线,第一条直接通过,第二条首先进行Squeeze操作(Global Average Pooling),把每个通道2维的特征压缩成一个1维,从而得到一个特征通道向量(每个数字代表对应通道的特征)。然后进行Excitation操作,把这一列特征通道向量输入两个全连接层和sigmoid,建模出特征通道间的相关性,得到的输出其实就是每个通道对应的权重,把这些权重通过Scale乘法通道加权到原来的特征上(第一条路),这样就完成了特征通道的权重分配。

07


总结思考


现在越来越多的CNN模型从巨型网络到轻量化网络一步步演变,模型准确率也越来越高。现在工业界追求的重点已经不是准确率的提升(因为都已经很高了),都聚焦于速度与准确率的trade off,都希望模型又快又准。因此从原来AlexNet、VGGnet,到体积小一点的Inception、Resnet系列,到目前能移植到移动端的mobilenet、ShuffleNet(体积能降低到0.5mb!),我们可以看到这样一些趋势:

卷积核方面:

  1. 大卷积核用多个小卷积核代替;

  2. 单一尺寸卷积核用多尺寸卷积核代替;

  3. 固定形状卷积核趋于使用可变形卷积核;

  4. 使用1×1卷积核(bottleneck结构)。

卷积层通道方面:

  1. 标准卷积用depthwise卷积代替;

  2. 使用分组卷积;

  3. 分组卷积前使用channel shuffle;

  4. 通道加权计算。

卷积层连接方面:

  1. 使用skip connection,让模型更深;

  2. densely connection,使每一层都融合上其它层的特征输出(DenseNet)

启发

类比到通道加权操作,卷积层跨层连接能否也进行加权处理?bottleneck + Group conv + channel shuffle + depthwise的结合会不会成为以后降低参数量的标准配置?


推 荐 阅 读

生成对抗网络入门指南(内含资源和代码)

对深度可分离卷积、分组卷积、空洞卷积的通俗理解(上篇)
python协程系列(六)——asyncio+tkinter开发无阻塞程序以及timer的模拟
python协程系列(五)——asyncio的核心概念与基本架构

机器学习面试真题1000题详细讲解(八)

2018 开源软件最受欢迎 TOP 50


赶紧关注我们吧

您的点赞和分享是我们进步的动力!

↘↘↘

: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存