【深度学习基础之多尺度特征提取】不同尺寸卷积核、不同步长卷积是如何在深度学习网络中提取多尺度特征的?附代码
【深度学习基础之多尺度特征提取】不同尺寸卷积核、不同步长卷积是如何在深度学习网络中提取多尺度特征的?附代码
【深度学习基础之多尺度特征提取】不同尺寸卷积核、不同步长卷积是如何在深度学习网络中提取多尺度特征的?附代码
文章目录
- 【深度学习基础之多尺度特征提取】不同尺寸卷积核、不同步长卷积是如何在深度学习网络中提取多尺度特征的?附代码
- 前言
- 1. 不同尺寸卷积核提取多尺度特征
- 示例代码(不同尺寸卷积核):
- 解释
- 2. 不同步长卷积提取多尺度特征
- 示例代码(不同步长卷积):
- 解释
- 3. 结合不同尺寸卷积核和不同步长卷积提取多尺度特征
- 示例代码(结合不同尺寸卷积核和不同步长卷积):
- 解释
- 总结
欢迎宝子们点赞、关注、收藏!欢迎宝子们批评指正!
祝所有的硕博生都能遇到好的导师!好的审稿人!好的同门!顺利毕业!
大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文:
可访问艾思科蓝官网,浏览即将召开的学术会议列表。会议详细信息可参考:https://ais.cn/u/mmmiUz
前言
不同尺寸的卷积核和不同步长(stride)卷积是深度学习网络中提取多尺度特征的两种常见方法。它们通过不同的方式对输入特征图进行操作,从而帮助模型提取多尺度的上下文信息。
1. 不同尺寸卷积核提取多尺度特征
- 不同尺寸的卷积核(如3x3、5x5、7x7)能够捕捉到不同范围的信息。较小的卷积核(如3x3)主要关注局部特征,而较大的卷积核(如5x5或7x7)能够捕捉到更大的感受野,从而提取更大尺度的特征。
- 例如,使用不同尺寸的卷积核可以帮助网络同时捕捉细节信息和全局信息。较小的卷积核能够专注于细节,而较大的卷积核能够捕捉到更广阔的上下文信息。
示例代码(不同尺寸卷积核):
import torch
import torch.nn as nn
import torch.nn.functional as F
class MultiScaleConvNet(nn.Module):
def __init__(self, in_channels, out_channels):
super(MultiScaleConvNet, self).__init__()
# 3x3卷积核
self.conv_3x3 = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1)
# 5x5卷积核
self.conv_5x5 = nn.Conv2d(in_channels, out_channels, kernel_size=5, padding=2)
# 7x7卷积核
self.conv_7x7 = nn.Conv2d(in_channels, out_channels, kernel_size=7, padding=3)
def forward(self, x):
x3 = self.conv_3x3(x) # 使用3x3卷积
x5 = self.conv_5x5(x) # 使用5x5卷积
x7 = self.conv_7x7(x) # 使用7x7卷积
# 将不同卷积核提取的特征拼接在一起
out = torch.cat([x3, x5, x7], dim=1)
return out
# 示例输入
input_tensor = torch.randn(1, 3, 64, 64) # 输入一个64x64的RGB图像
model = MultiScaleConvNet(in_channels=3, out_channels=16)
output_tensor = model(input_tensor)
print(output_tensor.shape) # 输出形状: (1, 48, 64, 64)
解释
- 该模型使用了3x3、5x5、7x7三种不同尺寸的卷积核来提取特征。
- 这些卷积核分别捕捉不同尺度的特征,较小的卷积核捕捉局部信息,较大的卷积核捕捉全局信息。
- 最后,将三个卷积层提取的特征在通道维度进行拼接,从而获得包含多尺度信息的特征图。
2. 不同步长卷积提取多尺度特征
不同步长的卷积通过调整卷积操作的步幅,改变卷积核在输入特征图上滑动的速度。较大的步长(stride)会使卷积核跳过更多的像素,从而减小输出特征图的尺寸,但它能够捕捉到更大的上下文信息。
- 较小步长(stride=1):每次卷积核只滑动一个像素,输出特征图的空间分辨率较高。
- 较大步长(stride>1):每次卷积核滑动多个像素,输出特征图的空间分辨率较低,但能够提取更大的感受野信息。
通过使用不同步长的卷积,模型能够在不同尺度下捕捉到特征,尤其是在处理大范围信息时,较大的步长能够捕获到更宽广的上下文。
示例代码(不同步长卷积):
class MultiStrideConvNet(nn.Module):
def __init__(self, in_channels, out_channels):
super(MultiStrideConvNet, self).__init__()
# 步长为1的卷积
self.conv_stride_1 = nn.Conv2d(in_channels, out_channels, kernel_size=3, stride=1, padding=1)
# 步长为2的卷积
self.conv_stride_2 = nn.Conv2d(in_channels, out_channels, kernel_size=3, stride=2, padding=1)
# 步长为4的卷积
self.conv_stride_4 = nn.Conv2d(in_channels, out_channels, kernel_size=3, stride=4, padding=1)
def forward(self, x):
x1 = self.conv_stride_1(x) # 使用步长1的卷积
x2 = self.conv_stride_2(x) # 使用步长2的卷积
x4 = self.conv_stride_4(x) # 使用步长4的卷积
# 将不同步长卷积提取的特征拼接在一起
out = torch.cat([x1, x2, x4], dim=1)
return out
# 示例输入
input_tensor = torch.randn(1, 3, 64, 64) # 输入一个64x64的RGB图像
model = MultiStrideConvNet(in_channels=3, out_channels=16)
output_tensor = model(input_tensor)
print(output_tensor.shape) # 输出形状: (1, 48, 64, 64)
解释
- 该模型使用了步长为1、2、4的卷积层来提取多尺度特征。
- 步长为1 的卷积层能较细致地提取信息,输出特征图的分辨率较高。
- 步长为2 和 步长为4 的卷积层则通过减少空间分辨率,捕捉更大范围的上下文信息,形成更大感受野的特征。
- 最后将这三个不同步长的特征图进行拼接,合并多尺度信息。
3. 结合不同尺寸卷积核和不同步长卷积提取多尺度特征
在实际的深度学习模型中,通常将这两种方法结合使用,以进一步丰富多尺度信息。例如,使用不同尺寸的卷积核和不同步长的卷积层提取不同尺度的特征,然后将它们融合在一起,提高模型对不同尺寸物体的处理能力。
示例代码(结合不同尺寸卷积核和不同步长卷积):
class MultiScaleStrideConvNet(nn.Module):
def __init__(self, in_channels, out_channels):
super(MultiScaleStrideConvNet, self).__init__()
# 使用3x3卷积和步长为1
self.conv_3x3_stride_1 = nn.Conv2d(in_channels, out_channels, kernel_size=3, stride=1, padding=1)
# 使用5x5卷积和步长为2
self.conv_5x5_stride_2 = nn.Conv2d(in_channels, out_channels, kernel_size=5, stride=2, padding=2)
# 使用7x7卷积和步长为4
self.conv_7x7_stride_4 = nn.Conv2d(in_channels, out_channels, kernel_size=7, stride=4, padding=3)
def forward(self, x):
x1 = self.conv_3x3_stride_1(x) # 3x3卷积 + 步长1
x2 = self.conv_5x5_stride_2(x) # 5x5卷积 + 步长2
x3 = self.conv_7x7_stride_4(x) # 7x7卷积 + 步长4
# 将不同尺寸和步长的特征拼接
out = torch.cat([x1, x2, x3], dim=1)
return out
# 示例输入
input_tensor = torch.randn(1, 3, 64, 64) # 输入一个64x64的RGB图像
model = MultiScaleStrideConvNet(in_channels=3, out_channels=16)
output_tensor = model(input_tensor)
print(output_tensor.shape) # 输出形状: (1, 48, 16, 16)
解释
- 在这个例子中,模型结合了不同尺寸的卷积核(3x3、5x5、7x7)和不同步长(1、2、4),从而可以提取多尺度的信息。
- 通过使用更大的卷积核和更大的步长,模型能够捕捉到更多上下文信息,同时通过较小步长的卷积保持细节信息。
总结
- 不同尺寸卷积核 提取的是从局部到全局的不同尺度的信息。
- 不同步长卷积 通过跳跃式地计算来捕捉更大的上下文信息,尤其适用于处理大范围依赖的任务。
- 结合这两种方法,模型可以同时处理不同尺度的特征,并且能适应不同物体尺度的变化,尤其在语义分割、目标检测等任务中非常有效。
欢迎宝子们点赞、关注、收藏!欢迎宝子们批评指正!
祝所有的硕博生都能遇到好的导师!好的审稿人!好的同门!顺利毕业!
大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文:
可访问艾思科蓝官网,浏览即将召开的学术会议列表。会议详细信息可参考:https://ais.cn/u/mmmiUz