(multires, i=0, reduce_mode=-1, epochToMaxFreq=-1)
| 164 | |
| 165 | |
| 166 | def get_embedder(multires, i=0, reduce_mode=-1, epochToMaxFreq=-1): |
| 167 | if i == -1: |
| 168 | return nn.Identity(), 3 |
| 169 | |
| 170 | if reduce_mode == 0: |
| 171 | # reduce embedding |
| 172 | embed_kwargs = { |
| 173 | 'include_input' : True, |
| 174 | 'input_dims' : 3, |
| 175 | 'max_freq_log2' : (multires-1)//2, |
| 176 | 'num_freqs' : multires//2, |
| 177 | 'log_sampling' : True, |
| 178 | 'periodic_fns' : [torch.sin, torch.cos], |
| 179 | } |
| 180 | elif reduce_mode == 1: |
| 181 | # remove embedding |
| 182 | embed_kwargs = { |
| 183 | 'include_input' : True, |
| 184 | 'input_dims' : 3, |
| 185 | 'max_freq_log2' : 0, |
| 186 | 'num_freqs' : 0, |
| 187 | 'log_sampling' : True, |
| 188 | 'periodic_fns' : [torch.sin, torch.cos], |
| 189 | } |
| 190 | elif reduce_mode == 2: |
| 191 | # DNeRF embedding |
| 192 | embed_kwargs = { |
| 193 | 'include_input' : True, |
| 194 | 'input_dims' : 3, |
| 195 | 'max_freq_log2' : multires-1, |
| 196 | 'num_freqs' : multires, |
| 197 | 'log_sampling' : True, |
| 198 | 'periodic_fns' : [torch.sin, torch.cos], |
| 199 | } |
| 200 | else: |
| 201 | # paper default |
| 202 | embed_kwargs = { |
| 203 | 'include_input' : True, |
| 204 | 'input_dims' : 3, |
| 205 | 'max_freq_log2' : multires-1, |
| 206 | 'num_freqs' : multires, |
| 207 | 'log_sampling' : True, |
| 208 | 'periodic_fns' : [torch.sin, torch.cos], |
| 209 | } |
| 210 | |
| 211 | embedder_obj = Embedder(**embed_kwargs) |
| 212 | if reduce_mode == 2: |
| 213 | embedder_obj.update_N(epochToMaxFreq) |
| 214 | embed = lambda x, epoch, eo=embedder_obj: eo.embed_DNeRF(x, epoch) |
| 215 | else: |
| 216 | embed = lambda x, eo=embedder_obj : eo.embed(x) |
| 217 | return embed, embedder_obj.out_dim, embedder_obj# 63 for pos, 27 for view dir |
| 218 | |
| 219 | # Model |
| 220 | class NeRFW(nn.Module): |
no test coverage detected