Ubuntu16.04安装matterport3D simulator的方法
Matterport3D是一个非常好的3D的RGB-D数据集,可以用在很多相关领域。Vision-and-Language Navigation问题使用的R2R数据集就是依托于matterport3D制作的。本文主要记录一下博主如何使用Ubuntu16.04来安装这个模拟器和数据集的。
首先放Matterport3D的github地址:https://github.com/peteanderson80/Matterport3DSimulator
官方提供了两种安装模拟器的方式:使用docker安装,或者不使用docker安装。
文章目录
1. 向开源项目组要求数据集
这里首先要签署一份agreement,然后发到指定的邮箱,过一两个小时就可以收到回复。回复中会附有一个py程序,就可以使用这个py程序来下载数据集了。
详情请见网址:https://niessner.github.io/Matterport/ 中的”Dataset Download“部分。
数据集下载指令:
因为完整的Matterport3D数据集有1.3T大小,我电脑内存没这么大,如果只是想让这个模拟器跑起来,可以只下载**matterport_skybox_images
**,具体指令如下:
python download_mp.py -o [你的下载路径] --type matterport_skybox_images
这里就会默认把90个建筑的数据都下载下来,大小一共是20G左右。
如果要下载深度数据,则指令如下:
python download_mp.py -o /home/w61/VLN/dataset --type undistorted_depth_images undistorted_camera_parameters
注意:这里python要用python2.7版本来运行。
2.用docker安装simulator
用docker来安装确实很方便,而且环境是隔离开的,不用担心会把现有的环境弄乱掉。但是如果之前没接触过docker,建议先去b站看看具体的docker教学哦,这样再来操作就很清楚明了了!
首先是几点要提前达到的要求:
- Nvidia GPU with driver >= 396.37
- 安装docker,安装教程地址:https://docs.docker.com/engine/install/ubuntu/
- 安装nvidia-docker2.0,安装教程地址:https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker
- 注意:CUDA/CuDNN不需要安装,因为这些会在docker image中提供
满足以上条件后,就可以用以下命令行进行安装:
(1) clone git仓库:
# Make sure to clone with --recursive
git clone --recursive https://github.com/peteanderson80/Matterport3DSimulator.git
cd Matterport3DSimulator
(2) 使用Docker进行编译:
docker build -t mattersim:9.2-devel-ubuntu18.04 .
这里如果报错,可以使用以下命令行(保证命令行所在路径中包含dockerfile.txt这个文件):
docker build -t mattersim:9.2-devel-ubuntu18.04 . -f dockerfile.txt
这时候会自动把镜像从远程pull过来,并且顺便把pytorch等安装好,等待一段时间后,显示successfully应该就已经把远程容器拉下来了。可以用docker images
来查看目前docker包括那些容器,出现mattersim就说明成功了。
我们定义一下下载下来的MatterPort3D的数据集所在位置:
sudo gedit ~/.bashrc
打开bashrc,添加以下内容:
export MATTERPORT_DATA_DIR=/home/w61/VLN/dataset/v1/scans
注意:这里的路径要写绝对路径哦!这是我自己的下载路径,各位替换成自己的路径就可以啦。
然后就可以运行这个容器了:
nvidia-docker run -it --mount type=bind,source=$MATTERPORT_DATA_DIR,target=/root/mount/Matterport3DSimulator/data/v1/scans --volume `pwd`:/root/mount/Matterport3DSimulator mattersim:9.2-devel-ubuntu18.04
成功进入容器,保证自己的命令行所在路径是Matterport3DSimulator目录,执行以下命令:
cd /root/mount/Matterport3DSimulator
mkdir build && cd build
cmake -DEGL_RENDERING=ON ..
make
cd ../
按理说make完后我们的matterport3D simulator的容器和环境就已经都安装好啦。我们现在开始试试代码能不能正常跑把~
3. 用自己的环境编译安装simulator
虽然说之前已经用docker安装好了,但是运行python3 tasks/R2R/train.py
的时候居然报了CUDNN版本的错误,真是麻了,我还以为docker会解决这些烦人的版本问题,算了,我直接在自己环境里配置好吧,省的麻烦…
-
先决条件:
-
按照上面的要求,一个个安装好。
-
在MatterPort3DSimulator/build里cmake的时候,报错说找不到OPENGL,
-- Found OpenMP_CXX: -fopenmp -- Found OpenMP: TRUE CMake Error at /opt/cmake/share/cmake-3.12/Modules/FindPackageHandleStandardArgs.cmake:137 (message): Could NOT find OpenGL (missing: OPENGL_opengl_LIBRARY) Call Stack (most recent call first): /opt/cmake/share/cmake-3.12/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE) /opt/cmake/share/cmake-3.12/Modules/FindOpenGL.cmake:395 (FIND_PACKAGE_HANDLE_STANDARD_ARGS) CMakeLists.txt:29 (find_package) -- Configuring incomplete, errors occurred! See also "/home/w61/VLN/Matterport3DSimulator/build/CMakeFiles/CMakeOutput.log".
-
可是我的OPENGL肯定是已经装好了,就是cmake找不到OPENGL的问题。解决方法是先删除原来装好的相关库,
sudo apt-get remove libgl1-mesa-dev libegl1-mesa-dev
,然后重新安装:sudo apt-get install libgl1-mesa-dev libegl1-mesa-dev libglew-dev
-
在
/usr/lib
中寻找opengl.so
,找到它的路径:/usr/lib/x86_64-linux-gnu/libGL.so
-
然后如果cmake的时候希望他通过conda环境进行编译,则记得也要去找一下conda对应环境python所在的路径,例如:
/home/w61/anaconda3/envs/pytorch/bin/python3
-
最后的cmake指令:
cmake -D OPENGL_opengl_LIBRARY=/usr/lib/x86_64-linux-gnu/libGL.so -D PYTHON_EXECUTABLE=/home/w61/anaconda3/envs/pytorch/bin/python3 -D -DEGL_RENDERING=ON ..
-
如果报错:
No package 'jsoncpp' found
,则终端运行:sudo apt-get install libjsoncpp-dev
. -
终于不出意外的话预编译成功了,接着
make
就可以了。 -
如果报错:
Matterport3DSimulator/include/NavGraph.hpp:27:10: fatal error: glm/glm.hpp: No such file or directory
,则终端运行:sudo apt-get install libglm-dev
-
完成make后,记得把编译生成的
MatterPort3DSimulator/build/MatterSim.cpython-36m-x86_64-linux-gnu.so
文件复制到conda对应环境的库里/home/w61/anaconda3/envs/pytorch/lib/python3.6/site-packages
。 -
到此,python3运行代码,可以正常import MatterSim啦,完结撒花~。
4. 运行代码
(1)预处理数据集
在容器内,执行以下命令:
python3 ./scripts/downsize_skybox.py
这里我是报错了:
ModuleNotFoundError: No module named 'MatterSim'
就是说python找不到MatterSim这个库在哪。。哎,几经折腾,终于找到解决方法:
-
先找到MatterSim.cpython-36m-x86_64-linux-gnu.so这个文件的路径:
~/mount/Matterport3DSimulator/VLN/Matterport3DSimulator/build/MatterSim.cpython-36m-x86_64-linux-gnu.so
(这是我个人的路径,各位自行在Materport3DSimulator目录下查找一下) -
然后查一下自己python的site-packages的路径:
python3 # 进入python环境 import site site.getsitepageages
我这里输出了以下内容:
['/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages', '/usr/lib/python3.6/dist-packages']
ok,然后我们把刚才查到的.so文件copy到python的dist-packages里去:
cp ~/mount/Matterport3DSimulator/build/MatterSim.cpython-36m-x86_64-linux-gnu.so /usr/lib/python3/dist-packages/
大功告成,现在可以用python3 去运行downsize_skybox.py啦。
UPDATE!
后来发现,出现这个原因是我在创建容器的时候路径不在Matterport3DSimulator目录下。否则就不需要这一步,容器里的python能够直接找到MatterSim!
-
各种路径报错,说找不到dataset里的文件,这里我把下载下来的数据集中所有的zip文件都解压了,顺便把解压前的zip移到了windows里面(当初给ubuntu留的空间不够大)。
-
ok,都解压完了,downsize_skybox.py这个程序也跑完了,那就可以愉快的进行测试啦:
./build/tests ~Timing
我这里测试完报了一个关于EGL的错。。哎,心累,先不管了。
(2)开启交互界面
关闭刚才的docker,回到主机,终端输入:
xhost +
然后输入:
nvidia-docker run -it -e DISPLAY -e="QT_X11_NO_MITSHM=1" -v /tmp/.X11-unix:/tmp/.X11-unix --mount type=bind,source=$MATTERPORT_DATA_DIR,target=/root/mount/Matterport3DSimulator/data/v1/scans,readonly --volume `pwd`:/root/mount/Matterport3DSimulator mattersim:9.2-devel-ubuntu18.04
注意,这里和github提供的有点不同,要加上-e=“QT_X11_NO_MITSHM=1”,否则之后会报错。
这样就又新建了一个docker容器,接着输入以下命令:
cd /root/mount/Matterport3DSimulator
python3 src/driver/driver.py
OK,到这里为止我的交互界面就出来啦!(depth是黑的是因为我没下载depth数据,内存不够啊)