DeepLSD安装过程中踩的坑

DeepLSD

过程中踩了无数的坑,总结起来给大家分享,同时也以防哪一天我又需要整这个玩意了还要再把坑踩一遍,目前是已经解决了所有的问题了,能够通过python import deeplsd的包进来

DeepLSD的项目地址
笔者是因为需要使用到LSD相关的算法才需要使用到这个项目的内容,主要是用来作SLAM中的线特征的部分,这个项目应该是微软和苏黎世理工的合作项目,而且对应的文章应该是是CVPR2023的文章,还是比较可靠的,为了调通这个要用到的环境我也是一步一步踩了坑了。

这个项目提供了能够直接使用的推理网络用到的两组权重,在Readme.md文件中可以找到,我将其也附在这里deeplsd_wireframe.tar,deeplsd_md.tar

最根本的四个依赖库的部分

写在这个依赖库的部分的最开始,如果后面的朋友要进行整个环境的配置的话,一定要按照顺序安装对应的库,否则你会痛不欲生的。四个依赖库中一定要先安装GFLAGS,然后安装GLOG,之后ceres和opencv的顺序倒是没什么所谓,安装ceres的时候需要你前置的安装eigen3的库。

GFLAGS和GLOG

GFLAGS要先于GLOG安装,否则会出问题。安装的参考过程见下面文章
Ubuntu下正确使用cmake编译安装glog
这个部分其实安装库本身不是坑的点,很多方式都可以安装,最坑的地方在于不引入动态库的话会跟后面增添很多麻烦。
GLOG恶心的地方在于要可能会出现跟其相关的一些框架上的问题,第一个是google test的框架的问题,这个部分可以将编译检查关掉可以解决;第二个是后面的[ERROR] undefined reference to `google::InitVLOG3__这个错误,如果不将glog生成动态库的话也会出现这个错误,排查问题很麻烦。

ceres

主要是要安装eigen3的库的问题,可能会出现unsupported/Eigen/CXX11/Tensor: No such file or directory这种错误,解决方法可参考Eigen/unsupported找不到的问题
也可以使用符号链接的方法进行解决

sudo ln -s /usr/include/eigen3/Eigen /usr/include/Eigen

OPENCV以及OPENCV contrib

主要可以参考下面这个文章进行安装
OPENCV以及OPENCV contrib安装
上面文章中使用到的cmake的正确形式应该是下面这个样子的,按照这个cmake进行编译即可

cmake -DCMAKE_BUILD_TYPE=RELEASE \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DWITH_TBB=ON -DWITH_V4L=ON \
-DWITH_QT=ON -DWITH_GTK=ON \
-DWITH_OPENGL=ON -DWITH_VTK=ON \
-DOPENCV_GENERATE_PKGCONFIG=YES \
-DINSTALL_C_EXAMPLES=ON \
-DINSTALL_PYTHON_EXAMPLES=ON \
-DOPENCV_GENERATE_PKGCONFIG=ON \
-DOPENCV_ENABLE_NONFREE=ON \
-DOPENCV_EXTRA_MODULES_PATH=/home/mzgong/work/opencv/opencv_contrib-4.5.1/modules \这个部分改成你的对应的contrib的目录位置
-DBUILD_EXAMPLES=ON -DBUILD_TESTS=OFF ..

这个地方不安装opencv的contrib库的话会导致后面出现跟line相关的库你是找不到的,你又要回到这个部分进行处理。
要注意两者的版本进行匹配,我都是通过github进行git clone获取的,这个地方就不提供资源链接了。

line_refinement和pro

(base) deeplsd2@ubuntu:~/DeepLSD/line_refinement$ ls
build                                           line_refinement.egg-info
CMakeLists.txt                                  line_vp_optim.cpp
cost_functions.h                                pybind11

其中的cmakelist的内容见下面

cmake_minimum_required(VERSION 3.6)
project(LineRefinement)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(Ceres REQUIRED)
find_package(OpenCV REQUIRED)
find_package(Eigen3 REQUIRED)
if(${CERES_VERSION} VERSION_LESS "2.2.0")
    # ceres 2.2.0 changed the interface of local parameterization
    add_definitions("-DCERES_PARAMETERIZATION_ENABLED")
endif()

add_subdirectory(pybind11)
include_directories(../third_party/progressive-x/graph-cut-ransac/src/pygcransac/include
					../third_party/progressive-x/src/pyprogressivex/include
					../third_party/progressive-x/src/pyprogressivex/src)

# Add GC-RANSAC
find_library(GraphCutRANSAC_LIB
			 NAMES GraphCutRANSAC
			 PATHS ${CMAKE_CURRENT_SOURCE_DIR}/../third_party/progressive-x/
			 PATH_SUFFIXES build)
if(NOT GraphCutRANSAC_LIB)
  message(FATAL_ERROR "GraphCutRANSAC library not found")
endif()

# Add Progressive-X
find_library(ProgressiveX_LIB
			 NAMES ProgressiveX
			 PATHS ${CMAKE_CURRENT_SOURCE_DIR}/../third_party/progressive-x/
			 PATH_SUFFIXES build)
if(NOT ProgressiveX_LIB)
  message(FATAL_ERROR "ProgressiveX library not found")
endif()

pybind11_add_module(line_refinement line_vp_optim.cpp cost_functions.h vp_det.h)
target_link_libraries(line_refinement PUBLIC ceres stdc++fs
					  ${OpenCV_LIBS} "${GraphCutRANSAC_LIB}"
					  "${ProgressiveX_LIB}")



#/home/deeplsd2/DeepLSD/line_refinement

可以看到其中会涉及到progressive-x/目录下的内容,你会发现编译过程中出现这种报错内容gcransac::estimator::RobustHomographyEstimator<_MinimalSolverEngine, _NonMinimalSolverEngine>::normalizePoints(const cv::Mat&, const size_t*, const size_t&, cv::Mat&, Eigen::Matrix3d&, Eigen::Matrix3d&) const’: /home/deeplsd2/DeepLSD/line_refinement/../third_party/progressive-x/graph-cut-ransac/src/pygcransac/include/estimators/homography_estimator.h:247:56: error: call of overloaded ‘sqrt(double)’ is ambiguous,产生这种报错的原因是line_refinement/这个目录下的cmakelist的链接库指定中包含了ceres,但是progressive-x/中自身的cmakelist中是没有指定ceres的,这就导致了一个情况,你单独编译progressive-x/是没有问题的,但是在line_refinement/中使用cmake就会报函数error: call of overloaded ‘sqrt(double)’ is ambiguous这种问题。应该是可以通过在cmakelist中构造条件语句指定不同目录下指定不同的链接库来解决问题,我尝试这种方法最终因为技术力不够失败了。最终采取了将progressive-x/包含的文件中的pow,sqrt,ceil等函数根据报错信息,一一添加了std::来指定命名空间,最终解决了问题,这应该甚至算不上个好方法,但是解决了我的问题,只能抛砖引玉了。

总结

最终结果,成功
文章写的比较简陋,并且其中可能一些细节性的小修改以及缺少包的安装等等小的事项没有包含进去,因为这个文章是笔者完成最终安装后时候写的,一些中间的具体细节已经不太方便具体记录下来了。最终可以从上图看到还是会有报错,但是整体的编译已经完成了,可以从python中进行import。
最后的最后,这是笔者第一次尝试写文章,写的比较粗糙,大家有什么问题可以留在评论区,我尽可能帮助解决,同时之后可能会继续细化整篇文章的内容,但是不保准,雀食比较忙,祝大家科研、工作顺利。(CSDN的文章引用的部分我还不太会用,基本是我在文中放的这些,我研究一下会应该会详细写下具体参考了哪些文章)

参考文章

DeepLSD的项目地址
Ubuntu下正确使用cmake编译安装glog
Eigen/unsupported找不到的问题
OPENCV以及OPENCV contrib安装

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值