【环境配置】windows下gipuma(fusibile同理)环境配置(踩坑记录)

两位大佬的文章:【环境搭建】深度图融合点云fusibile环境配置_fusibile cmake报错-CSDN博客

MVSNet depthfusion配置流程_depth fusion-CSDN博客

cmake编译点云融合工具fusibile-CSDN博客

首先需要配置好opencv和cuda的环境,这步我之前就配置好的,添加进路径即可

在使用powershell时,在新建一个build文件夹作为输出文件夹,cd到build路径下,输入cmake ..后,出现识别不到make..命令的错误

出现这个问题,需要安装MinGW ,安装参考链接,安装MinGW后,将其bin路径添加进系统环境变量。

安装成功后仍然出现这个问题:

继续查找问题:

需要将MinGW\bin路径下的mingw32make.exe文件重命名为make.exe

cmake .. 成功后:

输入make继续完成编译,但出现找不到makefile文件的错误,如下图所示:

网上查阅发现是windows下cmake无法输出makefile文件(确实没有),查阅后尝试输入cmake .. -G "MinGW Makefiles命令,网上说可以生成,但我仍然无法生成。

继续查阅后输入cmake --build . 命令,可以编译

但仍然还有问题,出现nvcc的错误。查阅后发现时gipuma发布的时间较早,cmakelist中的不同显卡的CUDA架构问题,在CMakeList中将第10行中的set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};-O3 --use_fast_math --ptxas-options=-v -std=c++11 --compiler-options -Wall -gencode arch=compute_75,code=sm_75)更改为正确的版本。

先在命令行使用nvcc --version命令查看当前版本信息

然后在,在Matching CUDA arch and CUDA gencode for various NVIDIA architectures查看自己对应的cuda架构,如我的4070即为set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};-O3 --use_fast_math --ptxas-options=-v --compiler-options -Wall  -arch=sm_86 -gencode=arch=compute_86,code=sm_86 -gencode=arch=compute_86,code=compute_86)

在修改对应cuda架构后,又出现新的问题,出现乱码,报错代码为D8016如下图所示:

查阅后又发现,在使用 MSVC(Microsoft Visual C++ 编译器)编译代码时,同时使用了 -RTC1 和 -O2 编译选项,而这两个选项是互相冲突的。-RTC1 启用运行时检查(Runtime Error Checks),而 -O2 启用优化选项。由于运行时检查和优化选项不能同时启用,所以会出现这个错误。

修改cmakelist代码为:

set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};--use_fast_math --ptxas-options=-v --compiler-options -Wall -gencode=arch=compute_86,code=sm_86)

if(CMAKE_BUILD_TYPE STREQUAL "Debug")

    list(APPEND CUDA_NVCC_FLAGS -RTC1)

elseif(CMAKE_BUILD_TYPE STREQUAL "Release")

    list(APPEND CUDA_NVCC_FLAGS -O2)

endif()

仍然出现问题,在cmakelist中添加一行set(CMAKE_VERBOSE_MAKEFILE ON),可以在运行 CMake 时,查看更多的日志信息

CMake Warning (dev) in CMakeLists.txt: Policy CMP0104 is not set: CMAKE_CUDA_ARCHITECTURES now detected for NVCC, empty CUDA_ARCHITECTURES not allowed. Run "cmake --help-policy CMP0104" for policy details. Use the cmake_policy command to set the policy and suppress this warning.

CUDA_ARCHITECTURES is empty for target "gipuma". This warning is for project developers. Use -Wno-dev to suppress it.

CMake Warning (dev) in CMakeLists.txt: Policy CMP0104 is not set: CMAKE_CUDA_ARCHITECTURES now detected for NVCC, empty CUDA_ARCHITECTURES not allowed. Run "cmake --help-policy CMP0104" for policy details. Use the cmake_policy command to set the policy and suppress this warning.

CUDA_ARCHITECTURES is empty for target "gipuma". This warning is for project developers. Use -Wno-dev to suppress it.

CMake Warning (dev) in CMakeLists.txt: Policy CMP0104 is not set: CMAKE_CUDA_ARCHITECTURES now detected for NVCC, empty CUDA_ARCHITECTURES not allowed. Run "cmake --help-policy CMP0104" for policy details. Use the cmake_policy command to set the policy and suppress this warning.

CUDA_ARCHITECTURES is empty for target "gipuma". This warning is for project developers. Use -Wno-dev to suppress it.

CMake Warning (dev) in CMakeLists.txt: Policy CMP0104 is not set: CMAKE_CUDA_ARCHITECTURES now detected for NVCC, empty CUDA_ARCHITECTURES not allowed. Run "cmake --help-policy CMP0104" for policy details. Use the cmake_policy command to set the policy and suppress this warning.

CUDA_ARCHITECTURES is empty for target "gipuma". This warning is for project developers. Use -Wno-dev to suppress it.

查看日志信息后发现,CMakeLists.txt中没有设置CMAKE_CUDA_ARCHITECTURES,这是CMake 3.18及以上版本引入的新要求,需要显式地指定CUDA架构。

在文件开头添加set(CMAKE_CUDA_ARCHITECTURES 86),明确指定目标GPU架构为sm_86。

仍然出现问题,还是乱码,D8016报错,问题还是指向关于/RTC1和/O2的冲突

最终做了如下修改:

1.禁用运行时检查 (/RTC1):使用 string(REPLACE "/RTC1" "" ...) 将 /RTC1 从 CMAKE_CXX_FLAGS、CMAKE_CXX_FLAGS_RELEASE、CMAKE_CXX_FLAGS_DEBUG、CMAKE_C_FLAGS、CMAKE_C_FLAGS_RELEASE 和 CMAKE_C_FLAGS_DEBUG 中移除。

2.调整优化选项 (/O2):使用 string(REPLACE "/O2" "" ...) 将 /O2 从 CMAKE_CXX_FLAGS_RELEASE 和 CMAKE_C_FLAGS_RELEASE 中移除,以避免与CUDA编译器的优化选项冲突。

3.添加必要的编译器选项:在 if(MSVC) 分支中,为CUDA编译器添加必要的编译选项,例如 /W4(启用所有警告)。

修改后,终于能够成功编译,可以得到pipuma.exe文件

最终的cmakelist:

cmake_minimum_required(VERSION 3.9)
project(gipuma LANGUAGES CXX CUDA)

# Enable C++11 globally
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

# Support IDEs
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "cmake-default-targets")

# Find CUDA and OpenCV
find_package(CUDA REQUIRED)
find_package(OpenCV REQUIRED)

include_directories(${OpenCV_INCLUDE_DIRS})
include_directories(.)

# Set CUDA compilation flags based on build type
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
    set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};-O0 --use_fast_math --ptxas-options=-v -gencode arch=compute_86,code=sm_86)
else()
    set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};-O3 --use_fast_math --ptxas-options=-v -gencode arch=compute_86,code=sm_86)
endif()

if(CMAKE_COMPILER_IS_GNUCXX)
    add_definitions(-Wall -Wextra -pedantic -Wno-unused-function -Wno-switch)
    set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Ofast -ffast-math -march=native")
endif()

find_package(OpenMP)
if(OPENMP_FOUND)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
endif()

if(MSVC)
    add_definitions(-D_CRT_SECURE_NO_WARNINGS)
    # Disable /RTC1 (runtime checks)
    string(REPLACE "/RTC1" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
    string(REPLACE "/RTC1" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
    string(REPLACE "/RTC1" "" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
    string(REPLACE "/RTC1" "" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
    
    # Adjust optimization flags
    string(REPLACE "/O2" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
    string(REPLACE "/O2" "" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
    
    # Add necessary flags for CUDA compilation
    set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};--compiler-options "/W4")
endif()

# For compilation
cuda_add_executable(
    gipuma
    cameraGeometryUtils.h
    vector_operations.h
    camera.h
    globalstate.h
    algorithmparameters.h
    cameraparameters.h
    linestate.h
    groundTruthUtils.h
    displayUtils.h
    fileIoUtils.h
    main.h
    gipuma.cu
    main.cpp
)

# For linking
target_link_libraries(gipuma
    ${OpenCV_LIBS}
    OpenMP::OpenMP_CXX
)

include(FeatureSummary)
feature_summary(WHAT ALL)

<think>好的,用户问的是关于fusibile,我需要先弄清楚这是什么工具,以及它的主要用途。根据已有的知识,fusibile应该是一个深度图融合工具,常用于多视角立体匹配(MVS)后的处理,比如在colmap或者MVSNet等流程中。不过需要确认一下最新的信息,可能用户需要安装、使用或者了解它的原理。 首先,调用搜索工具查找“fusibile”的相关信息。搜索结果可能会提到它是一个高效的三维重建工具,用于融合多个深度图生成稠密点云。支持CUDA加速,依赖NVIDIA显卡。安装步骤通常需要克隆仓库,编译安装,可能需要OpenCV和CUDA环境。 接下来,用户可能需要知道如何安装fusibile。根据搜索到的内容,安装步骤可能包括从GitHub克隆仓库,安装依赖项,然后使用cmake编译。需要确保系统有CUDA和必要的开发库,比如OpenCV。 然后,使用示例也是常见的需求。用户可能想知道如何运行fusibile,参数设置,输入输出的格式。例如,输入深度图、相机参数,输出点云文件如.ply格式。常见的命令可能包括指定输入文件夹、深度图参数、融合阈值等。 另外,可能遇到的问题,比如编译错误,依赖项缺失,或者运行时的CUDA错误。需要整理一些常见问题解决方法,比如检查CUDA版本,确保路径正确,或者调整参数避免内存不足。 还需要注意,fusibile通常作为MVS流程的一部分,和其他工具如colmap结合使用。因此,用户可能想知道如何将fusibile集成到他们的三维重建流程中,或者如何调整参数优化结果。 最后,生成相关问题时要基于用户可能的后续需求,比如安装问题、参数解释、与其他工具的集成、处理常见错误等。确保问题具体且有针对性,帮助用户深入解决可能遇到的困难。</think>Fusibile是一个开源三维重建工具,专为多视角立体视觉(MVS)中的深度图融合优化设计。其核心功能是通过CUDA加速算法,将多个视角的深度图融合生成高质量的点云数据。以下内容整合自GitHub文档及相关技术博客: **安装方法** 1. 环境要求:NVIDIA显卡(支持CUDA)、CMake≥3.14、OpenCV≥3.0 ```bash git clone https://github.com/YoYo000/fusibile cd fusibile && mkdir build && cd build cmake .. -DCMAKE_BUILD_TYPE=Release make -j8 ``` 2. 编译后生成可执行文件`fusibile`,需将路径加入环境变量或使用绝对路径执行 **核心参数说明** - `-input_folder`:输入深度图文件夹路径(需包含`cams/`,`images/`,`depth_*/`子目录) - `-p_threshold`:概率阈值(默认0.6),过滤低置信度深度估计 - `-depth_min`/`-depth_max`:有效深度范围约束 - `-consistent_check`:启用几何一致性检查(推荐值1) - `--min_consistent_num`:最小一致视角数(默认3) **典型应用场景** 与MVSNet、COLMAP等工具联用时,通过以下流程生成点云: ``` 深度图生成 → 深度图滤波 → fusibile融合 → 泊松重建 ``` 执行示例: ```bash ./fusibile -input_folder ./mvs_output -p_threshold 0.8 --min_consistent_num 4 -output ./fused.ply ``` **性能优化建议** 1. 通过`-max_m`限制显存使用(例如`-max_m 4096`限制为4GB) 2. 使用$ \sigma = 2.5 $的Gaussian滤波预处理深度图: $$ G(x,y) = \frac{1}{2\pi\sigma^2}e^{-\frac{x^2+y^2}{2\sigma^2}} $$ 3. 在低配设备中可降低`--min_consistent_num`参数值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值