目录
最近开始尝试ST-GCN,主要安装步骤参考作者在github上提供的指南:https://github.com/open-mmlab/mmskeleton/blob/master/doc/GETTING_STARTED.md
本文记录一下安装过程
安装
安装Anaconda3
安装cuda、cudnn、nccl
版本:
cuda-10.1
cudnn-7.6(应该是当时对应cuda10.1的最新版cudnn)
nccl-2.6(也是对应cuda10.1的最新版nccl)
新建conda环境并激活
新建一个名为open-mmlab,python版本为3.7的conda虚拟环境(也可以不需要新建)。
conda create -n open-mmlab python=3.7
conda activate open-mmlab
安装与cuda版本对应的pytorch
这部分参考pytorch官网的指南。
记得添加国内镜像地址到安装源,否则非常慢。
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
conda install pytorch torchvision cudatoolkit=10.1 -c pytorch
将mmskeleton从github下载到本地
git clone https://github.com/open-mmlab/mmskeleton.git
cd mmskeleton
安装mmskeleton
python setup.py develop
注意,这里遇到错误了:error: unknown file type ‘.pyx’ (from ‘mmskeleton/ops/nms/gpu_nms.pyx’)
首先想到去安装一下pyrex,emmm看起来有点麻烦,暂时搁置了。
————
在重新运行python setup.py develop
之前,我事先安装了一些库(嗯因为我家网速很迷,关联下载总是不太顺利):
conda install cython
conda install matplotlib
另外,Pillow-6.2.2-cp37和opencv_python-4.2.0.34-cp37,我是先从网站上下载了.whl文件。然后安装的。所对应的版本号是从setup的下载过程中“偷看”来的,完全匹配我的环境。(在百度搜索Pillow/opencv_python就可以,点进PyPI的官网,找到对应的版本下载)
# 首先通过一系列cd指令跳转到.whl文件所在路径
pip install Pillow-6.2.2-cp37-cp37m-manylinux1_x86_64.whl
pip install opencv_python-4.2.0.34-cp37-cp37m-manylinux1_x86_64.whl
!!!其实手动安装上面四个库是完全可以省略的,setup过程中应该能自动关联下载的。因为我的网速实在是太慢,直接setup会报各种网络错误,所以才一个个单独安装的……
————
接下来回到这个错误:error: unknown file type ‘.pyx’ (from ‘mmskeleton/ops/nms/gpu_nms.pyx’)
setup.py中有这样一段代码:
ext_modules=[
make_cython_ext(name='cpu_nms',
module='mmskeleton.ops.nms',
sources=['cpu_nms.pyx']),
make_cuda_ext(name='gpu_nms',
module='mmskeleton.ops.nms',
sources=['nms_kernel.cu', 'gpu_nms.cpp'],
include_dirs=[np.get_include()]),
],
在/mmskeleton/mmskeleton/ops/nms下有两个.pyx文件,正确执行之后,在该目录中会生成两个.cpp文件和两个.so文件,分别对应cpu和gpu。
仔细观察发现cpu对应的两个文件正确生成了,但gpu对应的没有。于是我想到一个损招,用cython gpu_nms.pyx
生成.c文件,再把后缀改成.cpp。
重新尝试安装:
python setup.py develop
成功了!
后来问了一下我白师姐,直接在/mmskeleton/mmskeleton/ops/nms下重新build一下,就可以啦,即在该目录下运行以下命令:
python setup_linux.py build_ext --inplace
我试过了,这样也是可以成功了,而且个人认为这样更优雅。
安装mmdetection
mmskeleton的GETTING_STARTED.md里写了:In the event of a failure installation, please install mmdetection manually.
于是我转而点进了这个链接:https://github.com/open-mmlab/mmdetection/blob/master/docs/INSTALL.md,进行手动安装。
(其实是因为最开始安装mmskeleton受挫,所以我转而先安装了mmdetection,只能手动安装……按照官方指南的逻辑,还是把顺序写在了mmskeleton的后面。)
git clone https://github.com/open-mmlab/mmdetection.git #建议退到mmskeleton的上一级文件夹后运行
cd mmdetection
pip install -r requirements/build.txt
pip install "git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI"
pip install -v -e .
这个过程需要cython,matplotlib,Pillow,opencv_python,安装方式在安装mmskeleton时提过了,已经安装过,所以这里会很顺利。
验证是否成功安装
python mmskl.py pose_demo
这一步我运行了好几次,用时大概在四五百秒。(因为我运行时一度怀疑速度过慢,所以发在这里给大家参考。)
原文档提供的命令是这样的:
python mmskl.py pose_demo [--gpus $GPUS]
直接运行是会报错的。
这里的参数GPUS,我理解的是gpu的数量,我的笔记本运行python mmskl.py pose_demo --gpus 1
可以,效果和python mmskl.py pose_demo
一样,而运行python mmskl.py pose_demo --gpus 2
会报错。