【Errors】【计算机图形学】A-SDF复现的一点纠正记录

ICCV 2021的工作A-SDF,在跑的过程中可能是一些版我Run了这篇工作代码的Reconstruction,然后出现了一点小小的错误,记录如下。

问题一:对数据做直接修改导致出错(可能是不同的pytorch版本导致的?)

在这里插入图片描述
错误描述为:RuntimeError: Output 0 of SliceBackward0 is a view and is being modified inplace. This view was created inside a custom Function (or because an input was returned as-is) and the autograd logic to handle view+inplace would override the custom backward associated with the custom Function, leading to incorrect gradients. This behavior is forbidden. You can fix this by cloning the output of the custom Function.
拿着这个错误去百度了一下,得到这个结果:RuntimeError: Output 0 of SelectBackward is a view and is being modified inplace.
我理解这篇文章的大致意思是说,在循环里面对要遍历的数组做了修改,所以导致了这个错误的发生,但是A-SDF里面并没有做循环,而是前向传播的代码发生了错误,报错代码为下图的68行:
在这里插入图片描述
这行代码做的工作实际上就是将xtz_atc[:, 3:]的数值除以100,我们换一种形式来表示xtz_atc,不直接对xtz_atc直接做修改就好了,修改后源代码67-70行替换如下:

xyz_atc = input[:, -(self.num_atc_parts+3):] # xyz + articulation (3+1)
xyz_atc_2 = torch.zeros_like(xyz_atc) # 创建一个和xyz_atc形状相同的数组
xyz_atc_2[:, 3:] = xyz_atc[:, 3:] / 100 # 将xyz_atc[:, 3:]除以100后的值放入到形状相同数组的对应位置
xyz_atc_2[:, :3] = xyz_atc[:, :3] # 其他位置上的数值保持不变,直接赋予,此时所得到的xyz_atc_2的就是xyz_atc[:, 3:]/100的结果
xyz_atc_2 = self.fc1(xyz_atc_2)
atc_emb = self.relu(xyz_atc_2)

代码替换后可以成功运行Reconstruction的代码:python test.py -e examples/door/door-asdf/ -c 1000 -m recon_testset_ttt

问题二:scikit-image版本导致的小问题

其他要注意的就是skimage的版本号可能会有问题,导致报错AttributeError: module 'skimage.measure' has no attribute 'marching_cubes_lewiner'
经检查,目前我的scikit-image版本是0.20.0,降低版本至0.16.2可行:

pip uninstall scikit-image
pip install scikit-image==0.16.2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值