JetPack 3.2.1的JetSon TX2上搭建OpenPose的流程记录

本周尝试在JetSon TX2上运行OpenPose,测试该算法对人体姿态识别的实时性能。OpenPose的编译比较简单,不过按照惯例还是记录一下所有流程,便于后续复现。
Github源码链接:https://github.com/CMU-Perceptual-Computing-Lab/openpose

OpenPose人体姿态识别项目是美国卡耐基梅隆大学(CMU)基于卷积神经网络和监督学习并以caffe为框架开发的开源库。可以实现单人和多人的人体动作、面部表情、手指运动等姿态估计,具有极好的鲁棒性。

基础环境:
我这里已经安装好的环境有刷机版本JetPack 3.2.1,OpenCV 3.3.1, CUDA8.0,CuDNN5.1。

注:官方手册上提示OpenPose仅支持JetPack 3.1与JetPack 3.3,但由于我的TX2上已经安装了很多的其他项目,不太想重新刷机,就直接在JetPack 3.2.1上按照install_caffe_and_openpose_JetsonTX2_JetPack3.3.sh脚本尝试编译了OpenPose,发现依旧可以正常运行。

需要注意的是JetPack3.3脚本要求的依赖项版本为CUDA9.0,CuDNN7.0,OpenCV3.0及以上,因此我需要重装CUDA与CuDNN版本,并且发现不卸载CUDA8.0直接装CUDA9.0并不会产生版本冲突。

1、安装CUDA9.0与CuDNN7.0

如果在刷机时选择全部配置环境安装,JetPack 3.2.1会配套的安装CUDA9.0与CuDNN7.0。如果当时跳过了这一项,则需要自己手动安装CUDA与CuDNN版本。
在PC端的刷机包路径TX2/jetpack_download中找到CUDA与CuDNN的安装包,拷贝到TX2板子上。

注:如果没有保留刷机包,可以在官网上下载后重新下载刷机文件。
网址链接:https://developer.nvidia.com/embedded/jetpack-3_2_1
安装步骤如下:
1、创建文件夹Tx2用于存放安装过程中生成的文件们,将下载的JetPack-L4T-3.2.1-linux-x64_b23.run文件拷贝到Tx2;
2、为.run 文件增加执行权限:chmod +x JetPack-L4T-3.2.1-linux-x64_b23.run
3、执行.run 文件:./JetPack-L4T-3.2.1-linux-x64_b23.run
4、点击next,选中下面yes选项。点击next,默认Tx2,继续点击next,等待;
5、弹出 JetPack 3.2.1Component Manager 对话框,不需要给主机端安装相应的环境,Host-Ubuntu这部分在“Action”位置单击,选择“no action”;
6、Target-Jetson Tx2/Tx2i下的Linux for Tegra Host Side Ima…是重新安装系统,如果不想重新安装ubuntu系统,就选择”no action”;
7、选中下面的接受所有的协议,点击next;
8、弹出Terms and Conditions对话框,选中Accept All,点击accept;
9、弹出输入用户登录密码窗口,输入登录密码,此时,在JetPack 3.2.1 Components Manager窗口,可看到安装进度。

CUDA与CuDNN的安装包cuda-repo-l4t-9-0-local_9.0.252-1_arm64.deblibcudnn7_7.0.5.15-1+cuda9.0_arm64.deblibcudnn7-dev_7.0.5.15-1+cuda9.0_arm64.deb拷贝到TX2板子上后,执行命令行如下安装CUDA9.0:

sudo dpkg -i cuda-repo-l4t-9-0-local_9.0.252-1_arm64.deb
sudo apt-get update
sudo apt-get install cuda-toolkit-9-0
sudo gedit /etc/bash.bashrc

#在文件的末尾加入:
export PATH=/usr/local/cuda-9.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:$LD_LIBRARY_PATH

运行nvcc -V如果显示有CUDA9.0的版本信息,则证明CUDA9.0已成功安装。
接下来安装CuDNN7.0,解压CuDNN的两个deb文件,将cudnn_v7.h重命名为cudnn.h,复制头文件和动态链接库即可,命令行如下:

sudo cp cudnn.h /usr/local/cuda-9.0/include/
sudo cp libcudnn.so /usr/local/cuda-9.0/lib64/
sudo cp libcudnn.so.7 /usr/local/cuda-9.0/lib64/
sudo cp libcudnn.so.7.0.5 /usr/local/cuda-9.0/lib64/
sudo cp libcudnn_static.a /usr/local/cuda-9.0/lib64/

创建软连接,并删除之前的CuDNN5.1版本,命令行如下:

sudo chmod +r libcudnn.so.7.0.5
sudo rm -rf libcudnn.so libcudnn.so.5
sudo ln -s libcudnn.so.7.0.5 libcudnn.so.7
sudo ln -s libcudnn.so.7 libcudnn.so
sudo ldconfig

cd /usr/bin
sudo rm -i libcudnn.so
sudo rm -i libcudnn.so.5
sudo ln -s libcudnn.so.7 libcudnn.so
sudo ln -s libcudnn.so.7.0.5 libcudnn.so.7

运行cat /usr/local/cuda-9.0/include/cudnn.h | grep CUDNN_MAJOR -A 2如果显示有CuDNN7.0.5的版本信息,则证明CuDNN7.0.5已成功安装。

2、编译与运行OpenPose

官方说明手册:
https://github.com/CMU-Perceptual-Computing-Lab/openpose/blob/master/doc/installation.md
在JetPack 3.3 刷机版本的TX2上安装的官方说明文档:
https://github.com/CMU-Perceptual-Computing-Lab/openpose/blob/master/doc/installation_jetson_tx2_jetpack3.3.md

执行如下命令行进行OpenPose的编译:

git clone https://github.com/CMU-Perceptual-Computing-Lab/openpose
bash ./scripts/ubuntu/install_caffe_and_openpose_JetsonTX2_JetPack3.3.sh

#export caffe 路径:
export LC_ALL=en_US.UTF-8
export LD_LIBRARY_PATH=$/home/nvidia/openpose/3rdparty/caffe/build/lib/:$LD_LIBRARY_PATH

如果没有报错,则证明OpenPose已成功安装。
接下来可以运行视频Demo,命令行如下,效果如下图所示:

./build/examples/openpose/openpose.bin --video ./examples/media/video.avi --model_folder ./models/

JetPack 3.2.1的JetSon TX2上搭建OpenPose的流程记录_第1张图片
接下来使用摄像头RealSense D435运行OpenPose,需要先安装依赖项Libgstreamer,命令行如下:

#安装依赖项libgstreamer:
sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-base libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-bad

#执行摄像头
./build/examples/openpose/openpose.bin -camera_resolution 640x480 -net_resolution 256x192

运行过程中出现如下错误:

Pixel format of incoming image is unsupported by OpenCV
OpenCV Error: Unspecified error (GStreamer: unable to start pipeline)

错误原因是因为找不到v4l的so库,需要添加v4l1compat.so的路径,命令行如下:

export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libv4l/v4l1compat.so

效果如下图所示:
JetPack 3.2.1的JetSon TX2上搭建OpenPose的流程记录_第2张图片
实测发现TX2上运行OpenPose的实时检测速率只能达到4fps左右,通过调小网络分辨率,最后勉强达到15fps的帧率。识别精度很高,但实时性还有待加强,有知道如何提高 OpenPose识别速率的亲们欢迎一起讨论学习 ~

每天都想吃宵夜的乔木同学
记于2019年11月27日

你可能感兴趣的:(环境搭建,JetSon,TX2,OpenPose)