自学内容网 自学内容网

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

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

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



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

大多数高校硕博生毕业要求需要参加学术会议,发表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


原文地址:https://blog.csdn.net/gaoxiaoxiao1209/article/details/143376335

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!