当前位置: 首页 > article >正文

【深度学习基础之多尺度特征提取】不同尺寸卷积核、不同步长卷积是如何在深度学习网络中提取多尺度特征的?附代码

【深度学习基础之多尺度特征提取】不同尺寸卷积核、不同步长卷积是如何在深度学习网络中提取多尺度特征的?附代码

【深度学习基础之多尺度特征提取】不同尺寸卷积核、不同步长卷积是如何在深度学习网络中提取多尺度特征的?附代码


文章目录

  • 【深度学习基础之多尺度特征提取】不同尺寸卷积核、不同步长卷积是如何在深度学习网络中提取多尺度特征的?附代码
  • 前言
    • 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


http://www.kler.cn/a/451511.html

相关文章:

  • x86_64 Ubuntu 编译安装英伟达GPU版本的OpenCV
  • sentinel笔记9- 限流规则持久化(上)
  • 网络安全公司150强
  • LeetCode 热题 100_LRU 缓存(35_146_中等_C++)(哈希表 + 双向链表)(构造函数声明+初始化列表=进行变量初始化和赋值)
  • 【Yonghong 企业日常问题 06】上传的文件不在白名单,修改allow.jar.digest属性添加允许上传的文件SH256值?
  • 详细介绍如何使用rapidjson读取json文件
  • docker 容器的基本使用
  • 鸿蒙Next API 12开发,使用@ohos/axios进行HTTP请求
  • 【电路笔记】-布尔代数真值表
  • 基于springboot的海洋知识服务平台的设计与实现
  • 数据结构与算法作业(五)
  • 【uni-app】2025最新uni-app一键登录保姆级教程(包含前后端获取手机号方法)(超强避坑指南)
  • Pycharm配置PyQt 5
  • Spring Boot 中 Map 的最佳实践
  • dockerfile文档编写(1):基础命令
  • DX12 快速教程(2) —— 渲染天蓝色窗口
  • html + css 淘宝网实战
  • 矩阵方程组求解——Markov过程
  • 黑马Java面试教程_P2_Redis
  • 圆形视频怎么制作?裁剪圆形视频的方法
  • 重温设计模式--单例模式
  • 服务器经常遇到端口被占用的情况怎么办?
  • 《机器学习》流形学习 流形 局部线性嵌入 等距映射(Isomap: 测地线MDS降维
  • 【代码随想录】刷题记录(83)-最大子数组和
  • 利用Java爬虫获取苏宁易购商品详情
  • 决策树(理论知识1)