본문 바로가기

AI 논문

[꼼꼼하게 논문읽기] PYSKL : Towards Good Practices for Skeleton Action Recognition ( 2022 )

728x90
반응형

논문 원문 : https://arxiv.org/abs/2205.09443

이번 논문에는 상당히 흥미로운 내용이 많았죠

함께 보자구요

그리고 다른 블로그를 하나 더 운영하는데요.

그 블로그에서는 이렇게 논문 자체를 읽는 것이 아닌

insight 나 논문의 핵심, 이론을 위주로 다루려고 합니다.

관심있는 분은 아래 링크를 참조해 주세요

https://ai-easy.tistory.com/


 

 

Abstract

  저자들은 PYSKL을 제안합니다: open-source toolbox 이고 skeleton-based anction recognition 에 관한 것이며 pytorch를 기반으로 작성되었죠. toolbox는 다양한 skeleton action recognition algorism을 지원하죠. 크게는 GCN based와 CNN based 를 지원하죠. 현존하는 skeleton based action recogition project는 하나 혹은 2개의 알고리즘만을 포함하는 반면, PYSKL 은 6개의 알고리즘이 통일된 framework 에 구현되어 있습니다. 저자들은 original GCN-based skeleton action recognition model인 ST-GCN++ 을 제공하는데요, 복잫반 attention schemes 없이 경쟁력있는 recognition performance를 달성했죠. ( 붙이면, 뒤에 나오지만 ST+GCN++은 TCN 구조가 살짝 다릅니다. 그나마도 비슷하고요. 이 논문에서 주목해서 봐야할 부분은 augmentation 입니다 )  그리고 이는 strong baseline의 역할을 하죠. 한편, PYSKL은 training과 testing을 9개의 benchmarks에 대해 제공하는데, 8개에서 SOTA를 달성했죠. 거대한 모델 zoo를 제공하고 있고 benchmark 결과 또한 제공하고 있죠. 지속적인 업데이트 역시 있을거라하고, 23/01/09 기준 최근까지 관리되는 모습을 보았쬬.


Introduction

  Skeleton-based action recognition은 human skeleton sequence에 기반한 action recognition과 video understanding 을 수행하는데 초점이 맞춰져있죠. 다른 modalities와 비교해, skeleton data는 압축되어있지만 많은 정보를 포함하고 있고, 빛에 대한 변화나 정면에 대한 변화에 견고하다는 특징을 지니고 있죠. 이러한 특성들 때문에, 최근 skeleton-based action recognition은 지속적으로 관심을 받아왔고 그 관심도 역시 증대되어 왔죠. 다양한 algorism들이 skeleton-based action recogniiton을 수행하기 위해 개발되었고, 크게 두 가지로 나뉘죠. GCN-based approaches와 CNN-based approaches죠.

  ST-GCN이 GCN을 skeleton processing에 사용하도록 처음 제안한 이래로, GCN-based approaches는 skeleton-based action recognition에서 가장 인기있는 paradigm이 되었죠. ST-GCN은 joint coordinates의 sequence를 input으로 취하여 skeleton data를 GCN backbon을 활용해 models 하죠. GCN backbone은 spatial과 temporal modeling을 위해 대체 가능한 spatial graph convolutions와 temporal convolutions로 구성되어 있죠. 이를 기반으로한 많은 연구들이 st-gcn의 연구를 기반으로 보조적인 다른 task들을 진행했습니다. 가령 더 나은 manual 하거나 learnable한 graph topologies를 developing 했다거나, skeleton-based action recognition 을 다른 보조적인 task와 동시에 학습한다거나, 더 나은 data pre-processing, training, testing strategies를 사용하는 것과 같은 것들이죠. 이런 improvemnets를 활용해, 더 좋은 recognition 성능을 달성해왔죠.

  주목할 만한 향상이 있었음에도 불구하고, GCN approaces는 다른 setting들을 가지고 있었죠. 예를 들면, ST-GCN은 single joint-stream만을 활용해 recognition performance를 reports 했지만, 다른 연구들의 경우에는 joint / bone-stream의 ensemble을 활용해 report했죠. 심지어는 4개의 stream을 이용하는 경우도 있었죠. 이와 더불어, pre-processing techniques 역시 꽤나 차이가 있죠. 그러나, 현존하는 open-source repositories에는 자신들만의 practives를 포함한 하나의 algorism만을 가지고 있습니다. 어떤한 project도 이들 algorism을 동일한 환경에서 비교하지 않았죠. 따라서 저자들이 PYSKL을 develop했는데, 대표적인 GCN approaches를 동일한 환경에서 구현했죠. 각 algorism을 다양한 benchmark에 대해 training하고 testing 했고, 놀랍게도, 가장 발전된 algorism과 ST-GCN은 성능면에서 큰 차이를 보이지 않았습니다 ( 이 부분이 제가 생각하는 이 논문의 핵심입니다 ). Top-1 ACC 는 2% 도 차이 나지 않았고 해당 dataset은 NTURGB+D 입니다. 특히 NTURGB+D XView 에서는 0.5% 정도의 차이만을 보였죠.

   저자들은 좋은 practices가 strong recognition performance를 달성하는데 architectural design을 바꾸는 것보다 더 많은 기여를 한다는 사실을 알아냈죠. 이 논문은 자신들이 적용한 good practice에 대해 report 하죠. 그 practices 는 많은 것들을 담고 있는데, data-preprocessing, spatial / temporal data augmentations, 그리고 hyper-parameter settings 이죠. 이와 더불어, 저자들은 ST-GCN++를 제안하는데, ST-GCN에 기반하여 간단한 변형을 한 network 입니다. attention mechansim을 제거했고 성능은 SOTA에 견줄만 하죠.

  skeleton-based action recognition을 위한 또 다른 paradiam은 CNN을 활용해 skeleton data를 처리하는 방식이죠. 이 approaches는 human joints를 Gaussian maps로 나타내고 pseudo images나 video clips로 그들을 aggregate하죠 ( 이 발상이 진짜.. 대단합니다.. 물론 한계도 많지만요 ) 생성된 input은 2D-CNN나 3D-CNN에 의해 처리되죠. 저자들은 SOTA 3D-CNN based approach PoseC3D를 구현합니다. PoseC3D는 skeleton based action recognition benchmarks에서 강력한 recognition performance를 달성했죠. 그리고 PoseC3D는 robustness나 scalability, interoperability 등에서 GCNs에 비해 장점을 가지죠. ( 그렇지만, edge ai 에서는 사용하지 못해요. 아쉽지만요 ) 그러나, GCN approaches보다 훨씬 무거운데 이는 3D-CNN backbone 때문이죠. 그 아래 달락은 그냥 요약이라 넘어갈게요


GCN-based approaches

2.1 Good Practices for GCN-based approaches

2.1.1 Data Pre-processing

  다른 비디오의 Skeleton sequences 다른 temporal lengths와 다른 사람의 수를 가지죠. 그리고 이는 다른 view나 setups로부터 sensor에 의해 captured 됩니다. 3D skeletons는 Kinect sensors에 의해 captured 되고, 다양한 pre-processing approaches가 적영됩니다. ST-GCN은 추가적인 pre-processing을 사용하지 않았고, all sequence를 maximu length에 zero padding을 활용하여 맞춥니다. 그러나 2s-AGCN은 pre-normalization을 수행하는 데, 이는 3D-Cartesian coordinate system의 origin을 활용해 첫 번째 frame에서 person의 center point를 aligning 하기도 하고 all skeletons를 roatating 하기도 하는데 첫 번째 frame에서 person의 spine은 3D-Cartesian coordinate system에서 z-axis를 활용해 parallel 합니다. 이와 더불어, 2s-AGCN은  skeleton sequences을 loop padding을 활용해 maximum length으로 pad 합니다. CTR-GCN은 spatial pre-processing을 사용하고 이는 2s-AGCN에서 사용된 방법이죠. 그러나 CTR-GCN에서 사용된 방법은 각 skeleton sequence의 original length를 유지합니다. 그리고 manual denoising을 위한 different criteria를 사용하죠. 2D skeletons을 위해, 저자들은 해당 데이터를  [0,1] 이나 [-1,1] 과 같이 fixed range에 pre-normalize 하죠 저자들은 simple pose-based tracking을 수행하는데 1 개나 2개 의 skeleton sequence에 대해 적용합니다.

2.1.2 Temporal Augmentations

  많은 GCN은 어떠한 temporal augmentations도 사용하지 않습니다. 대표적인 GCN approaches 중에, CTR-GCN이 random cropping을 temporal augmentations로 적용하죠. random cropping은 전체 skeleton sequence로부터 substring을 crops 합니다. substring의 길이 비율은 50% 에서 100%까지 다양하죠. 그리고 substring을 fixed length 64로 bilinear interpolation을 활용해 resize합니다. 저자들은 Uniform Sampling을 temporal augmentation strategy로 사용합니다. 길이 M=100 의 skeleton sequence를 생성하기 위해, 저자들은 original sequence를 uniformly하게 M으로 나누는데 각각의 길이는 동일하죠. 그리고 split당 하나의 frame을 randomly하게 sample합니다. sampled skeletons는 다시 joined 되고 input sequence를 형성하죠. Uniform Sampling을 활용해, 저자들은 많은 양의 내 source data와 비슷한 distribution을 가지는 data samples를 생성할 수 있었다고 하네요.

2.1.3 Hyper Parameter Setting

  hyper parameter settings 는 기존 연구에서 차이가 크죠. PYSKL에서 저자들은 같은 hyper parameter setting을 train에 사용했습니다. learning rate는 0,1, batch size는 128, 그리고 각 model 은 80 epoch 동안 학습되죠. moentum은 0.9, weight decay는 5x10^-4 그리고 Nesterov momentum을 사용합니다. 저자들은 많은 GCN networks에 대해 새로운 hyper parameter setting이 더 좋은 성능 향상을 야기했다고 말합니다.

2.2 The Design of ST-GCN++

  저자들은 ST-GCN ++를 제안하는데요. ST-GCN에서 약간의 변형이 있죠. ST-GCN++는 복잡한 attention mechanism을 가진 SOTA approach에 비견되는 성능을 보이죠. 한편, computational overhead는 감소하고요. ST-GCN++는 spatial modules와 temoral modules에 interleaving의 design을 변경했죠.

2.2.1 Spatial Module Design

  ST-GCN에서 pre-defined sparse coefficient matrices는 같은 사람에 속한 diiferent joints의 features를 fusing 하는데 사용됩니다. 한펀, coefficient matrices는 pre-defined joint topology로부터 유도되죠. 그러나, ST-GCN++에서, 저자들은 pre-defined joint topology를 coefficient matrices를 initialize하는데만 사용합니다. coefficent matrices는 반복적으로 gradient descent를 활용해 training 동안 update되죠. 물론 sparse constraints는 없습니다. 더불어, 저자들은 residual link를 spatial module에 추가하는데, 이는 spatial modeling capability를 더욱 향상하시키죠.

2.2.2 Temporal Module Design

  vanilla ST-GCN은 하나의 1D convolution을 temporal dimesion에 대해 사용하는데 이때 kernel size는 9입니다. large kernel이 넓은 temporal receptive field를 cover하죠. 그러나 이 design은 flexibility가 결여되어 있죠. 이는 redundant computations와 parameters를 야기하죠. 저자들은 multi-branch temporal ConvNet을 사용하는데 single branch design을 대체하죠. 적용된 multi-branch TCN은 6개의 branch로 구성되죠: '1x1' Conv branch, Max-pooling branch, 그리고 4개의 temporal 1D Conv branches 이고 kernel size는 3이며 dilations가 1부터 4의 값을 가지고 있죠. multi-branch TCN은 1x1 conv를 활용해 features를 transform 합니다. 그리고 6개의 group으로 나누는데 같은 channel width를 가지죠. 그런 다음, 각 feature group은 single branch로 processed 됩니다. 6 개의 output은 concatenated 되고 또 다른 1x1 conv에 의해 처리되는 데 이로써 multi-branch TCN의 output이 만들어지죠. 새로운 TCN design은 temporal modeling capability를 향상시킬 뿐만아니라, computational cost와 parameters를 절약합니다. 이는 각 single branch에 대해 줄어든 channel width 때문이죠.

2.3 Benchmarking GCN Algorithms

  PYSKL에서 4개의 대표적인 GCN approaches를 benchmark합니다. ST-GCN, AAGCN, MS-GCD, CTR-GCN ( 최근데는 DG-STGCN이 포함되었더라구요 여튼) ST-GCN ++ 도 있습니다. 이들을 4개의 NTURGB+D benchmark에 대한 결과를 보여주죠. skeleton annotations에 대해 3D skeletons를 고려하는데 이는 CTR-GCN에 의해 pre-processing되었고, 2D skeletons의 경우 HRNet에 dmlgo 추정된 결과이죠. 저자들은 Top1 Accuracy를 report하는데 joint-stream, bone-stream, two-stream, fusion, four-stream fusion에 대해 각각 report합니다.

  원래 reported 되었던 성능과는 다르게, 저자들은 다른 GCN approaches간의 accurcy gaps가 훨씬 더 작다는 것을 발견했죠. 그리고 reproduced results가 reported 된 것들 보다 더 좋았는데, 이는 good pratices들 때문이었고요. 게다가, ST-GCN++는 SOTA 에 맞먹는 성능을 보여주었습니다.

2.4. Spatial Augmentations

  저자들은 spatail augmentations를 적용합니다. 세가지 augmentations를 PYSKL 에서 적용하죠.

1. Random Rotating: 모든 skeletons를 rotate하는데 같은 random한 angle을 활용하죠. 각 element theta는 uniform한 distribution [-0.3,0.3] 에서 sampled 됩니다.

2. Random Scaling: 모든 joint coordinates를 같은 scale fator gamma로 Scale 합니다. 각 element gamma는 uniform distribution [-0.1,0.1] 이나 [-0.2, 0.2] 에서 sampled 되죠

3. Random Gaussian Noise : 작은 Gaussian noise를 각 joint에 더합니다. 이 noise는 frame에 따라 정해지기도 하고 frame에 따라 불변하기도 하죠.

  폭넓은 실험들이 위 3가지 augmentation의 efficacy를 validate하기 위해 시행되었습니다. 3 가지 augmentations 중에 random rotating은 3D skeleton에, random scaling은 2D/ 3D skeleton 모두에 효과가 있었다고 합니다. 다만, Gaussian noise는 모두에 대해 효과가 없었다고 합니다.

 

CNN-based approaches와 conclusion은 생략하도록 할게요! 그럼 이만!

728x90
반응형