zhanglonghao1992 / One-Shot_Free-View_Neural_Talking_Head_Synthesis

Pytorch implementation of paper "One-Shot Free-View Neural Talking-Head Synthesis for Video Conferencing"
Other
764 stars 143 forks source link

some questions about rotation matrix and jacobian #28

Closed Vijayue closed 2 years ago

Vijayue commented 2 years ago

您好,感谢您一直在更新!

有一些关于旋转矩阵R和雅可比行列式J的问题不太懂想请教下:

  1. 11.5号update里使用rotation替换Jacobian,然后11号更新把这个划掉了,还增加了备注not working,代码里rotation的部分也删掉了,请问下是rotation matrix没有效果吗,所以还是用Jacobian?

  2. 最新的代码感觉不太像correct rotation matrix,感觉像是没有用,还是我看漏了...

还有一点关于free-view的想法想听下您的看法:

论文好像没有很详细解释为什么这样做就能够很好的free-view。表达意思更像是:能够控制yaw, pitch, roll的大小来操控free-view的程度,关键点旋转了 --> 达到free-view的效果,生成效果就依靠网络生成图像的能力吗?即使一些地方在source_image里可能没看到也能生成。

希望能得到您的回复~~辛苦~

zhanglonghao1992 commented 2 years ago

@Vijayue

  1. rotation matrix是用了的,不然怎么可能在inference的时候用pitch yaw roll来控制headpose呢对吧~ 具体在model.py的209行:kp_rotated = torch.einsum('bmp,bkp->bkm', rot_mat, kp),利用rotation matrix改变key point的位置。 不work的是参照新版论文,直接用rotation matrix代替jacobian,我测试发现跟不用jacobian效果几乎一样。
  2. 新版本修正了之前rotation matrix计算方式的错误,具体是model.py和demo.py里的get_rotation_matrix函数。不过纵使之前的rotation matrix在计算上有问题,最后的模型效果并没有受到影响(还是可以按照理想的pitch yaw roll来旋转),应该是网络靠着显示的pitch yaw roll的约束自行修正了旋转方式。

通过控制pitch yaw roll来控制关键点,从而生成我们希望的headpose。生成效果确实就依靠Generator,存在大量的脑补(因为毕竟是one-shot),所以结果分辨率不高,有一些糊了的地方(比如眼睛/牙齿/耳朵)

Vijayue commented 2 years ago

感谢您百忙中详细的回答!明白了!

之前只看了commit日志的diffrent部分,把get_rotation_matrix这部分看漏了,抱歉麻烦您了......