cvg / pixel-perfect-sfm

Pixel-Perfect Structure-from-Motion with Featuremetric Refinement (ICCV 2021, Best Student Paper Award)
Apache License 2.0
1.29k stars 132 forks source link

Import error #112

Closed Krasner closed 11 months ago

Krasner commented 11 months ago

Here's the error message:

from pixsfm.refine_hloc import PixSfM
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/ubuntu/pixel-perfect-sfm/pixsfm/__init__.py", line 17, in <module>
    from ._pixsfm import *  # noqa F403
ImportError: /home/ubuntu/pixel-perfect-sfm/pixsfm/_pixsfm.cpython-39-x86_64-linux-gnu.so: undefined symbol: _ZN5ceres10Covariance33GetCovarianceMatrixInTangentSpaceERKSt6vectorIPKdSaIS3_EEPd

I built COLMAP from source because I need CUDA support. I was able to build and use hloc and pycolmap with no problems. I built and installed ceres-2.1.0 from source, and was able to build pyceres using pip install -e . Finally, I installed pixel-perfect-sfm with pip install -e . which took a while but succeeded.

Obtaining file:///home/ubuntu/pixel-perfect-sfm
  Preparing metadata (setup.py) ... done
Installing collected packages: pixsfm
  Running setup.py develop for pixsfm

Successfully installed pixsfm-1.0.0

However, when trying to import pixsfm I get this error above.

Krasner commented 11 months ago

Here is the ldd print out because this looks like a linker error

ldd pixsfm/_pixsfm.cpython-39-x86_64-linux-gnu.so
        linux-vdso.so.1 (0x00007ffda97e0000)
        libglog.so.0 => /lib/x86_64-linux-gnu/libglog.so.0 (0x00007f96c0744000)
        libboost_filesystem.so.1.71.0 => /lib/x86_64-linux-gnu/libboost_filesystem.so.1.71.0 (0x00007f96c0726000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f96c0703000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f96c06fd000)
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f96c06f1000)
        libhdf5_serial.so.103 => /lib/x86_64-linux-gnu/libhdf5_serial.so.103 (0x00007f96c0374000)
        libpython3.9.so.1.0 => /opt/conda/envs/hloc_env/lib/libpython3.9.so.1.0 (0x00007f96bffe6000)
        libspqr.so.2 => /lib/x86_64-linux-gnu/libspqr.so.2 (0x00007f96bffb8000)
        libcholmod.so.3 => /lib/x86_64-linux-gnu/libcholmod.so.3 (0x00007f96bfed5000)
        libcxsparse.so.3 => /lib/x86_64-linux-gnu/libcxsparse.so.3 (0x00007f96bfea8000)
        libcublas.so.11 => /usr/local/cuda/lib64/libcublas.so.11 (0x00007f96b6c48000)
        libcusolver.so.11 => /usr/local/cuda/lib64/libcusolver.so.11 (0x00007f96a8a3c000)
        libmkl_intel_lp64.so => /lib/x86_64-linux-gnu/libmkl_intel_lp64.so (0x00007f96a7ed0000)
        libmkl_intel_thread.so => /lib/x86_64-linux-gnu/libmkl_intel_thread.so (0x00007f96a5964000)
        libmkl_core.so => /lib/x86_64-linux-gnu/libmkl_core.so (0x00007f96a1644000)
        libomp.so.5 => /lib/x86_64-linux-gnu/libomp.so.5 (0x00007f96a1553000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f96a1402000)
        libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f96a1220000)
        libgcc_s.so.1 => /opt/conda/envs/hloc_env/lib/libgcc_s.so.1 (0x00007f96a1205000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f96a1013000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f96c1378000)
        libgflags.so.2.2 => /lib/x86_64-linux-gnu/libgflags.so.2.2 (0x00007f96a0fe8000)
        libunwind.so.8 => /lib/x86_64-linux-gnu/libunwind.so.8 (0x00007f96a0fcb000)
        libsz.so.2 => /lib/x86_64-linux-gnu/libsz.so.2 (0x00007f96a0fc4000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f96a0fa8000)
        libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f96a0fa3000)
        libsuitesparseconfig.so.5 => /lib/x86_64-linux-gnu/libsuitesparseconfig.so.5 (0x00007f96a0f9e000)
        liblapack.so.3 => /lib/x86_64-linux-gnu/liblapack.so.3 (0x00007f96a08be000)
        libamd.so.2 => /lib/x86_64-linux-gnu/libamd.so.2 (0x00007f96a08b1000)
        libcolamd.so.2 => /lib/x86_64-linux-gnu/libcolamd.so.2 (0x00007f96a08a8000)
        libccolamd.so.2 => /lib/x86_64-linux-gnu/libccolamd.so.2 (0x00007f96a089b000)
        libcamd.so.2 => /lib/x86_64-linux-gnu/libcamd.so.2 (0x00007f96a088f000)
        libmetis.so.5 => /lib/x86_64-linux-gnu/libmetis.so.5 (0x00007f96a0621000)
        libgomp.so.1 => /lib/x86_64-linux-gnu/libgomp.so.1 (0x00007f96a05df000)
        libcublasLt.so.11 => /usr/local/cuda/lib64/libcublasLt.so.11 (0x00007f968c63c000)
        liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f968c613000)
        libaec.so.0 => /lib/x86_64-linux-gnu/libaec.so.0 (0x00007f968c60a000)
Krasner commented 11 months ago

I figured it out. COLMAP, pyceres, pixsfm all have to be built against the ceres-solver-2.1.0. On my machine colmap was built against ceres 1.14 which did not cause an issue for pycolmap or hloc, but did cause an issue for pixsfm