Pytorch - Как эффективно сформировать этот тензор Transform? - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть набор матриц вращения Rs:

Rs.shape = [62x3x3]

и набор компонентов перевода Js:

Js.shape = [62x3]

Я пытался найти эффективный способ их объединенияв матрицу [62x4x4], которая представляет собой 62 матрицы однородного преобразования.В настоящее время я делаю это с тупым циклом for:

def make_A(R, t):
    R_homo = torch.cat([R, torch.zeros(1, 3).cuda()], dim = 0)
    t_homo = torch.cat([t.view(3,1), torch.ones(1, 1).cuda()], dim = 0)
    return torch.cat([R_homo, t_homo], dim=1)

transforms = self.NUM_JOINTS*[None]
for idj in range(0, self.NUM_JOINTS):
    transforms[idj] = make_A(Rs[idj, :], Js[idj,:])

FinalMatrix = torch.stack(transforms, dim=0)

Это крайне неэффективно, и для его формирования требуется почти 10 мс.Как я могу тензорировать это?

1 Ответ

0 голосов
/ 16 февраля 2019

Не уверен, если это помогает эффективности, но это должно векторизовать ваш код:

def make_A(Rs, Js):
    R_homo = torch.cat((Rs, torch.zeros(Rs.shape[0], 1, 3)), dim=1)
    t_homo = torch.cat((Js, torch.ones(Js.shape[0], 1)), dim=1)
    return torch.cat((R_homo, t_homo.unsqueeze(2)), dim=2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...