save all
This commit is contained in:
@@ -39,7 +39,7 @@ class PyramidLevel(nn.Module):
|
||||
|
||||
def sample(self, z_cond, uv_mask, noise=None):
|
||||
if noise is None:
|
||||
eps = torch.randn(z_cond.shape).to(uv_mask.device)
|
||||
eps = torch.normal(mean=0.0, std=1.0, size=z_cond.shape).to(uv_mask.device)
|
||||
else:
|
||||
eps = noise
|
||||
|
||||
|
||||
+55
-2
@@ -10,6 +10,29 @@ from models.pyramid_level import PyramidLevel
|
||||
from torchvision.transforms import Resize
|
||||
from torchvision.transforms.functional import InterpolationMode
|
||||
|
||||
# class SampleParallel(nn.Module):
|
||||
# def __init__(self, levels):
|
||||
# super().__init__()
|
||||
# self.levels = nn.ModuleList(levels)
|
||||
|
||||
# def forward(self, z_cond, uv_masks, noise=None):
|
||||
# level_outs = nn.parallel.data_parallel(self._forward_level, [(self.levels[i], z_cond, uv_masks[i], noise) for i in range(len(uv_masks))], dim=0, device_ids=[0, 0, 0, 0], output_device=0)
|
||||
# # level_outs = nn.parallel.data_parallel(self.levels, [(z_cond, uv_masks[i], noise) for i in range(len(uv_masks))], device_ids=[0, 0, 0, 0], output_device=0)
|
||||
# out = torch.zeros((uv_masks[0].shape[0], 3, 64, 32)).to(uv_masks[0].device)
|
||||
# for i in range(len(self.levels)):
|
||||
# level_out = level_outs[i]
|
||||
# if i != len(self.levels) - 1:
|
||||
# out = out + level_out
|
||||
# out = self.levels[i].enhance(out, uv_masks[i])
|
||||
# out = self.resizers[self.levels[i+1].size](out)
|
||||
# out = out * uv_masks[i+1][:,None,:,:]
|
||||
# else:
|
||||
# out = out + level_out
|
||||
# out = out * uv_masks[0][:,None,:,:]
|
||||
# return out
|
||||
|
||||
# def _forward_level(self, level, z_cond, uv_mask, noise=None):
|
||||
# return level(z_cond, uv_mask, noise=noise)
|
||||
|
||||
class Pyramid(nn.Module):
|
||||
|
||||
@@ -43,17 +66,24 @@ class Pyramid(nn.Module):
|
||||
self.use_normals = config['use_normals']
|
||||
|
||||
|
||||
|
||||
|
||||
def sample(self, uv_template, uv_body_posed, uv_normals, uv_mask, noise=None):
|
||||
|
||||
z_cond = self.encode_conds(uv_template, uv_body_posed, uv_normals)
|
||||
# uv_masks = [uv_mask[64], uv_mask[128], uv_mask[256], uv_mask[512]]
|
||||
|
||||
# sampleP = SampleParallel(self.levels)
|
||||
# out = sampleP(z_cond, uv_masks, noise=noise)
|
||||
# return out
|
||||
|
||||
assert len(self.levels) == 4
|
||||
out = torch.zeros((uv_template.shape[0], 3, 64, 32)).to(uv_template.device)
|
||||
|
||||
for i in range(len(self.levels)):
|
||||
level_out = self.levels[i].sample(z_cond, uv_mask[self.levels[i].size], noise=noise)
|
||||
level_out = self.levels[i].sample(z_cond, uv_mask[self.levels[i].size], noise=noise[i] if noise is not None else None)
|
||||
if i != len(self.levels) - 1:
|
||||
out = out + level_out
|
||||
out = out + level_out
|
||||
out = self.levels[i].enhance(out, uv_mask[self.levels[i].size])
|
||||
out = self.resizers[self.levels[i+1].size](out)
|
||||
out = out * uv_mask[self.levels[i+1].size][:,None,:,:]
|
||||
@@ -63,7 +93,30 @@ class Pyramid(nn.Module):
|
||||
out = out * uv_mask[512][:,None,:,:]
|
||||
|
||||
return out
|
||||
|
||||
|
||||
def sample_level(self, uv_template, uv_body_posed, uv_normals, uv_mask, prev, level, noise=None):
|
||||
|
||||
z_cond = self.encode_conds(uv_template, uv_body_posed, uv_normals)
|
||||
|
||||
assert len(self.levels) == 4
|
||||
|
||||
i = level
|
||||
out = prev
|
||||
|
||||
level_out = self.levels[i].sample(z_cond, uv_mask[self.levels[i].size], noise=noise[i] if noise is not None else None)
|
||||
if i != len(self.levels) - 1:
|
||||
out = out + level_out
|
||||
out = self.levels[i].enhance(out, uv_mask[self.levels[i].size])
|
||||
out = self.resizers[self.levels[i+1].size](out)
|
||||
out = out * uv_mask[self.levels[i+1].size][:,None,:,:]
|
||||
else:
|
||||
out = out + level_out
|
||||
out = out * uv_mask[512][:,None,:,:]
|
||||
|
||||
return out
|
||||
|
||||
|
||||
def encode_conds(self, uv_template, uv_body_posed, uv_norm):
|
||||
z_static = self.static_enc(uv_template)
|
||||
z_body = self.body_enc(uv_body_posed)
|
||||
|
||||
Reference in New Issue
Block a user