Shimingyi / MotioNet

A deep neural network that directly reconstructs the motion of a 3D human skeleton from monocular video [ToG 2020]
https://rubbly.cn/publications/motioNet/
BSD 2-Clause "Simplified" License
554 stars 82 forks source link

关于测试时如何获得更好的效果 #44

Open MioChiu opened 2 years ago

MioChiu commented 2 years ago

hi,最近尝试了一下motioNet,有几个问题想请教一下: 1.关于测试时的IMAGE_WIDTH,这里应该就用图片宽度吗,还是需要最长边? 2.MotioNet论文中最吸引我的是能够相对准确的回归global root position,事实上目前绝大多数3D pose的方法在这方面都比较糟糕。然而我看到测试时有 translation[:, :2] = translation[:, :2]*3;translation[:, 2] = translation[:, 2]*1.5,这里的scale系数是怎么得到的呢?经验值?在我测试自己的视频时对这个有什么建议吗? 3.演示视频里下面这个视频的global translation看起来效果很好,请问是有做什么其他的操作嘛?靠这个库的代码和模型能做到吗? image 4.我自己测试了如下视频,发现效果并不好,动作错误较多,而且global translation基本固定在原地(实际上视频中的人从左走到右有比较明显的位移),我使用evaluate.py的默认设置(IMAGE_WIDTH改为视频的宽度),请问是还需要修改什么才能达到较好的效果呢?还是说我这个视频本身不太符合训练集的分布? image

Shimingyi commented 2 years ago

Hi @MioChiu ,

  1. 如果不是正方形的视频,是应该对长和宽分别进行处理的:
    IMAGE_WIDTH = 480
    IMAGE_HEIGHT = 270
    ...
    poses_2d = np.concatenate(pose_batch, axis=0)
    poses_2d[:, np.arange(0, poses_2d.shape[-1], 2)] /= (IMAGE_WIDTH*1)    # 1 是一个调整参数,尽可能使人物在图片中的比例接近原始数据集
    poses_2d[:, np.arange(1, poses_2d.shape[-1], 2)] /= (IMAGE_HEIGHT*1)   # 1
  2. global root position的回归也是我们比较开心的一点,但其实在我们最近的研究里面也发现,虽然在训练数据集中表现非常好(-i h36m可以输出一些在测试集上的结果),也很难在真实的视频里获得非常平滑的效果。一是因为训练数据集的运动范围和规则都很固定,基本就是绕圈,二是因为缺乏足够的数据扩充。对于产生的脚步漂移(foot sliding), 我们就会用应用一个scale减小这样的移动,凭经验去产生。对于你的视频,在深度上的scale应该小一点。
  3. 完全可以。