From 947571cd150add3858233efa9807c229afe7bdfa Mon Sep 17 00:00:00 2001
From: chaos1203 <1837626960@qq.com>
Date: Fri, 27 Oct 2023 16:57:30 +0800
Subject: [PATCH] add stgcnpp_readme_zh_cn.md and fix the formatting of the
readme.md in the main branch
---
configs/skeleton/posec3d/README.md | 2 +-
configs/skeleton/posec3d/README_zh-CN.md | 137 +++++++++++++++++++++++
configs/skeleton/stgcnpp/README.md | 2 +-
configs/skeleton/stgcnpp/README_zh-CN.md | 85 ++++++++++++++
4 files changed, 224 insertions(+), 2 deletions(-)
create mode 100644 configs/skeleton/posec3d/README_zh-CN.md
create mode 100644 configs/skeleton/stgcnpp/README_zh-CN.md
diff --git a/configs/skeleton/posec3d/README.md b/configs/skeleton/posec3d/README.md
index 2546706e57..d838468d38 100644
--- a/configs/skeleton/posec3d/README.md
+++ b/configs/skeleton/posec3d/README.md
@@ -79,7 +79,7 @@ Human skeleton, as a compact representation of human action, has received increa
| :---------------------: | :------------: | :--: | :----------: | :------: | :--------------: | :---: | :----: | :-------------------------------------: | :-----------------------------------: | :----------------------------------: |
| uniform 48 | keypoint | 8 | SlowOnly-R50 | 69.6 | 10 clips | 14.6G | 3.0M | [config](/configs/skeleton/posec3d/slowonly_kinetics400-pretrained-r50_8xb16-u48-120e_hmdb51-split1-keypoint.py) | [ckpt](https://download.openmmlab.com/mmaction/v1.0/skeleton/posec3d/slowonly_kinetics400-pretrained-r50_8xb16-u48-120e_hmdb51-split1-keypoint/slowonly_kinetics400-pretrained-r50_8xb16-u48-120e_hmdb51-split1-keypoint_20220815-17eaa484.pth) | [log](https://download.openmmlab.com/mmaction/v1.0/skeleton/posec3d/slowonly_kinetics400-pretrained-r50_8xb16-u48-120e_hmdb51-split1-keypoint/slowonly_kinetics400-pretrained-r50_8xb16-u48-120e_hmdb51-split1-keypoint.log) |
-# Kinetics400
+### Kinetics400
| frame sampling strategy | pseudo heatmap | gpus | backbone | top1 acc | testing protocol | FLOPs | params | config | ckpt | log |
| :---------------------: | :------------: | :--: | :----------: | :------: | :--------------: | :---: | :----: | :-------------------------------------: | :-----------------------------------: | :----------------------------------: |
diff --git a/configs/skeleton/posec3d/README_zh-CN.md b/configs/skeleton/posec3d/README_zh-CN.md
new file mode 100644
index 0000000000..f63871c8ec
--- /dev/null
+++ b/configs/skeleton/posec3d/README_zh-CN.md
@@ -0,0 +1,137 @@
+# PoseC3D
+
+[重新审视基于骨架的动作识别](https://arxiv.org/abs/2104.13586)
+
+
+
+## 摘要
+
+
+
+人体骨架作为人类行为的一种紧凑表征,近年来受到越来越多的关注。许多基于骨架的动作识别方法采用图卷积网络(GCN)来提取人体骨架上的特征。尽管之前的研究取得了积极的成果,但基于 GCN 的方法在鲁棒性、互操作性和可扩展性方面仍受到限制。在这项工作中,我们提出了基于骨架的动作识别新方法 PoseC3D ,它依赖于 3D 热图堆叠而不是图形序列作为人体骨架的基本表示。与基于 GCN 的方法相比,PoseC3D 在学习时空特征方面更有效,对姿态估计噪声的鲁棒性更高,并且在跨数据集设置中具有更好的泛化能力。此外,PoseC3D 可以处理多人场景,无需额外的计算成本,并且其特征可以在早期融合阶段与其他模态轻松集成,这为进一步提升性能提供了巨大的设计空间。在四个具有挑战性的数据集上,PoseC3D 无论是单独用于骨架还是与 RGB 模式结合使用,都始终保持着卓越的性能。
+
+
+
+
+
+
+
+
+
+
+
+
+ 姿态估计结果
+
+
+
+
+
+ |
+
+
+ 关键点热图三维体可视化
+
+
+
+
+
+ |
+
+
+ 肢体热图三维体可视化
+
+
+
+
+
+ |
+
+
+
+
+## 结果和模型库
+
+### FineGYM
+
+| 帧提取策略 | 热图类型 | GPU数量 | 主干网络 | Mean Top-1 | 测试协议 | FLOPs | 参数量 | 配置文件 | ckpt | log |
+| :--------: | :------: | :-----: | :----------: | :--------: | :------: | :---: | :----: | :-------------------------------------------: | :-------------------------------------------: | :------------------------------------------: |
+| uniform 48 | keypoint | 8 | SlowOnly-R50 | 93.5 | 10 clips | 20.6G | 2.0M | [config](/configs/skeleton/posec3d/slowonly_r50_8xb16-u48-240e_gym-keypoint.py) | [ckpt](https://download.openmmlab.com/mmaction/v1.0/skeleton/posec3d/slowonly_r50_8xb16-u48-240e_gym-keypoint/slowonly_r50_8xb16-u48-240e_gym-keypoint_20220815-da338c58.pth) | [log](https://download.openmmlab.com/mmaction/v1.0/skeleton/posec3d/slowonly_r50_8xb16-u48-240e_gym-keypoint/slowonly_r50_8xb16-u48-240e_gym-keypoint.log) |
+| uniform 48 | limb | 8 | SlowOnly-R50 | 93.6 | 10 clips | 20.6G | 2.0M | [config](/configs/skeleton/posec3d/slowonly_r50_8xb16-u48-240e_gym-limb.py) | [ckpt](https://download.openmmlab.com/mmaction/v1.0/skeleton/posec3d/slowonly_r50_8xb16-u48-240e_gym-limb/slowonly_r50_8xb16-u48-240e_gym-limb_20220815-2e6e3c5c.pth) | [log](https://download.openmmlab.com/mmaction/v1.0/skeleton/posec3d/slowonly_r50_8xb16-u48-240e_gym-limb/slowonly_r50_8xb16-u48-240e_gym-limb.log) |
+
+### NTU60_XSub
+
+| 帧提取策略 | 热图类型 | GPU数量 | 主干网络 | Mean Top-1 | 测试协议 | FLOPs | 参数量 | 配置文件 | ckpt | log |
+| :--------: | :------: | :-----: | :----------: | :--------: | :------: | :---: | :----: | :-------------------------------------------: | :-------------------------------------------: | :------------------------------------------: |
+| uniform 48 | keypoint | 8 | SlowOnly-R50 | 93.6 | 10 clips | 20.6G | 2.0M | [config](/configs/skeleton/posec3d/slowonly_r50_8xb16-u48-240e_ntu60-xsub-keypoint.py) | [ckpt](https://download.openmmlab.com/mmaction/v1.0/skeleton/posec3d/slowonly_r50_8xb16-u48-240e_ntu60-xsub-keypoint/slowonly_r50_8xb16-u48-240e_ntu60-xsub-keypoint_20220815-38db104b.pth) | [log](https://download.openmmlab.com/mmaction/v1.0/skeleton/posec3d/slowonly_r50_8xb16-u48-240e_ntu60-xsub-keypoint/slowonly_r50_8xb16-u48-240e_ntu60-xsub-keypoint.log) |
+| uniform 48 | limb | 8 | SlowOnly-R50 | 93.5 | 10 clips | 20.6G | 2.0M | [config](/configs/skeleton/posec3d/slowonly_r50_8xb16-u48-240e_ntu60-xsub-keypoint.py) | [ckpt](https://download.openmmlab.com/mmaction/v1.0/skeleton/posec3d/slowonly_r50_8xb16-u48-240e_ntu60-xsub-limb/slowonly_r50_8xb16-u48-240e_ntu60-xsub-limb_20220815-af2f119a.pth) | [log](https://download.openmmlab.com/mmaction/v1.0/skeleton/posec3d/slowonly_r50_8xb16-u48-240e_ntu60-xsub-limb/slowonly_r50_8xb16-u48-240e_ntu60-xsub-limb.log) |
+| | Fusion | | | 94.0 | | | | | | |
+
+### UCF101
+
+| 帧提取策略 | 热图类型 | GPU数量 | 主干网络 | Mean Top-1 | 测试协议 | FLOPs | 参数量 | 配置文件 | ckpt | log |
+| :--------: | :------: | :-----: | :----------: | :--------: | :------: | :---: | :----: | :-------------------------------------------: | :-------------------------------------------: | :------------------------------------------: |
+| uniform 48 | keypoint | 8 | SlowOnly-R50 | 86.8 | 10 clips | 14.6G | 3.1M | [config](/configs/skeleton/posec3d/slowonly_kinetics400-pretrained-r50_8xb16-u48-120e_ucf101-split1-keypoint.py) | [ckpt](https://download.openmmlab.com/mmaction/v1.0/skeleton/posec3d/slowonly_kinetics400-pretrained-r50_8xb16-u48-120e_ucf101-split1-keypoint/slowonly_kinetics400-pretrained-r50_8xb16-u48-120e_ucf101-split1-keypoint_20220815-9972260d.pth) | [log](https://download.openmmlab.com/mmaction/v1.0/skeleton/posec3d/slowonly_kinetics400-pretrained-r50_8xb16-u48-120e_ucf101-split1-keypoint/slowonly_kinetics400-pretrained-r50_8xb16-u48-120e_ucf101-split1-keypoint.log) |
+
+### HMDB51
+
+| 帧提取策略 | 热图类型 | GPU数量 | 主干网络 | Mean Top-1 | 测试协议 | FLOPs | 参数量 | 配置文件 | ckpt | log |
+| :--------: | :------: | :-----: | :----------: | :--------: | :------: | :---: | :----: | :-------------------------------------------: | :-------------------------------------------: | :------------------------------------------: |
+| uniform 48 | keypoint | 8 | SlowOnly-R50 | 69.6 | 10 clips | 14.6G | 3.0M | [config](/configs/skeleton/posec3d/slowonly_kinetics400-pretrained-r50_8xb16-u48-120e_hmdb51-split1-keypoint.py) | [ckpt](https://download.openmmlab.com/mmaction/v1.0/skeleton/posec3d/slowonly_kinetics400-pretrained-r50_8xb16-u48-120e_hmdb51-split1-keypoint/slowonly_kinetics400-pretrained-r50_8xb16-u48-120e_hmdb51-split1-keypoint_20220815-17eaa484.pth) | [log](https://download.openmmlab.com/mmaction/v1.0/skeleton/posec3d/slowonly_kinetics400-pretrained-r50_8xb16-u48-120e_hmdb51-split1-keypoint/slowonly_kinetics400-pretrained-r50_8xb16-u48-120e_hmdb51-split1-keypoint.log) |
+
+### Kinetics400
+
+| 帧提取策略 | 热图类型 | GPU数量 | 主干网络 | Mean Top-1 | 测试协议 | FLOPs | 参数量 | 配置文件 | ckpt | log |
+| :--------: | :------: | :-----: | :----------: | :--------: | :------: | :---: | :----: | :-------------------------------------------: | :-------------------------------------------: | :------------------------------------------: |
+| uniform 48 | keypoint | 8 | SlowOnly-R50 | 47.4 | 10 clips | 19.1G | 3.2M | [config](/configs/skeleton/posec3d/slowonly_r50_8xb32-u48-240e_k400-keypoint.py) | [ckpt](https://download.openmmlab.com/mmaction/v1.0/skeleton/posec3d/slowonly_r50_8xb32-u48-240e_k400-keypoint/slowonly_r50_8xb32-u48-240e_k400-keypoint_20230731-7f498b55.pth) | [log](https://download.openmmlab.com/mmaction/v1.0/skeleton/posec3d/slowonly_r50_8xb32-u48-240e_k400-keypoint/slowonly_r50_8xb32-u48-240e_k400-keypoint.log) |
+
+用户可以参照 [准备骨架数据集](/tools/data/skeleton/README_zh-CN.md) 来获取以上配置文件使用的骨架标注。
+
+## 如何训练
+
+用户可以使用以下指令进行模型训练。
+
+```shell
+python tools/train.py ${CONFIG_FILE} [optional arguments]
+```
+
+Example: 以确定性的训练,进行 PoseC3D 模型在 FineGYM 数据集上的训练。
+
+```shell
+python tools/train.py configs/skeleton/posec3d/slowonly_r50_8xb16-u48-240e_gym-keypoint.py \
+ --seed=0 --deterministic
+```
+
+有关自定义数据集上的训练,可以参考 [Custom Dataset Training](/configs/skeleton/posec3d/custom_dataset_training.md)。
+
+更多训练细节,可参考 [训练与测试](/docs/zh_cn/user_guides/train_test.md#%E8%AE%AD%E7%BB%83) 中的 **训练** 部分。
+
+## 如何测试
+
+用户可以使用以下指令进行模型测试。
+
+```shell
+python tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE} [optional arguments]
+```
+
+Example: 在 FineGYM 数据集上测试 PoseC3D 模型。
+
+```shell
+python tools/test.py configs/skeleton/posec3d/slowonly_r50_8xb16-u48-240e_gym-keypoint.py \
+ checkpoints/SOME_CHECKPOINT.pth
+```
+
+更多训练细节,可参考 [训练与测试](/docs/zh_cn/user_guides/train_test.md#%E6%B5%8B%E8%AF%95) 中的 **测试** 部分。
+
+## 引用
+
+```BibTeX
+@misc{duan2021revisiting,
+ title={Revisiting Skeleton-based Action Recognition},
+ author={Haodong Duan and Yue Zhao and Kai Chen and Dian Shao and Dahua Lin and Bo Dai},
+ year={2021},
+ eprint={2104.13586},
+ archivePrefix={arXiv},
+ primaryClass={cs.CV}
+}
+```
diff --git a/configs/skeleton/stgcnpp/README.md b/configs/skeleton/stgcnpp/README.md
index 368e9527e6..702c4e58c9 100644
--- a/configs/skeleton/stgcnpp/README.md
+++ b/configs/skeleton/stgcnpp/README.md
@@ -45,7 +45,7 @@ You can use the following command to train a model.
python tools/train.py ${CONFIG_FILE} [optional arguments]
```
-Example: train STGCN++ model on NTU60-2D dataset in a deterministic option with periodic validation.
+Example: train STGCN++ model on NTU60-2D dataset in a deterministic option.
```shell
python tools/train.py configs/skeleton/stgcnpp/stgcnpp_8xb16-joint-u100-80e_ntu60-xsub-keypoint-2d.py \
diff --git a/configs/skeleton/stgcnpp/README_zh-CN.md b/configs/skeleton/stgcnpp/README_zh-CN.md
new file mode 100644
index 0000000000..c64c16d229
--- /dev/null
+++ b/configs/skeleton/stgcnpp/README_zh-CN.md
@@ -0,0 +1,85 @@
+# STGCN++
+
+[PYSKL: 实现骨架动作识别的良好实践](https://arxiv.org/abs/2205.09443)
+
+
+
+## 摘要
+
+
+
+我们介绍PYSKL:一个基于 PyTorch 的骨架动作识别开源工具箱。该工具箱支持多种骨架动作识别算法,包括基于 GCN 和 CNN 的方法。与现有仅包含一两种算法的开源骨架动作识别项目相比,PYSKL 在统一框架下实现了六种不同的算法,并结合了最新和原创的优秀实践,便于比较功效和效率。我们还提供了一个基于 GCN 的原始骨架动作识别模型 ST-GCN++,该模型无需任何复杂的注意力方案即可实现有竞争力的识别性能,可作为一个强有力的基准。同时,PYSKL 支持九种基于骨架的动作识别基准的训练和测试,并在其中八种基准上实现了最先进的识别性能。为了方便未来的骨架动作识别研究,我们还提供了大量的训练模型和详细的基准测试结果,以提供一些见解。PYSKL发布在这个https网址上,并得到了积极的维护。我们将在添加新功能或基准后更新本报告。当前版本对应 PYSKL v0.2。
+
+## 结果和模型库
+
+### NTU60_XSub_2D
+
+| 帧提取策略 | 模式 | GPU数量 | 主干网络 | Top-1 准确率 | 测试协议 | FLOPs | 参数量 | 配置文件 | ckpt | log |
+| :---------: | :----------: | :-----: | :------: | :----------: | :------: | :---: | :----: | :------------------------------------------: | :------------------------------------------: | :-----------------------------------------: |
+| uniform 100 | joint | 8 | STGCN++ | 89.29 | 10 clips | 1.95G | 1.39M | [config](/configs/skeleton/stgcnpp/stgcnpp_8xb16-joint-u100-80e_ntu60-xsub-keypoint-2d.py) | [ckpt](https://download.openmmlab.com/mmaction/v1.0/skeleton/stgcnpp/stgcnpp_8xb16-joint-u100-80e_ntu60-xsub-keypoint-2d/stgcnpp_8xb16-joint-u100-80e_ntu60-xsub-keypoint-2d_20221228-86e1e77a.pth) | [log](https://download.openmmlab.com/mmaction/v1.0/skeleton/stgcnpp/stgcnpp_8xb16-joint-u100-80e_ntu60-xsub-keypoint-2d/stgcnpp_8xb16-joint-u100-80e_ntu60-xsub-keypoint-2d.log) |
+| uniform 100 | bone | 8 | STGCN++ | 92.30 | 10 clips | 1.95G | 1.39M | [config](/configs/skeleton/stgcnpp/stgcnpp_8xb16-bone-u100-80e_ntu60-xsub-keypoint-2d.py) | [ckpt](https://download.openmmlab.com/mmaction/v1.0/skeleton/stgcnpp/stgcnpp_8xb16-bone-u100-80e_ntu60-xsub-keypoint-2d/stgcnpp_8xb16-bone-u100-80e_ntu60-xsub-keypoint-2d_20221228-cd11a691.pth) | [log](https://download.openmmlab.com/mmaction/v1.0/skeleton/stgcnpp/stgcnpp_8xb16-bone-u100-80e_ntu60-xsub-keypoint-2d/stgcnpp_8xb16-bone-u100-80e_ntu60-xsub-keypoint-2d.log) |
+| uniform 100 | joint-motion | 8 | STGCN++ | 87.30 | 10 clips | 1.95G | 1.39M | [config](/configs/skeleton/stgcnpp/stgcnpp_8xb16-joint-motion-u100-80e_ntu60-xsub-keypoint-2d.py) | [ckpt](https://download.openmmlab.com/mmaction/v1.0/skeleton/stgcnpp/stgcnpp_8xb16-joint-motion-u100-80e_ntu60-xsub-keypoint-2d/stgcnpp_8xb16-joint-motion-u100-80e_ntu60-xsub-keypoint-2d_20221228-19a34aba.pth) | [log](https://download.openmmlab.com/mmaction/v1.0/skeleton/stgcnpp/stgcnpp_8xb16-joint-motion-u100-80e_ntu60-xsub-keypoint-2d/stgcnpp_8xb16-joint-motion-u100-80e_ntu60-xsub-keypoint-2d.log) |
+| uniform 100 | bone-motion | 8 | STGCN++ | 88.76 | 10 clips | 1.95G | 1.39M | [config](/configs/skeleton/stgcnpp/stgcnpp_8xb16-bone-motion-u100-80e_ntu60-xsub-keypoint-2d.py) | [ckpt](https://download.openmmlab.com/mmaction/v1.0/skeleton/stgcnpp/stgcnpp_8xb16-bone-motion-u100-80e_ntu60-xsub-keypoint-2d/stgcnpp_8xb16-bone-motion-u100-80e_ntu60-xsub-keypoint-2d_20221228-c02a0749.pth) | [log](https://download.openmmlab.com/mmaction/v1.0/skeleton/stgcnpp/stgcnpp_8xb16-bone-motion-u100-80e_ntu60-xsub-keypoint-2d/stgcnpp_8xb16-bone-motion-u100-80e_ntu60-xsub-keypoint-2d.log) |
+| | two-stream | | | 92.61 | | | | | | |
+| | four-stream | | | 92.77 | | | | | | |
+
+### NTU60_XSub_3D
+
+| 帧提取策略 | 模式 | GPU数量 | 主干网络 | Top-1 准确率 | 测试协议 | FLOPs | 参数量 | 配置文件 | ckpt | log |
+| :---------: | :----------: | :-----: | :------: | :----------: | :------: | :---: | :----: | :------------------------------------------: | :------------------------------------------: | :-----------------------------------------: |
+| uniform 100 | joint | 8 | STGCN++ | 89.14 | 10 clips | 2.96G | 1.4M | [config](/configs/skeleton/stgcnpp/stgcnpp_8xb16-joint-u100-80e_ntu60-xsub-keypoint-3d.py) | [ckpt](https://download.openmmlab.com/mmaction/v1.0/skeleton/stgcnpp/stgcnpp_8xb16-joint-u100-80e_ntu60-xsub-keypoint-3d/stgcnpp_8xb16-joint-u100-80e_ntu60-xsub-keypoint-3d_20221230-4e455ce3.pth) | [log](https://download.openmmlab.com/mmaction/v1.0/skeleton/stgcnpp/stgcnpp_8xb16-joint-u100-80e_ntu60-xsub-keypoint-3d/stgcnpp_8xb16-joint-u100-80e_ntu60-xsub-keypoint-3d.log) |
+| uniform 100 | bone | 8 | STGCN++ | 90.21 | 10 clips | 2.96G | 1.4M | [config](/configs/skeleton/stgcnpp/stgcnpp_8xb16-bone-u100-80e_ntu60-xsub-keypoint-3d.py) | [ckpt](https://download.openmmlab.com/mmaction/v1.0/skeleton/stgcnpp/stgcnpp_8xb16-bone-u100-80e_ntu60-xsub-keypoint-3d/stgcnpp_8xb16-bone-u100-80e_ntu60-xsub-keypoint-3d_20221230-7f356072.pth) | [log](https://download.openmmlab.com/mmaction/v1.0/skeleton/stgcnpp/stgcnpp_8xb16-bone-u100-80e_ntu60-xsub-keypoint-3d/stgcnpp_8xb16-bone-u100-80e_ntu60-xsub-keypoint-3d.log) |
+| uniform 100 | joint-motion | 8 | STGCN++ | 86.67 | 10 clips | 2.96G | 1.4M | [config](/configs/skeleton/stgcnpp/stgcnpp_8xb16-joint-motion-u100-80e_ntu60-xsub-keypoint-3d.py) | [ckpt](https://download.openmmlab.com/mmaction/v1.0/skeleton/stgcnpp/stgcnpp_8xb16-joint-motion-u100-80e_ntu60-xsub-keypoint-3d/stgcnpp_8xb16-joint-motion-u100-80e_ntu60-xsub-keypoint-3d_20221230-650de5cc.pth) | [log](https://download.openmmlab.com/mmaction/v1.0/skeleton/stgcnpp/stgcnpp_8xb16-joint-motion-u100-80e_ntu60-xsub-keypoint-3d/stgcnpp_8xb16-joint-motion-u100-80e_ntu60-xsub-keypoint-3d.log) |
+| uniform 100 | bone-motion | 8 | STGCN++ | 87.45 | 10 clips | 2.96G | 1.4M | [config](/configs/skeleton/stgcnpp/stgcnpp_8xb16-bone-motion-u100-80e_ntu60-xsub-keypoint-3d.py) | [ckpt](https://download.openmmlab.com/mmaction/v1.0/skeleton/stgcnpp/stgcnpp_8xb16-bone-motion-u100-80e_ntu60-xsub-keypoint-3d/stgcnpp_8xb16-bone-motion-u100-80e_ntu60-xsub-keypoint-3d_20221230-b00440d2.pth) | [log](https://download.openmmlab.com/mmaction/v1.0/skeleton/stgcnpp/stgcnpp_8xb16-bone-motion-u100-80e_ntu60-xsub-keypoint-3d/stgcnpp_8xb16-bone-motion-u100-80e_ntu60-xsub-keypoint-3d.log) |
+| | two-stream | | | 91.39 | | | | | | |
+| | four-stream | | | 91.87 | | | | | | |
+
+1. 这里的 **GPU** 数量 指的是得到模型权重文件对应的 GPU 个数。用户在 使用不同数量的 GPU 或每块 GPU 处理不同视频个数时,最好的方法是在调用 `tools/train.py` 时设置 `--auto-scale-lr` ,该参数将根据实际批次大小自动调整学习率和原始批次。
+
+2. 对于双流融合,我们使用 **joint : bone = 1 : 1**。对于四流融合,我们使用**joint : joint-motion : bone : bone-motion = 2 : 1 : 2 : 1**。有关多流融合的更多详情信息,请参考[教程](/docs/zh_cn/useful_tools.md#%E5%A4%9A%E6%B5%81%E8%9E%8D%E5%90%88)。
+
+## 训练
+
+用户可以使用以下指令进行模型训练。
+
+```shell
+python tools/train.py ${CONFIG_FILE} [optional arguments]
+```
+
+Example: 以确定性的训练,进行 STGCN++ 模型在 NTU60-2D 数据集上的训练。
+
+```shell
+python tools/train.py configs/skeleton/stgcnpp/stgcnpp_8xb16-joint-u100-80e_ntu60-xsub-keypoint-2d.py \
+ --seed 0 --deterministic
+```
+
+更多训练细节,可参考 [训练与测试](/docs/zh_cn/user_guides/train_test.md#%E8%AE%AD%E7%BB%83) 中的 **训练** 部分。
+
+## 测试
+
+用户可以使用以下指令进行模型训练。
+
+```shell
+python tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE} [optional arguments]
+```
+
+Example: 以确定性的训练,加以定期的验证过程进行 STGCN++ 模型在 NTU60-2D 数据集上的训练。
+
+```shell
+python tools/test.py configs/skeleton/stgcnpp/stgcnpp_8xb16-joint-u100-80e_ntu60-xsub-keypoint-2d.py \
+ checkpoints/SOME_CHECKPOINT.pth --dump result.pkl
+```
+
+更多训练细节,可参考 [训练与测试](/docs/zh_cn/user_guides/train_test.md#%E6%B5%8B%E8%AF%95) 中的 **测试** 部分。
+
+## 引用
+
+```BibTeX
+@misc{duan2022PYSKL,
+ url = {https://arxiv.org/abs/2205.09443},
+ author = {Duan, Haodong and Wang, Jiaqi and Chen, Kai and Lin, Dahua},
+ title = {PYSKL: Towards Good Practices for Skeleton Action Recognition},
+ publisher = {arXiv},
+ year = {2022}
+}
+```