논문 요약

[AAAI-2018]Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recognition

논문읽어주는석사생 2019. 8. 23. 17:17

* 본글의 모든 그림은 논문의 본문에서 가져왔습니다.

 

이번 요약하는 논문은 AAAI 2018에 나온 "Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recognition"입니다. 

 

최근(작년부터?)에 행동 인식 분야에서 가장 핫하게 등장하는 네트워크가 바로 GCN(Graph Convolutional Networks)입니다. GCN은 쉽게 설명드리자면, 어떤 그래프 구조를 이미지 convolution과 유사한 방식으로 연산해서 특징점을 추출하는 네트워크입니다. 사람의 몸도 어떻게 보면 각 관절과 그 관절들이 연결되어있는 구조로 그래프 구조라고 볼 수 있죠. 그렇기 때문에 GCN을 사용한 논문들에서도 좋은 성능을 보이고 있습니다.

 

구체적으로 어떻게 적용하고 있는지는 아래의 설명을 통해 풀어보도록 하겠습니다.

 

+ 참고로 논문에 수식이 많아....구체적으로 이해하기 어려웠어요ㅠ 여기 업로드 하는 모든 논문들이 마찬가지지만...이건 특히 더 어려웠달까?ㅠ

 

논문 전문 : https://arxiv.org/pdf/1801.07455.pdf

[출처]Yan, Sijie, Yuanjun Xiong, and Dahua Lin. "Spatial temporal graph convolutional networks for skeleton-based action recognition." Thirty-Second AAAI Conference on Artificial Intelligence. 2018.

 

 

<개요>


행동 인식을 하기 위해 사용하는 데이터셋의 modality는 다양하다. RGB 영상, depth 영상, 움직임의 방향이 표현된 optical flow, 그리고 skeleton data가 있다. 이 논문에서는 그 중에서도 skeleton을 이용한 행동인식 성능 향상을 위한 방식을 제안한다. 

 

skeleton data의 경우 자연스럽게 사람의 관절의 위치를 시간축에 따라 표현되어진다. 이러한 구조의 data로 학습을 진행하기 위해 이전의 방식에서는 한 frame에서의 관절의 위치 값들을 하나의 feature vector로 사용해서 학습을 시켰었다. 이 방식의 경우, 행동인식에서는 관절 간의 관계성 또한 매우 중요함에도 불구하고 해당 정보가 학습에 포함되지 않는다. 본 논문에서는 공간적 관계성을 찾아내기 위해 GCN을 이용한다. 

 

GCN을 사용하기 위해서는 데이터셋을 그래프 모양으로 만들어야한다. 기존의 GCN을 사용한 행동인식의 경우, 특정 탐색 규칙 혹은 hand-craft part assignment가 필요했다. 본 논문에서는 그런 ㅎ과정을 없애고 성능을 향상 시켰을 뿐만 아니라 서로 다른 데이터셋에서 적용해 일반화 시킬 수 있도록 했다.  

 

자세한 구조는 아래의 알고리즘 설명을 통해 확인해보자.

 

 

<알고리즘 설명>


[Figure 2]

[Figure 2]에서 개략적인 이 논문에 구조를 보여준다. 

 

1. 동영상으로부터 skeleton을 추출한다.

2. skeleton data를 그래프 형태로 만든다.

각각의 joint들을 노드로 만들고 각각의 노드가 이어지는 부분(공간, 시간)을 edge로 연결한다.

3. 총 9개의 ST-GCN 모듈을 통해 feature를 추출한다. 

4. softmax 함수를 이용하여 행동을 분류한다. 

 

 

1. Skeleton Graph Construction

[Figure 2]

[Figure 2]와 같이 skeleton data를 그래프로 만든다. 모든 frame에서의 skeleton의 joint들이 하나하나의 vertex로 구성되고 한 frame 내에서의 주변 joint들과 edge로 연결된다. 또한 frame 사이에서 같은 joint 끼리도 edge로 연결된다. 이러한 그래프 구조는 dataset의 종류와 관계없이 모두 동일하게 적용 가능하다. 

 

그래프에서 vertex의 집합은 다음과 같이 표기된다. T는 frame의 개수, N은 한 skeleton에서 joint의 개수를 의미한다. 

V = {vti|t = 1, . . . , T, i = 1, . . . , N}

 

edge의 경우 두 종류로 나뉘는데 한 frame 안에서 joint의 edge는 다음과 같다. 

ES = {vtivtj |(i, j) ∈ H}

 

다른 frame에서 같은 joint간의 연결은 다음과 같다.

EF = {vtiv(t+1)i}

 

 

2. Spatial Graph Convolutional Neural Networks

ST-GCN에 대해 설명하기전, GCN에 대해 먼저 알아보자. 

수식은 위에와 같다. 크게 두가지 부분으로 나뉘어진다. fin은 그래프의 feature map으로 fin안의 위치에 있는 값을 갖고옵니다. p는 sampling function, w는 weight function, Z는 normalize function입니다.

 

(1) Sampling function

이미지의 2D convolution에서 한 픽셀로부터 주변 픽셀들을 가져오는 함수라 할 수 있다. 그래프에서는 이미지처럼 정해진 인접 픽셀이 정해진 것이 아니라, 정해진 룰에 따라 가져올 수 있는 픽셀의 범위가 넓어질 수 있다. 예를 들어 D=1인 거리를 갖는다면, 한 노드의 주변 픽셀은 해당 노드와 바로 연결되어있는 노드들이 된다. 

 

(2) Weight function

위의 sampling function을 통해 얻어와진 픽셀들에 weight를 더하는 함수이다. 이미지의 경우 이미 정해진 grid가 존재하기 때문에 거리적으로 weight가 정해져있다. 반면 그래프의 경우 어떤것이 더 가깝고 멀고가 존재하지 않기 때문에 그에 해당하는 weight를 준다. 

 

위의 두개의 function을 정리하면 다음과 같다. 

이 수식의 경우 일반적인 convolution 수식과 유사해 가치가 있다. 예를 들어, 3x3 convolution와 유사하게 위 식에서도 총 9개의 subset을 갖게된다. 각각의 subset은 하나의 이웃 노드를 의미한다. 

 

3. Partition Strategies

이웃노드를 정의하는 방식에는 여러가지가 존재한다. (a)와 같은 skeleton graph가 있을 때 (b)와 같이 거리가 1인 모든 노드를 하나의 subset으로 묶을 수 있고, (c)와 같이 path의 길이에 따라 weight를 준 형태가 될 수 도 있다. 마지막 (d)의 경우 해당 노드로 부터 중심노드(위의 이미지에서는 X표)와의 거리 순으로 다른 색깔로 weight를 줄 수 있다. 본 논문에서는 각각을 실험해본 결과 (d)가 가장 좋은 성능을 낸다고 한다. 따라서 이 후 실험에서도 동일한 방식을 사용한다. 

 

 

<사족>


이 논문의 단점으로 얘기하자면...

 

'관절의 관계성을 로컬영역에서 밖에 찾지 못한다' 입니다. 주어진 최대 distance에 따라 연결되어진 관절 간의 관계성 밖에 찾지 못합니다. 예를 들어 멀리 떨어진 왼손과 오른발의 관계성을 찾는데 명시적이지 못하죠.

 

이 문제를 해결하고자 연구된 후속 논문이 바로 2019년 CVPR에 공개된 'Actional-Structural Graph Convolutional Networks for Skeleton-based Action Recognition'입니다. 어떤식으로 문제점을 해결했는지는 다음 포스팅에서 리뷰를 하며 설명하도록 하겠습니다. 


그럼 이번 논문 리뷰도 여기서 마치겠습니다.

질문이나....오류가 있다면 댓글 언제든지 환영이에요!