简介 本仓库包含论文《用于基于骨架的动作识别的空间时间图卷积网络》的相关代码、数据集和模型。
ST-GCN 动作识别演示 我们的基于骨架的动作识别演示展示了ST-GCN如何从人体骨架中提取局部模式和关联性。下图显示了我们ST-GCN最后一层中每个节点的神经响应幅度。
触摸头部 坐下 脱鞋 进食 投踢他人 掷锤 清洁与抓举 拉力器 太极拳 抛球 上一行结果来自NTU-RGB+D数据集,第二行来自Kinetics-skeleton数据集。
前提条件
- Python3(版本大于3.5)
- PyTorch
- Openpose(带Python API,仅用于演示)
- 其他Python库可以通过运行
pip install -r requirements.txt
来安装
安装
1git clone https://github.com/yysijie/st-gcn.git; cd st-gcn
2cd torchlight; python setup.py install; cd ..
获取预训练模型 我们提供了ST-GCN的预训练模型权重。可以通过运行以下脚本来下载模型:
1bash tools/get_models.sh
您也可以从GoogleDrive或百度云获取模型,并手动将其放入./models目录下。
演示 您可以使用以下命令运行演示:
-
离线姿态估计
1python main.py demo_offline [--video ${视频路径}] [--openpose ${Openpose路径}]
-
实时姿态估计
1python main.py demo [--video ${视频路径}] [--openpose ${Openpose路径}]
可选参数:
PATH_TO_OPENPOSE
: 如果Openpose Python API不在PYTHONPATH中,则需要此路径。PATH_TO_VIDEO
: 输入视频的文件名。
数据准备 我们在两个基于骨架的动作识别数据集上进行了实验:Kinetics-skeleton 和 NTU RGB+D。为了方便快速加载数据,在训练和测试前,数据集应转换为合适的文件结构。您可以从GoogleDrive下载预处理后的数据并解压文件:
1cd st-gcn
2unzip <st-gcn-processed-data.zip路径>
否则,如果您想自己处理原始数据,请参考以下指南。
-
Kinetics-skeleton Kinetics是一个基于视频的动作识别数据集,只提供原始视频剪辑而无骨架数据。为了获得关节位置,我们首先将所有视频调整为340x256的分辨率并将帧率转换为30 fps,然后通过Openpose从每帧中提取骨架。提取的骨架数据(Kinetics-skeleton,7.5GB)可以从GoogleDrive或百度云直接下载。
解压后,通过以下命令重建数据库:
1python tools/kinetics_gendata.py --data_path <Kinetics-skeleton路径>
-
NTU RGB+D NTU RGB+D可以从其官方网站下载。我们的实验只需要3D骨架模态(5.8GB)。之后,使用以下命令构建训练或评估所需的数据库:
1python tools/ntu_gendata.py --data_path <nturgbd+d_skeletons路径>
其中
<nturgbd+d_skeletons路径>
是您下载的NTU RGB+D数据集中3D骨架模态的位置。
测试预训练模型
-
评估在Kinetics-skeleton上预训练的ST-GCN模型:
1python main.py recognition -c config/st_gcn/kinetics-skeleton/test.yaml
-
在NTU RGB+D上的跨视角评估:
1python main.py recognition -c config/st_gcn/ntu-xview/test.yaml
-
在NTU RGB+D上的跨主体评估:
1python main.py recognition -c config/st_gcn/ntu-xsub/test.yaml
为了加速评估或修改批处理大小以减少内存成本,可以设置 --test_batch_size
和 --device
:
1python main.py recognition -c <配置文件> --test_batch_size <批次大小> --device <gpu0> <gpu1> ...
结果 提供的模型预期Top-1准确度如下:
模型 | Kinetics-skeleton (%) | NTU RGB+D (Cross View) (%) | NTU RGB+D (Cross Subject) (%) |
---|---|---|---|
基线模型[1] | 20.3 | 83.1 | 74.3 |
ST-GCN (我们的模型) | 31.6 | 88.8 | 81.6 |
[1] Kim, T. S., and Reiter, A. 2017. Interpretable 3d human action analysis with temporal convolutional networks. In BNMW CVPRW.
训练 要训练一个新的ST-GCN模型,运行:
1python main.py recognition -c config/st_gcn/<dataset>/train.yaml [--work_dir <工作目录>]
其中 <dataset>
必须是ntu-xsub、ntu-xview或kinetics-skeleton,取决于您要使用的数据集。默认情况下,训练结果(包括模型权重、配置文件和日志文件)将保存在 ./work_dir 目录下,或如果您指定了 <工作目录>
则保存在该目录下。
您可以在命令行或配置文件中修改训练参数,如work_dir、batch_size、step、base_lr和device。优先级顺序为:命令行 > 配置文件 > 默认参数。更多信息,请使用 main.py -h
查看帮助。
最后,可以通过以下命令自定义模型评估:
1python main.py recognition -c config/st_gcn/<dataset>/test.yaml --weights <模型权重路径>