当前位置: 首页 > article >正文

WIN11+CUDA11.8+VS2019配置BundleFusion

参考:

BundleFusion:VS2019 2017 ,CUDA11.5,win11,Realsense D435i+离线数据包跑通,环境搭建 - 知乎

Win10+VS2017+CUDA10.1环境下配置BundleFusion - 知乎

BundleFusion+WIN11+VS2019 + CUDA11.7环境配置-CSDN博客

我的环境:Win 11专业版,显卡Nvidia RTX 4090D(CUDA驱动572.83,最大支持CUDA12.8)。

step1. 先安装Visual Studio 2019 community

项目首页 - VisualStudio2019社区版离线下载资源:Visual Studio 2019 社区版离线下载资源本仓库提供了一个名为 `vs_Community-2019.zip` 的资源文件,该文件包含了 Visual Studio 2019 社区版的离线下载内容 - GitCode

 下载,点击安装,只选择C++桌面开发模块,选中右侧在msvc-x86/64、win10SDK(和win11sdk)。

step 2. 安装CUDA 11.8

进入官网CUDA Toolkit Archive | NVIDIA Developer

选择版本号11.8,选择WIN 11 x86_64,进行local离线安装模式:下载对应.exe。

双击.exe,选择自定义安装,不选Other components 和 Driver components,下一步。

在安装界面会显示CUDA检测到的VS版本(我的是2019)。

检验:windows powershell中:nvcc -V,输出版本11.8说明安装成功。

检验2:右键点击 此电脑->属性->高级系统设置->环境变量,在系统变量中自动出现CUDA_PATH和CUDA_PATH_V11_8的路径。

step 3. 安装DirectX SDK

Download DirectX SDK from Official Microsoft Download Center

下载DXSDK_Jun10.exe,双击安装(注意可能出现之前安装的Microsoft Visual C++ 2010 x86 Redistributable和Microsoft Visual C++ 2010 x64 Redistributable 引起的问题):accept->not participate,等待下载和安装完成。

查看电脑的系统变量中,自动出现DXSDK_DIR。

step 4. 安装meshlab

MeshLab - Windows官方下载 | 微软应用商店 | Microsoft Store

可以直接由microsoft store安装,用来可视化bundlefusion生成的.ply文件。

由于我不用realsense或kinect实时采集数据,而是运行离线的.sense数据集(地址:BundleFusion),所有没有配置Realsense.SDK(配置详情请参考[1])。

step 5. 下载BundleFusion和相关依赖库源码

 BundleFusion:

Bniessner/BundleFusion: [Siggraph 2017] BundleFusion: Real-time Globally Consistent 3D Reconstruction using Online Surface Re-integrationhttps://github.com/niessner/BundleFusionmLib:github.comhttps://github.com/niessner/mLibmLib external:

百度网盘 请输入提取码https://pan.baidu.com/share/init?surl=CJysQCHl4t7RPfvqliwfew提取码:0x4t。

三个文件解压缩,注意BundleFusion-master的存放路径不包含中文、空格,不要放在桌面。

将mLib-master解压缩后的文件替换BundleFusion-master\external\mLib;

将mlibExternal解压缩后,放在BundleFusion-master同一级文件夹下。

step 6. 更改代码

用VS2019打开BundleFusion-master/BundleFusion-master/FriedLiver/FriedLiver.sln

(点击确定:重定向项目:win 10 sdk)

6.1 修改FriedLiver.vcxproj

ctrl+f,查找7.0(共两处),替换为CUDA版本号 11.8。

6.2 修改BundleFusion-master\external\mLib\include\core-base\common.h

将代码第61行#include <boost/serialization/array_wrapper.hpp>

改为#include <boost/serialization/array.hpp>

6.3 修改mLibExternal\include\Eigen\src\Core\util\Macros.h

将310行改为

#if defined(_MSC_VER) && (_MSC_VER < 1900) && (!defined(__INTEL_COMPILER))

6.4 修改\SiftGPU\ProgramCU.cu

参考Fix GPU hangs in SiftGPU by stotko · Pull Request #56 · niessner/BundleFusion

需要注释掉if{ __syncthreads()},否则带条件的同步会引起死锁问题,导致编译成功后Fried Liver运行界面会卡住不显示。

具体注释两个地方:992行,和 1104行。

6.5 修改GlobalAppState.h

因为不用realsense或kinect实时采集输入,所以将深度相机(即带Sensor的)注释掉(反之亦然),如下图。

6.6 配置CUDA算力

在VS界面右侧解决方案资源管理器中,右键项目名FriedLiver->属性,在CUDA C/C++中Device中修改compute_35,sm_35为合适的计算能力。我的显卡虽然是NVIDIA RTX 4090D,计算能力为8.9,但改为89后,会报类似于__shfl_down未定义的错误;需要下调为合适的值,我最终改成compute_52,sm_52。

6.7 找不到 xxx.dll

编译报错:找不到FreeImage.dll,将BundleFusion-master\mLibExternal\libsWindows\dll64目录下的FreeImage.dll,复制到项目目录./x64/debug下。

报错找不到vcomp110.dll,进入Download Visual C++ Redistributable for Visual Studio 2012 Update 4 from Official Microsoft Download Center

选择download x64.exe,安装即可。

step 7. 编译生成

不报错了,但是提示参数文件zParametersBundlingDefault.txt和zParametersDefault.txt设置有问题。

首先设置zParametersBundlingDefault.txt:将s_maxNumImages = 1200改为稍微小的值比如400。注意根据SensorDataReader.cpp64行,传入.sense的图像数量m_numFrames应不超过s_maxNumImages*s_submapsize。所以如果你选择的sense规模比较大,就会报错"change param file to accommodate"。

然后修改zParametersDefault.txt:将s_sensoridx = 8,即offiline processing读取已经录制好的.sense输入,而不是实时采集的相机。将s_hashNumSDFBlocks调小为100000。将s_binaryDumpSensorFile = "最好是.sense的绝对路径",设置好输入路径,最后生成的.ply也保存在该路径下

编译运行,应该没有问题了:

http://www.lryc.cn/news/2394920.html

相关文章:

  • WPF prism
  • 实时同步缓存,与阶段性同步缓存——补充理解《补充》
  • [Redis] Redis:高性能内存数据库与分布式架构设计
  • Mobaxterm解锁Docker
  • React 第四十九节 Router中useNavigation的具体使用详解及注意事项
  • 【JavaEE】Spring事务
  • Flink 状态管理深度解析:类型与后端的全面探索
  • Android15 userdebug版本不能remount
  • R包安装报错解决案例系列|R包使用及ARM架构解决data.table安装错误问题
  • k8s Headless Service
  • Linux上安装MongoDB
  • Redis最佳实践——安全与稳定性保障之访问控制详解
  • 【华为开发者空间 x DeepSeek】服务器运行Ollama并在本地调用
  • Halcon
  • STM32之IIC(重点)和OLED屏
  • 学习海康VisionMaster之表面缺陷滤波
  • 游戏引擎学习第314天:将精灵拆分成多个层
  • 【学习笔记】深度学习-梯度概念
  • 【数据结构】图的存储(邻接矩阵与邻接表)
  • tomcat yum安装
  • 【Elasticsearch】suggest_mode
  • 数据库只更新特定字段的两种方式(先读后写 vs. 动态组织 SQL)-golang SQLx 实现代码(动态组织 SQL)
  • 从翻译后修饰角度解析人工合成途径与底盘细胞的适配性-文献精读136
  • Cesium快速入门到精通系列教程一
  • [Windows] 剪映 视频编辑处理
  • 决策树 GBDT XGBoost LightGBM
  • stm32 / arduino TPL0401A使用教程
  • 数据结构与算法之单链表面试题(新浪、百度、腾讯)
  • 单板机8088C语言计划
  • 一周学会Pandas2之Python数据处理与分析-数据重塑与透视-pivot() - 透视 (长 -> 宽,有限制)