(multires, i=0, reduce_mode=-1, epochToMaxFreq=-1)
| 131 | |
| 132 | |
| 133 | def get_embedder(multires, i=0, reduce_mode=-1, epochToMaxFreq=-1): |
| 134 | if i == -1: |
| 135 | return nn.Identity(), 3 |
| 136 | |
| 137 | if reduce_mode == 0: |
| 138 | # reduce embedding |
| 139 | embed_kwargs = { |
| 140 | 'include_input' : True, |
| 141 | 'input_dims' : 3, |
| 142 | 'max_freq_log2' : (multires-1)//2, |
| 143 | 'num_freqs' : multires//2, |
| 144 | 'log_sampling' : True, |
| 145 | 'periodic_fns' : [torch.sin, torch.cos], |
| 146 | } |
| 147 | elif reduce_mode == 1: |
| 148 | # remove embedding |
| 149 | embed_kwargs = { |
| 150 | 'include_input' : True, |
| 151 | 'input_dims' : 3, |
| 152 | 'max_freq_log2' : 0, |
| 153 | 'num_freqs' : 0, |
| 154 | 'log_sampling' : True, |
| 155 | 'periodic_fns' : [torch.sin, torch.cos], |
| 156 | } |
| 157 | elif reduce_mode == 2: |
| 158 | # DNeRF embedding |
| 159 | embed_kwargs = { |
| 160 | 'include_input' : True, |
| 161 | 'input_dims' : 3, |
| 162 | 'max_freq_log2' : multires-1, |
| 163 | 'num_freqs' : multires, |
| 164 | 'log_sampling' : True, |
| 165 | 'periodic_fns' : [torch.sin, torch.cos], |
| 166 | } |
| 167 | else: |
| 168 | # paper default |
| 169 | embed_kwargs = { |
| 170 | 'include_input' : True, |
| 171 | 'input_dims' : 3, |
| 172 | 'max_freq_log2' : multires-1, |
| 173 | 'num_freqs' : multires, |
| 174 | 'log_sampling' : True, |
| 175 | 'periodic_fns' : [torch.sin, torch.cos], |
| 176 | } |
| 177 | |
| 178 | embedder_obj = Embedder(**embed_kwargs) |
| 179 | if reduce_mode == 2: |
| 180 | embedder_obj.update_N(epochToMaxFreq) |
| 181 | embed = lambda x, epoch, eo=embedder_obj: eo.embed_DNeRF(x, epoch) |
| 182 | else: |
| 183 | embed = lambda x, eo=embedder_obj : eo.embed(x) |
| 184 | return embed, embedder_obj.out_dim, embedder_obj# 63 for pos, 27 for view dir |
| 185 | |
| 186 | # Model |
| 187 | class NeRF(nn.Module): |
no test coverage detected