源码实践指南——相机重定位Learning Less is More – 6D Camera Localization via 3D Surface论文的环境配置+代码运行

 

首先,这篇文章还挺有意思的,Learning Less is More – 6D Camera Localization via 3D Surface Regression,过几天会整理一下论文笔记,作者放出了源码和训练好的模型,当然就忍不住赶紧上手一下啦,不过他的深度学习也是c++写的,torch+lua,安装的时候不免出各种意外...尤其是本人是在服务器上运行的,实验室服务器上用户很多,也有一些不该遇见的小毛病,现在一并解决,和大家分享一下。

本博客编辑逻辑:不想大家和我一起淌坑了,所以会按照改正后的顺利的方法把所有的步骤贴出来,并且在每一步的最后,和大家来讲讲我遇到的坑和如何解决的。对此,如果你从没有安装过,只要跟着步骤走就行,不用关心坑;如果你已经执行了某些步骤,然后在某一个环节卡壳了,请根据目录到对应的环节里查看解决方案。当然,可能你的问题不在我的解决方案解决的范畴内,请google请google请google,我的经验就是百度解决不了:)。开头的资源是几个依赖的压缩包,如果后续下载网址失效了,可以下载这个压缩包,现在不用下载。


1)下载源码

2)libpng和PNG++安装

坑1:recipe for target ‘test’ falied

3)lua安装

4)torch安装

5)luajit-rocks安装

坑2:usr/bin/ld: cannot find -lluajit

6)CMakeLists.txt修改&源码编译

坑3 /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4.9: undefined reference to `TIFFReadRGBAStrip@LIBTIFF_4.0'

7)运行问题-找不到libcudnn.so.5

关于如何解决core dumped问题


1)下载源码

源码地址,Readme以及DSAC文章的documentation好好读读,都会更快地上手代码。

2)libpng和PNG++安装

Readme中指出PNG++是必须的,然后libpng作为PNG++的依赖也是必须的。先安装libpng

下载libpng-1.2.50版本(为什么是这个版本,先别问,马上揭晓),下载地址

解压后执行如下指令进行安装

cd libpng-1.2.50
./configure
make check
sudo make install
make check
sudo ldconfig

安装好之后安装PNG++

下载PNG++0.2.7(为什么是这个版本,同上), 下载地址,解压后安装

cd PNG++0.2.7
make
make test
make install

ok,这一路下来都很顺利对吧?因为 PNG++0.2.7 与 libpng-1.2.50适配,有的不按这个版本安装的,会在安装PNG++的 make test这一步报错

坑1:recipe for target ‘test’ falied

查看test.log发现

/convert colorspace: error while loading shared libraries: libpng16.so.16: cannot open shared object file: No such file or directory

或者是

out/pngsuite/basi2c16.png.GRAY.8.out cmp/pngsuite/basi2c16.png.GRAY.8.out differ: byte 53, line 3

究其原因,都是因为libpng的版本与PNG++的版本不适配,所以!如果想运行lessmore程序,或者自己的PNG++安装失败,请下载安装PNG++0.2.7 与 libpng-1.2.50,请认准PNG++0.2.7 与 libpng-1.2.50

 

3)lua安装

lua我使用的版本是5.3,安装很简单,应该不会有什么问题

cd lua-5.3.0
make linux
make install

如果想验证自己是否安装ok,输入如下指令,看看是否会打印hey,然后退出。

lua
print("hey")

4)torch安装

为什么这里不装luajit而是装torch,这是一个坑...我们先来讲讲torch的安装。

Torch是一个基于Lua语言的深度学习框架,官网,官方文档,ok,我们照着官方文档安装,依次输入如下指令:

git clone https://github.com/torch/distro.git ~/torch --recursive
cd ~/torch
bash install-deps
./install.sh

source ~/.bashrc
source ~/.profile

为了验证torch是否装好,输入指令th验证

源码实践指南——相机重定位Learning Less is More – 6D Camera Localization via 3D Surface论文的环境配置+代码运行_第1张图片

出现如下画面即为安装成功。

5)luajit-rocks安装

输入如下指令进行luajit的安装,要注意倒数第二行的/your/prefix,是你自己指定的安装路径,这个路径后面很重要。

git clone https://github.com/torch/luajit-rocks.git
cd luajit-rocks
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/your/prefix
make install

ok,这样luajit也就安装好了,可以查看luajit的版本,输入 luajit -v 如下页面即为安装成功。

源码实践指南——相机重定位Learning Less is More – 6D Camera Localization via 3D Surface论文的环境配置+代码运行_第2张图片

坑2:usr/bin/ld: cannot find -lluajit

由于我是直接下载的luajit安装包,然后安装的luajit,看似luajit安装成功,但是在编译论文源码时一直无法完成,报错usr/bin/ld: cannot find -lluajit,说的是找不到luajit的依赖项。为此也是谷歌了一大堆,给的都是如何解决usr/bin/ld: cannot find -lxxlib的问题,包括新建软链接等,做出种种尝试无果之后,我又换到服务器上去进行编译,在用解决usr/bin/ld: cannot find -l的指令locate libluajit.so时,发现其他同学的libluajit都在torch文件夹下,所以决定安装torch,果然就解决了这个问题,torch是自带luajit的。

所以如果有同学也碰见了usr/bin/ld: cannot find -lluajit的问题,请先安装torch

如果安装了torch还是报错,请修改CMakeLists.txt,怎么修改?见下面的步骤六

6)CMakeLists.txt修改&源码编译

hey朋友,不要以为安装好这些依赖就可以直接上手了,环境都不一样要先修改CMakeLists.txt,其实别的改动也不多,主要是link一下luajit,还记得上一步我们说的luajit安装到你指定的/your/prefix路径吗?把它链接进来,同时,作者在源码添加的头文件目录include_directories(/usr/include/lua5.3)对我们已经无效了,注释掉(如果你的lua的确在这个文件夹下你也可以不注释,总之要对应上)。

最后修改后的CMakeLists.txt为:

hey,/your/prefix路径是代指,不要原模原样写进去呀!此时,CMakeLists.txt搞定!

--------------------------------------

好了终于可以编译源码了,惯例操作

mkdir build 
cd build
cmake ..
make

然后它可能又报错了....是因为libtiff的问题

坑3 /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4.9: undefined reference to `TIFFReadRGBAStrip@LIBTIFF_4.0'

如果你安装了anaconda,那么你引起问题的原因可能和我一样,请查看这篇帖子,下面是我贴出的中文解释

源码实践指南——相机重定位Learning Less is More – 6D Camera Localization via 3D Surface论文的环境配置+代码运行_第3张图片

解决的办法很简单,把

/.bashrc里面的export anaconda3/bin路径注释掉

source ~/.bashrc更新一下,然后重新编译。

 

至此,编译就不会有什么问题了。


7)运行坑-找不到libcudnn.so.5

你以为编译没问题就ok了吗?太年轻,作者的代码用的是libcudnn.5,而现在的cuda-9.0用的一般是7.5/7.0,运行报错,找不到cudnn5,这是最后一个坑。如果你有cuda-8.0,请直接用cuda-8.0,且cuda-8.0/iib64里有libcudnn.so.5,可以直接在运行代码前,手动指定cuda路径

export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

如果没有,下载cudnn5

sudo tar -zxvf ./cudnn-8.0-linux-x64-v5.1.tgz
sudo cp cuda/include/cudnn.h /usr/local/cuda-8.0/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda-8.0/lib64
sudo chmod a+r /usr/local/cuda-8.0/include/cudnn.h /usr/local/cuda-9.0/lib64/libcudnn*

同样的,运行前手动指定cuda路径/在cmakelists里面写好cuda路径。

ok,终于顺利完成了。现在开始训练,测试代码吧!

最后的界面大概是这样

源码实践指南——相机重定位Learning Less is More – 6D Camera Localization via 3D Surface论文的环境配置+代码运行_第4张图片

我选了office的seq-02进行测试(数据集会给出测试和训练的划分),最终得到的结果 1.3deg 和 0.2m和论文的结果差距不大。

over! Wish u good luck!

 

参考链接:

解决libtiff的问题 https://github.com/lagadic/visp/issues/109

torch安装 http://torch.ch/docs/getting-started.html#_

论文源码 https://github.com/vislearn/LessMore


ps:最后补一个小点

关于如何定位core dumped的错误

一开始我下载了作者的data_structure之后我以为里面是有数据的,运行代码报错,core dumped

这里使用的指令如下:

dmesg
addr2line -e ../../test_ransac 000000000044e275 -f

首先dmesg会报出你这个程序运行错误的地址,见下图:

error 4 一般是用户内存错误,ip后的第一个长串数字代表出错的地址。

第二行代码,就是把这个出错的地址的函数找到:-e代表的是你指定的那个程序的位置(我的程序是test_ransac) -f是输出错误的函数(输出函数设置) 然后得到我错在main函数...再去正常输出调试,就能发现问题!我的问题就是我根本没输入,那里面竟然没有数据集>~<,所以大家记得去下载数据集 7scenes/12scenes....

 

关于core dumped的解决,我参考的下面两篇博客有更详细的介绍:

https://www.cnblogs.com/qhbk/p/7666324.html

https://www.cnblogs.com/panfeng412/archive/2011/11/06/segmentation-fault-in-linux.html

                                                                                                                                                                                      2019.11.28

你可能感兴趣的:(camera,localization,深度学习,代码实现与解析)