DeeplabV3+解码器学习和优化

本文详细介绍了DeeplabV3+的解码器原理,包括基础解码器和优化版Decoder_GCN_BR,着重讨论了如何通过GCN和BR模块改善边界定位。同时,文章还涉及了MobileNet和Xception作为backbone的选择与应用。

因为太多的博客并没有深入理解,本文是自己学习后加入自己深入理解的总结记录,方便自己以后查看。

DeeplabV3+中decoder的详解以及对decoder的边界定位优化设计。


学习前言

一起来学习DeeplabV3+解码的原理,如果有用的话,请记得点赞+关注哦。


参考链接:

DeeplabV3+解码器复现(二)_卷积解码器设计-优快云博客

一、DeeplabV3+解码器的原理

# 解码器1:deeplabv3设计的解码器
class Decoderv3(nn.Module):
    def __init__(self, low_level_channels=24, num_classes=1):
        super(Decoderv3, self).__init__()
        # 浅层语义处理卷积
        self.shortcut_conv = nn.Sequential(
            nn.Conv2d(low_level_channels, 48, 1),
            nn.BatchNorm2d(48),
            nn.ReLU(inplace=True)
        )
        # 对深层语义做上采样
        # self.upsample_pol =F.interpolate()
        # 对深浅语义堆叠后的语义做特征提取和通道数调整卷积
        self.cat_conv = nn.Sequential(
            # 3X3卷积做特征提取以及通道数调整
            nn.Conv2d(48 + 256, 256, 3, stride=1, padding=1),
            nn.BatchNorm2d(256),
            nn.ReLU(inplace=True),
            nn.Dropout(0.5),  # 防止过拟合,每个神经元有0。5可能性不被激活
            # 再次进行3x3卷积特征提取
            nn.Conv2d(256, 256, 3, stride=1, padding=1),
            nn.BatchNorm2d(256),
            nn.ReLU(inplace=True),
            nn.Dropout(0.1),  # 防止过拟合,每个神经元有0。1可能性不被激活
        )
        # 调整通道数和分类一样
        self.cls_conv = nn.Conv2d(256, num_classes, 1, stride=1)

    def forward(self, x, low_level_features, two_level_features):
        low_level_features = self.shortcut_conv(low_level_features)  # 用1x1卷积对浅层语义做通道数调整
        H = low_level_features.size(2)
        W = low_level_features.size(3)
        # 对深层语义信息做上采样,使它的H和W和浅层特征一样
        x = F.interpolate(x, size=(H, W), mode='bilinear', align_corners=True)
        # 将深层语义和浅层语义做堆叠后,#对深浅语义堆叠后的语义做特征提取和通道数调整卷积
        x = self.cat_con
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值