(self, opt: Options, transformer_dim: int, mlp_dim=None, bias=True)
| 370 | |
| 371 | class GSDynamicDecoder(nn.Module): |
| 372 | def __init__(self, opt: Options, transformer_dim: int, mlp_dim=None, bias=True): |
| 373 | super(GSDynamicDecoder, self).__init__() |
| 374 | self.opt = opt |
| 375 | self.embed_dim = transformer_dim |
| 376 | self.mlp_dim = mlp_dim if mlp_dim is not None else transformer_dim |
| 377 | self.key_dims = {"xyz_dynamic": 3 * (opt.forder), "opacity_dynamic": 2} |
| 378 | self.gs_layer = nn.ModuleDict() |
| 379 | self.prior = Truncated_Gaussian_Model(n_sample=1, nr_mix=1) |
| 380 | self.pm = opt.pm_dynamic |
| 381 | self.register_buffer("dynamic_scalar", torch.tensor([0.5, 0.1, 0.5])) |
| 382 | |
| 383 | for key in ["xyz_dynamic", "opacity_dynamic"]: |
| 384 | if key == "xyz_dynamic": |
| 385 | layer = MLP(self.mlp_dim*2, self.key_dims[key], n_neurons=self.mlp_dim, n_hidden_layers=2, activation="silu", output_activation=None, bias=bias) |
| 386 | if self.pm: |
| 387 | pred_scale = nn.Linear(self.mlp_dim*2, self.key_dims[key], bias=False) |
| 388 | torch.nn.init.xavier_normal_(pred_scale.weight, 0.01) |
| 389 | self.gs_layer[f'{key}_scale'] = pred_scale |
| 390 | elif key == "opacity_dynamic": |
| 391 | layer = MLP(self.mlp_dim*2, self.key_dims[key], n_neurons=self.mlp_dim, n_hidden_layers=2, activation="silu", output_activation=None, bias=bias) |
| 392 | else: |
| 393 | raise NotImplementedError |
| 394 | self.gs_layer[key] = layer |
| 395 | |
| 396 | @autocast('cuda', enabled=False) |
| 397 | def forward(self, feats, timestamp=None): |
nothing calls this directly
no test coverage detected