Hi,
I'm currently trying to train PointNetVLAD on different dataset (KittiSparseTupleDataset and KittiTupleDataset).
I have no problems for LoGG3D-net training but I have those two errors for PointNetVLAD:
Command number 1 :
python training/train.py --train_pipeline 'PointNetVLAD' --train_num_workers 8 --point_loss_weight 0 --dataset "KittiSparseTupleDataset"
Error :
Traceback (most recent call last):
File "/gpfs7kw/linkhome/rech/genvsy01/ufm44cu/code/LoGG3D-Net/training/train.py", line 161, in
main()
File "/gpfs7kw/linkhome/rech/genvsy01/ufm44cu/code/LoGG3D-Net/training/train.py", line 98, in main
output = model(batch_st)
File "/gpfslocalsup/pub/anaconda-py3/2021.05/envs/pytorch-gpu-1.10.1+py3.9.7/lib/python3.9/site-packages/torch/nn/modules/module.py", line 1102, in _call_impl
return forward_call(*input, **kwargs)
File "/gpfslocalsup/pub/anaconda-py3/2021.05/envs/pytorch-gpu-1.10.1+py3.9.7/lib/python3.9/site-packages/torch/nn/parallel/distributed.py", line 886, in forward
output = self.module(*inputs[0], **kwargs[0])
File "/gpfslocalsup/pub/anaconda-py3/2021.05/envs/pytorch-gpu-1.10.1+py3.9.7/lib/python3.9/site-packages/torch/nn/modules/module.py", line 1102, in _call_impl
return forward_call(*input, **kwargs)
File "/gpfs7kw/linkhome/rech/genvsy01/ufm44cu/code/LoGG3D-Net/training/../models/pipelines/PointNetVLAD.py", line 19, in forward
x = self.point_net(x)
File "/gpfslocalsup/pub/anaconda-py3/2021.05/envs/pytorch-gpu-1.10.1+py3.9.7/lib/python3.9/site-packages/torch/nn/modules/module.py", line 1102, in _call_impl
return forward_call(*input, **kwargs)
File "/gpfs7kw/linkhome/rech/genvsy01/ufm44cu/code/LoGG3D-Net/training/../models/backbones/PointNet.py", line 86, in forward
batchsize = x.size()[0]
AttributeError: 'SparseTensor' object has no attribute 'size'
Command number 2 :
python training/train.py --train_pipeline 'PointNetVLAD' --train_num_workers 8 --point_loss_weight 0 --dataset "KittiTupleDataset"
Error :
Traceback (most recent call last):
File "/gpfs7kw/linkhome/rech/genvsy01/ufm44cu/code/LoGG3D-Net/training/train.py", line 161, in
main()
File "/gpfs7kw/linkhome/rech/genvsy01/ufm44cu/code/LoGG3D-Net/training/train.py", line 93, in main
for i, batch in enumerate(train_loader, 0):
File "/gpfslocalsup/pub/anaconda-py3/2021.05/envs/pytorch-gpu-1.10.1+py3.9.7/lib/python3.9/site-packages/torch/utils/data/dataloader.py", line 521, in next
data = self._next_data()
File "/gpfslocalsup/pub/anaconda-py3/2021.05/envs/pytorch-gpu-1.10.1+py3.9.7/lib/python3.9/site-packages/torch/utils/data/dataloader.py", line 1203, in _next_data
return self._process_data(data)
File "/gpfslocalsup/pub/anaconda-py3/2021.05/envs/pytorch-gpu-1.10.1+py3.9.7/lib/python3.9/site-packages/torch/utils/data/dataloader.py", line 1229, in _process_data
data.reraise()
File "/gpfslocalsup/pub/anaconda-py3/2021.05/envs/pytorch-gpu-1.10.1+py3.9.7/lib/python3.9/site-packages/torch/_utils.py", line 434, in reraise
raise exception
AttributeError: Caught AttributeError in DataLoader worker process 0.
Original Traceback (most recent call last):
File "/gpfslocalsup/pub/anaconda-py3/2021.05/envs/pytorch-gpu-1.10.1+py3.9.7/lib/python3.9/site-packages/torch/utils/data/_utils/worker.py", line 287, in _worker_loop
data = fetcher.fetch(index)
File "/gpfslocalsup/pub/anaconda-py3/2021.05/envs/pytorch-gpu-1.10.1+py3.9.7/lib/python3.9/site-packages/torch/utils/data/_utils/fetch.py", line 52, in fetch
return self.collate_fn(data)
File "/gpfs7kw/linkhome/rech/genvsy01/ufm44cu/code/LoGG3D-Net/training/../utils/data_loaders/pointcloud_dataset.py", line 126, in call
return self.collation_fn(list_data)
File "/gpfs7kw/linkhome/rech/genvsy01/ufm44cu/code/LoGG3D-Net/training/../utils/data_loaders/pointcloud_dataset.py", line 143, in collate_tuple
outputs.append(sparse_collate(contrastive_tuple))
File "/gpfslocalsup/pub/anaconda-py3/2021.05/envs/pytorch-gpu-1.10.1+py3.9.7/lib/python3.9/site-packages/torchsparse/utils/collate.py", line 13, in sparse_collate
stride = inputs[0].stride
AttributeError: 'numpy.ndarray' object has no attribute 'stride'
Problems
=> Even when I change the dataset to be "non-sparse", the code call the function sparse_collate
def sparse_collate(inputs: List[SparseTensor]) -> SparseTensor:
in Torchsparse.
collate_tuple (in pointcloud_dataset.py) call sparse_collate, which need a SparseTensor object as an input,
Shouldn't I call the sparse_collate_fn function instead?
def sparse_collate_fn(inputs: List[Any]) -> Any:
And, kitti_dataset.py don't return a pytorch tensor but a numpy.ndarray, is it normal?
Originally posted by @Chahine-Nicolas in #2 (comment)