lzhengning / SubdivNet

Subdivision-based Mesh Convolutional Networks.
MIT License
247 stars 34 forks source link

AssertionError assert self.F == self.Fs.max().data[0] #20

Closed flyKite1998 closed 2 years ago

flyKite1998 commented 2 years ago

你好 我在进行manifold数据集上的分类任务训练时,遇到了下面的错误

name:  manifold40
Train 0:   0%|                                                                                                                                                                           | 0/2049 [00:01<?, ?it/s]
Traceback (most recent call last):
  File "train_cls.py", line 184, in <module>
    train(net, optim, train_dataset, writer, epoch)
  File "train_cls.py", line 33, in train
    mesh_tensor = to_mesh_tensor(meshes)
  File "/mnt/data/wy/SubdivNet/subdivnet/utils.py", line 28, in to_mesh_tensor
    jt.int32(meshes['Fs']))
  File "/mnt/data/wy/SubdivNet/subdivnet/mesh_tensor.py", line 35, in __init__
    assert self.F == self.Fs.max().data[0]
AssertionError

我是在ubuntu18.04上用conda搭建环境的,jittor版本1.3.0.14,期待您的答复。

lzhengning commented 2 years ago

您好,

看上去是传入的 Fs (每个mesh的面的数量) 与 Face 数组的形状不一致导致的。您能提供以下信息吗?

flyKite1998 commented 2 years ago

是使用manifold40/train.sh脚本,未曾修改 是可重复的 打印结果如下

self.F=8320
self.Fs = jt.Var([6400 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 8320
 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144 6144
 6144 6144 6144 6144 6144 6144 6656 6144 6144 6144 6144 6144 6144 6144
 6144 6144 6784 6144 6144 6144], dtype=int32)
lzhengning commented 2 years ago

看了您的结果,self.Fs.max() 理论上应该等于 self.F,都是 8320,不应该在这里出现 AssertionError。

flyKite1998 commented 2 years ago

是的,我也很困惑,我也打印了self.Fs.max() 的值jt.Var([0],dtype=int32)。不过在另一台服务器上程序已经可以运行了。谢谢你的帮助。

lzhengning commented 2 years ago

还有一种可能是 Jittor 延迟执行的特性,真正错误并不是发生在这一行。您可以发一下完整的运行信息,看看 Jittor 报错信息。或者参考 https://cg.cs.tsinghua.edu.cn/jittor/assets/docs/Jittor调试技巧.html#id1 取消延迟执行。