记录一些莫名其妙的torch报错
plane fitting
这里有两个值,四个pixel的avg按正常的值求出来,没有梯度;主要是怎么从中心点出发,扩大半径以求解对应的normal,这里为了不增加额外计算,就把sdf_lloss那部分不同半径同一位置计算的sdf删掉了,即: cal_sdf_loss=False,但显然这样或造成计算图不一致报错(我猜是这个原因),总之加入额外计算后就不再报错了。
sdf_network二次调用算loss
sdf, radius_loss = sdf_network(pts, dirs, self.encoding, sample_ball_radii, cal_sdf_loss = True)
sdf2,_ = sdf_network(pts, dirs2, self.encoding, sample_ball_radii, cal_sdf_loss = True)
dir_error = sdf-sdf2
dir_loss = F.mse_loss(dir_error, torch.zeros_like(dir_error), reduction='sum') / dir_error.shape[0]
- 计算sdf2时,dirs2的数值必须合理,否则loss.backward()会报错
- sdf2的计算过程必须和sdf1的保持一致,即: cal_sdf_loss 不可以等于False,否则也会报错,这一点同plane fitting遇到的问题