小卷积核代替大卷积核原理

小卷积核如何替代大卷积核
本文探讨了如何使用多个3*3的小卷积核代替更大的5*5和7*7卷积核,以减少计算量并保持相同的感受野。通过具体的计算实例,展示了这种替换方式在卷积层特征图尺寸计算中的应用,并指出该方法能增加非线性特性。

卷积层特征图尺寸计算公式

M=\frac{N-F+2P}{S}

设置图片尺寸为64*64 pixel

两个3*3卷积核代替5*5卷积核

5*5卷积的特征图尺寸:

kernel=5*5,stride=1,padding=0

M=(64-5+2*0)/1+1=60

参数量:5*5*input_channels*output_channels

计算量:5*5*input_channels*output_channels*64*64

2个3*3卷积的特征图尺寸(这里指进行两次3*3卷积);

kernel=3*3,stride=1,padding=0

第一次:(64-3+2*0)/1+1=62

第二次:(62-3+2*0)/1+1=60

参数量:2*3*3*input_channels*output_channels

计算量:2*3*3*input_channels*output_channels*64*64

三个3*3卷积核代替7*7卷积核

7*7卷积的特征图尺寸:

kernel=7*7,stride=1,padding=0

M=(64-7+2*0)/1+1=58

参数量:7*7*input_channels*output_channels

计算量:7*7*input_channels*output_channels*64*64

3个3*3卷积的特征图尺寸(这里指进行三次3*3卷积);

kernel=3*3,stride=1,paddi

换位置卷积核在不同场景下有不同的概念,结合参考信息,主要涉及到卷积核翻转和可变卷积核位置的情况。 ### 卷积核翻转原理 在二维卷积的计算中,需要先将卷积核进行翻转180°,再进行卷积运算。而在实际实现时,常用相关性来代替卷积,相关性与卷积的区别在于,相互关在计算之前没有进行180°翻转卷积核,因此相关性也被称为不翻转卷积,甚至常和卷积混为一谈[^1]。 ### 可变卷积核位置原理 可变卷积(如DCN 1)本质上,卷积核还是按照传统CNN一样遍历。但当遍历到某个位置后,由于偏量的存在,实际参与计算的是另外位置和卷积核参数的计算结果。例如,卷积核遍历到绿色位置,由于偏量使得真正参与计算的是蓝色的点[^3]。 ### 应用 - **图像处理**:卷积核规定了周围的像素点是如何对当前像素点产生影响的,不同的卷积核参数可以实现不同的图像处理效果,如边缘检测、模糊处理等。通过改变卷积核的位置或参数,可以对图像的不同区域进行有针对性的处理[^2]。 - **卷积神经网络**:可变卷积卷积神经网络中应用,能够让网络更灵活地适应不同形状和尺度的目标,提升模型对目标的检测和识别能力。 ### 相关技术 - **传统卷积计算**:遵循卷积核翻转后进行卷积运算的规则,根据输入和卷积核大小,通过公式(n - f + 1)*(n - f + 1)计算输入到输出的对应关系,其中n为输入,f为卷积核大小。并且为了让卷积核的核心对应原图的点并避免丢失边沿信息,卷积核通常取奇数[^1][^4]。 - **可变卷积技术**:在传统卷积遍历基础上,引入偏量机制,改变卷积核实际参与计算的位置,增强模型的适应性和灵活性。 ```python # 简单的二维卷积计算示例(未考虑卷积核翻转) import numpy as np def convolution(input_matrix, kernel): input_height, input_width = input_matrix.shape kernel_height, kernel_width = kernel.shape output_height = input_height - kernel_height + 1 output_width = input_width - kernel_width + 1 output = np.zeros((output_height, output_width)) for i in range(output_height): for j in range(output_width): output[i, j] = np.sum(input_matrix[i:i+kernel_height, j:j+kernel_width] * kernel) return output # 示例输入 input_matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) kernel = np.array([[1, 0], [0, 1]]) result = convolution(input_matrix, kernel) print(result) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值