in mmf/models/mesh_renderer.py [0:0]
def build(self):
self.batch_size = self.config.batch_size // get_world_size()
self.image_size_H = self.config.image_size_H
self.image_size_W = self.config.image_size_W
if self.image_size_H != self.image_size_W:
raise NotImplementedError()
self.grid_stride = self.config.grid_stride
if (self.image_size_H % self.grid_stride != 0
or self.image_size_W % self.grid_stride != 0):
raise Exception("image sizes must be divisible by grid_stride")
self.grid_H = self.image_size_H // self.grid_stride + 1
self.grid_W = self.image_size_W // self.grid_stride + 1
# Offset and depth prediction
self.offset_and_depth_predictor = OffsetAndZGridPredictor(
grid_stride=self.grid_stride,
grid_H=self.grid_H,
grid_W=self.grid_W,
z_min=self.config.z_min,
z_max=self.config.z_max,
pred_inv_z=self.config.pred_inv_z,
pred_inv_z_synsin=self.config.pred_inv_z_synsin,
z_pred_scaling=self.config.z_pred_scaling,
z_pred_offset=self.config.z_pred_offset,
backbone_name=self.config.backbone_name,
backbone_dim=self.config.backbone_dim
)
if self.config.freeze_offset_and_depth_predictor:
assert self.config.use_inpainting, \
"freeze_offset_and_depth_predictor is intended for inpainter " \
"training alone."
for p in self.offset_and_depth_predictor.parameters():
p.requires_grad = False
self.novel_view_projector = NovelViewProjector(
batch_size=self.batch_size,
image_size_H=self.image_size_H,
image_size_W=self.image_size_W,
grid_H=self.grid_H,
grid_W=self.grid_W,
blur_radius=self.config.rendering.blur_radius,
faces_per_pixel=self.config.rendering.faces_per_pixel,
clip_barycentric_coords=self.config.rendering.clip_barycentric_coords,
sigma=self.config.rendering.sigma,
gamma=self.config.rendering.gamma,
background_color=self.config.rendering.background_color,
hfov=self.config.rendering.hfov,
z_background=self.config.rendering.z_background,
gblur_kernel_size=self.config.rendering.gblur_kernel_size,
gblur_sigma=self.config.rendering.gblur_sigma,
gblur_weight_thresh=self.config.rendering.gblur_weight_thresh,
directly_use_img_as_texture=self.config.directly_use_img_as_texture
)
self.use_discriminator = False
if self.config.use_inpainting:
self.inpainting_net_G = MeshRGBGenerator(self.config.inpainting.net_G)
if self.config.inpainting.use_discriminator:
self.mesh_gan_losses = MeshGANLosses(self.config.inpainting.net_D)
self.use_discriminator = True
self.build_losses()
self.build_metrics()
if self.config.save_forward_results:
os.makedirs(self.config.forward_results_dir, exist_ok=True)
if self.config.save_for_external_inpainting:
# save PNG image files for external inpainting training and eval
self.inpainting_src_dir = os.path.join(
self.config.forward_results_dir, 'inpainting_src'
)
self.inpainting_tgt_dir = os.path.join(
self.config.forward_results_dir, 'inpainting_tgt'
)
os.makedirs(self.inpainting_src_dir, exist_ok=True)
os.makedirs(self.inpainting_tgt_dir, exist_ok=True)