PyTorch语义分割系列——DeepLabv3+

一、模型概览

DeepLabv3+由Encoder与Decoder两部分构成。Encoder主要包括backbone(骨架/底模)和ASPP,及对ASPP输出的降维。backbone可以使用ResNet、Xception等。

二、ASPP 

简单来说,ASPP将backbone提取出的特征图输入多个平行且不同的层(如卷积层、空洞卷积层、池化层),然后将获得的多个输出拼接。 

class ASPP(nn.Module):

    def __init__(self, in_channels=2048):
        super(ASPP, self).__init__()
        self.conv1 = ConvLayer(in_channels, 256, 1, padding=0)
        # rate = 6
        self.conv2 = ConvLayer(in_channels, 256, 3, padding=6, dilation=6)
        # rate = 12
        self.conv3 = ConvLayer(in_channels, 256, 3, padding=12, dilation=12)
        # rate = 18
        self.conv4 = ConvLayer(in_channels, 256, 3, padding=18, dilation=18)
        # image pooling
        self.pooling = nn.AdaptiveMaxPool2d((1, 1))
        self.conv5 = ConvLayer(in_channels, 256, 1, padding=0)
        # extract feature from ASPP output
        self.conv6 = ConvLayer(256 * 5, 256, 1, padding=0)

    def forward(self, x):
        o1 = self.conv1(x)
        o2 = self.conv2(x)
        o3 = self.conv3(x)
        o4 = self.conv4(x)
        o5 = self.pooling(x)
        o5 = self.conv5(o5)
        o5 = F.interpolate(o5, scale_factor=x.shape[-1], mode='bilinear')
        o = torch.cat((o1, o2, o3, o4, o5), dim=1)
        o = self.conv6(o)
        return o
  • 图中rate = 空洞卷积的dilation
  • Image Pooling由池化层、卷积层、上采样构成
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

VAMOT

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值