Closed jiakechong1991 closed 2 days ago
paper上说: 这里左乘“旋转矩阵的逆”,相当于变换参考系,我也认为应该这样做很合理,为什么代码里面却不是呢?
def normalize_and_concat(glb_acc, glb_ori): glb_acc = glb_acc.view(-1, 6, 3) glb_ori = glb_ori.view(-1, 6, 3, 3) # glb_ori[:, -1] : root-joint的旋转矩阵 size:[f, 3, 3] #???为什么不是左乘“旋转矩阵的逆”呢?而是右乘一个旋转矩阵?旋转矩阵左乘右乘是不一样的呀 acc = torch.cat((glb_acc[:, :5] - glb_acc[:, 5:], glb_acc[:, 5:]), dim=1).bmm(glb_ori[:, -1]) / acc_scale ori = torch.cat( #??? 应该是左乘 旋转矩阵的逆就行,为什么没有用“旋转矩阵的逆”,而且还加上转置呢? (glb_ori[:, 5:].transpose(2, 3).matmul(glb_ori[:, :5]), glb_ori[:, 5:]) , dim=1) data = torch.cat((acc.flatten(1), ori.flatten(1)), dim=1) return data
还请作者或者各位看懂项目的大佬指教,多谢多谢
您好, 论文里是列向量左乘矩阵的逆,代码里是行向量右乘矩阵,结果是一样的,但论文里的方法要算六次矩阵乘法,代码里只需要算一次。
第二个问题,旋转矩阵的转置和逆是一样的,转置的计算量小一些
感谢大佬指导! 记录下给后来人: 旋转矩阵是正交阵,它的行列式为1,且每个列向量都是单位向量且相互正交,它的逆等于它的转置 可以百度搜索 “旋转矩阵 逆 转置” 获取详细推导
paper上说:
这里左乘“旋转矩阵的逆”,相当于变换参考系,我也认为应该这样做很合理,为什么代码里面却不是呢?
还请作者或者各位看懂项目的大佬指教,多谢多谢