논문 요약

[AAAI-2017] An End-to-End Spatio-Temporal Attention Model for Human Action Recognition from Skeleton Data

논문읽어주는석사생 2019. 7. 16. 11:44

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

 

오늘 요약하는 논문은 2017년 AAAI에 소개된  "An End-to-End Spatio-Temporal Attention Model for Human Action Recognition from Skeleton Data" 입니다. 

 

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

[출처]Song, Sijie, et al. "An end-to-end spatio-temporal attention model for human action recognition from skeleton data."  Thirty-first AAAI conference on artificial intelligence . 2017.

 

제가 최근 spatio-temporal attention model과 관련된 논문들을 찾아보고 읽기 때문에 아마 당분간은 비슷한 류의 논문들이 많을 것으로 예상됩니다...!

 

<개요>


행동을 인식할 때는 행동에서 다른 joint들에 비해 특정 어떤 joint 값이 더 중요하게 판단될 수 있고(spatial) 모든 frame 중 어떤 frame이 더 중요하다고 판단될 수 있다(temporal).

 

 

 

위 그림에서도 펀치라는 동작에서 맞는 사람의 머리와 허리, 때리는 사람의 손에 많은 weight가 있다. 또한 temporal축으로 climax가 존재한다.

이러한 특징을 살려 학습하기 위해 본 논문에서는 spatio-temporal attention 알고리즘을 제안한다.

 

<알고리즘 설명>


이 알고리즘은 크게 세개의 파트로 구성된다. 첫번째로 한 프레임 내에서 중요하다고 판단되는 joint에 weight를 부과한다. 이 부분이 spatial attention이다. 두번째로 weighted feature vector를 LSTM에 입력해 시간 축에 따른 정보를 추출한다. 추출된 정보들을 모두 사용하는 것이 아니라 마지막으로 temporal 축에 따른 attention을 계산하여 특정 frame만을 추출한다. 

 


1. spatial attention with joint selection gates

자동으로 중요 joint를 찾아주는 gate이다. Gate는 다음과 같이 계산된다.

 

Xt는 각 time step t에 대해 전체 joint의 set이다(k번째 joint까지 존재). 이 X에 대해 각 중요도를 계산한 set을 S라고 하자. 이때 각각의 중요도는 (2)의 계산식을 통해 나온다.

 

 

w,u는 학습 가능한 파라미터로 각각 lstm layer의 weight, fc layer의 weight가 된다. 즉 (2)식이 표현하는 바가 위의 그림의 빨간색 박스 안의 결과 값이 된다!

(댓글의 도움을 받아 순서가 변경되었습니다ㅎㅎ)

중요 joint를 찾기 위해 사용되어진 h값은 lstm의 hidden state 값이 된다. 즉, lstm의 결과를 사용하게된다. 이때 lstm을 사용함으로써 현재 frame의 정보와 이전 frame들의 정보를 이용해 attention을 주게 된다. 즉, 관절 간의 중요도를 파악하기 위해 시간 축을 따라 넘어온 feature들의 정보를 이용하여 계산한다는 뜻이다. 

 

계산된 S를 이용하여 (3)번 식을 이용해 구해진 attention을 x와 곱해 main lstm의 입력값으로 사용한다.

(3)번식이 의미하는 바는 결국 전체 S값에 대해 현재 time step의 현재 joint의 중요도의 비중을 표현한다. 즉, 현재의 가중치가 전체에 비해 크면 클 수 록 $(alpha) 값이 커져 attention weight가 커지게 된다. 

 

2. temporal attention with frame selection gate

 

 한 시퀀스 동안 의미있는 중요한 정보를 제공하는 프레임은 몇 개의 key frame밖에 없다. Ex. 악수하기의 경우 두 사람이 다가오는 시퀀스보다 악수를 하고 있는 중이 더 중요하다. 이러한 가중치를 자동으로 주기 위해 이 모듈을 본 논문에서 제안했다.

 

(6)번식을 이용해 temporal attention을 구한다.

(6)번 식이 의미하는 바는 위의 그림에서 파란색 블럭이다. 이때 입력값은 main lstm의 결과 값이 아닌 처음의 input 값을 그대로 사용한다. 

 

이렇게 계산 되어진 중요도에 (4)번식을 이용해 각 class 별로의 확률을 계산한다. 확률이 제일 높은 class로 결과를 낸다.

이 부분이 제일 마지막의 결과값을 도출하는 부분이다. 

 

3. Loss

위와 같이 forwarding을 마치고 나면 다음과 같은 방식으로 loss를 구한다. 

 

 

첫번째 term은 classification 결과에 대한 cross entropy이다.

 

두번째 term은 spatial attention 모델이 한 시퀀스에서 spatial joint들에 좀 더 다이나믹하게 집중할 수 있도록 돕는다. 즉. attention에 대한 평균이 높으면 높을 수 록 loss가 작아진다. 즉, 모든 시퀀스에서 동일한 joint가 중요하다고 말할 수 있도록 돕은 loss이다.

 

세번째 term은 시간의 attention에 대한 l2 norm을 구한다. 값이 경계를 벗어나서 너무 커지지 않도록, 즉 하나의 frame만 뽑지 않도록 돕는다.

 

네번째 term은 네트워크의 오버피팅을 막는다. Wuv는 네트워크에서 연결 메트릭스를 의미한다. (이부분은 저도...잘....모르겠네요...훗날 알게된다면......추가할거에요...아마.....)

 

 

<사족>


제가 개인적으로 논문을 읽으면서 붙이는 사족입니다. 논문에서 말하고자 하는 행동에 있어서 시간축, 관절축을 따라 attention이 필요하다는 의견에 전적으로 동의합니다.

 

실제로 현재 많이 쓰이고 있는 3d skeleton data의 경우 굉장히 많은 noise 들이 포함되어 있기 때문에 모든 data를 사용해서 학습 시킬 경우 오히려 더 방해가 될 가능성이 매우 높습니다. 이러한 noise를 attention 모듈에서 제거해줄 수 도 있죠.

 

또한 행동의 경우 시간축에 따라 variance가 굉장히 큰 편입니다. 동작을 수행하는 사람에 따라 행동의 속도가 달라질 수 있죠(ex.걷는 속도). 이러한 문제 또한 attention이 시간축을 따라 동작하면서 행동이 느린 사람의 경우 중간 중간 frame에 적은 weight를 줄 수 도 있고 동작이 빠른 행동에는 바로 연달아 높은 weight를 줄 수 도 있겠죠. 

 

이런 장점에 대해 이 논문이 갖고 있는 두가지 단점(제가 생각했을때에....ㅎ)을 꼽자면, 

  1. 학습이 어렵다.
    - 배워야하는 loss term이 많아서 학습에 어려움이 존재합니다. 실제로 논문에서도 학습을 잘 되게 하기 위해서 spatial 모듈과 temporal 모듈을 순차적으로 켰다 껐다 하면서 학습을 시키더라구요. 
  2. 결국 spatial과 temporal이 분리된 구조로 두개의 연관성을 직접적으로 찾는 것이 어렵다.
    - 흔히 사용되는 two stream 구조와 유사하게 joint 축에서의 중요한 joint와 temporal 축에서의 중요한 frame을 찾아내는 것이 가능하다 혼합적으로(ex.특정 frame의 특정 joint가 중요하다)를 찾아내는데는 한계가 있을 수 있습니다. 두개를 분리해서 찾아내기 때문이죠...!

처음 쓴 글이다보니....이걸 누가 읽을까 싶네요ㅜㅜ 사실 저만 알아볼 수 있는 말들로 쓴 것 같기도 하고...결국 그냥 제 일기장이 될 것 같기도 하고....

 

아무튼 이걸로 본 논문의 요약은 마칩니다! 끗!