Open Frown000 opened 1 year ago
hi,感谢您对我们工作的兴趣。
我们的方法在coco数据集上训练,由于coco数据集的图片没有提供相机内参,所以我们在coco上训练/测试时假设所有图片的相机内参均为一个预设但比较合理的值,也就是:fx=width 0.58,fy=height 0.58
相机外参的尺度与DPT depth map相同。DPT的depth map尺度与真实世界的尺度并没有准确联系,e.g. dpt depth map上一个pixel的值为1不代表这个pixel的深度就是1m。
假设我需要输出的结果是,在水平方向上,前一张图片和后一张图片的水平距离是1cm,请问这个地方我如何修改呢
def gen_swing_path(num_frames=90, r_x=0.14, r_y=0., r_z=0.10):
"Return a list of matrix [4, 4]"
t = torch.arange(num_frames) / (num_frames - 1)
poses = torch.eye(4).repeat(num_frames, 1, 1)
poses[:, 0, 3] = r_x * torch.sin(2. * math.pi * t)
poses[:, 1, 3] = r_y * torch.cos(2. * math.pi * t)
poses[:, 2, 3] = r_z * (torch.cos(2. * math.pi * t) - 1.)
return poses.unbind()
我是这样修改的,似乎结果有点不对,如果有问题请问我应该怎么修改呢:
def gen_swing_path(num_frames=10, r_x=0., r_y=0., r_z=0.):
delta_x = 0.01
poses = torch.eye(4).repeat(num_frames, 1, 1)
poses[0, 0, 3] = 0
poses[0, 1, 3] = 0
poses[0, 2, 3] = 0
for i in range(1, num_frames):
poses[i, 0, 3] = r_x
poses[i, 1, 3] = r_y + i * delta_x
poses[i, 2, 3] = r_z
return poses
@yxuhan
你需要先自己计算DPT depth map的scale,比如用一张已知scale的depth map和DPT map做对齐。
假设DPT depth map的scale是1m,那你把delta_x设置成0.01就可以生成水平距离1cm的图;如果DPT depth map的scale是10m,那delta_x就需要设置成0.001。
你的意思我用任何一张图像去做都需要对齐dpt的scale
假设我用你例子给的图像和depth,他的dpt对应的scale是多少呢
def gen_translate_path(num_frames=2, r_x=0.65, r_y=0., r_z=0): poses = torch.eye(4).repeat(num_frames, 1, 1) poses[1, 0, 3] = r_x poses[1, 1, 3] = r_y poses[1, 2, 3] = r_z