【语义分割|代码解析】空洞卷积!DSNet-1: A Novel Way to Use Atrous Convolutions in Semantic Segmentation

【语义分割|代码解析】空洞卷积!DSNet-1: A Novel Way to Use Atrous Convolutions in Semantic Segmentation

【语义分割|代码解析】空洞卷积!DSNet-1: A Novel Way to Use Atrous Convolutions in Semantic Segmentation



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

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

论文地址:https://arxiv.org/pdf/2406.03702v1

前言

在这里插入图片描述

DSNet模型是一种基于膨胀卷积(Atrous Convolution)的语义分割网络,应用在遥感图像分析中能够提高对复杂场景的细节捕捉能力。DSNet模型的整体结构包括多尺度特征提取、特征融合以及分割头输出,以下是对代码的逐层解析,帮助理解每一个模块的功能和设计思想。

1. DSNet总体结构概述

DSNet模型的主要结构由以下模块组成:

  • I分支(Image Branch):用于对输入图像进行初步卷积和降采样。
  • 多尺度特征提取层:使用基本块(BasicBlock)、瓶颈块(Bottleneck)和膨胀卷积等结构,从不同尺度提取特征。
  • 特征融合模块:多尺度特征在不同阶段进行融合,以增强语义信息。
  • 空间金字塔池化(Spatial Pyramid Pooling, SPP)模块:用于捕获多尺度上下文信息。
  • 分割头(Segment Head):将多尺度特征进行解码并输出语义分割结果。

下面对关键部分进行逐句解析。

2. 初始化与基本配置

BatchNorm2d = nn.BatchNorm2d
bn_mom = 0.1
algc = False
  • 以上代码定义了批归一化的常数,其中bn_mom表示批归一化层的动量,BatchNorm2d直接调用PyTorch的批归一化模块,保持数据分布稳定。

3. DSNet类初始化

class DSNet(nn.Module):

    def __init__(self, m=2, n=3, num_classes=19, planes=64, name='s128', augment=True):
        super(DSNet, self).__init__()
        self.augment = augment
        self.name = name
  • 该模型构造函数中,mn分别控制层数,num_classes定义分类类别数量,planes是通道基数,name决定模型结构的配置。augment用于选择是否进行数据增强训练。

4. I分支(初始卷积层)

self.conv1 = nn.Sequential(
    nn.Conv2d(3, planes, kernel_size=3, stride=2, padding=1),
    BatchNorm2d(planes, momentum=bn_mom),
    nn.ReLU(inplace=True),
    nn.Conv2d(planes, planes, kernel_size=3, stride=2, padding=1),
    BatchNorm2d(planes, momentum=bn_mom),
    nn.ReLU(inplace=True),
)
  • 作用:该分支对输入图像进行初步卷积、下采样和激活,将特征通道从RGB扩展到指定通道数planes
  • 卷积操作:使用两个3x3卷积层,步长为2,每层之后接批归一化和ReLU激活,最终输出大小为原始输入的四分之一。

5. 多尺度特征提取层

self.layer1 = self._make_layer(BasicBlock, planes, planes, m)
self.layer2 = self._make_layer(BasicBlock, planes, planes * 2, m, stride=2)
  • 通过调用_make_layer方法,构造了多个包含基本块的特征提取层。layer1layer2分别提取低级和中级特征。

6. MFACB多尺度膨胀卷积块

self.layer3 = nn.Sequential(
    MFACB(planes * 2, planes * 2, planes * 4, dilation=[2,2,2]),
    MFACB(planes * 4, planes * 4, planes * 4, dilation=[2,2,2]),
    MFACB(planes * 4, planes * 4, planes * 4, dilation=[3,3,3]),
)
  • 作用:利用不同膨胀率的卷积捕获多尺度特征。
  • MFACB模块:此模块使用多尺度膨胀卷积(Multi-Scale Atrous Convolutional Block),通过不同膨胀率[2,2,2][3,3,3],获取更大感受野下的特征。

7. SPP模块与融合层

self.spp = SPASPP(planes*4, planes*4, planes*4)
  • SPASPP模块:即空间金字塔池化模块,用于捕获更多的上下文信息,使模型能够适应不同的目标尺度。
  • 融合层:特征融合层结合了浅层和深层的特征,以增强对细节的解析力。Muti_AFF模块用于融合不同尺度的特征。

8. 输出分割头

self.lastlayer = segmenthead_c(planes*5, planes*4, num_classes)
  • 分割头:segmenthead_c是分类头,将提取到的多尺度特征进行解码并输出至最终的分割结果。
  • 功能:用于将提取的多尺度特征整合到语义分类中,输出与输入图像大小一致的预测结果。

9. 前向传播forward方法解析

forward中,输入图像经过初始卷积层处理后,依次通过不同层级的特征提取层、膨胀卷积块、SPP和特征融合模块,最终获得高分辨率分割结果。

def forward(self, x):
    width_output = x.shape[-1]
    height_output = x.shape[-2]
    x = self.conv1(x)
    x = self.layer1(x)
    x_a = self.layer1_a(x)
    x = self.relu(self.layer2(self.relu(x))) 
  • 步骤1:初始卷积和特征提取(conv1layer1)。
  • 步骤2:将低级特征(x_a)保留备用,用于后续拼接增强精度。
    x_ = self.layer3_(x)  
    x = self.layer3(x)  
    x_ = self.aff1(x_, self.compression3(x))  
    if self.augment:
        temp_1 = x_ 
  • 步骤3:通过layer3layer3_提取不同尺度的特征,并利用AFF(Adaptive Feature Fusion)模块进行特征压缩和融合。
    x = self.layer4(x) 
    x_ = self.layer4_(self.relu(x_))  
    x_ = self.aff2(x_, self.compression4(x))
  • 步骤4:进一步提取深层特征,进行多尺度特征融合。
    x_ = self.lastlayer(x_)
    x_ = F.interpolate(x_, size=[height_output, width_output], mode='bilinear', align_corners=False)
  • 最终输出:通过分割头获取最终分割结果,并进行上采样使其恢复至输入图像的大小。

10. 训练与推理模式

def get_seg_model(cfg, imgnet_pretrained):
    if 's' in cfg.MODEL.NAME:
        if cfg.MODEL.NAME == 'dsnet_head128':
            model = DSNet(m=2, n=2, num_classes=cfg.DATASET.NUM_CLASSES, planes=32, name='s128', augment=True)
  • 获取分割模型:根据不同的输入参数cfgname选择不同的分辨率配置,支持多种输入尺寸(如s128, s64, s256)。

总结

DSNet的设计特点在于使用膨胀卷积块、SPP模块、多尺度特征融合等技术以捕捉复杂的上下文信息,适应不同的目标尺寸,同时有效利用了浅层和深层的特征。

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

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

猜你喜欢

转载自blog.csdn.net/gaoxiaoxiao1209/article/details/143311173