Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

作者您好,关于 root_align=True 和投影问题的请教您一下 #283

Closed
Rookienovice opened this issue Jun 29, 2022 · 13 comments
Closed

Comments

@Rookienovice
Copy link

作者您好,我是新研究这个领域的,有个困惑想请教您一下,请问设置 root_align=True 后,得到的是root-relative mesh吧,然后经过SMPL映射矩阵得到的3D pose 也是root-relative 3d pose吗?弱透视投影应该是将绝对的 3D human pose 投影到图片中与2D pose对齐的吧,应该是要加上root position的坐标吧? 那是怎么得出相机空间中绝对的 root position的?

@Arthur151
Copy link
Owner

您好,ROMP中采用的弱透视投影相机,不需要求解translation,直接进行尺度变化和x-y平移就好。
BEV采用的透视相机,同时也估计了translation,存在npz文件中,cam_trans对应的就是

@Rookienovice
Copy link
Author

作者您好,我还是有点困惑,请问translation 是表示root点相对于相机坐标原点的平移吗?为什么弱透视相机下不用将root-relative pose平移到绝对位置,而直接进行尺度变化和x-y平移就好?

@Arthur151
Copy link
Owner

是的,translation 是表示root点相对于相机坐标原点的平移。

弱透视投影可以参考:

def batch_orth_proj(X, camera, mode='2d',keep_dim=False):

@Rookienovice
Copy link
Author

作者您好,我看了代码还是没有理解为什么弱透视投影不用计算translation,只通过尺度和平移就可以对齐到原图。(我理解的是SMPL输出的人体是根对齐的,不是空间中真实位置,应该要加上translation才能到真实位置,然后投影到图像中,不知道我理解的对不对),而透视相机是不是要加上translation,才能通过内参投影到平面。
为什么ROMP采用弱透视投影方案,而BEV中改用了透视投影,是有什么好处吗?

@Arthur151
Copy link
Owner

Hi
弱透视投影可以去参考一下相关学习资料。

BEV是想要在单目多人深度估计上进行优化,所以用透视投影更好一点。

@Rookienovice
Copy link
Author

谢谢作者的解答,我去学习学习。
image
还有作者,您在这里也估计了cam_trans,请问它的作用是什么?

@Arthur151
Copy link
Owner

就是人在相机空间的位移

@Rookienovice
Copy link
Author

Rookienovice commented Jul 3, 2022

作者您好,是不是SMPL输出的是root-relative mesh,要想得到真实的位置,都需要估计出cam_trans,而BEV计算方式是您论文中提出的算法,ROMP计算方式是pnp算法。这里的cam_trans作用是 verts += cam_trans,得出人在相机空间中的真实位置,不知道我理解的对不对。

@Arthur151
Copy link
Owner

@Rookienovice
是的,没错,是这样的。

@Rookienovice
Copy link
Author

谢谢作者的解答,请问这里设置 focal_length=443.4,是有什么依据吗?是任意假定的吗?那这样估计的出的cam_trans应该不准确吧?
image

@Arthur151
Copy link
Owner

Arthur151 commented Jul 4, 2022

@Rookienovice
focal length的计算过程在这里

# focal length: when FOV=60 deg, 443.4 = H/2 * 1/(tan(FOV/2)) = 512/2. * 1./np.tan(np.radians(30))

这里,我们是假设相机FOV = 60 degree
我们的task设定是,给定任意相机未标定的图片进行估计,相机内参是未知的。
因为BEV研究的问题是多人之间的相对深度关系,而不是真实世界的绝对空间深度。
为了简化问题,我们这里省略的估计相机精准内参的过程,也就是假设所有图片都是由一个FOV=60,无畸变的相机拍摄的。
但我们研究发现,这样的设定已经足够用来学习多人之间的相对深度关系了。

当然,如果可以在训练过程中使用精准的相机内参,可能会结果更好。但因为很难要求输入的图片是带相机内参的,所以,我们这里做出这样的设计。

@Rookienovice
Copy link
Author

感谢作者的解答!也就是说,使用假设的focal_length估计出的cam_trans,只能表示人体在空间中粗略的真实位置,但此时图像中所有人体相对深度已经可以被表示的很好了。那如果我只想估计单人在相机空间中的绝对位置,可不可以采用ROMP的方法,采用弱透视投影对齐2D pose用于训练root-relative mesh,然后根据estimate_translation的PNP算法,求出粗略的cam_trams,最终verts += cam_trans,获得人体在相机空间中粗略的绝对位置。

@Arthur151
Copy link
Owner

@Rookienovice
是的,没错。如果有相机内参,替换当前PnP解算过程的相机参数,用估计的3D pose和2Dpose,就可以获得真实相机空间的绝对坐标值。。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants