render nerfw imgs, save unscaled pose and results
(args, dl, hwf, device, render_kwargs_test, world_setup_dict)
| 201 | return |
| 202 | |
| 203 | def render_nerfw_imgs(args, dl, hwf, device, render_kwargs_test, world_setup_dict): |
| 204 | ''' render nerfw imgs, save unscaled pose and results''' |
| 205 | H, W, focal = hwf |
| 206 | target_list = [] |
| 207 | rgb_list = [] |
| 208 | pose_list = [] |
| 209 | img_idx_list = [] |
| 210 | # profiling code |
| 211 | # time0 = time.time() |
| 212 | |
| 213 | # inference nerfw and save rgb, target, pose |
| 214 | for batch_idx, (target, pose, img_idx) in enumerate(dl): |
| 215 | if batch_idx % 10 == 0: |
| 216 | print("renders {}/total {}".format(batch_idx, len(dl.dataset))) |
| 217 | |
| 218 | target = target[0].permute(1,2,0).to(device) # (240,360,3) |
| 219 | pose = pose.reshape(3,4) # reshape to 3x4 rot matrix |
| 220 | |
| 221 | img_idx = img_idx.to(device) |
| 222 | pose_nerf = pose.clone() |
| 223 | |
| 224 | # rescale the predicted pose to nerf scales |
| 225 | pose_nerf = fix_coord_supp(args, pose_nerf[None,...], world_setup_dict) |
| 226 | |
| 227 | # generate nerf image |
| 228 | with torch.no_grad(): |
| 229 | torch.set_default_tensor_type('torch.cuda.FloatTensor') |
| 230 | if args.tinyimg: |
| 231 | rgb, _, _, _ = render(int(H//args.tinyscale), int(W//args.tinyscale), focal/args.tinyscale, chunk=args.chunk, c2w=pose_nerf[0,:3,:4].to(device), retraw=True, img_idx=img_idx, **render_kwargs_test) |
| 232 | # convert rgb to B,C,H,W |
| 233 | rgb = rgb[None,...].permute(0,3,1,2) |
| 234 | # upsample rgb to hwf size |
| 235 | rgb = torch.nn.Upsample(size=(H, W), mode='bicubic')(rgb) |
| 236 | # convert rgb back to H,W,C format |
| 237 | rgb = rgb[0].permute(1,2,0) |
| 238 | |
| 239 | else: |
| 240 | rgb, _, _, _ = render(H, W, focal, chunk=args.chunk, c2w=pose_nerf[0,:3,:4].to(device), retraw=True, img_idx=img_idx, **render_kwargs_test) |
| 241 | torch.set_default_tensor_type('torch.FloatTensor') |
| 242 | |
| 243 | target_list.append(target.cpu()) |
| 244 | rgb_list.append(rgb.cpu()) |
| 245 | pose_list.append(pose.cpu()) |
| 246 | img_idx_list.append(img_idx.cpu()) |
| 247 | |
| 248 | targets = torch.stack(target_list).detach() |
| 249 | rgbs = torch.stack(rgb_list).detach() |
| 250 | poses = torch.stack(pose_list).detach() |
| 251 | img_idxs = torch.stack(img_idx_list).detach() |
| 252 | return targets, rgbs, poses, img_idxs |
| 253 | |
| 254 | def render_virtual_imgs(args, pose_perturb, img_idxs, hwf, device, render_kwargs_test, world_setup_dict): |
| 255 | ''' render nerfw imgs, save unscaled pose and results''' |
no test coverage detected