MCPcopy Index your code
hub / github.com/ActiveVisionLab/DFNet / train_on_batch

Function train_on_batch

script/dm/direct_pose_model.py:228–276  ·  view source on GitHub ↗

Perform 1 step of training

(args, data, model, pose, img_idx, hwf, optimizer, half_res, device, **render_kwargs_test)

Source from the content-addressed store, hash-verified

226 return total_loss_mean, total_psnr_mean
227
228def train_on_batch(args, data, model, pose, img_idx, hwf, optimizer, half_res, device, **render_kwargs_test):
229 ''' Perform 1 step of training'''
230 H, W, focal = hwf
231 target_ = deepcopy(data)
232 pose_ = inference_pose_regression(args, data, device, model)
233 device_cpu = torch.device('cpu')
234 pose_ = pose_.to(device_cpu) # put predict pose back to cpu
235 pose_nerf = pose_.clone()
236 if args.NeRFH:
237 # rescale the predicted pose to nerf scales
238 pose_nerf = fix_coord_supp(args, pose_nerf)
239
240 batch_rays, target = prepare_batch_render(args, pose_nerf, args.batch_size, target_, H, W, focal, half_res)
241 batch_rays = batch_rays.to(device)
242 target = target.to(device)
243 pose = pose.to(device)
244 img_idx = img_idx.to(device)
245
246 # # every new tensor from onward is in GPU
247 torch.set_default_tensor_type('torch.cuda.FloatTensor')
248 if half_res:
249 rgb, disp, acc, extras = render(H//2, W//2, focal/2, chunk=args.chunk, rays=batch_rays, img_idx=img_idx, **render_kwargs_test)
250 else:
251 rgb, disp, acc, extras = render(H, W, focal, chunk=args.chunk, rays=batch_rays, img_idx=img_idx, **render_kwargs_test)
252
253 ### Loss Design Here ###
254 # Compute RGB MSE Loss
255 photo_loss = rgb_loss(rgb, target, extras)
256
257 # Compute Combine Loss if needed
258 if args.combine_loss:
259 pose_loss = PoseLoss(args, pose_, pose, device)
260 loss = args.combine_loss_w[0] * pose_loss + args.combine_loss_w[1] * photo_loss
261 # print("img_idx: {}, pose_loss: {}, rgb_loss {}, total_loss {}".format(img_idx, args.combine_loss_w[0] * pose_loss, args.combine_loss_w[1] * photo_loss, loss))
262
263 ### Loss Design End
264 loss.backward()
265 optimizer.step()
266 optimizer.zero_grad()
267 psnr = mse2psnr(img2mse(rgb, target))
268
269 # end of every new tensor from onward is in GPU
270 torch.set_default_tensor_type('torch.FloatTensor')
271
272 iter_loss = loss.to(device_cpu).detach().numpy()
273 iter_loss = np.array([iter_loss])
274
275 iter_psnr = psnr.to(device_cpu).detach().numpy()
276 return iter_loss, iter_psnr
277
278
279def train_on_epoch(args, data_loaders, model, hwf, optimizer, half_res, device, **render_kwargs_test):

Callers 1

train_on_epochFunction · 0.70

Calls 6

renderFunction · 0.90
fix_coord_suppFunction · 0.85
prepare_batch_renderFunction · 0.70
rgb_lossFunction · 0.70
PoseLossFunction · 0.70

Tested by

no test coverage detected