卷积(Convolution)(三)

可分离卷积(Separable Convolution)

可分离卷积提出背景

传统的卷积神经网络在计算机视觉领域已经取得了非常好的成绩,但是依然存在一个待改进的问题—计算量大。

当卷积神经网络应用到实际工业场景时,模型的参数量和计算量都是十分重要的指标,较小的模型可以高效地进行分布式训练,减小模型更新开销,降低平台体积功耗存储和计算能力的限制,方便部署在移动端。

因此,为了更好地实现这个需求,在卷积运算的基础上,学者们提出了更为高效的可分离卷积。

空间可分离卷积

空间分离卷积(spatial separable convolutions),顾名思义就是在空间维度将标准卷积运算进行拆分,将标准卷积核拆分成多个小卷积核。例如我们可以将卷积核拆分成两个(或多个)向量的外积: [ 3 6 9 4 8 12 5 10 15 ] = [ 3 4 5 ] × [ 1 2 3 ] \left[\begin{array}{ccc} 3 & 6 & 9 \\ 4 & 8 & 12 \\ 5 & 10 & 15 \end{array}\right]=\left[\begin{array}{ccc} 3 \\ 4 \\ 5 \end{array}\right] \times \left[\begin{array}{ccc} 1 \quad 2 \quad 3 \end{array}\right] 345681091215 = 345 ×[123]此时,对于一副输入图像而言,我们就可以先用3×1的kernel做一次卷积,再用1×3的kernel做一次卷积,从而得到最终结果。具体操作如下图所示。

在这里插入图片描述
这样,我们将原始的卷积进行拆分,本来需要9次乘法操作的一个卷积运算,就变为了两个需要3次乘法操作的卷积运算,并且最终效果是不变的。可想而知,乘法操作减少,计算复杂性就降低了,网络运行速度也就更快了。

但是空间可分离卷积也存在一定的问题,那就是并非所有的卷积核都可以拆分成两个较小的卷积核。 所以这种方法使用的并不多。

应用示例

空间可分离卷积在深度学习中应用较少,在传统图像处理领域比较有名的是可用于边缘检测的sobel算子,分离的sobel算子计算方式如下: [ − 1 0 1 − 2 0 2 − 1 0 1 ] = [ 1 2 1 ] × [ − 1 0 1 ] \left[\begin{array}{ccc} -1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1 \end{array}\right]= \left[\begin{array}{ccc} 1 \\ 2 \\ 1 \end{array}\right] \times \left[\begin{array}{ccc} -1 \quad 0 \quad 1 \end{array}\right] 121000121 = 121 ×[101]

深度可分离卷积

深度可分离卷积(depthwise separable convolutions)的不同之处在于,其不仅仅涉及空间维度,还涉及深度维度(即 channel 维度)。通常输入图像会具有3个channel:R、G、B。在经过一系列卷积操作后,输入特征图就会变为多个channel。对于每个channel而言,我们可以将其想成对该图像某种特定特征的解释说明。例如输入图像中,“红色” channel 解释描述了图像中的“红色”特征,“绿色” channel 解释描述了图像中的“绿色”特征,“蓝色” channel 解释描述了图像中的“蓝色”特征。又例如 channel 数量为64的输出特征图,就相当于对原始输入图像的64种不同的特征进行了解释说明。

类似空间可分离卷积,深度可分离卷积也是将卷积核分成两个单独的小卷积核,分别进行2种卷积运算:深度卷积运算和逐点卷积运算。 首先,让我们看看正常的卷积是如何工作的。

标准卷积

假设我们有一个 12×12×3 的输入图像,即图像尺寸为 12×12,通道数为3,对图像进行 5×5 卷积,没有填充(padding)且步长为1。如果我们只考虑图像的宽度和高度,使用 5×5 卷积来处理 12×12 大小的输入图像,最终可以得到一个 8×8 的输出特征图。然而,由于图像有3个通道,我们的卷积核也需要有3个通道。 这就意味着,卷积核在每个位置进行计算时,实际上会执行 5×5×3=75 次乘法。如 下图所示,我们使用一个 5×5×3 的卷积核进行卷积运算,最终可以得到 8×8×1 的输出特征图。

在这里插入图片描述
如果我们想增加输出的 channel 数量让网络学习更多种特征呢?这时我们可以创建多个卷积核,比如256个卷积核来学习256个不同类别的特征。此时,256个卷积核会分别进行运算,得到256个 8×8×1 的输出特征图,将其堆叠在一起,最终可以得到 8×8×256 的输出特征图。如下图所示。
在这里插入图片描述
接下来,再来看一下如何通过深度可分离卷积得到 8×8×256 的输出特征图。

扫描二维码关注公众号,回复: 16672160 查看本文章

深度卷积运算

首先,我们对输入图像进行深度卷积运算,这里的深度卷积运算其实就是逐通道进行卷积运算。对于一幅 12×12×3 的输入图像而言,我们使用大小为 5×5 的卷积核进行逐通道运算,计算方式如下图所示。

在这里插入图片描述
这里其实就是使用3个 5×5×1 的卷积核分别提取输入图像中3个 channel 的特征,每个卷积核计算完成后,会得到3个 8×8×1 的输出特征图,将这些特征图堆叠在一起就可以得到大小为 8×8×3 的最终输出特征图。这里我们可以发现深度卷积运算的一个缺点,深度卷积运算缺少通道间的特征融合 ,并且运算前后通道数无法改变。

因此,接下来就需要连接一个逐点卷积来弥补它的缺点。

逐点卷积运算

前面我们使用深度卷积运算完成了从一幅 12×12×3 的输入图像中得到 8×8×3 的输出特征图,并且发现仅使用深度卷积无法实现不同通道间的特征融合,而且也无法得到与标准卷积运算一致的 8×8×256 的特征图。那么,接下来就让我们看一下如何使用逐点卷积实现这两个任务。

逐点卷积其实就是 1×1 卷积,因为其会遍历每个点,所以我们称之为逐点卷积。 1×1 卷积在前面的内容中已经详细介绍了,这里我们还是结合上边的例子看一下它的具体作用。

我们使用一个3通道的 1×1 卷积对上文中得到的 8×8×3 的特征图进行运算,可以得到一个 8×8×1 的输出特征图。如下图所示。此时,我们就使用逐点卷积实现了融合3个通道间特征的功能。

在这里插入图片描述
此外,我们可以创建256个3通道的 1×1 卷积对上文中得到的 8×8×3 的特征图进行运算,这样,就可以实现得到与标准卷积运算一致的 8×8×256 的特征图的功能。如下图所示。

在这里插入图片描述

深度可分离卷积的意义

上文中,我们给出了深度可分离卷积的具体计算方式,那么使用深度可分离卷积代替标准卷积有什么意义呢?

这里我们看一下上文例子中标准卷积的乘法运算个数,我们创建了256个 5×5×3 的卷积核进行卷积运算,每个卷积核会在输入图片上移动 8×8 次,因此总的乘法运算个数为: 256 × 3 × 5 × 5 × 8 × 8 = 1228800 256 \times 3 \times 5 \times 5 \times 8 \times 8=1228800 256×3×5×5×8×8=1228800而换成深度可分离卷积后,在深度卷积运算时,我们使用3个 5×5×1 的卷积核在输入图片上移动 8×8 次,此时乘法运算个数为: 3 × 5 × 5 × 8 × 8 = 4800 3 \times 5 \times 5 \times 8 \times 8=4800 3×5×5×8×8=4800 在逐点卷积运算时,我们使用256个 1×1×3 的卷积在输入特征图上移动 8×8 次,此时乘法运算个数为: 256 × 1 × 1 × 3 × 8 × 8 = 49152 256 \times 1 \times 1 \times 3 \times 8 \times 8=49152 256×1×1×3×8×8=49152将这两步运算相加,即可得到,使用深度可分离卷积后,总的乘法运算个数变为:53952。可以看到,深度可分离卷积的运算量相较标准卷积而言,计算量少了很多。

应用示例

MobileNetv1中使用的深度可分离卷积如下图右侧所示。相较于左侧的标准卷积,其进行了拆分,同时使用了BN层以及RELU激活函数穿插在深度卷积运算和逐点卷积运算中。

在这里插入图片描述

可变形卷积(Deformable Convolution)

提出背景

视觉识别的一个关键挑战是如何适应物体尺度、姿态、视点和零件变形的几何变化或模型几何变换。

但对于视觉识别的传统CNN模块,不可避免的都存在固定几何结构的缺陷:卷积单元在固定位置对输入特征图进行采样;池化层以固定比率降低空间分辨率;一个ROI(感兴趣区域)池化层将一个ROI分割成固定的空间单元;缺乏处理几何变换的内部机制等。

这些将会引起一些明显的问题。例如,同一CNN层中所有激活单元的感受野大小是相同的,这对于在空间位置上编码语义的高级CNN层是不需要的。而且,对于具有精细定位的视觉识别(例如,使用完全卷积网络的语义分割)的实际问题,由于不同的位置可能对应于具有不同尺度或变形的对象,因此,尺度或感受野大小的自适应确定是可取的。

为了解决以上所提到的局限性,一个自然地想法就诞生了:卷积核自适应调整自身的形状。这就产生了可变形卷积的方法。

可变形卷积

DCN v1

可变形卷积顾名思义就是卷积的位置是可变形的,并非在传统的N×N的网格上做卷积,这样的好处就是更准确地提取到我们想要的特征(传统的卷积仅仅只能提取到矩形框的特征),通过一张图我们可以更直观地了解:

在这里插入图片描述

在上面这张图里面,左边传统的卷积显然没有提取到完整绵羊的特征,而右边的可变形卷积则提取到了完整的不规则绵羊的特征。

那可变卷积实际上是怎么做的呢?其实就是在每一个卷积采样点加上了一个偏移量,如下图所示:

在这里插入图片描述
(a) 所示的正常卷积规律的采样 9 个点(绿点);(b)©(d) 为可变形卷积,在正常的采样坐标上加上一个位移量(蓝色箭头);其中 (d) 作为 (b) 的特殊情况,展示了可变形卷积可以作为尺度变换,比例变换和旋转变换等特殊情况。

普通的卷积,以 3 × 3 3\times3 3×3卷积为例对于每个输出 y ( p 0 ) y_(\mathrm{p}_0) y(p0),都要从 x x x上采样9个位置,这9个位置都在中心位置 x ( p 0 ) \mathrm{x}(p0) x(p0)向四周扩散, ( − 1 , − 1 ) (-1,-1) (1,1)代表 x ( p 0 ) \mathrm{x}(p0) x(p0)的左上角, ( 1 , 1 ) (1,1) (1,1)代表 x ( p 0 ) \mathrm{x}(p0) x(p0)的右下角。 R = { ( − 1 , − 1 ) , ( − 1 , 0 ) , . . . , ( 0 , 1 ) , ( 1 , 1 ) } \mathrm{R} = \{(-1,-1),(-1,0),...,(0,1),(1,1)\} R={(1,1),(1,0),...,(0,1),(1,1)}所以传统卷积的输出就是(其中 p n \mathrm{p}_n pn就是网格中的 n n n个点, w ( p n ) \mathrm{w}(\mathrm{p}_n) w(pn)表示对应点位置的卷积权重系数): y ( p 0 ) = ∑ p n ∈ R w ( p n ) ⋅ x ( p 0 + p n ) y(\mathrm{p}0)=\sum{\mathrm{p}_n\in\mathrm{R}}\mathrm{w}(\mathrm{p}_n) \cdot \mathrm{x}(\mathrm{p}_0+\mathrm{p}_n) y(p0)=pnRw(pn)x(p0+pn)正如上面阐述的可变形卷积,就是在传统的卷积操作上加入了一个偏移量 Δ p n \Delta \mathrm{p}_n Δpn,正是这个偏移量才让卷积变形为不规则的卷积,这里要注意这个偏移量可以是小数,所以下面的式子的特征值需要通过双线性插值的方法来计算。 y ( p 0 ) = ∑ p n ∈ R w ( p n ) ⋅ x ( p 0 + p n + Δ p n ) y(\mathrm{p}0)=\sum{\mathrm{p}_n\in\mathrm{R}}\mathrm{w}(\mathrm{p}_n) \cdot \mathrm{x}(\mathrm{p}_0+\mathrm{p}_n+\Delta \mathrm{p}_n) y(p0)=pnRw(pn)x(p0+pn+Δpn)那这个偏移量如何算呢?我们来看:在这里插入图片描述

对于输入的一张feature map,假设原来的卷积操作是3×3的,那么为了学习偏移量offset,我们定义另外一个3×3的卷积层(图中上面的那层),输出的维度其实就是原来feature map大小,channel数等于2N(分别表示x,y方向的偏移)。下面的可变形卷积可以看作先基于上面那部分生成的offset做了一个插值操作,然后再执行普通的卷积。

DCN v2

DCN v2 在DCN v1基础(添加offset)上添加每个采样点的权重

为了解决引入了一些无关区域的问题,在DCN v2中我们不只添加每一个采样点的偏移,还添加了一个权重系数 Δ m k \Delta m_k Δmk,来区分我们引入的区域是否为我们感兴趣的区域,假如这个采样点的区域我们不感兴趣,则把权重学习为0即可: y ( p 0 ) = ∑ p n ∈ R w ( p n ) ⋅ x ( p 0 + p n + Δ p n ) ⋅ Δ m k y(\mathrm{p}0)=\sum{\mathrm{p}_n\in\mathrm{R}}\mathrm{w}(\mathrm{p}_n) \cdot \mathrm{x}(\mathrm{p}_0+\mathrm{p}_n+\Delta \mathrm{p}_n) \cdot \Delta m_k y(p0)=pnRw(pn)x(p0+pn+Δpn)Δmk

猜你喜欢

转载自blog.csdn.net/weixin_49346755/article/details/127485502