二维离散卷积之可分离卷积核

本文探讨了卷积运算中可分离卷积的概念,通过实例展示了如何将卷积核分解并利用这种特性减少运算量。讲解了full卷积与same卷积的区别,并重点介绍了可分离卷积在实际编程中的应用,包括使用OpenCV库的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习资料参考:

张平.《OpenCV算法精解:基于Python与C++》.[Z].北京.电子工业出版社.2017.


概念

类比于线性代数中的两个矩阵的乘法运算。如果一个卷积核至少由两个尺寸比它小的卷积核full卷积而成,如下所示:
在这里插入图片描述
那么这样的卷积核就可以分离。上述例子是分离为一维水平方向和一维垂直方向上的卷积核。当分离的一般不满足交换律。


性质

  1. full卷积
    若卷积核可分离,那么我们进行卷积的时候,可以按照分离后,再进行卷积,如下所示:
    在这里插入图片描述

一般的卷积计算如下:
I=(1231012324312419012234780124390328907112498123)I = {(\begin{matrix} 1 & 2 & 3 & 10 &12\\ 32 & 43 & 12&4&190 \\ 12 & 234 &78&0&12\\ 43&90&32&8&90\\ 71&12&4&98&123 \end{matrix})}I=(1321243712432349012312783241040898121901290123)
kernel=(10−110−110−1)kernel = {(\begin{matrix} 1 & 0 & -1 \\ 1& 0& -1 \\ 1 & 0 & -1 \end{matrix})}kernel=(111000111).

计算两者的卷积
I_Kernel = signal.convolve2d(I,kernel,mode = 'full',boundary = 'fill',fillvalve = 0);

进行分离后再卷积,如下所示:
kernel=(111)kernel = {(\begin{matrix}1 \\1 \\1 \end{matrix})}kernel=(111)* (10−1){(\begin{matrix} 1 &0 &-1 \end{matrix})}(101)
或者
kernel=(10−1)kernel = {(\begin{matrix}1 \\0 \\-1 \end{matrix})}kernel=(101)* (111){(\begin{matrix} 1 &1 &1 \end{matrix})}(111)

再次计算两者的卷积

kernel1 = np.array([[1],[1],[1]],np.float32)
kernel2 = np.array([[1,0,-1]],np.float32)
I_k1 = signal.convolve2d(I,kernel1,mode = 'full',boundary = 'fill',fillvalve = 0)
I_k1_k2 = signal.convolve2d(I_k1 ,kernel2,mode = 'full',boundary = 'fill',fillvalve = 0)
  1. same卷积
    与full卷积类似,拆分也类似。
    代码改动,将mode参数修改为same即可
kernel1 = np.array([[1],[1],[1]],np.float32)
kernel2 = np.array([[1,0,-1]],np.float32)
I_same1 = signal.convolve2d(I,kernel1,mode = 'same',boundary = 'fill',fillvalve = 0)
I_same2 = signal.convolve2d(I_same1,kernel2,mode = 'same',boundary = 'fill',fillvalve = 0)

可分离卷积的优势

可使卷积运算量减少。
如图像矩阵III的尺寸为高H1H1H1,宽W1W1W1,卷积核kernel的尺寸为高H2H2H2,宽W2W2W2,那么进行same卷积的运算量预估为(H1∗W1)∗(H2∗W2)(H1 * W1)*(H2 * W2)H1W1H2W2次;若进行分离,那么卷积核就转换为一个行向量与一个列向量,然后再进行运算,可使卷积运算量减少到(H1∗W1)∗(H2+W2)(H1 * W1)*(H2 + W2)H1W1H2+W2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值