接上一篇 windows+cuda 编译 pycolmap-CSDN博客,发现在稀疏点云生成的时候ba优化的时候如果需要用cuda的话,要先编译ceres的cuda版本,经试验前面用vcpkg 编译过colmap已经安装过cpu版本的ceres,再单独编译ceres之后python 设置
recon_options.ba_use_gpu = True
recon_options.ba_gpu_index = '0'
还是会打印
"Requested to use GPU for bundle adjustment, but Ceres was compiled without CUDA support. Falling back to CPU-based dense solvers."
后面直接 设置colmap里面的 vcpkg.json 增加cuda。删掉原来安装的ceres,重新利用上一篇中的命令编译colmap就可以了。
通过上面步骤编译出来的pycolmap还是比较慢,因为ceres2.3版本才支持cuDSS,需要下载ceres master分支的代码,源码编译ceres。
1. 源码编译ceres
a) 下载cuDss安装;
b)cmake 编译,这一步我用的是cmake gui,config报错的时候添加对应的路径即可,勾掉example和test的编译。
缺少absl库
vcpkg install abseil
2. 编译colmap
cmake .. -DCMAKE_PREFIX_PATH=path_to_ceres-solver/install/lib/cmake/Ceres -DCMAKE_TOOLCHAIN_FILE=path_to_vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows -DCMAKE_INSTALL_PREFIX=colmap_master/install -DCMAKE_CUDA_ARCHITECTURES="native" -Dcudss_DIR=cuDSS/v0.4/lib/12/cmake/cudss -Dabsl_DIR=path_to_vcpkg\installed\x64-windows\share\absl
3. 编译pycolmap
cmake .. -DCMAKE_PREFIX_PATH=path_to_ceres-solver/install/lib/cmake/Ceres -DCMAKE_TOOLCHAIN_FILE=path_to_vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows -DCMAKE_INSTALL_PREFIX=path_to_colmap_master/pycolmap -DCMAKE_CUDA_ARCHITECTURES="native" -Dcudss_DIR=cuDSS/v0.4/lib/12/cmake/cudss -Dabsl_DIR=path_to_vcpkg\installed\x64-windows\share\absl -Dcolmap_DIR=path_to_colmap_master/install/share/colmap
遇到问题:
error LNK2001: 无法解析的外部符号 "public: __cdecl absl::lts_20250127::log_internal::LogMessageFatal::LogMessageFatal(char const *,int,char const *)"
手动添加absl 的库在vs工程里,参照colmap工程里的库列表。