def __init__()

in c3dm/model.py [0:0]


	def __init__( self,
				  TRUNK = get_default_args(HyperColumNet),
				  APPEARANCE_LOSS = get_default_args(AppearanceLoss),
				  nrsfm_exp_path = '',
				  huber_scaling_basis = 0.01,
				  huber_scaling_repro = 0.01,
				  photo_min_k = 6,
				  photo_reenact = False,
				  repro_loss_min_ray_length = 0.0,
				  app_mask_image = False,
				  detach_app = True,
				  uv_model_use_bn = True,
				  uv_model_l2_norm = False,
				  sampled_sil_n_samples = 1000,
				  sampled_sph_chamfer = 0,
				  spherical_embedding_radius = 1.,
				  c3dpo_flipped=True,
				  reparametrize_nrsfm_mean = True,
				  scale_aug_range = 0.2,
				  t_aug_range = 0.02,
				  rot_aug_range = 3.14/12.,
				  custom_basis_size = -1,
				  n_images_for_app_model = -1,
				  min_depth = 0.,
				  argmin_translation_min_depth = 0.,
				  argmin_translation_ray_projection = True,
				  ray_reprojection = False,
				  dilate_basis_loss = 0.,
				  EMBED_DB = get_default_args(TensorAccumulator),
				  embed_db_eval = False,
				  app_model_mask_gt = False,
				  loss_weights = {
						'loss_basis': 1.,
						'loss_alpha': 0.,
						'loss_rotation': 0.,
						'loss_repro': 0.0,
						'loss_vgg': 0.0,
						'loss_sph_emb_to_cam': 0.0,
						'loss_sph_sample_mask': 0.0,
						'loss_vgg_app': 0.0,
						'loss_l1_app': 0.0,
						'loss_ssim_app': 0.0,
						'loss_repro_2d': 0.0,
						'loss_repro_ray': 0.0,
						},
				  log_vars=[ 'objective',
							 'loss_basis',
							 'loss_alpha',
							 'loss_rotation',
							 'loss_repro',
							 'loss_repro_2d',
							 'loss_repro_ray',
							 'loss_vgg',
							 'loss_sph_emb_to_cam',
							 'loss_sph_sample_mask',
							 'loss_vgg_app',
							 'loss_l1_app',
							 'loss_ssim_app',
							 'sig_avg',
							 # depth error metrics
							 'pclerr_dist',
							  ],
				  **kwargs ):
		super(Model, self).__init__()

		# autoassign constructor params to self
		utils.auto_init_args(self)

		assert not uv_model_use_bn and uv_model_l2_norm, 'Do not use BN UV network!'

		self._load_and_fix_nrsfm()

		self.alpha_bias = None
		self.basis_size = custom_basis_size if custom_basis_size >= 0 else self.nrsfm_model.shape_basis_size
		if self.basis_size == self.nrsfm_model.shape_basis_size:
			# will be able to compute basis matching loss
			basis = torch.cat((
				self.nrsfm_model.shape_layer.bias.data.view(3, -1, 1),
				self.nrsfm_model.shape_layer.weight.data.view(3, -1, self.basis_size),
			), dim=2)

			self.nrsfm_model_basis = basis.permute(2,0,1).detach().cuda(0)
			self.alpha_bias = self.nrsfm_model.alpha_layer.bias[None,:,None,None,None].cuda(0)

		TRUNK['dimout'] = 3
		self.trunk = HyperColumNet(**TRUNK)

		self._make_glob_layers()

		if self.trunk.dimout_glob > 0:
			self._make_texture_model()

		self._make_geom_deformation_model()

		# appearance loss
		self.appearance_loss = AppearanceLoss(**APPEARANCE_LOSS)

		# init the embed database
		EMBED_DB['db_dim'] = TRUNK['dimout']
		self.embed_db = TensorAccumulator(**EMBED_DB)