From 75153f66798bf8da847bc65d29e95aa35c659652 Mon Sep 17 00:00:00 2001 From: Justin Date: Sun, 18 Jun 2023 06:32:40 +0000 Subject: [PATCH] update viewer beta vis --- nerfstudio/cameras/camera_optimizers.py | 6 ++---- nerfstudio/viewer_beta/viewer.py | 21 +++++++++++---------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/nerfstudio/cameras/camera_optimizers.py b/nerfstudio/cameras/camera_optimizers.py index 7c6627785..27cad2389 100644 --- a/nerfstudio/cameras/camera_optimizers.py +++ b/nerfstudio/cameras/camera_optimizers.py @@ -23,7 +23,6 @@ from dataclasses import dataclass, field from typing import Literal, Type, Union import torch -import tyro from jaxtyping import Float, Int from torch import Tensor, nn from typing_extensions import assert_never @@ -43,7 +42,7 @@ class CameraOptimizerConfig(InstantiateConfig): mode: Literal["off", "SO3xR3", "SE3"] = "off" """Pose optimization strategy to use. If enabled, we recommend SO3xR3.""" - trans_l2_penalty: float = 1e-3 + trans_l2_penalty: float = 1e-2 """L2 penalty on translation parameters.""" rot_l2_penalty: float = 1e-2 @@ -115,5 +114,4 @@ class CameraOptimizer(nn.Module): """ Add a regularizer """ - loss_dict['camera_opt_regularizer'] = self.pose_adjustment[:,:3].norm(dim=-1).mean() * self.config.trans_l2_penalty - loss_dict['camera_rot_regularizer'] = self.pose_adjustment[:,3:].norm(dim=-1).mean() * self.config.rot_l2_penalty \ No newline at end of file + loss_dict['camera_opt_regularizer'] = self.pose_adjustment[:,:3].norm(dim=-1).mean() * self.config.trans_l2_penalty + self.pose_adjustment[:,3:].norm(dim=-1).mean() * self.config.rot_l2_penalty \ No newline at end of file diff --git a/nerfstudio/viewer_beta/viewer.py b/nerfstudio/viewer_beta/viewer.py index fdc0f21cc..8621d3659 100644 --- a/nerfstudio/viewer_beta/viewer.py +++ b/nerfstudio/viewer_beta/viewer.py @@ -129,18 +129,19 @@ class Viewer: # Update the train camera locations based on optimization assert self.camera_handles is not None idxs = list(self.camera_handles.keys()) - camera_optimizer = self.trainer.pipeline.datamanager.train_camera_optimizer + camera_optimizer = self.trainer.pipeline.model.camera_optimizer with torch.no_grad(): c2ws_delta = camera_optimizer(torch.tensor(idxs, device=camera_optimizer.device)).cpu().numpy() - for idx in idxs: - # both are numpy arrays - c2w_orig = self.original_c2w[idx] - c2w_delta = c2ws_delta[idx, ...] - c2w = c2w_orig @ np.concatenate((c2w_delta, np.array([[0, 0, 0, 1]])), axis=0) - R = vtf.SO3.from_matrix(c2w[:3, :3]) - R = R @ vtf.SO3.from_x_radians(np.pi) - self.camera_handles[idx].position = c2w[:3, 3] * VISER_NERFSTUDIO_SCALE_RATIO - self.camera_handles[idx].wxyz = R.wxyz + with self.viser_server.atomic(): + for idx in idxs: + # both are numpy arrays + c2w_orig = self.original_c2w[idx] + c2w_delta = c2ws_delta[idx, ...] + c2w = c2w_orig @ np.concatenate((c2w_delta, np.array([[0, 0, 0, 1]])), axis=0) + R = vtf.SO3.from_matrix(c2w[:3, :3]) + R = R @ vtf.SO3.from_x_radians(np.pi) + self.camera_handles[idx].position = c2w[:3, 3] * VISER_NERFSTUDIO_SCALE_RATIO + self.camera_handles[idx].wxyz = R.wxyz def _interrupt_render(self, _) -> None: """Interrupt current render."""