卷积的多种形式及tensorflow实现

1.常规卷积

2.膨胀卷积 dilate conv

使用实例 ssd中block6

# Block 6: let's dilate the hell out of it!
net = slim.conv2d(net, 1024, [3, 3], rate=6, scope='conv6')
end_points['block6'] = net

卷积核膨胀是将卷积核扩张到膨胀尺度约束的尺度中,并将原卷积核没有占用的区域填充零

卷积核膨胀公式:

膨胀的卷积核尺寸 = 膨胀系数 * (原始卷积核尺寸 - 1) + 1

3.反卷积 Deconvolution

下图表示一个和上图卷积计算对应的反卷积操作,其中他们的输入输出关系正好相反。如果不考虑通道以卷积运算的反向运算来计算反卷积运算的话,我们还可以通过离散卷积的方法来求反卷积(这里只是为了说明,实际工作中不会这么做)。

同样为了说明,定义反卷积操作参数如下:

  • 二维的离散卷积(N=2N=2)
  • 方形的特征输入(i′1=i′2=i′i1′=i2′=i′)
  • 方形的卷积核尺寸(k′1=k′2=k′k1′=k2′=k′)
  • 每个维度相同的步长(s′1=s′2=s′s1′=s2′=s′)
  • 每个维度相同的padding (p′1=p′2=p′p1′=p2′=p′)

下图表示的是参数为( i′=2,k′=3,s′=1,p′=2i′=2,k′=3,s′=1,p′=2)的反卷积操作,其对应的卷积操作参数为 (i=4,k=3,s=1,p=0)(i=4,k=3,s=1,p=0)。我们可以发现对应的卷积和非卷积操作其 (k=k′,s=s′)(k=k′,s=s′),但是反卷积却多了p′=2p′=2。通过对比我们可以发现卷积层中左上角的输入只对左上角的输出有贡献,所以反卷积层会出现 p′=k−p−1=2p′=k−p−1=2。通过示意图,我们可以发现,反卷积层的输入输出在 s=s′=1s=s′=1 的情况下关系为:

o′=i′−k′+2p′+1=i′+(k−1)−2p

4.Fractionally Strided Convolution

反卷积有时候也被叫做Fractionally Strided Convolution,翻译过来大概意思就是小数步长的卷积。对于步长 s>1s>1的卷积,我们可能会想到其对应的反卷积步长 s′<1s′<1。 如下图所示为一个参数为 i=5,k=3,s=2,p=1i=5,k=3,s=2,p=1的卷积操作(就是第一张图所演示的)所对应的反卷积操作。对于反卷积操作的小数步长我们可以理解为:在其输入特征单元之间插入 s−1s−1 个0,插入0后把其看出是新的特征输入,然后此时步长 s′s′ 不再是小数而是为1。因此,结合上面所得到的结论,我们可以得出Fractionally Strided Convolution的输入输出关系为:

o′=s(i′−1)+k−2p

5.Squeeze-and-Excitation

这是 ImageNet 2017 竞赛 Image Classification 任务的冠军模型 SENet 的核心模块,原文叫做”Squeeze-and-Excitation“。

和前面不同的是,这个卷积是对特征维度作改进的。一个卷积层中往往有数以千计的卷积核,而且我们知道卷积核对应了特征,于是乎那么多特征要怎么区分?这个方法就是通过学习的方式来自动获取到每个特征通道的重要程度,然后依照计算出来的重要程度去提升有用的特征并抑制对当前任务用处不大的特征。

CNN 中千奇百怪的卷积方式大汇总

这个想法的实现异常的简单,简单到你难以置信。

首先做普通的卷积,得到了一个的 output feature map,它的 shape 为 [C,H,W],根据 paper 的观点,这个 feature map 的特征很混乱。然后为了获得重要性的评价指标,直接对这个 feature map 做一个 Global Average Pooling,然后我们就得到了长度为 C 的向量。(这里还涉及到一个额外的东西,如果你了解卷积,你就会发现一旦某一特征经常被激活,那么 Global Average Pooling 计算出来的值会比较大,说明它对结果的影响也比较大,反之越小的值,对结果的影响就越小)

然后我们对这个向量加两个 FC 层,做非线性映射,这俩 FC 层的参数,也就是网络需要额外学习的参数。

最后输出的向量,我们可以看做特征的重要性程度,然后与 feature map 对应 channel 相乘就得到特征有序的 feature map 了。

虽然各大框架现在都还没有扩展这个卷积的 api,但是我们实现它也就几行代码的事,可谓是简单且实用了。

另外它还可以和几个主流网络结构结合起来一起用,比如 Inception 和 Res:

CNN 中千奇百怪的卷积方式大汇总CNN 中千奇百怪的卷积方式大汇总

代表模型:Squeeze-and-Excitation Networks(Squeeze-and-Excitation Networks

转载至:http://buptldy.github.io/2016/10/29/2016-10-29-deconv/

更多关于卷积和反卷积的可视化理解:https://github.com/vdumoulin/conv_arithmetic 

猜你喜欢

转载自blog.csdn.net/koibiki/article/details/86932922