본문 바로가기
[Frameworks]/mmaction2

mmaction2 | 비디오 모델 학습 프레임워크

by 하우론 2022. 8. 20.

https://github.com/open-mmlab/mmaction2

 

GitHub - open-mmlab/mmaction2: OpenMMLab's Next Generation Video Understanding Toolbox and Benchmark

OpenMMLab's Next Generation Video Understanding Toolbox and Benchmark - GitHub - open-mmlab/mmaction2: OpenMMLab's Next Generation Video Understanding Toolbox and Benchmark

github.com

 

mmaction2는 OpenMMLab이라는 곳에서 만든 비디오 모델 학습 프레임워크이다. 우리 랩은 비디오를 주력으로 연구하기에 이 프레임워크를 활용하고 있다. 채택한 이유는 크게 다음과 같다.

 

action recognition 데모

 


mmaction2를 쓰기로 한 이유

 

  1. 파이토치로 짜여져있다.
    나는 파이토치가 읽기 편해서 좋다.

  2. DDP로 구현돼있다.
    비디오는 이미지보다 차원이 하나 높고 인풋으로 들어가는 정보량이 많아 모델들의 쓰루풋(instances/sec)이 낮다. 따라서 연구를 위해서라면 multi-gpu 학습이 필수적인데 단순히 DataParallel로 구현을 하면 멀티쓰레드로 동작하고 여러 가지 구현 상의 한계 때문에 GPU utillization이 6~70%에 머문다. 학부 때 이 문제 때문에 이 글을 30번 넘게 봤다. 아마 같은 문제를 겪은 분들이라면 같은 글을 봤을 것이다.
    하지만 이 레포는 멀티프로세싱 기반인 DistributedDataParallel로 구현되어 별다른 문제가 없다면 GPU util 100%로 모델들을 학습시킬 수 있다.

  3. 모듈화가 잘 되어있다.
    model_config.py에 각종 변수들을 기입하고 모델에 넘겨주면 해당 config를 기반으로 모델을 빌드, weight 초기화, 학습 스케줄링까지 다 해준다. train.py를 실행시킬 때 ad-hoc으로 config를 수정하는 것도 가능하다. 우리 랩은 slurm이라는 리소스 매니저가 올라간 클러스터를 활용중인데, 이 기능을 slurm과 결합하면 아주 효율적으로 여러 모델을 학습시킬 수 있다. 쉘 스크립트 짜놓고 job 올려놓고 자러 가면 된다.

  4. 여러 가지 modality를 지원한다.
    RGB 외에도 flow 기반, skeleton 기반 등 다양한 modality를 지원한다. 향후 다른 연구에 써먹을 수 있을 것 같았다.

  5. 해당 연구소에서 만드는 프레임워크에의 친숙도를 올리고 싶었다.
    mmaction 말고도 다른 task를 푸는 프레임워크들도 많이 만든다. 친숙도를 올려놓으면 다른 연구를 할 때 도음이 될 것 같았다.

config 파일 한 줄만 바꾸면 다양한 모델을 학습시킬 수 있다.

범용성이 높은 강력한 비디오 프레임워크이긴 하지만 우리 팀이 프로젝트를 시작할 때 mmaction2를 바로 사용하지 못하는 여러 가지 문제가 있었다.

 


mmaction2 사용을 고민했던 이유

 

  1. mmaction2가 지원하지 않는 데이터셋을 활용해야 한다.
  2. mmaction2는 domain adaptation을 지원하지 않는다.
  3. mmaction2는 contrastive learning을 지원하지 않는다.

 

1.은 데이터셋 구조만 맞으면 상대적으로 간단하게 해결 가능하다.

2.와 3. 때문에 mmaction2를 쓰는 것을 망설였다. 2.와 3.을 가능하게 하려면 레포를 상당히 많이 뜯어야 했다. 하지만 DDP와 모듈화는 포기할 수 없었다. 레포를 이해하고 수정하는 과정이 좀 걸리더라도 mmaction2를 쓰는 게 낫다고 판단했다.

한 달 정도 투자 후 domain adaptation과 contrastive learning이 가능하게 만들 수 있었다. Contrastive learning은 이미 mmselfsup이라는 레포가 나와 크게 도움은 안 될 것 같고, domain adpatation은 좀 가다듬은 후 풀리퀘 할 예정이다.

 

Domain adaptation 튜토리얼은 다음 글로 작성할 것이다.

'[Frameworks] > mmaction2' 카테고리의 다른 글

mmaction2 | mmaction2 구성 살펴보기 (Config File)  (0) 2022.08.21