工作记录
工作记录

windows11环境下编译安装openpose

windows11环境下编译安装openpose

基本环境

  • windows11
  • cuda11.7
  • cuDNN8.8
  • python3.10.13 (版本应该影响不大)
  • GPU Nvidia 4060

准备物料

models:

链接:https://pan.baidu.com/s/1WLy4sIL4y8kqz5iXBhnhYw?pwd=d34r
提取码:d34r

3rd_party

链接:https://pan.baidu.com/s/1uVJm0eLEGhG5GMUShDkHFw?pwd=nzh5
提取码:nzh5

安装过程

参考博客:OpenPose笔记–Windows+Cmake的pyhton接口编译(CPU_ONLY)_openpose cmake-CSDN博客

  1. 解压3rdparty压缩包,整个替换原有的目录,里面包含了各种依赖文件image-20240528143452881
  2. 解压models压缩包,整个替换image-20240528143655158
  3. 打开编译软件 cmake-guiimage-20240528143946931
  4. 添加python路径变量image-20240528144135770
  5. 选择openpose项目路径以及打包路径image-20240528144221956
  6. 勾选打包选项
    • 使用python的话必选image-20240528144307641
    • cuda支持image-20240528144405833
    • 模型都勾选,方便扩展image-20240528144453957
  7. configure和generateimage-20240528144646007
  8. 用vs 2022打开工程文件,可以直接点击open project按钮
  9. 选择release模式,分别构建右侧四个项目image-20240528144858839
  10. debug模式也可以,选择OpenPoseDemo,然后debug模式启动,默认会调用摄像头image-20240528145157697

    image-20240528145120981

  11. 4个目录都生成成功后,检查一下目录,是否有响应文件生成
    • build_GPU/bin 目录下都是dll文件image-20240528145420254
    • build_GPU/python/openpose/Release 目录下有包文件image-20240528145615509
    • build_GPU/x64/Release 目录下有cuda的openpose动态库image-20240528145747318

编译到此结束,如果以上文件都有,那么编译就成功了。

测试使用

这里主要针对python使用,那么测试python代码导入,打开examples\tutorial_api_python\01_body_from_image.py,将相对路径修改成如下

image-20240528150141573

image-20240528150506387

不知道为什么,系统变量都改了,还是导入失败,那么用替代方案,把build_GPU/bin下面的所有文件、build_GPU/x64/Release下面的openpose.dll都放到build_GPU/python/openpse/Release中,

image-20240528150640767

再次运行,python 01_body_from_image.py,成功!

image-20240528150802775

使用Tensorflow中遇到的问题

首先是GPU版本的安装问题,这个问题比较复杂,既跟python版本有关系,也跟系统平台有关系,最好的解决方法是用conda重新安装

conda create -n tf_gpu tensorflow-gpu

conda会自动处理各种依赖关系,省去了很多烦恼

二是导入tensorflow报错:module ‘numpy’ has no attribute ‘str’.

解决方案是降级: pip install numpy==1.23.4

还有问题是: module ‘tensorflow.keras.layers’ has no attribute ‘Rescaling’

这是由于tensorflow版本的问题,一个api方法写法变了,新版的如下:

layers.experimental.preprocessing.Rescaling

以后怎么改还不知道,当前是1.26.0版本

还有问题: No module named ‘tensorflow.python.trackable’

这个问题可以下载tensorflow源码,里面有trackable文件夹

还有问题:无法导入keras

这个问题也很恶心,参考https://stackoverflow.com/questions/73270410/modulenotfounderror-no-module-named-tensorflow-python-trackable

经过仔细检查和文档校对,有以下几点是安装过程中新弄明白的:

  1. tensorflow在windows下从2.11开始不再支持gpu构建,这个在configure.py文件中有说明

2. gpu版本与cuda版本有对应关系,否则,即便安装了gpu版本的tensorflow,也无法调用gpu,对应关系也并非一一对应,有一个大致范围,英文版文档比中文版文档更加新,里面有写最新的2.16.1,Build from source on Windows  |  TensorFlow (google.cn)

3. windows下用gpu版本的tensorflow,官网说的最简单的办法是用docker,测试下来,其实也很麻烦,首先是安装wsl,然后安装docker-desk,然后再设置绑定wsl,接着要安装wsl版本的cuda以及cudnn,然后再拉取对应版本的tensorflow,然后运行,所有这一切做完了,以为大功告成了。结果还是不支持。应该还是版本问题,但是很明显,这样操作太麻烦了。

我的方案是用tensorflow-gpu==2.10.0,这是最后一个支持gpu的windows单独编译版本,官网上对应的cuda是11.2,实测11.7也是没有问题,cuDNN官网是8.1,实测8.8也是没有问题。最终不懈努力,终于识别了GPU。

4. keras官网上写道:From TensorFlow 2.0 to 2.15,doing pip install tensorflow will also install the corresponding version of Keras2. Tensorflow 2.16,将会自动安装Keras 3.