본문 바로가기
AIML 분야/Video Classification & Detection

논문 읽기: Action Transformer Survey (1)

by 포숑은 맛있어 2021. 1. 14.
반응형

"Video Action Transformer Network"

https://arxiv.org/pdf/1812.02707.pdf

CVPR19 oral 이었다.

 

코드

github.com/ppriyank/Video-Action-Transformer-Network-Pytorch-

 

ppriyank/Video-Action-Transformer-Network-Pytorch-

Implementation of the paper Video Action Transformer Network - ppriyank/Video-Action-Transformer-Network-Pytorch-

github.com

 

논문 마감해서 드디어 다른 논문 읽을 시간이 생겼다.

저번 연구가 action쪽인지라 이것도 action recognition 분야이다.

 

저번에도 transformer에 대해서 잠깐 언급했는데, 이 분야에서도 transformer를 쓴 연구가 있다며 회사 동료가 2편정도 알려줬다.

 

그래서 관련있는것들 읽어보려고 한다.

 

 


 

Task

- Action Recognition with localization

- contextual reasoning

 

Idea

- transformer의 사용?!

- 이 논문에서는 I3D와 RPN을 사용했다고 한다.

 

아래 그림을 보면 대략, 인풋 프레임이 어디에 관심을 가지고 있는지를 셀프어텐션으로 배우겠구만 생각하고 넘어간다.

 

아이디어

 

본론으로 들어가기에 앞서, AVA dataset을 확인하고 가자.

research.google.com/ava/explore.html

 

AVA: A Video Dataset of Atomic Visual Action

 

research.google.com

 

 

Intro를 보면 느끼는건데, 비디오에서 context를 뽑기 위해서는 object detection, tracking, localization쪽과 자주 엮이는 것 같다. 사람(들)이나 사물(들)을 보고 reasoning을 해야만 가능한 고차원적인 정보이기 때문인 것 같다. 저 연구들을 안해봐서 매우 유감이다.

저번에 리뷰한 visual corredspondence를 self-supervised learning 하는 연구에서도 tracker를 도입했었다.

 

AVA가 그런 느낌의 데이터셋이다. 유투브 영상으로 되어있는데, action 정보와 함께 이렇게 박스가 같이 있다.

 

 


Related Works

 

1. Video understanding dataset & AVA dataset 얘기

뭐 이것저것 있는데 생략하자.

 

2. Action recognition에서의 attention 사용 예시

recurrent model이라든가 region graph representation 연구 등을 언급했다.

그중에서도 self-attention을 사용한 Non-Local block과의 비교를 직접적으로 언급한다.

 

 

 

추가로, Transformer는 알고 가야하지 않을까.

다들 한번쯤은 들어봤을 논문, "Attention is All you Need" (NIPS 17, Google Brain)

arxiv.org/pdf/1706.03762.pdf

 


Method

 

어떻게 돌아가는지 간략하게 시나리오부터 알아보자.

 

Input & Task Description

일단 clip input이 있을거다. 이중에 특정 시간에 keyframe으로 설정된 것이 있다.

그 프레임에서 사람을 모두 detection하고, 다들 뭘 하고있는지 action을 전부! 맞춰야한다.

 

따라서, 이 논문에서는 Fast RCNN처럼 base와 head network로 구성하였다. 앞에서 말했듯이 I3DRPN이 필요하다는 얘기다.

 

 

 

Input에 대해,

- 우선 I3D가지고 (3D conv 쓴다고 생각하면 됨) feature를 뽑으며 Region proposal을 한다.

 

center frame feature에 대해서는 아래 연산을 수행한다.

- RPN output에 ROI pooling을 해서 그 박스에 맞는 feature들을 준비하겠지.

- ROI pooing한 피쳐들 가지고 action 맞추기 (or background) + bbox regression (더 정교하게 bbox를 조정해야함)

 

저것만 보면 그냥 일반적인 object detection 같다. center frame 하나에 대해서만 이런 연산을 수행하니까.

=> 음, 그러면 다른 프레임은 어디에 사용하는 거지? 주변 프레임 피쳐들은 왜 뽑은거야? Transformer는 어딨어?

 

이거에 대한 답은 다음 파트를 읽다보면 나올 것 같다.

 

 

3.1 Base Network Architecture

 

아까 이 논문의 네트워크는 base와 head로 나뉜다 했다.

그중 base에 해당한다.

 

Input : T frames (거의 64개)

CNN Feature : Kinetics400에서 pretrained된 I3D 사용.

feature map 사이즈는 저렇게 줄어든다.

RPN (Region Proposal Network) : CNN feature에서 가운데 feature만 골라서 RPN에 넣는다.

- 목적은 (여러)사람의 위치를 proposal하는 것.

- objectness score로 Top 300개의 proposal 뽑음

 

이걸 다음의 'head' network에 넣어 bbox regression 및 classification을 할 것이다.

 

 

3.2 Action Transformer Head

 

여기가 head에 해당한다.

아키텍쳐 그림만 보면 일반적으로 얘기하는 object detection처럼 하는 일은 똑같다.

그림을 보면 Tx라고 써있는 블락이 몇 layer stack되어서 output이 나오는 구조다.

 

input : RPN 적용하고 ROI pooling한 것

output : classification 결과

대략 이렇게 생각하면 된다.

 

결론부터 말하자면, 이 head 안에 있는 Tx Unit에 self-attention 연산이 들어간다.

 

 

 

Transformer의 query, key, value에 대해 알것이다.

간략하게 말하자면, (번역기를 생각하면) query는 번역 되어야하는 문장이고 key & value는 input sequence였다.

 

여기서는 그러면 query, key, value를 어떻게 정의할까?

query = the person being classified (우리 task가 action classification이니까, 이에 해당하는 주체인 사람)

key and values = the clip around the person (활용해야하는 주변 프레임의 정보들)

 

 

Tx Unit 하나의 연산?

  • preprocessing으로 1*1 conv 등을 적용하고 -> self attention 적용하고 -> LayerNorm -> FFN. 
    자세한건 논문과 그림 참조.
  • 위 그림에 있는 Tx Unit은 위의 정보를 가지고, output으로 query vector를 업데이트한 것을 뱉는 것이다.
  • 이걸 원래 transformer처럼 multi-head attention으로 구현하고, 전부 concat해서 다음 레이어의 query로 사용한다.

 

 

query와 key value에 어떤 정보가 들어갈지 떠올려보자.

쿼리에는 ROI pooling 해서 그 사람에 해당하는 feature를 가지고 왔었다. 계속 업데이트 될거긴 하지만.

그리고 key, value에는 계속 모든 프레임들 정보를 넣어준다.

그림에서는 center frame feature가 빠진 것 처럼 생겼지만 사실 모든 프레임의 feature를 넣는다. (코드 확인)

이걸로 self-attention block을 계속 거치면서 쿼리가 업데이트되고, 마지막 레이어에서 이거가지고 action classification / bbox regression을 수행한다는걸 생각하면 된다.

그러면 사람의 action과 관련있는 region이 뭔지에 대한 정보가 레이어가 쌓이면서 점점 그 관계를 반영하게 될 것. 우와!

 

코드도 있고 논문에 디테일이 매우 잘 나와있으니 필요하면 참고하도록 하자.

 

bbox regression은 L1 loss, action classification은 CE loss 썼다.

 

 

 

Experiment

 

아이디어 보고싶어서 읽은 논문이라 설렁설렁 읽었다. 허허..

SOTA 성능 찍었으니 논문이 나왔겠지.

 

아래 그림이 인상적이라 가져왔다.

 

논문에서 transformer를 통해 배우고자 하였던 것이 정말로 어느정도 의미있었음을 알 수 있다.

 

 

그리고 정답 예시, 틀린 예시에 대해서도 분석하였다.

 

 

 

 

 

여담

처음에 논문 제목만 보고 그냥 ViT처럼 transformer만 사용하거나, 2D ResNet feature를 프레임별로 뽑아서 시퀀스로 만든 후 transformer에 넣었다고 생각을 했다.

 

그런데 훨씬 더 정교하게? 처리하기 위한 이런 아키텍쳐를 고안하면서 트랜스포머의 self-attention 연산을 classification head에 넣었다는 점이 인상깊었다.

 

다른 논문도 궁금하니 읽어봐야겠다.

반응형

댓글