网上的很多都试了,对我无效,也看不明白啥意思,自己摸索着解决了
找到报错地方,打个断点在“self.voxel_size_base”所在行
Traceback (most recent call last):
File "run.py", line 591, in <module>
train(args, cfg, data_dict = data_dict)
File "run.py", line 562, in train
scene_rep_reconstruction(
File "run.py", line 326, in scene_rep_reconstruction
model = tineuvox.TiNeuVox(
File "/home/wangbeibei/code/Nerf/dynamic_nerf/TiNeuVox/lib/tineuvox.py", line 113, in __init__
self.voxel_size_base = ((self.xyz_max - self.xyz_min).prod() / self.num_voxels_base).pow(1/3)
调试代码,在断点停下
self.voxel_size_base = ((self.xyz_max - self.xyz_min).prod() / self.num_voxels_base).pow(1/3)
在调试区试了一下(1),可以正常调试
(self.xyz_max - self.xyz_min)(1)
又试了一下(2),".prod()"报错了,那就重写该函数吧(不知道为啥报错)
(self.xyz_max - self.xyz_min).prod()(2)
重写prod函数
def custom_prod(iterable):
"""
计算可迭代对象中所有元素的乘积。
参数:
iterable (iterable): 一个包含数字的可迭代对象(如列表、元组等)。
返回:
float 或 int: 可迭代对象中所有元素的乘积。如果可迭代对象为空,则返回1(因为空乘积的约定值为1)。
"""
product = 1 # 初始化乘积为1
for num in iterable:
product *= num # 逐个乘以可迭代对象中的元素
return product
调试区尝试调试(3),没报错!!!又把剩下的一点点加进来调试,都没错,只有.prod()报错了,所以只改了这里就好了~~
custom_prod(self.xyz_max - self.xyz_min)(3)
总结:
报错行:
self.voxel_size_base = ((self.xyz_max - self.xyz_min).prod() / self.num_voxels_base).pow(1/3)
修改为:
self.voxel_size_base = (custom_prod(self.xyz_max - self.xyz_min) / self.num_voxels_base).pow(1/3)
其中custom_prod为实现原本.prod()功能的自己写的函数