记录一个昨晚调到4点的奇妙bug
昨晚把服务器调试正确的训练程序放到集群上跑,发现其中有个depth map转点云的函数结果不正确,正常结果点云坐标会非常小,最大值不会超过2,但是集群上数值有好几百。
DEBUG一番后定位在一行numpy的矩阵乘法,但是问题在于用于计算的点云有十几万行,而我写了几个简单的矩阵乘法测试运算结果都是对的。于是通过一波艰苦的手动梯度下降法和手动二分查找法,找出了错误的最小子集
import numpy as np
import torch
intrinsic = np.array([[ 0.0017, 0.0000, -0.5581, 0.0000],
[ 0.0000, 0.0017, -0.4186, 0.0000],
[ 0.0000, 0.0000, 1.0000, 0.0000],
[ 0.0000, 0.0000, 0.0000, 1.0000]])
pc = np.array([[ 0.0000, 0.0000, 0.0000, 1.0000],
[141.8040, 9.0900, 1.8180, 1.0000],
[143.5430, 9.0850, 1.8170, 1.0000],
[145.3600, 9.0850, 1.8170, 1.0000],
[147.3390, 9.0950, 1.8190, 1.0000],
[149.4860, 9.1150, 1.8230, 1.0000],
[152.0560, 9.1600, 1.8320, 1.0000],
[153.9720, 9.1650, 1.8330, 1.0000]])
print("np result: ",intrinsic.dot(pc.T))