@[toc]在通道数不变的情况下,1x1卷积与3x3卷积有什么区别???
在通道数不变的情况下,1x1卷积与3x3卷积有什么区别???
在深度学习中,1x1卷积和3x3卷积是两种常用的卷积操作,尽管它们的卷积核大小不同
,但在通道数不变
的情况下,它们的作用和效果有显著的区别。
1. 感受野(Receptive Field)
1x1卷积:
感受野
为 1x1,即每个输出像素仅依赖于输入特征图的单个像素
。
无法捕捉局部空间信息(如边缘、纹理等)。
3x3卷积:
感受野
为 3x3,即每个输出像素依赖于输入特征图的 3x3 局部区域
。
能够捕捉局部空间信息,适合提取局部特征
。
参数量和计算量
1x1卷积:
参数量:
Cin×Cout×1×1 其中C in是输入通道数,Cout是输出通道数。
计算量较低
,因为卷积核大小为 1x1。
3x3卷积:
CinxCoutx3x3
计算量较高
,因为卷积核大小为 3x3
3. 功能和作用
(1)1x1卷积
通道混合(Channel Mixing):
1x1卷积的主要作用是对输入特征图的通道进行线性组合(加权求和)
,而不改变空间维度。
可以用于升维(增加通道数)或降维(减少通道数)。
非线性增强:
在 1x1卷积后通常会接一个非线性激活函数(如 ReLU),从而引入非线性。
降低计算量:
在深度可分离卷积(Depthwise Separable Convolution)中,1x1卷积用于将深度卷积的输出通道混合,从而减少计算量。
(2)3x3卷积
空间特征提取:
3x3卷积能够捕捉局部空间信息(如边缘、角点、纹理等),适合提取图像的局部特征。
特征融合:
通过堆叠多个 3x3卷积,可以逐步扩大感受野,从而捕捉更大范围的上下文信息。
常用性:
3x3卷积是卷积神经网络(CNN)中最常用的卷积核大小,因为它在感受野和计算量
之间取得了良好的平衡。
4. 输出特征图大小
在步幅(Stride)为 1 且填充(Padding)为 1 的情况下:
1x1卷积:输出特征图的空间大小与输入相同。
3x3卷积:输出特征图的空间大小也与输入相同(假设填充为 1)。
如果步幅或填充不同,输出特征图的大小可能会发生变化。
5. 应用场景
(1)1x1卷积的应用
通道降维:
在 ResNet 和 Inception 网络中,1x1卷积用于减少通道数,从而降低计算量。
通道升维:
在深度可分离卷积中,1x1卷积用于将深度卷积的输出通道扩展到目标维度。
非线性增强:
在卷积层之间插入 1x1卷积,可以增加网络的非线性表达能力。
(2)3x3卷积的应用
特征提取:
在大多数 CNN 中,3x3卷积是主要的特征提取工具。
感受野扩展:
通过堆叠多个 3x3卷积,可以逐步扩大感受野,从而捕捉更大范围的上下文信息。
6. 代码示例
1x1卷积
import torch
import torch.nn as nn
# 输入特征图:batch_size=1, channels=64, height=32, width=32
input = torch.randn(1, 64, 32, 32)
# 1x1卷积:输入通道=64,输出通道=128
conv1x1 = nn.Conv2d(64, 128, kernel_size=1, stride=1, padding=0)
output = conv1x1(input)
print(output.shape) # 输出: torch.Size([1, 128, 32, 32])
3x3卷积
import torch
import torch.nn as nn
# 输入特征图:batch_size=1, channels=64, height=32, width=32
input = torch.randn(1, 64, 32, 32)
# 3x3卷积:输入通道=64,输出通道=128
conv3x3 = nn.Conv2d(64, 128, kernel_size=3, stride=1, padding=1)
output = conv3x3(input)
print(output.shape) # 输出: torch.Size([1, 128, 32, 32])
7. 总结
特性 : 1x1卷积 3x3卷积
感受野 : 1x1(无空间信息) 3x3(捕捉局部空间信息)
参数量: 较少 较多
计算量: 较低 较高
功能: 通道混合、非线性增强 空间特征提取、感受野扩展
应用场景 通道降维、升维、非线性增强 特征提取、上下文信息捕捉
在实际应用中,1x1卷积和3x3卷积通常结合使用,以充分发挥它们各自的优势。例如,在 Inception 模块中,1x1卷积用于降维和升维,而3x3卷积用于提取局部特征。