Download srnet.py from InfinitodeLTD/SRNet-x4-Upscaler: direct link, hf CLI and curl.
- Browser
- Download file 1.3 kB
-
https://huggingface.co/InfinitodeLTD/SRNet-x4-Upscaler/resolve/main/srnet.py
- Command line
-
hf download hf://InfinitodeLTD/SRNet-x4-Upscaler/srnet.py
-
curl -L -o srnet.py https://huggingface.co/InfinitodeLTD/SRNet-x4-Upscaler/resolve/main/srnet.py
1.3 kB
| import torch | |
| import torch.nn as nn | |
| import torch.nn.functional as F | |
| try: | |
| from huggingface_hub import PyTorchModelHubMixin | |
| except ImportError: # the model still works without the hub helpers | |
| class PyTorchModelHubMixin: | |
| pass | |
| class ResBlock(nn.Module): | |
| def __init__(self, nf): | |
| super().__init__() | |
| self.c1 = nn.Conv2d(nf, nf, 3, 1, 1) | |
| self.c2 = nn.Conv2d(nf, nf, 3, 1, 1) | |
| def forward(self, x): | |
| return x + self.c2(F.relu(self.c1(x), inplace=True)) | |
| class SRNet(nn.Module, PyTorchModelHubMixin): | |
| """x{scale} super-resolution. Input: float RGB (B,3,H,W) in [0,1]. Output: (B,3,H*scale,W*scale), clamp to [0,1].""" | |
| def __init__(self, scale: int = 4, nf: int = 64, nb: int = 16): | |
| super().__init__() | |
| self.scale, self.nf, self.nb = scale, nf, nb | |
| self.head = nn.Conv2d(3, nf, 3, 1, 1) | |
| self.body = nn.Sequential(*[ResBlock(nf) for _ in range(nb)]) | |
| self.tail = nn.Conv2d(nf, nf, 3, 1, 1) | |
| self.up = nn.Conv2d(nf, 3 * scale * scale, 3, 1, 1) | |
| self.shuffle = nn.PixelShuffle(scale) | |
| def forward(self, x): | |
| f = self.head(x) | |
| f = f + self.tail(self.body(f)) | |
| return self.shuffle(self.up(f)) + F.interpolate(x, scale_factor=self.scale, mode="bicubic", align_corners=False) | |