| import torch.nn as nn |
| from torchvision.models import vgg19, VGG19_Weights |
|
|
| class VGGEncoder(nn.Module): |
| def __init__(self): |
| super().__init__() |
| vgg = vgg19(weights=VGG19_Weights.DEFAULT).features |
| self.slice1 = nn.Sequential() |
| self.slice2 = nn.Sequential() |
| self.slice3 = nn.Sequential() |
| self.slice4 = nn.Sequential() |
|
|
| for x in range(2): |
| self.slice1.add_module(str(x), vgg[x]) |
| for x in range(2, 7): |
| self.slice2.add_module(str(x), vgg[x]) |
| for x in range(7, 12): |
| self.slice3.add_module(str(x), vgg[x]) |
| for x in range(12, 21): |
| self.slice4.add_module(str(x), vgg[x]) |
| |
| for param in self.parameters(): |
| param.requires_grad = False |
|
|
| def forward(self, x): |
| h1 = self.slice1(x) |
| h2 = self.slice2(h1) |
| h3 = self.slice3(h2) |
| h4 = self.slice4(h3) |
| return h1, h2, h3, h4 |