(self, inputs, bound=1)
| 138 | return f"GridEncoder: input_dim={self.input_dim} num_levels={self.num_levels} level_dim={self.level_dim} resolution={self.base_resolution} -> {int(round(self.base_resolution * self.per_level_scale ** (self.num_levels - 1)))} per_level_scale={self.per_level_scale:.4f} params={tuple(self.embeddings.shape)} gridtype={self.gridtype} align_corners={self.align_corners}" |
| 139 | |
| 140 | def forward(self, inputs, bound=1): |
| 141 | # inputs: [..., input_dim], normalized real world positions in [-bound, bound] |
| 142 | # return: [..., num_levels * level_dim] |
| 143 | |
| 144 | inputs = (inputs + bound) / (2 * bound) # map to [0, 1] |
| 145 | |
| 146 | #print('inputs', inputs.shape, inputs.dtype, inputs.min().item(), inputs.max().item()) |
| 147 | |
| 148 | prefix_shape = list(inputs.shape[:-1]) |
| 149 | inputs = inputs.view(-1, self.input_dim) |
| 150 | |
| 151 | outputs = grid_encode(inputs, self.embeddings, self.offsets, self.per_level_scale, self.base_resolution, inputs.requires_grad, self.gridtype_id, self.align_corners) |
| 152 | outputs = outputs.view(prefix_shape + [self.output_dim]) |
| 153 | |
| 154 | #print('outputs', outputs.shape, outputs.dtype, outputs.min().item(), outputs.max().item()) |
| 155 | |
| 156 | return outputs |
| 157 | |
| 158 | class VarGridEncoder(nn.Module): |
| 159 | def __init__(self, input_dim=3, num_levels=16, level_dim=2, per_level_scale=2, base_resolution=16, log2_hashmap_size=19, desired_resolution=None, gridtype='hash', align_corners=False, hash_entries=None): |
nothing calls this directly
no outgoing calls
no test coverage detected