hkchengrex / Cutie

[CVPR 2024 Highlight] Putting the Object Back Into Video Object Segmentation
https://hkchengrex.com/Cutie/
MIT License
732 stars 71 forks source link

TypeError: cannot pickle '_thread.lock' object #6

Closed HyperTwo closed 1 year ago

HyperTwo commented 1 year ago

I followed the instruction to run the example, I completed the following steps:

  1. Use left-click for foreground annotation on the firts frame
  2. Click the "commit to permanent memory" button
  3. Click "Propagate forward"

then I got the error info below:


(cutie) PS E:\Cloneman\Cutie> python interactive_demo.py --video ./examples/example.mp4 --num_objects 1 Using device: cuda Single object: False Workspace is in: ./workspace\example 117 images found. Exception ignored in: <function ResourceManager.del at 0x00000230E0A572E0> Traceback (most recent call last): Traceback (most recent call last): File "E:\Cloneman\Cutie\gui\main_controller.py", line 272, in on_forward_propagation File "E:\Cloneman\Cutie\gui\resourcemanager.py", line 137, in del for in range(self.num_save_threads): self.on_propagate() AttributeError: 'ResourceManager' object has no attribute 'num_save_threads' File "E:\Cloneman\Cutie\gui\main_controller.py", line 315, in on_propagate Traceback (most recent call last): File "", line 1, in for data in loader: File "F:\SystemTools\miniconda3\envs\cutie\lib\site-packages\torch\utils\data\dataloader.py", line 438, in iter File "F:\SystemTools\miniconda3\envs\cutie\lib\multiprocessing\spawn.py", line 116, in spawn_main exitcode = _main(fd, parent_sentinel) return self._get_iterator() File "F:\SystemTools\miniconda3\envs\cutie\lib\multiprocessing\spawn.py", line 126, in _main File "F:\SystemTools\miniconda3\envs\cutie\lib\site-packages\torch\utils\data\dataloader.py", line 386, in _get_iterator self = reduction.pickle.load(from_parent) EOFError: Ran out of input return _MultiProcessingDataLoaderIter(self) File "F:\SystemTools\miniconda3\envs\cutie\lib\site-packages\torch\utils\data\dataloader.py", line 1039, in init w.start() File "F:\SystemTools\miniconda3\envs\cutie\lib\multiprocessing\process.py", line 121, in start self._popen = self._Popen(self) File "F:\SystemTools\miniconda3\envs\cutie\lib\multiprocessing\context.py", line 224, in _Popen return _default_context.get_context().Process._Popen(process_obj) File "F:\SystemTools\miniconda3\envs\cutie\lib\multiprocessing\context.py", line 336, in _Popen return Popen(process_obj) File "F:\SystemTools\miniconda3\envs\cutie\lib\multiprocessing\popen_spawn_win32.py", line 93, in init reduction.dump(process_obj, to_child) File "F:\SystemTools\miniconda3\envs\cutie\lib\multiprocessing\reduction.py", line 60, in dump ForkingPickler(file, protocol).dump(obj) TypeError: cannot pickle '_thread.lock' object


Is there something wrong with my operation?

hkchengrex commented 1 year ago

This seems to be a WIndows specific problem. Let me see if I can fix it.

HyperTwo commented 1 year ago

OK, I try to run it under WSL

hkchengrex commented 1 year ago

I have pushed a fix for Windows that limits multiprocessing for dataloading. Linux system is still recommended as it will be faster.