声明:仅作为个人学习使用
之前一直在树莓派上使用openpose,需要用到一个树莓派4B+一个Intel神经网络计算棒,即便如此也只能勉强运行openpose的精简版,成本约为1000r左右,后来发现了nvidia公司生产的Jeston nano,在Jetson nano上跑openpose流畅许多,且成本仅为500r左右
在网上找相关资源,找到了华仔的一篇名为Jetson nano安装openpose的文章,这篇文章真的是帮了我大忙,在这里向这位博主表示衷心的感谢。经过一天时间,成功运行openpose,以此贴记录。
一、安装Jeston nano 官方系统
https://developer.nvidia.com/embedded/downloads
可以看到官方系统安装了常用的机器学习库,便于我们进行后续操作。
二、下载openpose
OpenPose人体姿态识别项目是美国卡耐基梅隆大学(CMU)基于卷积神经网络和监督学习并以caffe为框架开发的开源库。故需要安装caffe框架。
openpose地址:https://github.com/CMU-Perceptual-Computing-Lab/openpose
或者使用命令:
git clone https://github.com/CMU-Perceptual-Computing-Lab/openpose.git
(注:有的blog提到了需要下载模型,这一步可以跳过,之后使用cmake时会自动下载)
-
cd openpose
-
cd models
-
./getModels.sh
-
cd ..
openpose 的 caffe 下载地址:
https://github.com/CMU-Perceptual-Computing-Lab/caffe/tree/b5ede488952e40861e84e51a9f9fd8fe2395cc8a
openpose 的 pybind11 下载地址:
https://github.com/pybind/pybind11/tree/085a29436a8c472caaaf7157aa644b571079bcaa
下载完成后,解压,将caffe、pybind11的内容复制到openpose下3rdparty文件夹中。
三、准备openpose安装环境(apt-get千万不要换源)
1、检查Jeston nano自带环境
(1)先进行更新
sudo apt-get update
sudo apt-get full-upgrade
(2)检查安装的组件
1) 检查CUDA
Jetson-nano中已经安装了CUDA10.0版本,但是此时你如果运行 nvcc -V是不会成功的,需要你把CUDA的路径写入环境变量中。
sudo vim ~/.bashrc
在最后添加
export CUDA_HOME=/usr/local/cuda-10.0
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:$LD_LIBRARY_PATH
export PATH=/usr/local/cuda-10.0/bin:$PATH
然后保存退出
对了最后别忘了source一下这个文件。
source ~/.bashrc
source后,此时再执行nvcc -V执行结果如下
beckhans@Jetson:~$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2018 NVIDIA Corporation
Built on Sun_Sep_30_21:09:22_CDT_2018
Cuda compilation tools, release 10.0, V10.0.166
beckhans@Jetson:~$
2)检查OpenCV
Jetson-nano中已经安装了OpenCV4.1.1版本,可以使用命令检查OpenCV是否安装就绪
pkg-config opencv4 --modversion
如果OpenCv安装就绪,会显示版本号,我的版本是4.1.1
3)检查cuDNN
Jetson-nano中已经安装好了cuDNN,并有例子可供运行,我们运行一下例子,也正好验证上面的CUDA
cd /usr/src/cudnn_samples_v8/mnistCUDNN #进入例子目录
sudo make #编译一下例子
sudo chmod a+x mnistCUDNN # 为可执行文件添加执行权限
./mnistCUDNN # 执行
如果成功,如下所示
beckhans@Jetson:/usr/src/cudnn_samples_v7/mnistCUDNN$ ./mnistCUDNN
cudnnGetVersion() : 7301 , CUDNN_VERSION from cudnn.h : 7301 (7.3.1)
Host compiler version : GCC 7.3.0
There are 1 CUDA capable devices on your machine :
device 0 : sms 1 Capabilities 5.3, SmClock 921.6 Mhz, MemSize (Mb) 3964, MemClock 12.8 Mhz, Ecc=0, boardGroupID=0
Using device 0
Testing single precision
Loading image data/one_28x28.pgm
Performing forward propagation ...
Testing cudnnGetConvolutionForwardAlgorithm ...
Fastest algorithm is Algo 1
Testing cudnnFindConvolutionForwardAlgorithm ...
^^^^ CUDNN_STATUS_SUCCESS for Algo 1: 0.325104 time requiring 3464 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 0: 0.387500 time requiring 0 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 2: 0.540729 time requiring 57600 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 4: 4.965156 time requiring 207360 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 7: 5.201146 time requiring 2057744 memory
Resulting weights from Softmax:
0.0000000 0.9999399 0.0000000 0.0000000 0.0000561 0.0000000 0.0000012 0.0000017 0.0000010 0.0000000
Loading image data/three_28x28.pgm
Performing forward propagation ...
Resulting weights from Softmax:
0.0000000 0.0000000 0.0000000 0.9999288 0.0000000 0.0000711 0.0000000 0.0000000 0.0000000 0.0000000
Loading image data/five_28x28.pgm
Performing forward propagation ...
Resulting weights from Softmax:
0.0000000 0.0000008 0.0000000 0.0000002 0.0000000 0.9999820 0.0000154 0.0000000 0.0000012 0.0000006
Result of classification: 1 3 5
Test passed!
Testing half precision (math in single precision)
Loading image data/one_28x28.pgm
Performing forward propagation ...
Testing cudnnGetConvolutionForwardAlgorithm ...
Fastest algorithm is Algo 1
Testing cudnnFindConvolutionForwardAlgorithm ...
^^^^ CUDNN_STATUS_SUCCESS for Algo 0: 0.113750 time requiring 0 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 1: 0.119792 time requiring 3464 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 2: 0.236198 time requiring 28800 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 4: 1.031719 time requiring 207360 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 5: 5.049948 time requiring 203008 memory
Resulting weights from Softmax:
0.0000001 1.0000000 0.0000001 0.0000000 0.0000563 0.0000001 0.0000012 0.0000017 0.0000010 0.0000001
Loading image data/three_28x28.pgm
Performing forward propagation ...
Resulting weights from Softmax:
0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000714 0.0000000 0.0000000 0.0000000 0.0000000
Loading image data/five_28x28.pgm
Performing forward propagation ...
Resulting weights from Softmax:
0.0000000 0.0000008 0.0000000 0.0000002 0.0000000 1.0000000 0.0000154 0.0000000 0.0000012 0.0000006
Result of classification: 1 3 5
Test passed!
(3)安装protobuf 2.6(无论使用openpose自带caffe还是自己安装caffe都需要)
因为caffe不支持3.0以上的protobuf,所以这里用2.6
protoc --version 可查看当前protoc的版本
whereis protoc 可以查看哪些路径下安装了protoc
下载protobuf 2.6:
https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gz
安装过程:
tar -zxvf protobuf-2.6.1.tar.gz
sudo apt-get install build-essential #不装会报错
cd protobuf-2.6.1
./configure #配置安装文件
make #编译
make check #检测编译安装环境
sudo make install #安装
安装完成,如果可以查看版本号,则证明安装成功,如果出现错误:
protoc: error while loading shared libraries: libprotocbuf.so.9: cannot open shared
在 /etc/ld.so.conf.d/目录下创建 bprotobuf.conf文件,文件内容如下:
/usr/local/lib
这里要注意:你可能没有在/etc/ld.so.conf.d/目录下创建 bprotobuf.conf文件的权限,所以要给当前用户加读写ld.so.conf.d目录下文件的权。#当前路径为/etc
sudo chmod 777 -R ld.so.conf.d
创建好bprotobuf.conf文件后,在 /etc/ld.so.conf.d/目录下输入命令:
sudo ldconfig
再输入protoc --version,就可以查看protobuf版本号了。
(4)安装其他依赖
sudo apt-get install libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
sudo apt-get install git build-essential
四、下载cmake编译软件(此处选择gui版本)
因为jetson nano的系统是Ubuntu 18,所以需要cmake>=3.12(一般默认为3.10)
卸载低版本cmake(如果已安装)
sudo apt purge cmake-qt-gui
执行
sudo apt-get install qtbase5-dev
下载最新版本cmake:
解压文件,使用命令行进入文件夹,依次运行
./configure --qt-gui
./bootstrap && make -j8 && sudo make install -j2
大约需要1h时间,之后若找不到cmake图标执行命令:
cmake-gui
即可打开gui版本cmake。
五、编译openpose
到这一步,所有前序工作全部完成,终于可以开始编译openpose了
点击“Configure”按钮,如果成功,会提示“Configuring done”。这时,会报错并且出现一些选项
使用openpose自带caffe需要按照下图勾选:
千万注意不要勾选错了,否则会很麻烦!
注意:最后一项不要选!!!
说明:
1.BUILD_CAFFE:使用自带caffe进行编译
2.BUILD_EXAMPLE:可以使用openpose示例程序
3.BUILD_PYTHON:如果需要使用Python的API,需要勾选此项
4.USE_CUDNN:使用CUDNN加速,不勾选后期调整网络也能跑
注:WITH_OPENCV_WITH_OPENGL:不用勾选,jetson nano没有OPENGL,如果勾选编译时会报错,或者也可以先安装所需文件,不过本文没有尝试。
点击Generate,之后等待编译完成。
进入openpose——build,然后make,然后等待,直到100%。
sudo make -j2
六、运行openpose
笔者使用了Intel D435深度摄像头
使用如下命令即可运行openpose:
(要将openpose文件夹下models文件夹复制到openpose.bin所在目录下,否则会报错找不到模型models)
./build/examples/openpose/openpose.bin --face --hand
./build/examples/openpose/openpose.bin -camera_resolution 320x160 -net_resolution 64x32