行列可分离卷积 separable convolution

这篇具有很好参考价值的文章主要介绍了行列可分离卷积 separable convolution。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

  1. 概述
  2. 推导
  3. 知识沙漠中的一点扩展

如有纰漏错误,恳请指正:D

0. 概述

行列可分离卷积(separable convolution)主要应用于图像处理算法中,用于将一遍2D离散卷积(也称滤波,下文交替使用)操作分离成2遍1D卷积操作。如果图像像素数为 m m m,卷积核(也称卷积模板、模板)大小为 k ∗ k k*k kk,则行列分离卷积可以将时间复杂度由 m ∗ k 2 m*k^2 mk2次乘法,简化到 m ∗ 2 k m*2k m2k次乘法。

行列可分离技术应用的前提是卷积核是可分离的。

1. 推导

a. 卷积的定义

假设现在要对图像 A m ∗ n A_{m*n} Amn(像素矩阵)应用模板核 D k ∗ k D_{k*k} Dkk进行卷积操作,并且 D D D满足行列可分离性质。

R i , j = ∑ a = i − ⌊ k / 2 ⌋ i + ⌊ k / 2 ⌋ ∑ b = i − ⌊ k / 2 ⌋ i + ⌊ k / 2 ⌋ A a , b ∗ D a − i + ⌊ k / 2 ⌋ , b − j + ⌊ k / 2 ⌋ (1) R_{i,j} = \sum_{a = i - \lfloor k/2\rfloor} ^ {i + \lfloor k/2 \rfloor} \sum_{b = i - \lfloor k/2\rfloor} ^ {i + \lfloor k/2 \rfloor} A_{a,b} * D_{a - i + \lfloor k/2\rfloor, b - j + \lfloor k/2\rfloor} \tag{1} Ri,j=a=ik/2i+k/2b=ik/2i+k/2Aa,bDai+k/2,bj+k/2(1)

其中, R R R为卷积后的结果图像矩阵,下表 X i , j X_{i,j} Xi,j表示 X X X矩阵的第i行第j列个元素。 ⌊ a ⌋ \lfloor a \rfloor a表示对 a a a下取整。

上式表示目标图像矩阵的第 i , j i, j i,j个像素,是由原像素矩阵 A i , j A_{i,j} Ai,j周围大小为 k k k的方阵与卷积核 D D D内积而得。(更直观的解释请百度卷积/离散卷积)

行列可分离卷积 separable convolution

b. 卷积核可分离的前提

而由于模板核 D D D满足行列可分离性质,有

D i , j = E i ∗ F j (2) D_{i,j} = E_i * F_j \tag{2} Di,j=EiFj(2)

其中, E E E k ∗ 1 k*1 k1的列向量, F F F 1 ∗ k 1*k 1k的行向量,也就是说, k ∗ k k*k kk的模板核 D D D可以用两个1D的向量矩阵相乘表示。

c. 推导

( 2 ) (2) (2)式代入 ( 1 ) (1) (1)式中可得,

R i , j = ∑ a ∑ b A a , b ∗ E a ∗ F b (3) R_{i,j} = \sum_a \sum_b A_{a,b} * E_a * F_b \tag{3} Ri,j=abAa,bEaFb(3)

为了简化表示,其中 E , F E,F E,F矩阵下标直接用 a , b a,b a,b代替。其值应为 a − i + ⌊ k / 2 ⌋ , b − j + ⌊ k / 2 ⌋ a - i + \lfloor k/2\rfloor,b - j + \lfloor k/2\rfloor ai+k/2,bj+k/2,对应范围 [ 0 , k ] [0,k] [0,k]
上式内层求和号是对 b b b进行求和, E a E_a Ea项可看作常数提到 ∑ b \sum_b b外面来,可得,

R i , j = ∑ a E a ∑ b A a , b ∗ F b (4) R_{i,j} = \sum_a E_a \sum_b A_{a,b} * F_b \tag{4} Ri,j=aEabAa,bFb(4)

仔细看 ∑ b A a , b ∗ F b \sum_b A_{a,b} * F_b bAa,bFb这一项,由于 F b F_b Fb是一个一维行向量,所以这一项也可以写成 ∑ a = 1 1 ∑ b A a , b ∗ F a , b \sum_{a=1}^{1}\sum_b A_{a,b} * F_{a,b} a=11bAa,bFa,b。是的,这就是文章开头所提出的二维卷积的定义式,同理,我们可以将式 ( 4 ) (4) (4)变成如下形式,

T i , j = ∑ a = i i ∑ b A a , b ∗ F a , b (4.1) T_{i,j} = \sum_{a=i}^{i}\sum_b A_{a,b} * F_{a,b} \tag{4.1} Ti,j=a=iibAa,bFa,b(4.1)

R i , j = ∑ b = j j ∑ a E a , b ∗ T a , b (4.2) R_{i,j} = \sum_{b=j}^j\sum_a E_{a,b} * T_{a,b} \tag{4.2} Ri,j=b=jjaEa,bTa,b(4.2)

其中, T i , j T_{i,j} Ti,j为使用行列分离之后的行向量卷积图像得到的中间结果。

行列可分离卷积 separable convolution

至此,行列可分离卷积证明结束。

2. 拓展

在各种涉及到性能优化的卷积操作中,无论是人工智能(不太熟悉,只是看到过几篇文章提到了这个方法),还是图像处理、实时渲染领域,都在寻求方法将卷积模板可分离化,来加速算法的执行。
或许在之后的优化工作中,考虑卷积的可分离性不失为一种方向。

在浅薄的知识里,Separable-Subsurface-Scattering [ 1 ] ^{[1]} [1]文中将一种图像后处理的模板近似成行列可分离的卷积核,并通过可分离的性质加速了对画面进行实时后处理滤波的速度,达到了很好的速度结果。

同时SVD分解 [ 2 ] ^{[2]} [2]提供了一种将矩阵低秩近似为行列可分离矩阵的方法,通过这种方法,既可以获得给定阶数下对目标矩阵能量损失最小,同时还能分离成目标行列数的方法。(在 Frobenius范数定义下的能量损失最小,实际上是 m i n ( ∑ i ∑ j A i , j ∗ B i , j ) min(\sum_i \sum_j A_{i,j} * B_{i,j}) min(ijAi,jBi,j),就是矩阵对应元素乘积,当两个矩阵相减,并且对应元素乘积最小就叫Frobenius范数定义下的能量损失最小)


参考文献

  1. Separable Subsurface Scattering

  2. THE APPROXIMATION OF ONE MATRIX BY
    ANOTHER OF LOWER RANK


如有纰漏错误,恳请指正:D * 2文章来源地址https://www.toymoban.com/news/detail-436715.html

到了这里,关于行列可分离卷积 separable convolution的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 动态卷积 Dynamic convolution

    每周汇报,实属不易。近期学习了关于动态卷积的相关内容,写成一个小节,帮助理解什么为动态卷积。内容较为宽泛,若想学习细节知识,可以参考论文。和知乎链接:https://zhuanlan.zhihu.com/p/141868898?from_voters_page=true 首先看到的是这篇ICLR2022年的文章:omni dimensional dynamic co

    2024年02月04日
    浏览(36)
  • 卷积码(convolutional code)

    分块码 (block code):数据流(datastream)被切分为包含 k k k 个数据符号(data symbol)的块,叫做 数据字 (dataword),然后将它们分别编码为包含 n n n 个码符号(code symbol)的块,叫做 码字 (codeword),拼接成码流(codestream)。单个码字仅仅依赖于单个数据字。 Hamming码、B

    2023年04月12日
    浏览(76)
  • Convolutional Neural network(卷积神经网络)

    目录 Why CNN for Image? The whole CNN structure  Convolution(卷积) Max Pooling Flatten  CNN in Keras  What does CNN learn? what does filter do what does neuron do  what about output  Deep Dream Application Playing Go Speech  Text 当我们直接用一般的fully connected的feedforward network来做图像处理的时候,往往会需要太多

    2024年02月05日
    浏览(41)
  • TCN(Temporal Convolutional Network,时间卷积网络)

            实验表明,RNN 在几乎所有的序列问题上都有良好表现,包括语音/文本识别、机器翻译、手写体识别、序列数据分析(预测)等。         在实际应用中,RNN 在内部设计上存在一个严重的问题: 由于网络一次只能处理一个时间步长,后一步必须等前一步处理完才能

    2024年02月01日
    浏览(36)
  • 【论文笔记】动态蛇卷积(Dynamic Snake Convolution)

    精确分割拓扑管状结构例如血管和道路,对医疗各个领域至关重要,可确保下游任务的准确性和效率。然而许多因素使分割任务变得复杂,包括细小脆弱的局部结构和复杂多变的全局形态。针对这个问题,作者提出了动态蛇卷积,该结构在管状分割任务上获得了极好的性能。

    2024年02月03日
    浏览(36)
  • 卷积神经网络CNN(Convolutional Neural Network)

    一、CNN与NN的区别 卷积神经网络与传统神经网络的区别: 二、CNN的整体架构 1.输入层;2.卷积层;3.池化层;4.全连接层 三、卷积层做了什么 首先将图形分割成一个个小区域,对于每一个区域特征不同;接下来选择一种特征计算的方法,为每一个区域计算特征值,得到特征图

    2024年02月04日
    浏览(69)
  • AIGC实战——卷积神经网络(Convolutional Neural Network, CNN)

    在深度学习一节中,我们使用 Keras

    2024年02月04日
    浏览(50)
  • CBAM(Convolutional Block Attention Module)卷积注意力模块用法及代码实现

    CBAM( Convolutional Block Attention Module )是一种轻量级注意力模块的提出于2018年。CBAM包含CAM(Channel Attention Module)和SAM(Spartial Attention Module)两个子模块,分别在通道上和空间上添加注意力机制。这样不仅可以节约参数和计算力,而且保证了其能够做为即插即用的模块集成到现

    2024年02月11日
    浏览(33)
  • 一文看懂卷积运算(convolution)与互相关运算(cross-correlation)的区别

    目录 互相关运算定义 互相关运算图示 互相关运算完整计算示例 卷积数学定义 卷积运算图示 卷积与互相关运算区别 深度学习中的卷积为何能用互相关运算代替 在二维互相关运算中,卷积窗口从输入数组的最左上方开始,按从左往右、从上往下的顺序,依次在输入数组上滑

    2024年02月02日
    浏览(28)
  • 改进YOLO系列 | YOLOv5/v7 引入 Dynamic Snake Convolution | 动态蛇形卷积

    准确分割拓扑管状结构,如血管和道路,在各个领域中至关重要,可以确保下游任务的准确性和效率。然而,许多因素使任务复杂化,包括细小的局部结构和可变的全局形态。在这项工作中,我们注意到管状结构的特殊性,并利用这一知识来引导我们的DSCNet,以在三个阶段同

    2024年02月07日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包