Learning

논문 리뷰 VideoMAE: Masked Autoencoders are Data-Efficient Learners for Self-Supervised Video Pre-Training

Self-supervised Learning

2023
.
04
.
24
논문 리뷰 VideoMAE: Masked Autoencoders are Data-Efficient Learners for Self-Supervised Video Pre-Training

안녕하세요, 오늘은 Video understanding 분야에서 좋은 성능을 거둔 Self-supervised Learning, VideoMAE 를 소개합니다. 이번 리뷰는 Masked Autoencoders (MAE)를 어떻게 비디오에 적용했는지, 무엇이 다르고 어떤 장점이 있는지 등을 설명하도록 하겠습니다.

Introduction

최근 Transformer → Vision Transformer(ViT) → Multi-head Self-Attention(MSA) 순으로 Attention 계열 모델은 여러 번의 개선을 거듭하며 참 다양한 분야에서 좋은 성능을 보여줬습니다. 하지만 비디오에서는 어떨까요? 논문에서는 몇가지 문제점을 짚으며 비디오에서의 ViT 활용이 어려움을 설명했습니다.

  • ViT는 굉장히 많은 지도학습 데이터를 필요로 한다는 것 (Large-scale Supervised Datasets)
  • Video Transformer가 이미 제안된 바 있지만 이미지에 대한 pretrained model에 의존한다는 점
  • 존재하는 비디오 데이터셋은 이미지 데이터셋에 비해 규모가 매우 적다는 점

그래서 레이블 된 데이터에 의존하지 않는 Self-supervised Learning 을 제안했습니다! 구체적으로는 이미지 태스크에서 성공을 거둔 Masked Autoencoder (MAE)를 비디오의 실정에 맞게 도입했는데, 이 논문이 주는 main contribution은 아래와 같습니다.

  • ViT Backbone을 활용한 첫 비디오 pre-training이다 (하지만 ViT를 고수했다는 점이 장점일까요?)
  • MAE 구조가 비디오에서도 Self-supervised Learning 에 효과적임을 보여주었다.
  • 기존 이미지와 자연어에서는 찾기 어려웠던(중요하지 않던) Masked modeling 계의 비밀을 찾아냈다!
    - 3.5k 라는 적은 데이터로도 훌륭한 학습이 가능
    - Source - Target 간의 domain gap이 존재할 때 데이터의 양보다 질이 SSVP (Self-Supervised Video Pre-training)를 수행하는데 더 중요하다!

Proposed Method

Revisiting Image Masked Autoencoders

혹시 MAE 논문을 모른다면 논문을 먼저 이해하고 내용을 넘어가는게 좋습니다.

MAE는 asymmetric encoder-decoder 구조를 활용해 입력 𝛪 와 출력 이미지 𝛪^ 를 동일하게 만드는 모델입니다. 모델의 순서는 참고자료를 보면,

  1. 먼저 입력 이미지 𝛪 를 겹침 16x16 사이즈의 패치들로 분할
    만약 이미지 사이즈가 256x256이라면 가로세로 각각 16등분할이 되어 16x16개의 패치가 만들어진다.
    또는 이미지 사이즈가 320x320이라면 가로세로 각각 20등분할이 되어 20x20개의 패치를 얻는다.
  2. 얻은 패치 중 75%를 마스킹한다. (어떻게 마스킹 하는가?)
  3. 그렇게 남은 25%의 patch만 Transformer encoder 𝛷enc 에 넣는다
  4. 그리고 Decoder 𝛷dec 가 𝛪 와 동일한 차원의 이미지 𝛪^ 를 만든다.
    (25%의 patch만 받아 이미지를 복원하기 때문에 encoder-decoder asymmetric 하다)
  5. Loss function은 오로지 마스킹 된 부분을 잘 복원하도록 설계한다
asymmetric encoder-decoder Loss function
asymmetric encoder-decoder Loss function

Characteristics of Video Data

MAE는 위와 같은 방법으로 성공을 거두었지만 비디오에 대해 그대로 적용하는건 적절하지 않을 수 있습니다. 그 이유는 아래 두가지 비디오의 특징 때문인데요,

temporal reducdancy and temporal correlation
temporal reducdancy and temporal correlation

  • Temporal redundancy: 동영상 프레임을 따라 아주 천천히 움직이기 때문에 정보의 중복이 너무 많다! 이러한 점은
  • ~모델이 가만히 있거나 천천히 움직이는 대상을 복원하는데 집중하게 만들고
  • ~AE를 통한 복원 작업을 너무 쉽게 만들어버린다
  • Temporal correlation: 비디오는 정적 대상에 대한 temporal extension이라고 해석할 수 있다. 따라서 인접한 프레임에서 너무 많은 정보를 얻을 수 있다! 따라서
  • ~Figure 2의 frame masking(b), random masking(c)가 그리 어렵지 않은 작업이 되어버리고 SSVP의 효과를 반감시킨다

Video Masked Autoencoders (VideoMAE)

이제 이 논문에서 Masked Autoencoders 에 Self-supervised Learning 으로 제안하는 방법이 뭔지 살펴보겠습니다.

Temporal Downsampling

  1. 비디오 V가 있을 때, t개의 연속한 프레임을 랜덤하게 고른다
  2. t개 프레임을 T개로 샘플링한다 (stride = 4 for Kinetics, 2 for Something-Something)

Cube Embedding

ViT에서는 16x16이 하나의 패치였지만 이번엔 시간축까지 포함하여 2x16x16이 하나의 token embedding이 됩니다. 코드를 보면 2D Convolution이 아닌 3D Convolution으로 쓰는 것을 확인할 수 있습니다 - VideoMAE - Github


class PatchEmbed(nn.Module):
    """ Image to Patch Embedding
    """
    def __init__(self, img_size=224, patch_size=16, in_chans=3, embed_dim=768, num_frames=16, tubelet_size=2):
        super().__init__()
        img_size = to_2tuple(img_size)
        patch_size = to_2tuple(patch_size)
        self.tubelet_size = int(tubelet_size)
        num_patches = (img_size[1] // patch_size[1]) * (img_size[0] // patch_size[0]) * (num_frames // self.tubelet_size)
        self.img_size = img_size
        self.patch_size = patch_size
        self.num_patches = num_patches
        self.proj = nn.Conv3d(in_channels=in_chans, out_channels=embed_dim, 
                            kernel_size = (self.tubelet_size,  patch_size[0],patch_size[1]), 
                            stride=(self.tubelet_size,  patch_size[0],  patch_size[1]))

    def forward(self, x, **kwargs):
        B, C, T, H, W = x.shape
        # FIXME look at relaxing size constraints
        assert H == self.img_size[0] and W == self.img_size[1], \
            f"Input image size ({H}*{W}) doesn't match model ({self.img_size[0]}*{self.img_size[1]})."
        x = self.proj(x).flatten(2).transpose(1, 2)
        return x

Tube Masking with Extremely High Ratios

Uncurated random vidoes
Uncurated random vidoes

MAE와 다르게 비디오에서는 굉장히 높은 비율의 masking을 적용했다고 하는데 여기에는 Temporal redundancy / Temporal correlation 두가지 근거가 있습니다.

이 이미지는 대체 속성이 비어있습니다. 그 파일 이름은 image-2-1024x687.png입니다

이 이미지는 대체 속성이 비어있습니다. 그 파일 이름은 image-3.png입니다

첫번째 이미지가 ImageMAE의 masking ratio - accuracy 그래프, 두번째 이미지가 VideoMAE의 masking ratio - accuracy 그래프. 모양은 비슷하지만 자세히 보면 왼쪽은 75% 지점에서, 오른쪽은 95% 지점에서 성능 하락이 발생함을 알 수 있다.

  • Temporal redundancy: 비디오는 이미지와는 다르게 딱 한장으로 모든 정보를 다 이해할 필요가 없다. 여러 프레임에서 보다 풍부한 정보를 획득할 수 있기 때문에 좀 더 reconstruction을 더 어렵게 만들 필요가 있다.
    참고로, 이미지에서 마스킹 비율에 따른 성능 그래프는 MAE 논문과의 비교에서 확인할 수 있다.
  • Temporal correlation: 같은 위치의 픽셀은 시간축을 따라서도 모두 동일한 마스킹 여부를 갖는다. 쉬운 이해를 위해 비유를 하자면, 정확히 포개어 겹겹이 쌓아놓은 기왓장더미에 기둥을 아주 많이(90%, 95%) 관통시킨 모양을 상상하면 된다. 참고로 기둥은 모든 기왓장을 관통할 정도로 충분히 길다.
    그리고 마스크의 분포는 Bernoulli 분포를 따른다.
이 이미지는 대체 속성이 비어있습니다. 그 파일 이름은 image-4.png입니다


Backbone: Joint Space-time Attention

90% ~ 95% 거의 대부분을 마스킹하고 나니 남은 토큰이 얼마 없습니다. 그나마 남은 토큰을 살려서 비디오를 잘 복원하기 위해 기본 ViT에 Joint Space-time Attention을 적용했습니다 (ViViT 논문 참고).

한가지 단점이 있다면 이 Atttention 방법은 quadratic complexity를 갖는다는 것인데, 애시당초 원본 비디오를 거의 다 마스킹 해버리고 남은 내용이 얼마 없어서 연산량이 많지 않기 때문에 괜찮다고 합니다.

Results

이 이미지는 대체 속성이 비어있습니다. 그 파일 이름은 image-5-1024x742.png입니다
Something-Something V2 and Kinetics-400

논문의 결과를 보면 몇가지 생각이 듭니다. 그 중 두가지만 언급하면

Mask sampling

  • tube가 random보다 더 성능이 좋았다
  • 하지만 random의 경우에 masking ratio에 대한 성능 추이를 볼 수 있다면 더 좋을 것. 왜냐하면 random with extremely high ratio의 경우, 시간축을 따라 인접 픽셀에서 얻을 수 있는 정보가 너무 없을 수 있기 때문에 (tube보다도 더욱) 조금 masking ratio를 낮춘다면 오히려 좋은 결과를 보일 수도 있다

Loss function

  • MSE loss(L2 loss)에서 가장 좋은 성능을 보였다. 큰 차이는 없지만 역시나 reconstruction task에서 L2 loss가 가장 좋은 성능을 보였는데, 그 이유는
    - Convex function
    - Differentiable
    - Gaussian noise에 대해 maximum likelihood를 찾을 수 있다는 점

    Gaussian은 대표적인 Unimodal distribution인데, 이것을 최적화 하다보면 결국 가장 ‘그럴싸한’ 영상 복원을 하게 된다. Image Reconstruction 분야에서 이는 결과물을 흐릿하게 만드는 성질이 있는데, Video에서는 전체적으로 행동을 이해하는게 중요하지, 이미지 픽셀 하나하나를 잘 복원하는게 그렇게 중요하지 않아서 그럴 가능성이 있다. 사람이 다소 흐릿하게 보이더라도 그가 무슨 행동을 하는지 대충은 알 수 있다는 점을 생각하면 이해가 된다.
  • 하지만 큰 차이는 없다.

Reference

[논문 리뷰] VideoMAE - Masked Autoencoders are Date-Efficient Learners for Self-supervised Video Pre-Training

Table of Contents
Talk to Expert