논문 요약

[CVPR-2019]Skeleton-Based Action Recognition with Directed Graph Neural Networks

논문읽어주는석사생 2019. 11. 26. 17:51

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

 

정말 오랜만에 리뷰를 시작합니다. 그 동안 논문 submission을 준비하느라 바빠서 논문을 읽어도 정리를 못했네요ㅠ

 

오늘 리뷰할 논문은 'Skeleton-Based Action Recognition with Directed Graph Neural Networks'로 이전에 계속 행동인식 중에서도 GCN 구조를 이용한 알고리즘을 소개했었는데 그 뒤를 잇는 논문입니다. 기본적인 모델의 구성은 이전에 리뷰했던 ST-GCN, AS-GCN, 2S-AGCN 들과 유사합니다. 모두 같은 ST-GCN을 base line으로 업그레이드 시킨 논문들이기 때문이죠. 이번 논문 역시 앞 부분의 내용들은 모두 스킵하고 설명할 예정입니다. 따라서 뭐지? 갑자기 이건 어디서 나온 내용이지? 하시는 분들은 이전 포스팅을 참고 해주시기 바랍니다.  

 

논문 전문 : http://openaccess.thecvf.com/content_CVPR_2019/papers/Shi_Skeleton-Based_Action_Recognition_With_Directed_Graph_Neural_Networks_CVPR_2019_paper.pdf

[출처] Shi, Lei, et al. "Skeleton-Based Action Recognition with Directed Graph Neural Networks." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2019.

 

 

<개요>


행동인식에서 bone 정보를 활용하는 것이 매우 중요하다. 실제로 사람이 행동을 판단할때 관절의 위치 정보를 사용하는 것보다 bone의 방향이나 위치를 활용하는 것이 더 직관적이며 의존적이다. 예를 들어, 사람의 팔꿈치 관절의 경우 upper arm bone이 이동하면 자연스럽게 위치가 따라 움직이게 된다. 

 

기존의 알고리즘들에서는 관절의 위치 data와 bone data를 두개의 stream으로 나눠서 각자 학습시켜왔다. 이 두 data를 사용하기 위해 GCN을 활용한 행동인식의 알고리즘은 undirected graph를 이용했다. 즉, edge들이 연결되기는 하나, 연결됨에 있어 방향성이 존재하지 않았다. 

 

이 논문에서는 bone data를 좀 더 직관적으로 활용할 수 있도록 (1) directed acyclic graph를 활용한 GCN을 제안한다. 이를 이용해 bone data를 직관적으로 표현할 수 있을 뿐만아니라 각 관절의 값이 주변에 인접해있는 관절에도 전파될 수 있다. 

 

추가적으로 (2) adaptive graph convolution을 적용하여 이전 논문들에서도 해결하고자 했던 멀리 떨어진 관절과의 관계성을 찾을 수 있도록 했다. 

 

마지막으로는 (3) two-stream 구조를 그대로 유지하되, 두번째 data를 bone으로 하는 것이 아니라, motion data를 사용한다. 즉 인접한 frame에서의 bone과 joint 값을 빼 optical flow를 구한다. 이는 시간 상에 특별한 관계성을 보이는 동작에서 많은 도움을 줄 수 있다. 

 

이 3가지 개선점들이 각각 어떻게 구현되었는지 좀 더 자세히 알아보자. 

 

 

 

<알고리즘 설명>


1. Graph Construction

 

위의 그램에서 보이는 것과 같이 graph를 구성한다. 각 joint들은 node로 bone들은 directed edge로 설정한다. 각 edge의 방향은 중심 joint, 즉 1번 joint와의 현재 joint의 거리에 따라 결정된다. 가까운 node에서 먼 node로 edge의 방향이 설정된다. 

 

 

2. Directed graph network block

 

DGN block은 위의 그림과 같이 edge와 vertex가 순차적으로 업데이트된다. 각각을 업데이트 하기 위해 두가지의 함수가 필요합니다. 첫번째는 $g$로 표현되는 aggregation 함수이다. $g$는 각각의 node에 들어오는 모든 edge들을 포함하는 attribution을 만든다. 두번째는 $h$로 표현되는 update 함수이다. $h$는 각각의 edge와 vertex를 이어진 edge와 vertex들로부터 attribution을 업데이트 시킨다. 이 두가지를 이용해 다음과 같은 수식들로 각각의 값은 전파된다. 

각각의 값들은 다음의 순서에 따라 업데이트 됩니다. 

 

1. 각각의 vertex $v_i$에 대해, 해당 vertex에 들어가는(incoming) edge들을 이용해 $g^{e^-}$에 넣어 새로운 $\bar e_i^-$를 만든다. 

 

2. 위와 유사하게 vertex $v_i$에 대해, 해당 vertex에 나가는(outcoming) edge들을 이용해 $g^{e^+}$에 넣어 새로운 $\bar e_i^+$를 만든다. 

 

3.  $v_i$, $\bar e_i^-$, $\bar e_i^+$를 하나의 벡터로 합친 후 update 함수 $h^v$를 이용해 새로운 $
v'_i$를 구한다.

 

4.  모든 edge $e_j$에 대해, 해당 edge의 source vertex, target vertex 그리고 자기 자신을 하나의 벡터로 합친 후 update 함수 $h^e$를 이용해 새로운 $e'_j$를 구한다.

 

 

3. Adaptive DGN block

 

위에서 설명한 DGN block에 적응적으로 edge가 변화될 수 있도록 다음과 같은 요소를 추가한다. 사람의 움직임에서 높은 관계성을 보이는 관절들은 이웃한 관절 뿐만 아니라 멀리 떨어진 경우도 존재하기 때문이다. 예를 들어, 걷는 동작의 경우 오른손과 왼손의 관계성이 중요할 수 있다. 

 

기존의 ST-GCN의 경우 그래프의 topology가 사람의 몸 구조에 맞춰서 고정되서 사용이 되었다. 이 문제를 해결하기 위해 이전에 설명했던 논문들에서와 같이 해당 논문에서도 새로운 edge를 추가했는데 본 논문에서는 $P$라고 명명한다.

 

해당 parameter의 역할은 2S-AGCN에서 설명했던 것과 동일하다. 매 layer에서 동일한 topology를 갖지 않도록 학습 가능한 parameter를 선언한다. 그리고 기존의 구조적인 edge를 표현하는 그래프의 인접행렬을 $A$라면,

새로운 $A' = P + A$이다. 

 

$P$는 학습이 될 수 록 해당 데이터 셋의 행동을 잘 구분해내는 edge를 배우게 된다. 

 

단, 이때 $P$가 추가됨에 따라 오히려 학습해야할 parameter의 개수가 너무 많아져서 데이터에 쉽게 overfitting 될 수 있다. 이 점을 막기 위해 training 첫 부분에서는 $P$값을 $A$값으로 초기화 한 뒤 고정시켜 학습을 진행한다. 이 후 안정기에 접어들면, $P$를 학습시킴으로써 global optimum 지점을 찾을 수 있도록 한다. 

 

4. Temporal information modeling

위에서 설명한 GCN의 경우 시간 축에 대한 정보를 추출하는 부분이 존재하지 않는다. 반면 행동인식에서 시간 축에 따른 관절의 변화 또한 매우 중요하다. 이러한 부분을 해결하기 위해 DGN block 안에는 temporal 축으로 GCN 연산을 하게 되는데, 이를 통해 시간 축을 따라 하나의 관절 혹은 bone의 특징을 찾아낼 수 있다. 

 

5. Two-stream framework

앞서 설명했던 것과 같이 해당 모델을 두가지 데이터 형태에 맞춰 각각을 학습시킨 후 앙상블해 최종 결과를 만든다. 첫번째 stream이 $v_i$와 $e_j$로 구성된 그래프들을 사용했다면, 두번째 stream은 다음과 같은 수식으로 구성된 데이터를 사용한다. 

$$m_{v_t} = v_{t+1} - v_t$$

$$m_{e_t} = e_{t+1} - e_t$$

 즉, velocity에 대한 정보를 사용해 두번째 stream을 학습시킨다. 

 

<사족>


비슷한 시기에 유사한 알고리즘을 사용하는 행동인식 논문들이 우르르 나왔습니다. 역시 컴퓨터 비젼 쪽은 시간 싸움이에요....

 

이 논문의 경우 다른 논문들과는 달리 조금 더 bone에 대한 정보에 많은 힘을 실어줍니다. 실제 결과를 봤을 때도 확실히 이 논문이 가장 좋은 수치를 보이고 있습니다. 아무래도 GCN을 사용할거라면, 이 논문에서 제안하는 DGN을 사용하는 것이 도움이 될 것 같네요. 

 

한가지 의문점이 드는 것은, 다른 논문 들의 경우 멀리 떨어진 두 관절간의 관계성을 어떻게 구해낼 것인가에 많은 초점이 맞춰져 있습니다. 이 논문에서는 아주 부분적으로 들어가있죠. 그렇다면 directed graph에서는 두 관절 간의 관계를 구해서 학습이 될 경우 오히려 방해가 될 수 도 있을 것 같은데요. 아무래도 그 방향에 따라서 값의 변화가 전파가 되는 것이 어떤 영향을 미치는 것이 아닐까 라는 의심을 하게 됩니다. 아주 훌륭하게 먼 관절간의 관계성을 해결한 2S-AGCN의 저자와 동일한데도 두 논문을 합치지 않은 것을 보면, 아마도 합쳤을 때 더 좋지 못한 결과를 확인한 것 같기도 합니다.....이 부분은 조금 더 실험적인 확인이 필요할 것 같네요. 

 


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

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