|
|
|
|
|
|
|
|
|
|
|
|
|
import unittest |
|
|
|
import torch |
|
from pytorch3d.implicitron.tools.eval_video_trajectory import ( |
|
generate_eval_video_cameras, |
|
) |
|
from pytorch3d.renderer.cameras import look_at_view_transform, PerspectiveCameras |
|
from pytorch3d.transforms import axis_angle_to_matrix |
|
from tests.common_testing import TestCaseMixin |
|
|
|
|
|
class TestEvalCameras(TestCaseMixin, unittest.TestCase): |
|
def setUp(self): |
|
torch.manual_seed(42) |
|
|
|
def test_circular(self): |
|
n_train_cameras = 10 |
|
n_test_cameras = 100 |
|
R, T = look_at_view_transform(azim=torch.rand(n_train_cameras) * 360) |
|
amplitude = 0.01 |
|
R_jiggled = torch.bmm( |
|
R, axis_angle_to_matrix(torch.rand(n_train_cameras, 3) * amplitude) |
|
) |
|
cameras_train = PerspectiveCameras(R=R_jiggled, T=T) |
|
cameras_test = generate_eval_video_cameras( |
|
cameras_train, trajectory_type="circular_lsq_fit", trajectory_scale=1.0 |
|
) |
|
|
|
positions_test = cameras_test.get_camera_center() |
|
center = positions_test.mean(0) |
|
self.assertClose(center, torch.zeros(3), atol=0.1) |
|
self.assertClose( |
|
(positions_test - center).norm(dim=[1]), |
|
torch.ones(n_test_cameras), |
|
atol=0.1, |
|
) |
|
|