部署Dense Pose(源码编译过程适用于服务器)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Wuzebiao2016/article/details/81225015

部署Dense Pose(源码编译过程适用于服务器)

  • 系统:Ubuntu 14.04

  • 显卡:GTX1060 6GB

# 由于编译densepose过程中需要cmake>=3.5,所以我下载了cmake3.12的源码,而编译cmake3.12需要gcc-5和g++-5,所以我就sudo升级了一下gcc和g++的版本。
# 由于我的系统是Ubuntu 14.04才需要这一步,如果你们的Linux系统自带gcc-5和g++-5可不必考虑这一步
# 升级gcc和g++
sudo add-apt-repository ppa:ubuntu-toolchain-r/test  
sudo apt-get update
sudo apt-get install gcc-5 g++-5  
cd /usr/bin  
sudo rm -rf gcc g++
sudo ln -s gcc-5 gcc
sudo ln -s g++-5 g++ 
# 本地安装路径 /home/michael/local,一些内容较多(除了bin,lib,include,share)等程序我会再新建个文件夹放进去,比如cuda
# PS:手动安装NVIDIA driver并cuda_8.0.61(如果是自己本机(Ubuntu Desktop)英伟达驱动没有安装的话可以参照这一步安装,驱动已安装可以略过)
vim /etc/modprobe.d/blacklist.conf
# 在最下方添加 blacklist nouveau 
# 屏蔽 nouveau 并更新内核,修改系统设置需要sudo权限
sudo update-initramfs -u
# 重启一下,将cuda_8.0.61_375.26_linux.run放在主文件夹下以便于寻找
# 按 Ctrl + Alt + F1 进入命令行界面,执行下面语句关闭X Server,需要sudo权限
sudo /etc/init.d/lightdm stop
# 执行安装过程
chmod a+x cuda_8.0.61_375.26_linux.run
./cuda_8.0.61_375.26_linux.run #加载需要时间,得等一下
# 加载出来后长按空格跳过前面的简介

Do you accept the previously read EULA?
accept/decline/quit: accept

Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 375.26?
(y)es/(n)o/(q)uit: yes

Install the CUDA 8.0 Toolkit?
(y)es/(n)o/(q)uit: yes

Enter Toolkit Location
 [ default is /usr/local/cuda-8.0 ]: /home/michael/local/cuda_8.0.61

# 过程中提示安装OpenGL选择no不用安装,然后耐心等待,等待安装完成,执行下面语句恢复X Server界面显示
sudo /etc/init.d/lightdm restart
# 此时输入nvidia-smi即可看到驱动程序安装成功并显示显卡信息,到这里驱动安装就算是OK的了,下下面的配置cuda_8.0.61这一步还是要看的

# PS:当你执行上面那一步之后出现分辨率变成640x480的时候需要看这一步,否则请略过
# 修改一下显示参数并重启即可,需要权限sudo
sudo gedit /etc/X11/xorg.conf
# 可直接将内容替换如下,其实改动就三处,如下
Section "ServerLayout"
    Identifier     "Layout0"
    Screen      0  "Screen0"
    InputDevice    "Keyboard0" "CoreKeyboard"
    InputDevice    "Mouse0" "CorePointer"
EndSection

Section "Files"
EndSection

Section "InputDevice"
    # generated from default
    Identifier     "Mouse0"
    Driver         "mouse"
    Option         "Protocol" "auto"
    Option         "Device" "/dev/psaux"
    Option         "Emulate3Buttons" "no"
    Option         "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"
    # generated from default
    Identifier     "Keyboard0"
    Driver         "kbd"
EndSection

Section "Monitor"
    Identifier     "Monitor0"
    VendorName     "Unknown"
    ModelName      "Unknown"
    HorizSync       31.5 - 61.0 # 第一处修改
    VertRefresh     50.0 - 75.0 # 第二处修改
    Option         "DPMS"
EndSection

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
EndSection

Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    SubSection     "Display"
        Depth       24
    Modes "1920×1080"  # 第三处修改
    EndSubSection
EndSection
# 到这里就OK,保存并重启分辨率即可恢复正常
# 配置cuda_8.0.61
chmod a+x cuda_8.0.61_375.26_linux.run
./cuda_8.0.61_375.26_linux.run
# 安装cuda_8.0.61到指定路径  /home/michael/local/cuda_8.0.61
# 安装完成之后为cuda8.0.61添加本地环境变量
vim ~/.bashrc
# 在末尾添加
export PATH=/home/michael/local/cuda_8.0.61/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/home/michael/local/cuda_8.0.61/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export C_INCLUDE_PATH=/home/michael/local/cuda_8.0.61/include${C_INCLUDE_PATH:+:${C_INCLUDE_PATH}}
export CPLUS_INCLUDE_PATH=/home/michael/local/cuda_8.0.61/include${CPLUS_INCLUDE_PATH:+:${CPLUS_INCLUDE_PATH}}
# 然后刷新环境变量
source ~/.bashrc
# 使用 nvcc -V 可以查看cuda环境变量是否配置成功
# 配置cudnn6.0
tar -zxvf cudnn-8.0-linux-x64-v6.0.tgz #解压出来的文件夹名称就叫cuda
cd cuda/include
cp cudnn.h /home/michael/local/cuda_8.0.61/include
cd ../lib64
cp -a lib* /home/michael/local/cuda_8.0.61/lib64
# 到这里cudnn就已经加入到cuda的包含目录里面了,也可以不放进cuda里面,放外面之后要改环境变量比较麻烦
# 编译opencv3.3
unzip opencv-3.3.0.zip
cd opencv-3.3.0 
mkdir build
cd build
# 下面这一大段可以直接复制粘贴
cmake \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/home/michael/local \
-D WITH_TBB=ON \
-D BUILD_NEW_PYTHON_SUPPORT=ON \
-D WITH_V4L=ON \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D BUILD_EXAMPLES=ON \
-D WITH_QT=ON \
-D WITH_OPENGL=ON ..
# 从上面到这里
make -j4
make install
# 添加环境变量以便于在全局能够调用opencv,另外是安装到local中的,所以这个环境变量配置一次其他编译安装到这个路径下的文件可以不用重新配置
vim ~/.bashrc # 在末尾添加
export PATH=/home/michael/local/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/home/michael/local/lib${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export C_INCLUDE_PATH=/home/michael/local/include${C_INCLUDE_PATH:+:${C_INCLUDE_PATH}}
export CPLUS_INCLUDE_PATH=/home/michael/local/include${CPLUS_INCLUDE_PATH:+:${CPLUS_INCLUDE_PATH}}
export PKG_CONFIG_PATH=/home/michael/local/lib/pkgconfig${PKG_CONFIG_PATH:+:${PKG_CONFIG_PATH}}
# 然后刷新环境变量
source ~/.bashrc
# 使用 opencv_version 可以查看opencv环境变量是否配置成功
# 编译cmake3.12
tar -zxvf cmake-3.12.0.tar.gz
cd cmake-3.12.0
./bootstrap --prefix=/home/michael/local/ 
make -j4 
make install
# 安装Anaconda2,因为Anaconda是python都是可以本地安装的,而系统的python需要权限,所以我们都使用Anaconda即可
sh Anaconda2-5.0.1-Linux-x86_64.sh
# 输入本地路径 /home/michael/local/anaconda2,它会自己创建所以不需要我们创建路径
# 过程中记得选择yes将Anaconda2添加到~/.bashrc环境变量,这样子就我们使用Python的时候优先使用Anaconda而不是系统的Python
# 安装完成之后修改pip源,使用国内的pip源可以极大地提高pip下载速度,可以省去不少时间
# 这里我更换了清华大学的pip源,Anaconda和系统的python都是通用的,做法如下:
cd ~/ && mkdir .pip && cd .pip && vim pip.conf
# 然后输入:
[global]  
index-url=https://pypi.tuna.tsinghua.edu.cn/simple
[install]  
trusted-host=pypi.tuna.tsinghua.edu.cn 
disable-pip-version-check = true  
timeout = 6000
# 然后保存即可,我安装完成之后就直接安装之后需要的一些Densepose和Caffe2的python依赖包,执行单句语句
pip install --ignore-installed -U pip numpy pyyaml matplotlib setuptools Cython mock scipy typing future protobuf opencv-python memory-profiler
# 由于在服务器上没有sudo权限,所以平时一句sudo apt-get install XXX 就能安装的包外面都要下载它们的源码下来,采用源码编译的方式来安装
# 以下是诸多的依赖包,也可以自行从网上下载下来

# zlib
# 因为使用Anaconda的缘故所以Ubuntu需要编译zlib,我从Ubuntu官网下载了zlib的源码zlib_1.2.11.dfsg.orig.tar.xz并手动编译。
# 解压zlib_1.2.11.dfsg.orig.tar.xz,并进入zlib-1.2.11,并执行
./configure --prefix=/home/michael/local
make -j4
make install

# cocoapi
git clone --recursive https://github.com/cocodataset/cocoapi.git
cd cocoapi/PythonAPI && make && make install
# 使用python运行import pycocotools.coco没有报错即cocoapi安装成功

# openblas
tar -zxvf OpenBLAS-0.2.20.tar.gz
cd OpenBLAS-0.2.20/
make -j4 && make PREFIX=/home/michael/local install

# snappy
tar -zxvf snappy-1.1.4.tar.gz
cd snappy-1.1.4/
./configure --prefix=/home/michael/local
make -j4
make install

# gtest
tar -zxvf gtest-1.5.0.tar.gz
cd gtest-1.5.0/
./configure --prefix=/home/michael/local
make -j4
make install

# glog
tar -zxvf glog-0.3.3.tar.gz
cd glog-0.3.3/
./configure --prefix=/home/michael/local
make -j4
make install

# leveldb
unzip leveldb-1.20.zip
cd leveldb-1.20/
make -j4
cd include/
cp -r leveldb/ /home/michael/local/include
cd ..
cd out-shared/
cp -a lib* /home/michael/local/lib/

# hdf5
tar -zxvf hdf5-1.8.17.tar.gz
cd hdf5-1.8.17/
./configure --prefix=/home/michael/local
make -j4
make install

# lmdb
tar -zxvf lmdb-LMDB_0.9.22.tar.gz
cd lmdb-LMDB_0.9.22/libraries/liblmdb
vim Makefile
# 修改为 prefix  = /home/michael/local
make -j4
make install 

# gflag
unzip gflags-master.zip
cd gflags-master/
mkdir build
cd build
cmake -D CMAKE_INSTALL_PREFIX=/home/michael/local ..
make -j4
make install

# protobuf
tar -zxvf protobuf-cpp-3.5.0.tar.gz
cd protobuf-3.5.0/
./configure --prefix=/home/michael/local
make -j4
make install

# openmpi
tar -zxvf openmpi-3.1.1.tar.gz
cd openmpi-3.1.1/
./configure --prefix=/home/michael/local
make -j4
make install

# caffe2
git clone --recursive https://github.com/pytorch/pytorch.git 
cd pytorch 
git submodule update --init 
mkdir build 
cd build
# 新建/home/michael/local/caffe2路径,因为我怕caffe2生成的链接库和我之后的caffe框架混乱了,所以就不把caffe2路径和其他文件放在一起了
cmake -D CMAKE_INSTALL_PREFIX=/home/michael/local/caffe2 ..
make install -j4
# 添加PYTHON环境变量
vim ~/.bashrc
export PYTHONPATH=/home/michael/pytorch/build${PYTHONPATH:+:${PYTHONPATH}}
# 验证caffe2是否能正确调用GPU
michael@hp:~/pytorch/build$ python -c 'from caffe2.python import core' 2>/dev/null && echo "Success" || echo "Failure"
Success #输出Success
# densepose
git clone --recursive https://github.com/facebookresearch/densepose
cd densepose
make -j4
python detectron/tests/test_spatial_narrow_as_op.py
#提示OK
make ops -j4
#报错,找不到caffe2,另外,由于服务器原本安装了cuda9和cudnn7,和densepose要求的cuda8与cudnn6不符,所以在make ops这个环节手动make。
cd build #在第一步make的时候生成了build
#指定所有变量所在
cmake \
-D CUDA_TOOLKIT_ROOT_DIR=/home/michael/local/cuda_8.0.61 \
-D CUDNN_INCLUDE_DIR=/home/michael/local/cuda_8.0.61/include \
-D CUDNN_LIBRARY=/home/michael/local/cuda_8.0.61/lib64/libcudnn.so \
-D CMAKE_PREFIX_PATH=/home/michael/local/caffe2 ..
make -j4
cd ..
python detectron/tests/test_zero_even_op.py
#提示OK,到此densepose的配置就已经结束了,接下来需要拷贝一些模型和数据才能够运行demo

# 模型和数据
DensePose_ResNet101_FPN_s1x-e2e.pkl
DensePoseData/eval_data   #由DensePoseData/get_eval_data.sh下载并解压得到
DensePoseData/UV_data    #由DensePoseData/get_densepose_uv.sh下载并解压得到

# 然后到densepose主目录下方执行下方语句即可成功运行demo
python2 tools/infer_simple.py \
    --cfg configs/DensePose_ResNet101_FPN_s1x-e2e.yaml \
    --output-dir DensePoseData/infer_out/ \
    --image-ext jpg \
    --wts DensePose_ResNet101_FPN_s1x-e2e.pkl \
    DensePoseData/demo_data/demo_im.jpg
# 若提示 X Server的问题是因为服务器不提供显示作用,代码里面的imshow等语句去掉即可
# 执行完即在DensePoseData/infer_out里面生成 demo_im_INDS.png  demo_im_IUV.png  demo_im.jpg.pdf

猜你喜欢

转载自blog.csdn.net/Wuzebiao2016/article/details/81225015
今日推荐