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

AVA action 학습이 이해 안가서 주절거리는 글

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

요즘 Action Localization(Detection) 공부를 하고 있다.

대표적으로 AVA action 데이터셋을 사용하는걸로 보인다.

이번에 엄청 큰 데이터셋(Ego4D) 하나 새로 나온걸로 알기는 하는데, 여기에 action detection이 있는지는 모르겠다. HOI는 있던데...

 

어쨌거나 AVA action 데이터의 어노테이션은 bbox와 그 박스에 대한 클래스로 구성되어있다.

다른 박스와 상호작용하는 클래스가 있기도 한데, 어노테이션만 뜯어보면 그냥 bbox각각에 60클래스에 대해 Multi-label classification을 하는 구조.

 

다시 말해, 비디오 클립이 있다고 하면 모든 프레임(정말로 다하진 않고 fps 설정 하겠지만)에서 bbox와 함께 그 오브젝트가 어떤 동작을 하는지를 알아야하는 어려운 태스크이다.

일반적인 CNN처럼 공간에서의 맥락뿐만 아니라 시간축에서의 맥락도 고려해야하며, 박스간의(actor나 object간의) 관계도 고려하도록 모델을 만들어야한다.

 

그러면 구현이 어떻게 되어있을까?

 

mmaction2 코드는 커서 뜯어보기 귀찮으니, ACAR-Net 구현부터 확인했다.

https://github.com/Siyu-C/ACAR-Net/blob/master/models/heads/acar.py

-

 

 

ACAR head 부분을 보면, forward 핵심부분은 미니배치의 데이터 1개씩만 처리한다. 각각 interact_feats를 계산.

알고리즘이야 논문 읽으면 쉽게 알 수 있으니 패스. 전에 논문 리뷰한 것 참고...

그 interact_feats는 bbox 개수만큼 생성된다.

이걸 mini-batch 돌아가면서 수행하여 결과를 concat해주고, 최종적으로는 bbox 단위로 action classification을 하도록 FC를 거친 output이 나온다. (클래스는 60개) 

 

ACAR 모듈에서 이미 bbox 개수와 위치는 안다는 가정하에 시작한다.

그냥 미리 계산된거 불러와서 사용하도록 코딩되어있음.

fair comparison을 위해서인지 gpu 캐파 문제인지 뭔지는 몰라도, 아무튼 ACAR을 학습하는건 (first, second order) relation을 잘 배우기 위함일 뿐이지 detector 자체는 고정이라고 보는 게 맞겠다.

 

-

 

그런데 우리가 이걸 실제 애플리케이션에서 활용하려면 AVA에서 pretrained network를 활용한다고 해도, 결국에는 downstream task에 finetuning을 해줄거다.

 

그러면 어떻게 구현을 해야하나 잠깐 생각.

downstream task에 대해 AVA format의 annotation이 이미 존재한다는 가정.

 

Option 1. detector와 action classifier를 따로 학습하기 (끊어진 그래프)

detection network: 따로 구현하든 레포 가져오든 해서 pretrained 가져다가 finetuning. AVA 포맷으로 만들어둔 데이터셋을 조금 가공해서 object(actor) detection 데이터로 만들어줘야함. 아무튼 잘 학습 한 다음에, csv 형태로 인퍼런스 결과 만들어줄것.

(나중에 actioin localization 인퍼런스 시나리오 생각하면 action localization network에 이 모델을 이식해놓는 작업 필요.)

action localization network: 앞에서 결과 받아다가 현재 ACAR처럼 구현. 마찬가지로 pretrained 가져다가 finetuning, csv파일에 있는 detection 결과 가져다가 사용하는 형태.

 

Option 2. detector와 action classifier를 같이 학습하기?

배치 사이즈 조절하면 되겠다만, ACAR만 돌려도 네트워크가 커서 부담스럽긴 하다.

detection 공부를 해야겠구만...

개념적으로 보면 이렇게 하는게 더 optimal 하겠지만, 뭐가 먼저 수렴하느냐 밸런싱도 문제고 고려해야할게 많을 것 같다.

action localization 모델들이 일단 bbox는 전제로 깔고 roi 피쳐 뽑고 시작하기 때문에 미리 학습을 해놓은걸로 init해놓는게 좋을 것 같아서, 결국 option1이나 2나 구현적인 차이는 단순히 detector finetuning 할거냐 말거냐의 차이로 보인다.

근데 그렇다고 해도 detector가 변하는 와중에 action classifier가 같이 학습된다는건 꽤나 차이가 있지 않을까 싶다...

 

음... 여쭤봐야지.

반응형

댓글