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

【语义分割|代码解析】CMTFNet-2: CNN and Multiscale Transformer Fusion Network 用于遥感图像分割!

【语义分割|代码解析】CMTFNet-2: CNN and Multiscale Transformer Fusion Network 用于遥感图像分割!

【语义分割|代码解析】CMTFNet-2: CNN and Multiscale Transformer Fusion Network 用于遥感图像分割!


文章目录

  • 【语义分割|代码解析】CMTFNet-2: CNN and Multiscale Transformer Fusion Network 用于遥感图像分割!
  • 前言
    • 1. 定义 `SeparableConvBNReLU` 类
    • 2. 定义基础的分离卷积模块 `SeparableConvBN`
    • 3. 定义基础的分离卷积模块 `SeparableConv`
    • 总结


欢迎宝子们点赞、关注、收藏!欢迎宝子们批评指正!
祝所有的硕博生都能遇到好的导师!好的审稿人!好的同门!顺利毕业!

大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文:
可访问艾思科蓝官网,浏览即将召开的学术会议列表。会议入口:https://ais.cn/u/mmmiUz

论文地址:https://ieeexplore.ieee.org/document/10247595

前言

在这里插入图片描述
这段代码实现了三种分离卷积类,分别为 SeparableConvBNReLUSeparableConvBNSeparableConv。这些类的核心是分离卷积的应用,它通过深度卷积和逐点卷积的组合来减少参数量和计算量。以下是逐行解释:

1. 定义 SeparableConvBNReLU

class SeparableConvBNReLU(nn.Sequential):
    def __init__(self, in_channels, out_channels, kernel_size=3, stride=1, dilation=1,
                 norm_layer=nn.BatchNorm2d):
  • 定义 SeparableConvBNReLU 类,继承自 nn.Sequential,包含深度卷积、逐点卷积、批归一化和激活函数。
  • in_channelsout_channels:输入和输出的通道数。
  • kernel_size:卷积核大小,默认为 3。
  • stride:卷积步幅,默认为 1。
  • dilation:卷积扩张率,控制卷积核的膨胀,默认为 1。
  • norm_layer:归一化层类型,默认为 nn.BatchNorm2d
        super(SeparableConvBNReLU, self).__init__(
            nn.Conv2d(in_channels, in_channels, kernel_size, stride=stride, dilation=dilation,
                      padding=((stride - 1) + dilation * (kernel_size - 1)) // 2,
                      groups=in_channels, bias=False),
  • nn.Conv2d:实现深度卷积,通过设置 groups=in_channels 使每个输入通道与相应的输出通道独立卷积。
  • padding:通过公式 ((stride - 1) + dilation * (kernel_size - 1)) // 2 计算,保持输出尺寸不变。
            norm_layer(in_channels),
            nn.Conv2d(in_channels, out_channels, kernel_size=1, bias=False),
  • norm_layer(in_channels):对深度卷积的输出进行批归一化。
  • nn.Conv2d(in_channels, out_channels, kernel_size=1, bias=False):逐点卷积(1x1卷积),整合深度卷积的结果,改变通道数。
            norm_layer(out_channels),
            nn.ReLU6()
        )
  • norm_layer(out_channels):对逐点卷积的输出进行批归一化。
  • nn.ReLU6():ReLU6 激活函数,将输出值限制在 0 和 6 之间,适合移动端模型。

2. 定义基础的分离卷积模块 SeparableConvBN

class SeparableConvBN(nn.Sequential):
    def __init__(self, in_channels, out_channels, kernel_size=3, stride=1, dilation=1,
                 norm_layer=nn.BatchNorm2d):
  • SeparableConvBN 类的定义与 SeparableConvBNReLU 类似,但不包含激活函数。
        super(SeparableConvBN, self).__init__(
            nn.Conv2d(in_channels, in_channels, kernel_size, stride=stride, dilation=dilation,
                      padding=((stride - 1) + dilation * (kernel_size - 1)) // 2,
                      groups=in_channels, bias=False),
  • 深度卷积的设置与 SeparableConvBNReLU 类相同。
            nn.Conv2d(in_channels, out_channels, kernel_size=1, bias=False),
            norm_layer(out_channels),
        )
  • 逐点卷积层用于调整输出通道数,接批归一化,作为模块的最后一层。

3. 定义基础的分离卷积模块 SeparableConv

class SeparableConv(nn.Sequential):
    def __init__(self, in_channels, out_channels, kernel_size=3, stride=1, dilation=1):
  • 定义 SeparableConv 类,包含深度卷积和逐点卷积,但不包含批归一化和激活函数。
        super(SeparableConv, self).__init__(
            nn.Conv2d(in_channels, in_channels, kernel_size, stride=stride, dilation=dilation,
                      padding=((stride - 1) + dilation * (kernel_size - 1)) // 2,
                      groups=in_channels, bias=False),
            nn.Conv2d(in_channels, out_channels, kernel_size=1, bias=False)
        )
  • 仅包括深度卷积和逐点卷积,用于需要较低计算量且无需额外归一化的情况。

总结

  • SeparableConvBNReLU:包含深度卷积、逐点卷积、批归一化和 ReLU6 激活函数。
  • SeparableConvBN:包含深度卷积、逐点卷积和批归一化,无激活函数。
  • SeparableConv:包含深度卷积和逐点卷积,适合无需批归一化和激活的场景。

这些模块在 CMTFNet 中用于高效特征提取,适合处理高分辨率遥感图像的数据量较大且计算成本高的问题。

欢迎宝子们点赞、关注、收藏!欢迎宝子们批评指正!
祝所有的硕博生都能遇到好的导师!好的审稿人!好的同门!顺利毕业!

大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文:
可访问艾思科蓝官网,浏览即将召开的学术会议列表。会议入口:https://ais.cn/u/mmmiUz


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

相关文章:

  • Maven的安装配置
  • 浅谈Agent
  • 【HCIP园区网综合拓扑实验】配置步骤与详解(未施工完,持续更新中)
  • 深度洞察| 超6亿银发精准流量,40+泛银发群体参与消费三大变化
  • itextpdf打印A5的问题
  • ESP32 gptimer通用定时器初始化报错:assert failed: timer_ll_set_clock_prescale
  • c语言-scanf/scanf_s函数的用法
  • 使用 Mac 数据恢复从 iPhoto 图库中恢复照片
  • 优雅的使用TypeScript的建议
  • QT项目之推箱子
  • Windows下mysql数据库备份策略
  • NLP论文速读|LongReward:基于AI反馈来提升长上下文大语言模型
  • fastGPT调用stable diffusion生成图片,本地模型使用ollama
  • DNS域名详细解析详解
  • 让零售更智能|无人超市系统开发,实现数字化商超
  • 【安当产品应用案例100集】029-使用安全芯片保护设备核心业务逻辑
  • _处理匿名命名空间里的变量时进入硬件中断错误
  • [全网最完整最详细C++篇]第四篇:类和对象(上)
  • YOLOv6-4.0部分代码阅读笔记-figure_iou.py
  • LabVIEW高效数据采集与信号处理系统
  • 【UE5】在材质中实现球形法线技术,常用于改善植物等表面的渲染效果
  • STM32CUBEIDE FreeRTOS操作教程(八):queues多队列
  • Altium Designer使用技巧(四)
  • 3193. 统计逆序对的数目
  • [JAVAEE] 网络基础
  • 气象监测软件的程序设计