ST-GCN源码运行完整版(含OpenPose编译安装)
——-本文仅为学习笔记,不做任何商业用途——-
下述相关工具包下载链接
ST-GCN所需工具
,提取码ze36
一、准备工作
1.Anaconda3安装
下载地址:
Anaconda3下载地址(含历史版本)
根据相关提示进行默认安装,并添加环境变量,具体详细操作可见博客如下:
Anaconda详细安装说明
2.Visual Studio 2017安装
下载地址:
Visual Studio 2017下载地址
按照下图所示选项进行勾选安装
3.CUDA 10.0 安装
下载地址:
CUDA各版本下载地址
安装时选择自定义高级选项,安装图如下:
安装后可通过cmd命令行输入下列指令检查是否安装成功:
nvcc --version
如若安装成功,结果如下:
4.cudnn 下载安装
下载地址:
cudnn各版本下载地址
详细操作参考如下博客:
cudnn详细安装步骤
二、st-gcn环境搭建
1.创建st-gcn新环境
conda create -n stgcn python=3.5.6
activate stgcn
2.st-gcn相关库依赖安装
先下载pytorch1.2.0及torchvision0.4.0,下载地址为pytorch官网
pip install E:\torch-1.2.0-cp35-cp35m-win_amd64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install E:\torchvision-0.4.0-cp35-cp35m-win_amd64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple
测试是否安装成功
其他库依赖安装,进入到st-gcn源码包目录下:
conda install ffmpeg
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
结果如下:
三、OpenPose编译
1.源码及相关文件下载
下载地址:
openpose源码下载
CMAKE Gui 3.14.6下载
2.依赖安装及编译
相关的安装步骤网上有很多,这里贴一篇较为详细的博客.
OpenPose笔记——windows 10下,自编译openpose代码(vs下能跑了,pythonAPI也能使了)
四、st-gcn源码编译运行
1.安装
cd st-gcn-master
cd torchlight
python setup.py install
cd ..
2.python api
openpose安装好了后,把生成的build/bin文件夹下的所有库复制到build/x64/release/下,
将models文件夹复制到build中
3.预训练模型下载
下载地址:
预训练模型
将下载好的模型文件拷贝至./models文件路径下
4.代码测试
(1)demo_old测试
python main.py demo_old --video E:/st-gcn/st-gcn-master/st-gcn-master/resource/media/clean_and_jerk.mp4 --openpose E:/st-gcn/openpose-master/openpose-master/build/x64/Release
报错如下:
错误1:
系统找不到指定的路径。
Can not find pose estimation results
解决办法:
更改demo_old里的文件内容如下:
将openpose = '{}/examples/openpose/openpose.bin'.format(self.arg.openpose)改为如下语句:
openpose = '{}/OpenPoseDemo.exe'.format(self.arg.openpose)
错误2:
Check failed: error == cudaSuccess (2 vs. 0) out of memory
解决办法:
更改网络分辨率
更改demo_old里的文件内容如下:
添加net_resolution='320x176'到openpose_args中
openpose_args = dict(
video=self.arg.video,
write_json=output_snippets_dir,
display=0,
render_pose=0,
model_pose='COCO',
net_resolution='320x176')
测试结果可在data/demo_result中查看
(2)demo_offline测试
python main.py demo_offline --video E:/st-gcn/st-gcn-master/st-gcn-master/resource/media/clean_and_jerk.mp4 --openpose E:/st-gcn/openpose-master/openpose-master
报错如下:
错误1:
video, data_numpy = self.pose_estimation() TypeError: ‘NoneType’ object is not iterable
解决办法:
更改demo_offline里的文件内容如下:
将pose_estimation()函数更改如下
def pose_estimation(self):
# load openpose python api
if self.arg.openpose is not None:
sys.path.append('{}/build/python/openpose/Release'.format(self.arg.openpose))
os.environ['PATH'] = os.environ['PATH'] + ';' + 'E:/st-gcn/openpose-master/openpose-master/build/x64/Release/;' + 'E:/st-gcn/openpose-master/openpose-master/build/bin;'
# sys.path.append('{}/python'.format(self.arg.openpose))
# sys.path.append('{}/build/python'.format(self.arg.openpose))
try:
# from openpose import pyopenpose as op
import pyopenpose as op
except:
print('Can not find Openpose Python API.')
return
错误2:
opWrapper.emplaceAndPop([datum])
TypeError: emplaceAndPop(): incompatible function arguments. The following argument types are supported:
1. (self: pyopenpose.WrapperPython, arg0: std::vector<std::shared_ptrop::Datum,std::allocator<std::shared_ptrop::Datum > >) -> bool
Invoked with: <pyopenpose.WrapperPython object at 0x00000263AFEEA8F0>, [<pyopenpose.Datum object at 0x00000263AFF05F10>]
解决办法:
更改demo_offline里的文件内容如下:
将opWrapper.emplaceAndPop([datum])更改如下:
opWrapper.emplaceAndPop(op.VectorDatum([datum]))
错误3:
Check failed: error == cudaSuccess (2 vs. 0) out of memory
解决办法:
更改网络分辨率
更改demo_offline里的文件内容如下:
将params = dict(model_folder='./models', model_pose='COCO')更改如下:
params = dict(model_folder='./models', model_pose='COCO', net_resolution='320x176')
结果如下: