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

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

被折叠的 条评论
为什么被折叠?



