prism-upscaler-2x / model.py
olumideola's picture
Upload model.py with huggingface_hub
c55dfdd verified
Raw
History Blame Contribute Delete
1.06 kB
import torch
import torch.nn as nn
import torch.nn.functional as F
class FSRCNN(nn.Module):
def __init__(self, scale, num_channels=3, d=56, s=12, m=4):
super().__init__()
self.feature_extraction = nn.Sequential(
nn.Conv2d(num_channels, d, kernel_size=5, padding=2), nn.PReLU(d))
self.shrink = nn.Sequential(nn.Conv2d(d, s, kernel_size=1), nn.PReLU(s))
mapping_layers = []
for _ in range(m):
mapping_layers += [nn.Conv2d(s, s, kernel_size=3, padding=1), nn.PReLU(s)]
self.mapping = nn.Sequential(*mapping_layers)
self.expand = nn.Sequential(nn.Conv2d(s, d, kernel_size=1), nn.PReLU(d))
self.upsample = nn.Sequential(
nn.Conv2d(d, num_channels * scale * scale, kernel_size=3, padding=1),
nn.PixelShuffle(scale))
self.scale = scale
def forward(self, x):
x = self.feature_extraction(x)
x = self.shrink(x)
x = self.mapping(x)
x = self.expand(x)
x = self.upsample(x)
return torch.sigmoid(x)