def METHOD_NAME(self, input: Tensor) -> Dict[str, Tensor]:
    if input.ndim == 5:
        input = input.squeeze(1)
    fea = self.lrelu(self.conv_first(input))
    fea = self.lrelu(self.conv_down(fea))
    out = self.recon_trunk(fea)
    out = self.lrelu(self.pixel_shuffle(out))
    if self.upscale == 2:
        out = self.lrelu(self.pixel_shuffle(self.upconv2(out)))
        out = self.conv_last(out)
        base = F.interpolate(
            input,
            scale_factor=self.upscale,
            mode='bilinear',
            align_corners=False)
        out += base
    elif self.upscale == 1:
        out = self.conv_last(out) + input
    elif self.upscale == 4:
        out = self.lrelu(self.pixel_shuffle(self.upconv1(out)))
        out = self.lrelu(self.pixel_shuffle(self.upconv2(out)))
        out = self.conv_last(out)
        base = F.interpolate(
            input,
            scale_factor=self.upscale,
            mode='bilinear',
            align_corners=False)
        out += base
    output = torch.clamp(out, 0.0, 1.0)
    if output.ndim == 4:
        output = output.unsqueeze(1)
    return {'output': output}