Spaces:
Build error
Build error
import sys | |
import torch | |
import torch.nn as nn | |
sys.path.insert(0, 'MobileStyleGAN.pytorch') | |
from core.models.mapping_network import MappingNetwork | |
from core.models.mobile_synthesis_network import MobileSynthesisNetwork | |
from core.models.synthesis_network import SynthesisNetwork | |
class Model(nn.Module): | |
def __init__(self): | |
super().__init__() | |
# teacher model | |
mapping_net_params = {'style_dim': 512, 'n_layers': 8, 'lr_mlp': 0.01} | |
synthesis_net_params = { | |
'size': 1024, | |
'style_dim': 512, | |
'blur_kernel': [1, 3, 3, 1], | |
'channels': [512, 512, 512, 512, 512, 256, 128, 64, 32] | |
} | |
self.mapping_net = MappingNetwork(**mapping_net_params).eval() | |
self.synthesis_net = SynthesisNetwork(**synthesis_net_params).eval() | |
# student network | |
self.student = MobileSynthesisNetwork( | |
style_dim=self.mapping_net.style_dim, | |
channels=synthesis_net_params['channels'][:-1]) | |
self.style_mean = nn.Parameter(torch.zeros((1, 512)), | |
requires_grad=False) | |
def forward(self, | |
var: torch.Tensor, | |
truncation_psi: float = 0.5, | |
generator: str = 'student') -> torch.Tensor: | |
style = self.mapping_net(var) | |
style = self.style_mean + truncation_psi * (style - self.style_mean) | |
if generator == 'student': | |
img = self.student(style)['img'] | |
elif generator == 'teacher': | |
img = self.synthesis_net(style)['img'] | |
else: | |
raise ValueError | |
return img | |