ztsrxh / RoadBEV

Codes for RoadBEV: road surface reconstruction in Bird's Eye View
MIT License
131 stars 12 forks source link

TypeError: can't pickle open3d.cpu.pybind.visualization.SelectionPolygonVolume objects #1

Closed Qiuyanghang closed 2 months ago

Qiuyanghang commented 2 months ago

当我调用test.py测试是否能跑通模型时,报错TypeError: can't pickle open3d.cpu.pybind.visualization.SelectionPolygonVolume objects,请问怎么解决?十分感谢回复。

ztsrxh commented 2 months ago

你好: 可以提供详细的报错信息吗?训练时有没有报错?open3d库是否安装?

Qiuyanghang commented 2 months ago

你好: 十分感谢回复! open3d是安装了的,训练时候也报错了,没有训练起来: trining RoadBEV-stereo! dataset size - train:1210, test371 num params: 7444226 Downloading: "https://download.pytorch.org/models/efficientnet_b6_lukemelas-c76e70fd.pth" to C:\Users\TODA_2/.cache\torch\hub\checkpoints\efficientnet_b6_lukemelas-c76e70fd.pth 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 165M/165M [01:11<00:00, 2.44MB/s] logging dir: ./checkpoints/20240415012936 0%| | 0/50 [00:00<?, ?it/s] Traceback (most recent call last):
File "train.py", line 175, in train() File "train.py", line 26, in train
for i, sample in enumerate(train_loader): File "C:\Anaconda\envs\roadbev\lib\site-packages\torch\utils\data\dataloader.py", line 359, in iter return self._get_iterator() File "C:\Anaconda\envs\roadbev\lib\site-packages\torch\utils\data\dataloader.py", line 305, in _get_iterator return _MultiProcessingDataLoaderIter(self) File "C:\Anaconda\envs\roadbev\lib\site-packages\torch\utils\data\dataloader.py", line 918, in init w.start() File "C:\Anaconda\envs\roadbev\lib\multiprocessing\process.py", line 112, in start self._popen = self._Popen(self) File "C:\Anaconda\envs\roadbev\lib\multiprocessing\context.py", line 223, in _Popen return _default_context.get_context().Process._Popen(process_obj) File "C:\Anaconda\envs\roadbev\lib\multiprocessing\context.py", line 322, in _Popen return Popen(process_obj) File "C:\Anaconda\envs\roadbev\lib\multiprocessing\popen_spawn_win32.py", line 89, in init File "C:\Anaconda\envs\roadbev\lib\multiprocessing\reduction.py", line 60, in dump ForkingPickler(file, protocol).dump(obj) TypeError: can't pickle open3d.cpu.pybind.visualization.SelectionPolygonVolume objects (roadbev) PS C:\qyh\road_reconstrcution\RoadBEV-main> Traceback (most recent call last): File "", line 1, in File "C:\Anaconda\envs\roadbev\lib\multiprocessing\spawn.py", line 105, in spawn_main exitcode = _main(fd) File "C:\Anaconda\envs\roadbev\lib\multiprocessing\spawn.py", line 115, in _main self = reduction.pickle.load(from_parent) EOFError: Ran out of input

在Windows系统下的conda的环境信息为: python 3.7.16 pillow 9.2.0 pytorch 1.10.0 torchaudio 0.10.0 torchvision 0.11.0 open3d 0.11.2 numpy 1.21.6 opencv-python 4.9.0.80

ztsrxh commented 2 months ago

The open3d version is 0.16.0 in my environment. Problems originated from the pre-processed GT labels, please check whether the GT generation works well.

Qiuyanghang commented 2 months ago

The open3d version is 0.16.0 in my environment. Problems originated from the pre-processed GT labels, please check whether the GT generation works well.

好的,谢谢!Thank you so much!

ztsrxh commented 2 months ago

We have provided the GT labels generated in our environment. You can use it and check if problems still exist.

jiajigiser commented 2 months ago

I have also encountered the same error mentioned above.

My environment is : Python 3.8.17 pytorch 1.10.0 torchaudio 0.10.0 torchvision 0.11.0

My error message in test.py: Testing RoadBEV-mono! test set: 371 num params: 26646334 loading model C:\Users\16076\Desktop\2-coding\1-picture_process\RoadBEV-main\RoabBEV-mono.ckpt Traceback (most recent call last): File ".\test.py", line 92, in [metric_all, metric_depthwise] = test_sample(test_loader) File "C:\Users\16076\Desktop\2-coding\1-picture_process\RoadBEV-main\utils\experiment.py", line 30, in wrapper ret = func(*f_args, **f_kwargs) File ".\test.py", line 26, in test_sample for i, sample in enumerate(test_loader): File "C:\ProgramData\Anaconda3\envs\blend\lib\site-packages\torch\utils\data\dataloader.py", line 359, in iter return self._get_iterator() File "C:\ProgramData\Anaconda3\envs\blend\lib\site-packages\torch\utils\data\dataloader.py", line 305, in _get_iterator return _MultiProcessingDataLoaderIter(self) File "C:\ProgramData\Anaconda3\envs\blend\lib\site-packages\torch\utils\data\dataloader.py", line 918, in init w.start() File "C:\ProgramData\Anaconda3\envs\blend\lib\multiprocessing\process.py", line 121, in start
self._popen = self._Popen(self) File "C:\ProgramData\Anaconda3\envs\blend\lib\multiprocessing\context.py", line 224, in _Popen return _default_context.get_context().Process._Popen(process_obj) File "C:\ProgramData\Anaconda3\envs\blend\lib\multiprocessing\context.py", line 327, in _Popen return Popen(process_obj) File "C:\ProgramData\Anaconda3\envs\blend\lib\multiprocessing\popen_spawn_win32.py", line 93, in init reduction.dump(process_obj, to_child) File "C:\ProgramData\Anaconda3\envs\blend\lib\multiprocessing\reduction.py", line 60, in dump ForkingPickler(file, protocol).dump(obj) TypeError: cannot pickle 'open3d.cpu.pybind.visualization.SelectionPolygonVolume' object

My error message in train.py: (blend) PS C:\Users\16076\Desktop\2-coding\1-picture_process\RoadBEV-main> python .\train.py --lr 8e-4
trining RoadBEV-mono! dataset size - train:1210, test371 num params: 26646334 logging dir: ./checkpoints/20240418115722 0%| | 0/50 [00:02<?, ?it/s]Traceback (most recent call last):

File "C:\ProgramData\Anaconda3\envs\blend\lib\site-packages\torch\utils\data\dataloader.py", line 359, in iter self = reduction.pickle.load(from_parent) EOFError: Ran out of input return self._get_iterator() File "C:\ProgramData\Anaconda3\envs\blend\lib\site-packages\torch\utils\data\dataloader.py", line 305, in _get_iterator return _MultiProcessingDataLoaderIter(self) File "C:\ProgramData\Anaconda3\envs\blend\lib\site-packages\torch\utils\data\dataloader.py", line 918, in init w.start() File "C:\ProgramData\Anaconda3\envs\blend\lib\multiprocessing\process.py", line 121, in start self._popen = self._Popen(self) File "C:\ProgramData\Anaconda3\envs\blend\lib\multiprocessing\context.py", line 224, in _Popen return _default_context.get_context().Process._Popen(process_obj) File "C:\ProgramData\Anaconda3\envs\blend\lib\multiprocessing\context.py", line 327, in _Popen return Popen(process_obj) File "C:\ProgramData\Anaconda3\envs\blend\lib\multiprocessing\popen_spawn_win32.py", line 93, in init reduction.dump(process_obj, to_child) File "C:\ProgramData\Anaconda3\envs\blend\lib\multiprocessing\reduction.py", line 60, in dump ForkingPickler(file, protocol).dump(obj) TypeError: cannot pickle 'open3d.cpu.pybind.visualization.SelectionPolygonVolume' object

My question:May I ask if different versions of Python may be the reason for the Open3D error?

ztsrxh commented 2 months ago

I have also encountered the same error mentioned above.

My environment is : Python 3.8.17 pytorch 1.10.0 torchaudio 0.10.0 torchvision 0.11.0

My error message in test.py: Testing RoadBEV-mono! test set: 371 num params: 26646334 loading model C:\Users\16076\Desktop\2-coding\1-picture_process\RoadBEV-main\RoabBEV-mono.ckpt Traceback (most recent call last): File ".\test.py", line 92, in [metric_all, metric_depthwise] = test_sample(test_loader) File "C:\Users\16076\Desktop\2-coding\1-picture_process\RoadBEV-main\utils\experiment.py", line 30, in wrapper ret = func(*f_args, f_kwargs) File ".\test.py", line 26, in test_sample for i, sample in enumerate(test_loader): File "C:\ProgramData\Anaconda3\envs\blend\lib\site-packages\torch\utils\data\dataloader.py", line 359, in iter return self._get_iterator() File "C:\ProgramData\Anaconda3\envs\blend\lib\site-packages\torch\utils\data\dataloader.py", line 305, in _get_iterator return _MultiProcessingDataLoaderIter(self) File "C:\ProgramData\Anaconda3\envs\blend\lib\site-packages\torch\utils\data\dataloader.py", line 918, in init w.start() File "C:\ProgramData\Anaconda3\envs\blend\lib\multiprocessing\process.py", line 121, in start self._popen = self._Popen(self) File "C:\ProgramData\Anaconda3\envs\blend\lib\multiprocessing\context.py", line 224, in _Popen return _default_context.get_context().Process._Popen(process_obj) File "C:\ProgramData\Anaconda3\envs\blend\lib\multiprocessing\context.py", line 327, in _Popen return Popen(process_obj) File "C:\ProgramData\Anaconda3\envs\blend\lib\multiprocessing\popen_spawn_win32.py", line 93, in init** reduction.dump(process_obj, to_child) File "C:\ProgramData\Anaconda3\envs\blend\lib\multiprocessing\reduction.py", line 60, in dump ForkingPickler(file, protocol).dump(obj) TypeError: cannot pickle 'open3d.cpu.pybind.visualization.SelectionPolygonVolume' object

My error message in train.py: (blend) PS C:\Users\16076\Desktop\2-coding\1-picture_process\RoadBEV-main> python .\train.py --lr 8e-4 trining RoadBEV-mono! dataset size - train:1210, test371 num params: 26646334 logging dir: ./checkpoints/20240418115722 0%| | 0/50 [00:02<?, ?it/s]Traceback (most recent call last):

File "C:\ProgramData\Anaconda3\envs\blend\lib\site-packages\torch\utils\data\dataloader.py", line 359, in iter self = reduction.pickle.load(from_parent) EOFError: Ran out of input return self._get_iterator() File "C:\ProgramData\Anaconda3\envs\blend\lib\site-packages\torch\utils\data\dataloader.py", line 305, in _get_iterator return _MultiProcessingDataLoaderIter(self) File "C:\ProgramData\Anaconda3\envs\blend\lib\site-packages\torch\utils\data\dataloader.py", line 918, in init w.start() File "C:\ProgramData\Anaconda3\envs\blend\lib\multiprocessing\process.py", line 121, in start self._popen = self._Popen(self) File "C:\ProgramData\Anaconda3\envs\blend\lib\multiprocessing\context.py", line 224, in _Popen return _default_context.get_context().Process._Popen(process_obj) File "C:\ProgramData\Anaconda3\envs\blend\lib\multiprocessing\context.py", line 327, in _Popen return Popen(process_obj) File "C:\ProgramData\Anaconda3\envs\blend\lib\multiprocessing\popen_spawn_win32.py", line 93, in init reduction.dump(process_obj, to_child) File "C:\ProgramData\Anaconda3\envs\blend\lib\multiprocessing\reduction.py", line 60, in dump ForkingPickler(file, protocol).dump(obj) TypeError: cannot pickle 'open3d.cpu.pybind.visualization.SelectionPolygonVolume' object

My question:May I ask if different versions of Python may be the reason for the Open3D error?

Hi, we have not encountered this problem in our environment. What is your open3d version? Can you give me a sample .pkl GT file generated in your environment? Please also check whether you have properly downloaded the dataset and set its path in dataset.py. You can also use the GT files we provided. Thanks!

liushuquan2022 commented 2 months ago

(RoadBEV) D:\RoadBEV-main>python train.py --lr 8e-4 trining RoadBEV-mono! dataset size - train:1210, test371 num params: 26646334 logging dir: ./checkpoints/20240419150246 0%| | 0/50 [00:03<?, ?it/s] Traceback (most recent call last): Traceback (most recent call last): File "", line 1, in File "train.py", line 175, in train() File "train.py", line 26, in train File "C:\Users\liush\anaconda3\envs\RoadBEV\lib\multiprocessing\spawn.py", line 116, in spawn_main for i, sample in enumerate(train_loader): File "C:\Users\liush\anaconda3\envs\RoadBEV\lib\site-packages\torch\utils\data\dataloader.py", line 439, in iter exitcode = _main(fd, parent_sentinel) File "C:\Users\liush\anaconda3\envs\RoadBEV\lib\multiprocessing\spawn.py", line 126, in _main self = reduction.pickle.load(from_parent) EOFError: Ran out of input return self._get_iterator() File "C:\Users\liush\anaconda3\envs\RoadBEV\lib\site-packages\torch\utils\data\dataloader.py", line 387, in _get_iterator return _MultiProcessingDataLoaderIter(self) File "C:\Users\liush\anaconda3\envs\RoadBEV\lib\site-packages\torch\utils\data\dataloader.py", line 1040, in init w.start() File "C:\Users\liush\anaconda3\envs\RoadBEV\lib\multiprocessing\process.py", line 121, in start self._popen = self._Popen(self) File "C:\Users\liush\anaconda3\envs\RoadBEV\lib\multiprocessing\context.py", line 224, in _Popen return _default_context.get_context().Process._Popen(process_obj) File "C:\Users\liush\anaconda3\envs\RoadBEV\lib\multiprocessing\context.py", line 327, in _Popen return Popen(process_obj) File "C:\Users\liush\anaconda3\envs\RoadBEV\lib\multiprocessing\popen_spawn_win32.py", line 93, in init reduction.dump(process_obj, to_child) File "C:\Users\liush\anaconda3\envs\RoadBEV\lib\multiprocessing\reduction.py", line 60, in dump ForkingPickler(file, protocol).dump(obj) TypeError: cannot pickle 'open3d.cpu.pybind.visualization.SelectionPolygonVolume' object

同样的报错。另,能列出详细的目录和文件结构吗?谢谢

liushuquan2022 commented 2 months ago

在Tong Zhao的帮助下,已解决。非常感谢团队的贡献!

ztsrxh commented 2 months ago

@jiajigiser @Qiuyanghang Hello, we have completely fixed this problem. The problem is not from versions, but that some objects of classes cannot be serialized. You can repull the repo now. The ckpt weights are also updated. We also found some mistakes in the paper, and we will update it in next days.

jiajigiser commented 2 months ago

@jiajigiser @Qiuyanghang Hello, we have completely fixed this problem. The problem is not from versions, but that some objects of classes cannot be serialized. You can repull the repo now. The ckpt weights are also updated. We also found some mistakes in the paper, and we will update it in next days.

Thanks! I will continue to follow your updates

jiajigiser commented 2 months ago

@jiajigiser @Qiuyanghang Hello, we have completely fixed this problem. The problem is not from versions, but that some objects of classes cannot be serialized. You can repull the repo now. The ckpt weights are also updated. We also found some mistakes in the paper, and we will update it in next days.

Hello, I tried to change the num__workers=0 at: test_loader = DataLoader(test_set, 1, shuffle=False, num_workers=0, drop_last=False, pin_memory=True)【in test.py】. After modifying the parameters, there were no previous errors with Open3D.

ztsrxh commented 2 months ago

@jiajigiser @Qiuyanghang Hello, we have completely fixed this problem. The problem is not from versions, but that some objects of classes cannot be serialized. You can repull the repo now. The ckpt weights are also updated. We also found some mistakes in the paper, and we will update it in next days.

Hello, I tried to change the num__workers=0 at: test_loader = DataLoader(test_set, 1, shuffle=False, num_workers=0, drop_last=False, pin_memory=True)【in test.py】. After modifying the parameters, there were no previous errors with Open3D.

You get it. Actually it is not the problem of open3d. But some objects in Multiprocessing cannot be serialized. Single data loader also resolve this.