Instantiate NeRF's MLP model.
(args)
| 354 | return torch.cat([static, transient], 1) # (B, 9) |
| 355 | |
| 356 | def create_nerf(args): |
| 357 | """Instantiate NeRF's MLP model. |
| 358 | """ |
| 359 | |
| 360 | # initialize embedding functions |
| 361 | if args.reduce_embedding==2: # use DNeRF embedding |
| 362 | embed_fn, input_ch, embedder_obj = get_embedder(args.multires, args.i_embed, args.reduce_embedding, args.epochToMaxFreq) # input_ch.shape=63 |
| 363 | else: |
| 364 | embed_fn, input_ch, _ = get_embedder(args.multires, args.i_embed, args.reduce_embedding) # input_ch.shape=63 |
| 365 | |
| 366 | input_ch_views = 0 |
| 367 | embeddirs_fn = None |
| 368 | if args.use_viewdirs: |
| 369 | if args.reduce_embedding==2: # use DNeRF embedding |
| 370 | if args.no_DNeRF_viewdir: # no DNeRF embedding for viewdir |
| 371 | raise NotImplementedError |
| 372 | embeddirs_fn, input_ch_views, _ = get_embedder(args.multires_views, args.i_embed) # currently not used |
| 373 | else: |
| 374 | embeddirs_fn, input_ch_views, embedddirs_obj = get_embedder(args.multires_views, args.i_embed, args.reduce_embedding, args.epochToMaxFreq) |
| 375 | else: |
| 376 | embeddirs_fn, input_ch_views, _ = get_embedder(args.multires_views, args.i_embed, args.reduce_embedding) # input_ch_views.shape=27 |
| 377 | output_ch = 5 if args.N_importance > 0 else 4 |
| 378 | skips = [4] |
| 379 | |
| 380 | device = torch.device("cuda") |
| 381 | |
| 382 | encode_a = True # static appearance |
| 383 | encode_t = True # transient |
| 384 | if encode_a: |
| 385 | if args.encode_hist: # experiemental embedding histogram |
| 386 | embedding_a = torch.nn.Embedding(args.N_vocab, 5) |
| 387 | embedding_a = embedding_a.to(device) |
| 388 | if encode_t: |
| 389 | if args.encode_hist: # experiemental embedding histogram |
| 390 | embedding_t = torch.nn.Embedding(args.N_vocab, 2) |
| 391 | embedding_t = embedding_t.to(device) |
| 392 | |
| 393 | # initialize NeRF model |
| 394 | if args.NeRFH: |
| 395 | model = NeRFW('coarse', D=args.netdepth, W=args.netwidth, skips=skips, in_channels_xyz=input_ch, in_channels_dir=input_ch_views) |
| 396 | else: |
| 397 | model = NeRF(D=args.netdepth, W=args.netwidth, input_ch=input_ch, output_ch=output_ch, skips=skips, input_ch_views=input_ch_views, use_viewdirs=args.use_viewdirs) |
| 398 | |
| 399 | if args.multi_gpu: |
| 400 | model = torch.nn.DataParallel(model).to(device) |
| 401 | else: |
| 402 | model = model.to(device) |
| 403 | grad_vars = list(model.parameters()) |
| 404 | |
| 405 | model_fine = None |
| 406 | |
| 407 | if args.N_importance > 0: |
| 408 | if args.NeRFH: |
| 409 | model_fine = NeRFW('fine', D=args.netdepth, W=args.netwidth, skips=skips, |
| 410 | in_channels_xyz=input_ch, in_channels_dir=input_ch_views, |
| 411 | encode_appearance=True, encode_transient=True, |
| 412 | in_channels_a=args.in_channels_a, in_channels_t=args.in_channels_t) |
| 413 | else: |
no test coverage detected