mirror of
https://github.com/nerfstudio-project/nerfstudio.git
synced 2026-11-13 19:33:46 +08:00
update viewer beta vis
This commit is contained in:
1 parent
2fb9cd7cb9
commit
75153f6679
2 files changed
+13
-14
No files matched your search
@@ -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
|
||||
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
|
||||
@@ -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."""
|
||||
|
||||
Reference in new issue
Block a user