Perform dynamic predictions.
(self, feats, timestamp=None)
| 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=''): |
nothing calls this directly
no test coverage detected