multinerf icon indicating copy to clipboard operation
multinerf copied to clipboard

struct error: unpack requires a buffer of 4 bytes

Open bycloudai opened this issue 2 years ago • 8 comments

Hi, thank you so much for sharing this amazing work to everyone! I am currently testing if MultiNeRF is possible to run on Windows machine, and right now with this command:

python -m train --gin_configs=configs\360.gin --gin_bindings="Config.data_dir = '%DATA_DIR%'" --gin_bindings="Config.checkpoint_dir = '%DATA_DIR%\checkpoints'" --logtostderr

I would run into this error:

I0822 23:45:01.236814 21060 xla_bridge.py:160] Remote TPU is not linked into jax; skipping remote TPU.
I0822 23:45:01.236814 21060 xla_bridge.py:333] Unable to initialize backend 'tpu_driver': Could not initialize backend 'tpu_driver'
I0822 23:45:01.369816 21060 xla_bridge.py:333] Unable to initialize backend 'rocm': NOT_FOUND: Could not find registered platform with name: "rocm". Available platform names are: CUDA Interpreter Host
I0822 23:45:01.374814 21060 xla_bridge.py:333] Unable to initialize backend 'tpu': module 'jaxlib.xla_extension' has no attribute 'get_tpu_client'
C:\Users\user\anaconda3\envs\multinerf\lib\site-packages\jax\_src\lib\xla_bridge.py:506: UserWarning: jax.host_id has been renamed to jax.process_index. This alias will eventually be removed; please update your code.
  warnings.warn(
Traceback (most recent call last):
  File "C:\Users\user\anaconda3\envs\multinerf\lib\runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Users\user\anaconda3\envs\multinerf\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "F:\MultiNeRF\multinerf\train.py", line 288, in <module>
    app.run(main)
  File "C:\Users\user\anaconda3\envs\multinerf\lib\site-packages\absl\app.py", line 308, in run
    _run_main(main, args)
  File "C:\Users\user\anaconda3\envs\multinerf\lib\site-packages\absl\app.py", line 254, in _run_main
    sys.exit(main(argv))
  File "F:\MultiNeRF\multinerf\train.py", line 55, in main
    dataset = datasets.load_dataset('train', config.data_dir, config)
  File "F:\MultiNeRF\multinerf\internal\datasets.py", line 52, in load_dataset
    return dataset_dict[config.dataset_loader](split, train_dir, config)
  File "F:\MultiNeRF\multinerf\internal\datasets.py", line 295, in __init__
    self._load_renderings(config)
  File "F:\MultiNeRF\multinerf\internal\datasets.py", line 584, in _load_renderings
    pose_data = NeRFSceneManager(colmap_dir).process()
  File "F:\MultiNeRF\multinerf\internal\datasets.py", line 77, in process
    self.load_cameras()
  File "F:\MultiNeRF\multinerf\internal/pycolmap/pycolmap\scene_manager.py", line 90, in load_cameras
    self._load_cameras_bin(input_file)
  File "F:\MultiNeRF\multinerf\internal/pycolmap/pycolmap\scene_manager.py", line 102, in _load_cameras_bin
    num_cameras = struct.unpack('L', f.read(8))[0]
struct.error: unpack requires a buffer of 4 bytes

Please let me know if you know any solutions for this error! Any help would be appreciated.

Currently my Jax is 0.13.4 and the Jaxlib is 0.13.4 too Running on CUDA11.1 with python 3.9

bycloudai avatar Aug 23 '22 03:08 bycloudai

I have no idea (I don't have a windows computer to compare with) but my instinct is to try adding 'rb' to the line where you open the problematic file, if that isn't already specified.

jonbarron avatar Aug 23 '22 21:08 jonbarron

@jonbarron unfortunately it is already satisfied... image

bycloudai avatar Aug 24 '22 18:08 bycloudai

Oh too bad. Sounds like it might be related to a difference between Windows and Linux filesystems? I don't really know.

jonbarron avatar Aug 24 '22 19:08 jonbarron

Ya it seems to work just by adjusting the f.read(8) to f.read(4), I should've figured that out myself hahaha That worked as a solution but was caught with another one

  File "F:\MultiNeRF\multinerf\internal\datasets.py", line 584, in _load_renderings
    pose_data = NeRFSceneManager(colmap_dir).process()
  File "F:\MultiNeRF\multinerf\internal\datasets.py", line 78, in process
    self.load_images()
  File "F:\MultiNeRF\multinerf\internal/pycolmap/pycolmap\scene_manager.py", line 131, in load_images
    self._load_images_bin(input_file)
  File "F:\MultiNeRF\multinerf\internal/pycolmap/pycolmap\scene_manager.py", line 162, in _load_images_bin
    points_array.fromfile(f, 3 * num_points2D)
OverflowError: Python int too large to convert to C ssize_t

any help would be appreciated!

bycloudai avatar Aug 24 '22 20:08 bycloudai

updates?

Bra1nsen avatar Sep 27 '22 07:09 Bra1nsen

I've also hit this issue. Any update?

briantcantwell avatar Nov 05 '22 20:11 briantcantwell

I have the same issue

  File "C:\Users\intel\Documents\05_3DGS\gsplat\examples\datasets\colmap.py", line 50, in __init__
    manager.load_cameras()
  File "C:\Users\intel\AppData\Roaming\Python\Python311\site-packages\pycolmap\scene_manager.py", line 90, in load_cameras
    self._load_cameras_bin(input_file)
  File "C:\Users\intel\AppData\Roaming\Python\Python311\site-packages\pycolmap\scene_manager.py", line 102, in _load_cameras_bin
    num_cameras = struct.unpack('L', f.read(8))[0]
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
struct.error: unpack requires a buffer of 4 bytes

and when I try to set the f.read(8) to f.read(4) i have a new error

  File "C:\Users\intel\Documents\05_3DGS\gsplat\examples\datasets\colmap.py", line 50, in __init__
    manager.load_cameras()
  File "C:\Users\intel\AppData\Roaming\Python\Python311\site-packages\pycolmap\scene_manager.py", line 90, in load_cameras
    self._load_cameras_bin(input_file)
  File "C:\Users\intel\AppData\Roaming\Python\Python311\site-packages\pycolmap\scene_manager.py", line 105, in _load_cameras_bin
    camera_id, camera_type, w, h = struct.unpack('IiLL', f.read(24))
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
struct.error: unpack requires a buffer of 16 bytes

softyoda avatar Jun 08 '24 09:06 softyoda

datasets

Hi I have the same problem, have you been able to solve it?

chgara avatar Jul 08 '24 18:07 chgara