def __init__(self, num_channels, num_block, res_scale=1.0): super().__init__() for nb in range(num_block): setattr(self, "b{}".format(nb + 1), ResidualBlockNoBN(num_channels, res_scale)) setattr(self, "c{}".format(nb + 1), nn.Conv2d(num_channels * (nb + 2), num_channels, 1, 1, 0)) self.num_block = num_block
def __init__(self, in_channels, mid_channels, out_channels): super(EAM, self).__init__() self.merge = MergeRun(in_channels, mid_channels) self.block1 = ResidualBlockNoBN(mid_channels) self.block2 = EResidualBlockNoBN(mid_channels, out_channels) self.ca = ChannelAttention(out_channels) # The residual block in the paper contains a relu after addition. self.relu = nn.ReLU(inplace=True)
def __init__(self, num_in_ch=3, num_feat=64, hr_in=False): super(PredeblurModule, self).__init__() self.hr_in = hr_in self.conv_first = nn.Conv2d(num_in_ch, num_feat, 3, 1, 1) if self.hr_in: # downsample x4 by stride conv self.stride_conv_hr1 = nn.Conv2d(num_feat, num_feat, 3, 2, 1) self.stride_conv_hr2 = nn.Conv2d(num_feat, num_feat, 3, 2, 1) # generate feature pyramid self.stride_conv_l2 = nn.Conv2d(num_feat, num_feat, 3, 2, 1) self.stride_conv_l3 = nn.Conv2d(num_feat, num_feat, 3, 2, 1) self.resblock_l3 = ResidualBlockNoBN(num_feat=num_feat) self.resblock_l2_1 = ResidualBlockNoBN(num_feat=num_feat) self.resblock_l2_2 = ResidualBlockNoBN(num_feat=num_feat) self.resblock_l1 = nn.ModuleList( [ResidualBlockNoBN(num_feat=num_feat) for i in range(5)]) self.upsample = nn.Upsample( scale_factor=2, mode='bilinear', align_corners=False) self.lrelu = nn.LeakyReLU(negative_slope=0.1, inplace=True)