ubuntu18.04+CUDA10+caffe+openpose环境配置与应用

2023-11-07 19:20

本文主要是介绍ubuntu18.04+CUDA10+caffe+openpose环境配置与应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        最近老板谈到了一个项目,需要通过人的行为姿势来初步判断人在干嘛,然后我就找到了openpose,找到源码之后,我又粗略的看了下别人写的相关博客还有其他资料,觉得也没什么大不了,虽然内部算法原理我不了解,但是先把别人的实验结果复现一遍,我觉得这对我来说肯定是小case,哈哈哈~~~,然后,你懂的,我就走上了不归路,无数次掉进坑里,真的想放弃,但最后还是咬牙坚持住,成功复现,这里我就讲一下我遇到的问题和解决方式~~~

      在进入正题之前,我要提醒一句:你的ubuntu系统在分区时,主分区/分了多大,别跟我说20G,如果是的话,哈哈哈,恭喜,准备重装系统吧,别笑我废话,因为这个真的太尼玛坑了,我当时就是看了别人的博客,说主分区/20G就够了,直到我做这个实验,我才知道UBUNTU的主分区,就相当于windows系统的C盘,怎么样,现在明白了吧,额,所以我就重装了系统,将这个区分了100个G左右吧。

言归正传

实验用到的软件及版本:NVIDIA驱动435,CUDA10.0,cuDNN7.6.2,opencv3.4.7

STEP1:安装NVIDIA驱动

其实在网上有很多相关的安装教程,但我建议我的懒人安装法,打开电脑的软件与更新,选择上面的附加驱动,等待一会,会出现好几个选项,然后我就选择了NVIDIA435,点击应用更改,就OK了,安装结束之后,打开终端,输入nvidia-smi,这样就能看到一个矩形列表,有显卡信息和推荐安装的CUDA版本,如果没有显示,可能是需要重启电脑。

STEP2:安装CUDA10.0

首先下载cuda10.0文件

安装依赖项

sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev

再进入下载的cuda10.0同级目录内,打开终端,输入:

sudo sh cuda_10.0.130_410.48_linux.run

安装时,会出现一个白色的更多,这时可以一直按空格健,直到更多消失,也可以直接按个q键,直接跳过,然后就是下面这些了:

Do you accept the previously read EULA?
accept/decline/quit: acceptInstall NVIDIA Accelerated Graphics Driver for Linux-x86_64 410.48?
(y)es/(n)o/(q)uit: nInstall the CUDA 10.0 Toolkit?
(y)es/(n)o/(q)uit: yEnter Toolkit Location
[ default is /usr/local/cuda-10.0 ]:Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit: yInstall the CUDA 10.0 Samples?
(y)es/(n)o/(q)uit: y

然后配置环境变量

echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

最后在随意打开终端,输入nvcc -V,若正常的话,就会显示你安装的CUDA版本。

STEP3:安装cuDNN7.6.2

首先下载与CUDA10.0对应版本的cuDNN

网上有人说下载其他的,但我就下载了红圈那个,下载好以后,解压,打开这个解压的文件,打开终端,执行以下命令:

sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*

也就是把cudnn解压后,把cudnn.h和libcudnn*放到cuda安装目录里去

STEP4:安装opencv3.4.7

呵,在你找到我这篇文章之前,可能你已经被opencv的安装过程FUXK了N+1次了,哎,心累~~~

推荐看下这篇文章,真的炒鸡棒,比那些垃圾文章强太多~~~

额,在安装opencv之前,还是先把anaconda安装下吧,不然可能会出问题。。。

下载opencv3.4.7,选择source版本,下载好后,解压,在解压后的opencv文件夹,打开终端,然后执行下列命令:

mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/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_GTK=ON -D WITH_OPENGL=ON ..
sudo make -j8    #(我看到的资料都说8是电脑上cpu的核数,但我对两台不同的电脑配置,证明这是cpu的线程数,我的电脑是4核8线程,你的是多少,自己google)
sudo make install
#查看物理cpu个数: grep 'physical id' /proc/cpuinfo | sort -u
#查看核心数量: grep 'core id' /proc/cpuinfo | sort -u | wc -l
#查看线程数: grep 'processor' /proc/cpuinfo | sort -u | wc -l

这样opencv的编译过程就结束了,再将opencv的库添加到路径:

sudo gedit /etc/ld.so.conf.d/opencv.conf 

输入这段指令之后,会直接打开一个文本,而且是空的,什么都没有,然后我们就在这个文本里面加入以下内容:

/usr/local/lib

再执行下面命令使刚才的更改生效:

sudo ldconfig 

然后配置bash

sudo gedit /etc/bash.bashrc 

此时又会打开一个新的文本,我们就在文本的最下面添加下面内容:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig  
export PKG_CONFIG_PATH

接下来,我们来测试下,看行不行,也就是能不能打开摄像头

在opencv目录下,打开终端,然后

cd samples/cpp/example_cmake

依次执行下面命令

cmake .
make
./opencv_example

这样的话,正常情况下,电脑会打开连接在电脑上的摄像头,能看见画面,而且左上角会有一个hello opencv.

做到这里,也许你会长长的嘘了一口气,终于解决了opencv的安装啦,哈哈哈,Too young,too simlpe,NAIVE!!!

不信你就进入终端,输入python,再输入import cv2,你会惊喜的发现“no module named cv2”,握草,真的崩溃~~~

其实也就小case啦,解决的办法就是在终端执行:

pip install opencv-python

这样的话,才是真的搞定了。

STEP5:caffe搭建

全过程中,这个地方是最头疼的,因为看别人的文章总是千奇百怪,不是讲的不对,就是讲的粗略,反正就是头疼~~~

先安装依赖库

sudo apt-get --assume-yes install build-essential
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
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

下载openpose,我是直接解压到主目录下的sofewares里面,将解压的文件名openpose-master改为openpose。

下载caffe,解压到softwares/openpose/3rdparty里面,对了,放进去之前要将3rdparty里面的原有的那个caffe空文件删除,再将解压的文件名称从caffe-f019d0dfe86f49d1140961f8c7dec22130c83154改为caffe。

修改Makefile.config
1、进入caffe ,將 Makefile.config.example 文件复制一份并改名为 Makefile.config ,也可以在 caffe 目录下直接调用以下命令完成复制操作 :

sudo cp Makefile.config.example Makefile.config

复制一份的原因是编译 caffe 時需要的是 Makefile.config 文件,而Makefile.config.example 只是caffe 给出的配置文件例子,不能用來编译caffe。

2、修改 Makefile.config 文件,在 caffe 目录下打开该文件:

sudo gedit Makefile.config

进行以下几处的替换:
 

...
將
#USE_CUDNN := 1
修改成: 
USE_CUDNN := 1
......
#如果此處是OpenCV2,則不用修改
將
#OPENCV_VERSION := 3 
修改爲: 
OPENCV_VERSION := 3
......
將
#WITH_PYTHON_LAYER := 1 
修改爲 
WITH_PYTHON_LAYER := 1
......
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib 
修改爲: 
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial       
......
將
CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \-gencode arch=compute_20,code=sm_21 \-gencode arch=compute_30,code=sm_30 \-gencode arch=compute_35,code=sm_35 \-gencode arch=compute_50,code=sm_50 \-gencode arch=compute_52,code=sm_52 \-gencode arch=compute_60,code=sm_60 \-gencode arch=compute_61,code=sm_61 \-gencode arch=compute_61,code=compute_61
修改爲
CUDA_ARCH := -gencode arch=compute_30,code=sm_30 \-gencode arch=compute_35,code=sm_35 \-gencode arch=compute_50,code=sm_50 \-gencode arch=compute_52,code=sm_52 \-gencode arch=compute_60,code=sm_60 \-gencode arch=compute_61,code=sm_61 \-gencode arch=compute_61,code=compute_61
...

对了,既然是替换,就把之前的删了,换成新的就行了。

3、接下来修改caffe目录下的Makefile文件,直接找到文件,打开就行。

...
將:
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
替換爲:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
......
將:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
改爲:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
...

网上别人还说修改 /usr/local/cuda/include/host_config.h 文件,但是我直接在终端输入命令:

sudo gedit  /usr/local/cuda/include/host_config.h

打开了这个文本,但是并没有看见让我修改的那个error,所以我也就没管了,继续前进~~~

4、编译caffe

还是打开softwares/openpose/3rdparty/caffe,打开终端,执行:

#8为cpu线程数
sudo make all -j8

STEP6:openpose搭建

安装cmake gui,我就是直接在ubuntu软件里面下载的这个软件,当然也可以通过指令下载:

sudo apt-get install cmake-gui

对了,在softwares/openpose/models/里面有face,hand,pose三个文件夹,里面需要下载一共5个训练好的模型,但是如果直接通过指令下载,速度慢的感人,所以推荐这个连结,这样下载速度快点,下载好后,按要求将文件放到对应的文件夹里面就行。

当然也可以指令下载:

cd openpose
cd models
./getModels.sh
cd ..

没骗你,真慢,还是算了吧,哈哈哈

这个搞定之后,再在openpose文件夹里面建一个build文件夹,打开cmake软件,填写source code和build the binaries

此时界面是空白的,然后点击configure,选择Unix Makefile和use default native compling,点击finish按鈕 ,编译,若过程中没有报错,并且出现了configuring done,中间会出现一些红色的可配置项,

注意下图红圈之内的改变,一定要选择对应的文件!!!!!!!!!!!!!!!!!!!!!!

选择完成后,点击Generate按钮。

接着,打开softwares/openpose/build,可以直接进入这个文件夹下面,打开终端,或者在openpose那一层目录,直接cd build

在终端输入

sudo make -j8

编译结束后,差不多真的就配置成功了~~~

STEP7:检测

打开softwares/openpose文件夹,打开终端,执行以下命令:

视频:

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

其实在执行之前可以进/build/examples/openpose/这个文件夹里看下,到底有没有openpose.bin这个文件,

摄像头:

./build/examples/openpose/openpose.bin --face --hand

图片:

./build/examples/openpose/openpose.bin --image_dir examples/media/ --face --hand

注意:我在实验时发现算法可以检测.avi的视频文件,但是不能打开.mp4的文件,后期再解决吧,先就到这里啦,谢谢欣赏,再见~~~

 

 

 

 

 

这篇关于ubuntu18.04+CUDA10+caffe+openpose环境配置与应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/365739

相关文章

mybatis映射器配置小结

《mybatis映射器配置小结》本文详解MyBatis映射器配置,重点讲解字段映射的三种解决方案(别名、自动驼峰映射、resultMap),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录select中字段的映射问题使用SQL语句中的别名功能使用mapUnderscoreToCame

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

MySQL8 密码强度评估与配置详解

《MySQL8密码强度评估与配置详解》MySQL8默认启用密码强度插件,实施MEDIUM策略(长度8、含数字/字母/特殊字符),支持动态调整与配置文件设置,推荐使用STRONG策略并定期更新密码以提... 目录一、mysql 8 密码强度评估机制1.核心插件:validate_password2.密码策略级

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

QT Creator配置Kit的实现示例

《QTCreator配置Kit的实现示例》本文主要介绍了使用Qt5.12.12与VS2022时,因MSVC编译器版本不匹配及WindowsSDK缺失导致配置错误的问题解决,感兴趣的可以了解一下... 目录0、背景:qt5.12.12+vs2022一、症状:二、原因:(可以跳过,直奔后面的解决方法)三、解决方