CTRGCN Project
Channel-wise Topology Refinement Graph Convolution for Skeleton-Based Action Recognition
Abstract
Graph convolutional networks (GCNs) have been widely used and achieved remarkable results in skeleton-based action recognition. In GCNs, graph topology dominates feature aggregation and therefore is the key to extracting representative features. In this work, we propose a novel Channel-wise Topology Refinement Graph Convolution (CTR-GC) to dynamically learn different topologies and effectively aggregate joint features in different channels for skeleton-based action recognition. The proposed CTR-GC models channel-wise topologies through learning a shared topology as a generic prior for all channels and refining it with channel-specific correlations for each channel. Our refinement method introduces few extra parameters and significantly reduces the difficulty of modeling channel-wise topologies. Furthermore, via reformulating graph convolutions into a unified form, we find that CTR-GC relaxes strict constraints of graph convolutions, leading to stronger representation capability. Combining CTR-GC with temporal modeling modules, we develop a powerful graph convolutional network named CTR-GCN which notably outperforms state-of-the-art methods on the NTU RGB+D, NTU RGB+D 120, and NW-UCLA datasets.
Usage
Setup Environment
Please refer to Installation to install MMAction2.
Assume that you are located at $MMACTION2/projects/ctrgcn.
Add the current folder to PYTHONPATH, so that Python can find your code. Run the following command in the current directory to add it.
Please run it every time after you opened a new shell.
export PYTHONPATH=`pwd`:$PYTHONPATH
Data Preparation
Prepare the NTU60 dataset according to the instruction.
Create a symbolic link from $MMACTION2/data to ./data in the current directory, so that Python can locate your data. Run the following command in the current directory to create the symbolic link.
ln -s ../../data ./data
Training commands
To train with single GPU:
mim train mmaction configs/ctrgcn_8xb16-joint-u100-80e_ntu60-xsub-keypoint-2d.py
To train with multiple GPUs:
mim train mmaction configs/ctrgcn_8xb16-joint-u100-80e_ntu60-xsub-keypoint-2d.py --launcher pytorch --gpus 8
To train with multiple GPUs by slurm:
mim train mmaction configs/ctrgcn_8xb16-joint-u100-80e_ntu60-xsub-keypoint-2d.py --launcher slurm \
--gpus 8 --gpus-per-node 8 --partition $PARTITION
Testing commands
To test with single GPU:
mim test mmaction configs/ctrgcn_8xb16-joint-u100-80e_ntu60-xsub-keypoint-2d.py --checkpoint $CHECKPOINT
To test with multiple GPUs:
mim test mmaction configs/ctrgcn_8xb16-joint-u100-80e_ntu60-xsub-keypoint-2d.py --checkpoint $CHECKPOINT --launcher pytorch --gpus 8
To test with multiple GPUs by slurm:
mim test mmaction configs/ctrgcn_8xb16-joint-u100-80e_ntu60-xsub-keypoint-2d.py --checkpoint $CHECKPOINT --launcher slurm \
--gpus 8 --gpus-per-node 8 --partition $PARTITION
Results
NTU60_XSub_2D
| frame sampling strategy | modality | gpus | backbone | top1 acc | testing protocol | config | ckpt | log |
|---|---|---|---|---|---|---|---|---|
| uniform 100 | joint | 8 | CTRGCN | 89.6 | 10 clips | config | ckpt | log |
NTU60_XSub_3D
| frame sampling strategy | modality | gpus | backbone | top1 acc | testing protocol | config | ckpt | log |
|---|---|---|---|---|---|---|---|---|
| uniform 100 | joint | 8 | CTRGCN | 89.0 | 10 clips | config | ckpt | log |
Citation
@inproceedings{chen2021channel,
title={Channel-wise topology refinement graph convolution for skeleton-based action recognition},
author={Chen, Yuxin and Zhang, Ziqi and Yuan, Chunfeng and Li, Bing and Deng, Ying and Hu, Weiming},
booktitle={CVPR},
pages={13359--13368},
year={2021}
}