Как правильно получить происхождение лучей в NeRF?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как правильно получить происхождение лучей в NeRF?

Сообщение Anonymous »

Я изучил две разные реализации NeRF в pytorch
https://github.com/yenchenlin/nerf-pytorch

Код: Выделить всё

def get_rays(H, W, focal, c2w):
'''
c2w = [ R_3x3, t_3x1
0_1x3, 1    ]
'''
i, j = torch.meshgrid(torch.linspace(0, W-1, W), torch.linspace(0, H-1, H))  # pytorch's meshgrid has indexing='ij'
i = i.t()
j = j.t()

dirs = torch.stack([(i-W*.5)/focal, -(j-H*.5)/focal, -torch.ones_like(i)], -1).to(c2w)

rays_d = torch.sum(dirs.unsqueeze(-1) * c2w[:3,:3], -1)

rays_d = rays_d / torch.norm(rays_d, dim=-1, keepdim=True)
# Translate camera frame's origin to the world frame. It is the origin of all rays.
rays_o = c2w[:3,-1].expand(rays_d.shape)
return rays_o, rays_d
https://github.com/airalcorn2/pytorch-nerf

Код: Выделить всё

def get_rays_v2(H, W, focal, c2w):

xs = torch.arange(W) - (W/2 - 0.5)
ys = torch.arange(H) - (H/2 - 0.5)
(xs, ys) = torch.meshgrid(xs, -ys, indexing="xy")

camera_coords = torch.stack([
xs/focal,
ys/focal,
-torch.ones_like(xs)
], dim=-1).to(c2w)

camera_origin = torch.Tensor([0, 0, float(data["camera_distance"])]).to(c2w)

R = c2w[:3,:3]
rays_d = torch.einsum("ij,hwj->hwi", R, camera_coords)
rays_o = (R @ camera_origin).expand(rays_d.shape)

return rays_o, rays_d

Код: Выделить всё

get_rays_v2
правильно работает с набором данных BLACK CAR.
Поэтому я попробовал это в наборе данных LEGO. Поскольку в LEGO отсутствует camera_distance, я использую get_rays из nerf-pytorch. Но его Loss падает медленно, а предсказанное test_image имеет неверный вид.
В чем разница между c2w[:3,-1] и вращением фиксированного начала координат, генерируемым camera_distance?

Подробнее здесь: https://stackoverflow.com/questions/793 ... f-properly
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Применение ускоренного реймарча к реализации NeRF
    Anonymous » » в форуме Python
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Применение ускоренного реймарча к реализации NeRF
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Оптический поток от Nerf [закрыто]
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Происхождение UIScrollView меняется после возврата к UIViewController.
    Anonymous » » в форуме IOS
    0 Ответы
    61 Просмотры
    Последнее сообщение Anonymous
  • Как сохранить происхождение отдельного объекта при импорте файла fbx в OpenGL? [закрыто]
    Anonymous » » в форуме C++
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»