decode

    self.decoder4 = DecoderBlock(2048 + 1024, 1024, base_c * 8)
    self.decoder3 = DecoderBlock(1024 + 512, 512, base_c * 4)
    self.decoder2 = DecoderBlock(512 + 256, 256, base_c * 2)
    self.decoder1 = DecoderBlock(256 + 64, 64, base_c)

    # final conv (without any concat)
    self.final_conv = nn.Conv2d(base_c, num_classes, kernel_size=1)

    # bilinear upsampling
    if bilinear:
        self.up = nn.Upsample(scale_factor=2, mode='bilinear', align_corners=True)
    else:
        self.up = nn.ConvTranspose2d(base_c, base_c, kernel_size=2, stride=2)

def forward(self, x):

    # encode
    x = self.layer0(x)
    e1 = self.encoder1(x)
    e2 = self.encoder2(e1)
    e3 = self.encoder3(e2)
    e4 = self.encoder4(e3)

    # resnet最后一层avgpool用卷积层代替
    e5 = self.avgpool(e4)

    # decode
    d4 = self.decoder4(torch.cat([e5, e4], 1))
    d3 = self.decoder3(torch.cat([d4, e3], 1))
    d2 = self.decoder2(torch.cat([d3, e2], 1))
    d1 = self.decoder1(torch.cat([d2, e1], 1))

    # final conv
    out = self.final_conv(d1)

    # bilinear upsampling
    out = self.up(out)

    return ou
class ResNet101_UNetnnModule def __init__selfin_channelsnum_classespretrained = Falsebilinear = True base_c = 64 superResNet101_UNet self__init__ # selfin_channels = i

原文地址: https://www.cveoy.top/t/topic/eH82 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录