MCPcopy Create free account
hub / github.com/DSL-Lab/StreamSplat / forward

Method forward

model/model_utils.py:397–431  ·  view source on GitHub ↗

Perform dynamic predictions.

(self, feats, timestamp=None)

Source from the content-addressed store, hash-verified

395
396 @autocast('cuda', enabled=False)
397 def forward(self, feats, timestamp=None):
398 """
399 Perform dynamic predictions.
400 """
401 feats = feats.type(torch.float32)
402 feats = rearrange(feats, 'b v n d -> (b v) n d')
403 gsparams = {}
404 prior_params = {}
405 for key in ["xyz_dynamic", "opacity_dynamic"]:
406 v = feats
407 if f'{key}_scale' in self.gs_layer and key == "xyz_dynamic":
408 logits_pred = torch.ones(feats.shape[0], feats.shape[1], 1).to(feats.device).float()
409 means = self.gs_layer[key](v)
410 log_scales = self.gs_layer[f'{key}_scale'](v)
411 logits, means, log_scales = self.prior.expand_params(logits_pred, means, log_scales, mean_activation='tanh')
412 prior_params[key] = {"logits": logits, "means": means, "log_scales": log_scales} # [B, N*r, dim, nr_mix]
413 val, probs = self.prior.sample(logits, means, log_scales)
414 val = val.reshape(*val.shape[:2], -1, 3) # [B, N, L * forder, 3]
415 val = val * self.dynamic_scalar
416 gsparams[key] = val
417 elif f'{key}_scale' in self.gs_layer and key == "opacity_dynamic":
418 logits_pred = torch.ones(feats.shape[0], feats.shape[1], 1).to(feats.device).float()
419 val = self.gs_layer[key](v)
420 log_scales = self.gs_layer[f'{key}_scale'](v)
421 scalar = torch.exp(val[..., 0:1])
422 means = val[..., 1:2]
423 logits, means, log_scales = self.prior.expand_params(logits_pred, means, log_scales, mean_activation='tanh')
424 prior_params[key] = {"logits": logits, "means": means, "log_scales": log_scales} # [B, N*r, dim, nr_mix]
425 val, probs = self.prior.sample(logits, means, log_scales)
426 val = 0.5 + 0.5 * val # t1 in [0, 1]
427 gsparams[key] = torch.cat([scalar, val], dim=-1)
428 else:
429 v = self.gs_layer[key](v)
430 gsparams[key] = self.key_activation(v, key)
431 return gsparams, prior_params
432
433 @autocast('cuda', enabled=False)
434 def key_activation(self, v: torch.Tensor, key=''):

Callers

nothing calls this directly

Calls 3

key_activationMethod · 0.95
expand_paramsMethod · 0.80
sampleMethod · 0.80

Tested by

no test coverage detected