세상의 변화에 대해 관심이 많은 이들의 Tech Blog search

Video Swin Transformer 논문 설명

|

이 글에서는 Microsoft Research Asia에서 발표한 Video Swin Transformer 논문을 간략하게 정리한다.


Video Swin Transformer

논문 링크: Video Swin Transformer

Github: https://github.com/SwinTransformer/Video-Swin-Transformer

  • 2021년 6월(Arxiv)
  • Microsoft Research Asia, University of Science and Technology of China, Huazhong University of Science and Technology, Tsinghua University
  • Ze Liu, Jia Ning, Yue Cao, Yixuan Wei, Zheng Zhang, Stephen Lin, Han Hu

Computer Vision 분야에서 general-backbone으로 사용될 수 있는 새로운 Vision Transformer인 Shifted WINdow Transformer이다.


Abstract

Vision community에서는 모델링을 할 때 CNN에서 최근 Transformer로 넘어오고 있다. (그러나) 지금까지의 연구들은 공간적/시간적 차원에서 patch들을 globally connect하는 Transformer layer에 기반을 두고 있다. 이 논문에서는 video Transformer에서 inductive bias of locality를 이용, self-attention을 globally 계산하는 것보다 더 좋은 결과를 가져왔다.

기본적으로 이 논문은 기존의 Swin Transformer을 시간 차원으로 한 차원 더 확장시켜 이미지에서 비디오로 확장한 논문이다. 최종적으로 Video Action Recognition 등 여러 task에서 좋은 성능을 냈다.


1 Introduction

2020년 이전만 해도 이미지와 비디오를 다루는 데에는 CNN을 사용하는 것이 일반적이었다. 비디오의 경우 3D-CNN을 기반으로 하여 C3D, I3D, R3D 등 많은 논문들이 비디오 관련 문제를 풀어냈다.

그러나 최근에는 ViT를 필두로 Transformer를 이 vision 분야에 적용시키는 연구가 시작되었고 ViViT, MTN, TimeSFormer 등이 빠르게 발표되었다. 또 factorization 접근법 등도 같이 사용되었다.

이 논문에서는 비디오에서 인접한 프레임, 인접한 픽셀 사이에는 spatiotemporal locality(즉, 비슷한 곳이나 때에 있는 픽셀은 비슷한 값을 가짐)가 존재하는 점을 이용, 비디오 전체에 걸쳐 self-attention을 수행하는 대신 국지적으로(locally) 연산을 수행하여 더 작은 모델로 계산량을 대폭 줄이는 방법을 제안한다.

Swin Transformer은 spatial locality에 대한 inductive bias 및 계층적 구조를 채용한다. 이 논문(Video Swin Transformer)는 이 Swin Transformer를 시간 축으로 한 차원 확장하여 비디오에 적용시키는 논문이다.

모델은 대규모 이미지 데이터셋에서 사전학습된 강력한 모델로 쉽게 초기화할 수 있는데, learning rate를 임의로 초기화한 head에 비해 (0.1배쯤?) 더 작게 주면 backbone은 이전 parameter를 서서히 잊으면서 자연스럽게 새로운 video input에 최적화되어 더 좋은 일반화 성능을 가지는 것을 저자들은 발견하였다.

결과적으로, 더 작은 모델 크기를 가지면서도 더 높은 성능을 가지는 모델을 만들 수 있었다. Video Recognition Task(Kinetics-400/600)에서 top-1 정확도는 기존 SOTA인 ViViT를 근소하게 앞선다.


CNN and variants

Vision 분야에서는 CNN이 전통적인 강자이다. 2D CNN을 시간 축으로 한 차원 확장한 3D-CNN을 비디오에 적용한 논문이 다수 발표되었다. 자세한 내용은 해당 링크 참조.

Self-attention/Transformers to complement CNNs

  • NLNet은 self-attention을 visual recognition task에 적용한 최초의 시도였다.
  • GCNet은 NLNet의 정확도 향상은 global context 모델링에 기초하는 것을 알고 global context block에 집중하여 성능은 거의 비슷하면서 모델 크기는 크게 줄인 모델을 만들었다.
  • DNL은 shared global context는 보존하면서 다른 pixel에 대한 다른 context를 학습할 수 있게 하여 degeneration problem을 완화하였다.

Vision Transformers

  • ViT, DeiT이 vision task를 CNN에서 Transformer로 풀도록 이끌었다.
  • Swin Transformer는 locality에 inductive bias를, hierarchy, translation invariance를 추가하여 다양한 이미지 인식 task에서 backbone으로 쓸 수 있다.
  • Transformer 기반 논문의 성공에 힘입어 비디오로 적용한 논문들(VTN, ViViT, MViT 등)이 다수 발표되었다.

3 Video Swin Transformer

3.1 Overall Architecture

  • Swin Transformer를 거의 그대로 계승한다.
  • 시간 차원이 추가된 것을 알 수 있다. 단, 공간 차원과 달리 시간 차원은 맨 처음 반으로 줄이는 것 외에 더 건드리지 않는다.
  • 시간 차원 외에는 거의 같다. Patch Partition 이후 시간 차원이 반으로 줄어드는데 feature가 48이 96으로 2배 증가한다.
  • 위의 그림은 마찬가지로 Tiny 버전이다.
  • W-MSA와 SW-MSA가 각각 3D 버전으로 변경되었다.

3.2 3D ShiftedWindow based MSA Module

비디오는 이미지에 비해 훨씬 더 많은 정보를 갖고 있기 때문에 계산량이 매우 많아질 수 있다. 그래서 Swin Transformer를 따라 locality inductive bias를 잘 적용한다.

Multi-head self-attention on non-overlapping 3D windows

Swin Transformer의 아이디어를 3차원으로 그대로 확장한다. Swin Transformer를 이해했으면 그냥 넘겨도 된다.

3D Shifted Windows

여기도 마찬가지로 그냥 2D를 3D로 확장한 것이다.

Video Swin Transformer Block은 수식으로 나타내봐도 3D 버전으로 변경된 것 외에 똑같이 생겼다.

3D Relative Position Bias

Relative Position Bias를 쓰는 것이 낫다는 것이 여러 논문을 통해 입증되었으므로 이를 따른다. 3D relative position bias $B \in \mathbb{R}^{P^2 \times M^2 \times M^2}$를 각 head에 더하여 attention을 수행한다.

[\text{Attention}(Q, K, V) = \text{SoftMax}(QK^T / \sqrt{d} + B)V]

  • $PM^2$는 3D window의 token의 수
  • $d$는 query, key의 차원
  • $Q, K, V \in \mathbb{R}^{PM^2 \times d}$

그래서 $B$의 범위는 시간 차원으로 $[-P+1, P-1]$, 공간 차원에서 $[-M+1, M-1]$이고, 작은 크기의 bias matrix $\hat{B} \in \mathbb{R}^{(2P-1) \times (2M-1)\times (2M-1)}$를 parameterize하고 $B$의 값은 $\hat{B}$로부터 취한다.

3.3 Architecture Variants

여기랑 똑같다.

$P=8, M=7, d=32$이고 각 MLP의 expansion layer에서 $\alpha=4$이다.

3.4 Initialization from Pre-trained Model

Swin Transformer를 계승한 만큼 비슷하게 대규모 데이터셋에서 사전학습한 모델로 초기화를 시킨다. 기존의 Swin Transformer와는 딱 2개의 block만 다른 shape을 갖는다.

  1. Stage 1에서 linear embedding layer
    • 시간 차원을 반으로 줄이면서 채널이 2배로 늘어났기 때문에($48 \times C \rightarrow 96 \times C$), 일단 weight를 그대로 복사한 다음 전체에 0.5를 곱한다(그러면 variance는 불변이다).
  2. Video Swin Transformer block의 relative position biases
    • shape이 $(2M-1, 2M-1)$에서 $(2P-1, 2M-1, 2M-1)$로 바뀌어야 한다. 그래서 그냥 broadcasting하여 초기화에 사용한다.

4 Experiments

4.1 Setup

Datasets

  • Human action recognition으로는 Kinetics-400(400개의 action category가 있으며 240k/20k의 train/val video), Kinetics-600(370k/28.3k video)을 사용하였다.
  • Temporal modeling을 위해서는 Something-Something V2 (SSv2)(174 classes, 168.9K/24.7K video)를 사용하였다.
  • top-1와 top-5 정확도로 평가한다.

Implementation Details

  • K400, K600: $224 \times 224$ 해상도의 비디오는 $16 \times 56 \times 56$의 3D token이 된다.
  • SSv2: Kinetics-400에서 사전학습한 모델로 초기화를 하고 시간 차원에서 window size는 16을 사용했다.

4.2 Comparison to state-of-the-art

와! SOTA!

4.3 Ablation Study

Different designs for spatiotemporal attention

Spatio-temporal attention을 3가지 다른 디자인을 사용하여 구현하고 평가해 보았다.

  1. Joint: spatiotemporal attention을 각 3D windows-based MSA layer에서 계산하며, 기본 세팅이다.
  2. Split: 2개의 temporal transformer layer를 spatial-only Swin Transformer의 위에 추가하였다. 이는 ViViT와 VTN에서 유용하다고 입증되었다.
  3. Factorized: Swin Transformer의 각 spatial-only MSA layer 뒤에 temporal-only MSA를 추가한 것으로 TimeSFormer에서 효과적이었던 방법이다.
    • 임의로 초기화된 layer를 더하는 것의 bad effect를 줄이기 위해 0으로 초기화한 각 temporal-only MSA layer의 끝에 weighting parameter를 추가했다.

계산량도 적고 성능도 좋은 joint 버전을 쓰자. 이 논문에서는 이게 기본값이다.

이렇게 나온 이유는 joint 버전이 공간 차원에서 locality가 효율성은 보존하면서 계산량은 줄일 수 있기 때문이라고 한다.

Temporal dimension of 3D tokens, Temporal window size

window size를 temporal dimension을 바꿔가면서 가장 좋은 값을 찾아보았다.

  • temporal dimension이 크면 성능은 좋지만 계산량이 기하급수적으로 늘어난다.
  • temporal dimension은 16으로 고정하고 window size를 달리 해 보았을 때, 크기가 커질수록 성능은 매우 조금 올라가지만(0.3 point) 계산량은 꽤 많이 늘어난다(17%).

3D shifted windows

3D shifted window 기법을 쓰는 것이 낫다는 내용이다.

Ratio of backbone/head learning rate

서론에서 잠깐 언급한 내용인데, backbone의 learning rate를 head의 0.1배로 하면 성능이 더 잘 나온다.

Initialization on linear embedding layer and 3D relative position bias matrix

ViViT에서는 center initialization이 inflate initialization를 크게 상회한다고 해서 이를 실험해 보았다.

하지만 성능은 사실상 똑같아서, linear embedding layer에 inflate initialization을 사용했다.


5 Conclusion

Swin Transformer를 3차원으로 확장하여 실험하여 Kinetics-400, Kinetics-600, SSv2에서 SOTA를 달성하였다.

Comment  Read more

Swin Transformer V2 - Scaling Up Capacity and Resolution 논문 설명

|

이 글에서는 Microsoft Research Asia에서 발표한 Swin Transformer의 개선 버전, Swin Transformer v2 논문을 간략하게 정리한다.


Swin Transformer V2: Scaling Up Capacity and Resolution

논문 링크: Swin Transformer V2: Scaling Up Capacity and Resolution

Github: https://github.com/microsoft/Swin-Transformer

  • 2021년 11월(Arxiv)
  • Microsoft Research Asia
  • Ze Liu, Han Hu, Yutong Lin, Zhuliang Yao, Zhenda Xie, Yixuan Wei et al.

기존 Shifted WINdow Transformer을 더 큰 모델, 고해상도의 이미지에서 더 안정적으로 학습하는 것과 모델의 성능을 높이는 여러 테크닉을 기술하는 논문이다.


Abstract

기존의 Swin Transformer v1을 30억 개의 parameter, $1536 \times 1536$ 크기의 이미지에도 적용할 수 있게 개선한다. 이 논문에서 제시하는 vision model의 크기를 키우는 방법은 다른 모델에서 충분히 적용 가능하다고 한다.

해결해야 할 부분은

  1. Vision model은 크기를 키울 때 학습이 불안정한 문제가 있고
  2. 고해상도의 이미지 혹은 window를 요구하는 많은 downstream vision task의 경우 어떻게 낮은 해상도를 처리하는 모델에서 높은 해상도를 처리하는 모델로 전이학습(transfer learninng)이 효과적으로 잘 될 수 있는지 불분명하다는 것이다.

큰 모델, 고해상도의 이미지를 처리할 때는 GPU 메모리 사용량도 중요한 문제인데, 이를 해결하기 위해 여러 기법을 적용해본다:

  1. 큰 모델의 학습 안정성을 높이기 위해 normalization을 attention 이전이 아닌 다음에 적용하고(post normalization) scaled cosine attention 접근법을 적용한다.
  2. 저해상도에서 고해상도 모델로 전이학습할 시 위치 정보를 log-scale로 continuous하게 표현한다.
  3. 이외에 GPU 메모리 사용량을 줄이는 여러 기법을 소개한다.

1. Introduction

작은 vision model에서 큰 vision model로 전이학습할 때 학습이 불안정한 문제가 있다. 이 논문에서 저자들은 activation의 진폭(amplitude)이 불일치한다는 것을 발견했다고 한다. 그리고 이는 기존의 Swin Transformer v1에서는 residual unit이 main branch에 그대로 더해져서 layer를 거칠수록 값이 누적되어 점차 크기가 커지기 때문이라고 한다. 그래서 이를 해결하기 위한 방법으로 post normalization 기법을 적용한다.

그림 1에서와 같이 layer norm을 각 residual unit의 처음 부분에서 끝 부분으로 옮긴다. 이렇게 하면 activation 값이 한층 낮아지게 된다.

또 기존 dot-product attention 대신 scaled cosine attention을 사용했는데, 이는 block 입력의 진폭에 별 관계없이 연산이 수행되고 따라서 attention value는 안정된 값을 유지한다.

이러한 방법들은 더 큰 모델에서 학습의 안정성을 높이고 최종 성능 또한 향상시키는 결과를 가져왔다.

그리고 또 하나의 문제가 있는데 작은 크기의 이미지를 다룰 때의 window size와 큰 크기의 이미지에서 fine-tuning할 때의 window size는 많이 차이가 난다. 기존의 방법은 bi-cubit interpolation을 수행하는 것인데 이는 땜질에 불과하고, 이 논문에서는 log-scale continuous position bias(Log-CPB)를 제안한다.

이는 작은 meta network를 하나 만들어 적용하는 방법이다. 이 meta net은 임의의 좌표를 받아 log-space로 변환하므로 extrapolation 비율이 작으며, 모델 간 공유가 가능하기 때문에 이미지의 해상도가 변해도 문제 없이 사용할 수 있다.

또 고해상도 이미지를 처리하려면 GPU 사용량이 크게 증가하는데, 이를 줄이기 위해 다음 테크닉을 사용한다.

  1. Zero-Optimizer
  2. Activation Check Pointing
  3. a Novel implementation of sequential self-attention computation

위의 방법들을 사용하여, 더 큰 모델을 안정적으로 학습, 더 좋은 성능을 얻을 수 있다. Swin Transformer v1와 마찬가지로 Image Classification, Object Detection, Semantic Segmentation task에서 실험하였고, 기존보다 더 좋은 결과를 얻었다.

Language networks and scaling up

NLP 분야에서는 이미 큰 모델일수록 좋다는 것이 입증되어 있다.
BERT-340M, Megatron-Turing-530B, Switch-Transformer-1.6T 등이 제안되었다.

Vision networks and scaling up

그러나 이미지 분야에서는 모델 크기를 키우는 시도가 별로 없었다. (다루기 힘들기 때문인가..) JFT-3B 정도가 있다.

Transferring across window / kernel resolution

  • 기존의 CNN 논문들은 고정된 크기의 kernel(ex. 1, 3, 5)만을 사용하였다.
  • ViT와 같은 global vision transformer에서는 이미지 전체에 attention을 적용하며 입력 이미지의 해상도에 따라 window size가 정비례하여 증가한다.
  • Swin Transformer v1와 같은 local vision transformer는 window size가 고정되어 있거나 fine-tuning 중에 변화할 수 있다.
  • 다양한 scale의 이미지를 처리하기 위해서는 아무래도 window size가 가변적인 것이 편하다. 여기서는 log-CPB를 통해 전이학습이 좀 더 부드럽게 가능하게 한다.

Study on bias terms, Continuous convolution and variants

기존 Transformer는 절대위치 embedding을 사용하였으나 요즘의 이미지 분야 연구에서는 상대위치를 쓴다. 이 논문에서 계속 강조하는 log-CPB는 임의의 window size에서 더 잘 작동한다고 하고 있다.


3. Swin Transformer V2

3.1. A Brief Review of Swin Transformer

여기를 보면 될 것 같다.

Issues in scaling up model capacity and window resolution

앞에서 계속 설명했던 내용이다.

  • 모델의 크기를 키울 때 학습 불안정성 문제가 발생한다.
  • 전이학습할 때 window resolution이 달라지며 성능 하락이 일어난다.

3.2. Scaling Up Model Capacity

역시 같은 내용이 나온다. ViT를 일부 계승한 Swin Transformer는 Layer norm을 각 block의 처음 부분에서 적용하는데 이는 깊은 layer로 갈수록 activation이 점점 극적으로 커지게 된다.

Post normalization

그래서 이 post normalization을 적용하는 것이다. 서론 부분에서도 말했듯이, layer norm을 block의 처음에서 끝으로 옮긴다(그림 1). 그러면 layer를 계속 통과해도 activation 진폭이 크게 커지지 않는다. 아래 그림에서 pre- 방식과 post- 방식의 activation amplitude 차이를 볼 수 있다.

Scaled cosine attention

기존 Transformer는 querykey 간 유사도를 계산할 때 dot-product로 계산한다. 하지만, 특히 큰 크기의 vision model에서, 일부 pixel에 의해 그 전체 값이 dominated되는 문제가 발생한다.

따라서 그냥 dot-product 대신 scaled cosine 연산을 적용한다. 물론 Swin Transformer v1처럼 position bias는 이때 더해진다.

[\text{Sim}(\textbf{q}i, \textbf{k}_j) = \text{cos}(\textbf{q}_i, \textbf{k}_j)/\tau + B{ij}]

$\tau$는 학습가능한 scalar 값(0.01 이상으로 설정)이며 layer나 head간 공유는 되지 않는다.

3.3. Scaling UpWindow Resolution

여러 window resolution에서 부드럽게 잘 넘어갈 수 있는 relative bias 정책인 log-CPB를 소개한다.

Continuous relative position bias

parameterized bias를 직접 최적화하는 대신 continuous position bias를 상대 좌표 하에서 작은 meta network에 맞춘다:

[B(\Delta x, \Delta y) = \mathcal{G}(\Delta x, \Delta y)]

$\mathcal{G}$는 2-layer MLP(사이의 activation: RELU)와 같은 작은 network이다. 이 $\mathcal{G}$가 임의의 상대좌표에 대해 bias value를 생성하고 따라서 어떤 크기의 window에든지 적절한 값을 생성할 수 있다. 추론 시에는 각 상대 위치를 사전에 계산할 수 있고 모델 parameter로 저장할 수 있으며, 이는 원래 parameterized bias 접근법과 같은 수준으로 간편?(convenient)..하다.

Log-spaced coordinates

해상도가 커질수록 상대 좌표의 차이도 커질텐데, 이를 정비례하게 잡으면 그 차이가 너무 커진다. 그래서 log-scale로 바꾼다.

[\widehat{\Delta x} = \text{sign}(x) \cdot \log(1+\vert \Delta x \vert )]

[\widehat{\Delta y} = \text{sign}(y) \cdot \log(1+\vert \Delta y \vert )]

예를 들어 $8 \times 8$ 크기의 window를 $16 \times 16$으로 키우면, 선형 비례하게 차이를 잡을 경우 $[-7, 7]$에서 [-15, 15]가 되므로 $8/7 = 1.14$배만큼 extrapolate해야 한다. 그러나 log-scale의 경우 $0.33$배로 줄어든다.

아래 표에서 position bias 정책 별 성능 차이를 볼 수 있다. 물론 log-space CPB가 가장 좋다고 한다.

3.4. Other Implementation

Implementation to save GPU memory

이 논문에서 GPU 메모리 사용량을 줄이기 위해 사용한 테크닉을 정리한다.

  • Zero-Redundancy Optimizer (ZeRO)
    • 기본 optimizer는 data-parallel mode에서 모델 parameter와 optimization state를 모든 GPU나 master node에 broadcast한다. 이는 큰 모델에서 매우 비효율적인데, 예를 들어 3B개의 parameter + Adam optimizer, fp32 정밀도를 사용할 경우 48G의 메모리를 잡아먹는다.
    • ZeRO optimizer는 모델 parameter와 거기에 연관되는 optimizer state가 여러 개의 GPU에 분산 저장되어 사용량이 매우 줄어든다.
    • 이 논문에서는 DeepSpeed framework와 ZeRO stage-1 option을 사용했다.
  • Activation check-pointing
    • Transformer의 feature maps 역시 많은 메모리를 잡아먹는데, 이는 이미지와 window가 고해상도일 경우 병목이 될 수 있다. 이 최적화는 학습속도를 30% 가량 향상시킬 수 있다.
    • ..를 의미한 것 같은데 논문에는 어떤 최적화인지 잘 안 나와 있고, 또 학습 “속도”가 30%까지 reduce할 수 있다고 되어 있는 것 같다(This optimization will reduce training speed by at most 30%.))..? 약간의 오류인 것 같다.
  • Sequential self-attention computation
    • 큰 모델을 초고해상도의 이미지, 예를 들어 $1536 \times 1536$ 해상도의 이미지와 $32 \times 32$의 window size를 사용할 때에는, 위의 두 최적화 전략을 사용해도 여전히 부담스럽다(40G). 여기서 병목은 self-attention module인데,
    • 이를 해결하기 위해 이전의 batch 연산을 (전부) 사용하는 대신 self-attention 연산을 순차적으로 수행하도록 구현했다.
    • 이는 첫 2개의 stage에서만 적용하였고, 이는 전체 학습 속도에는 큰 영향을 주지는 않는다.

이러한 과정을 통해 A100 GPU(메모리: 40G)에서 $1536 \times 1536$ 해상의 이미지를 3B 개의 parameter를 갖는 모델로 학습할 수 있었다. Kinetics-400은 $320 \times 320 \times 8$의 해상도에서 실험했다.

Joining with a self-supervised approach

큰 모델은 항상 데이터 부족 현상에 시달린다. 방법은 매우 큰 데이터셋을 구해오거나(음?) self-supervised 사전학습을 이용하는 것인데, 이 논문에서는 둘 다 쓴다..

ImageNet-22K 데이터셋을 noisy label과 함께 5배 늘려 70M개의 이미지를 갖도록 했다. 그러나 여전히 JFT-3B에는 크게 못 미치므로, self-supervised learning 접근법을 적용시켰다.

3.5. Model configurations

기존 Swin Transformer v1의 4개 크기의 모델에 더해 더 큰 모델 2개를 추가했다.

  • Swin-H: $C = 352$, layer numbers = {2, 2, 18, 2}
  • Swin-G: $C = 512$, layer numbers = {2, 2, 42, 2}

각각 658M과 3B 크기이다. Huge와 Giant 모델에 대해서는 6 layer마다 main branch에 layer norm을 추가했다.

그리고 시간을 아끼기 위해 Huge 모델은 실험하지 않았다. (그럼 왜 만든건가 싶긴 하지만..)


Experiments

4.1. Tasks and Datasets

Swin Transformer v1의 3가지 task에다가 하나를 더 추가했다.

  • Video action classification으로는 Kinetics-400 (K400)

4.2. Scaling Up Experiments

Settings for SwinV2-G experiments

학습 시간을 줄이기 위해 $192 \times 192$ 해상도의 이미지로 사전학습을 진행했다.

  1. 먼저 ImageNet-22K로 20 epoch 동안 self-supervised 학습을 시키고
  2. 같은 데이터셋에 classification task로 30 epoch 동안 학습을 시킨다. 더 자세한 내용은 부록 참조.

이제 결과를 감상할 시간이다.

당연히 모델이 클수록 성능이 좋으며, 상당히 최근에 나온 논문들보다 성능은 더 좋다.

4.3. Ablation Study

3.2절에서 설명한 기법들의 효과를 검증한다.

Ablation on post-norm and scaled cosine attention

post-norm을 쓰면 top-1 정확도가 0.1~0.2정도, scaled cosine attention까지 적용하면 거기에 0.1~0.3%정도 더 성능이 올라가는것을 볼 수 있다. 또, 학습 안정성에도 효과가 있다고 한다. (그림 2 참조)

그리고 log-CPB의 효과는 아래와 같다.


5. Conclusion

Swin Transformer v1을 대규모 모델, 더 큰 이미지에 대해 학습이 안정적으로 가능하도록 여러 기법을 사용하여 개선하였다.

  • post-norm, scaled cosine attention, log-CPB 등.

이로써 Image Classification, Object Detection, Semantic Segmantation, Video Action Classification에서 좋은 성능을 얻었다.


근데 뭐, 가장 큰 모델은 40G 메모리의 A100 정도를 갖고 있어야 할 수 있는 것 같은데..기법들은 참고할 만한 논문이다.

Comment  Read more

Swin Transformer - Hierarchical Vision Transformer using Shifted Windows 논문 설명

|

이 글에서는 Microsoft Research Asia에서 발표한 Swin Transformer 논문을 간략하게 정리한다.


Swin Transformer: Hierarchical Vision Transformer using Shifted Windows

논문 링크: Swin Transformer: Hierarchical Vision Transformer using Shifted Windows

Github: https://github.com/microsoft/Swin-Transformer

  • 2021년 3월(Arxiv), ICCV 2021 best paper
  • Microsoft Research Asia
  • Ze Liu, Yutong Lin, Yue Cao, Han Hu, Yixuan Wei, Zheng Zhang, Stephen Lin, Baining Guo

Computer Vision 분야에서 general-backbone으로 사용될 수 있는 새로운 Vision Transformer인 Shifted WINdow Transformer이다.


Abstract

Transformer는 원래 자연어를 처리하기 위한 것인데 이를 Vision 분야로 가져왔다. 이 과정에서 어려운 점은 이미지의 경우 visual entity의 크기(scale)와 해상도가 매우 다양하다는 문제가 있다는 것이다. 이를 위해 제안한 hierarchical Shifted WINdow 방식은, 기존 self-attention의 제곱에 비례하는 계산량을 선형 비례하게 줄이면서도 다양한 scale을 처리할 수 있는 접근법이다. 이로써 image classification, object detection, semantic segmentation 등 다양한 범위의 vision task에서 훌륭한 성과를 보였다.


1. Introduction

이미지 관련 분야는 CNN을 통해, NLP 관련 분야는 Transformer를 통해 발전해왔다. 이 논문에서는 Transformer를 vision 분야에 효율적으로 적용하는 방법을 연구한다(사실 이러한 시도 자체는 ViT에서 있었다). 기존의 TransformerViT는 고정된 크기의 token만을 사용하기 때문에 고해상도, 다양한 크기의 entity를 갖는 이미지 분야에서는 적합하지 않다.

따라서 이 논문에서는 Shifted WINdow 기법을 사용하는 Swin-Transformer를 제안한다. 위 그림 1과 갈이, 이는

  • 작은 크기의 patch 안에서만 self-attention을 수행하고
  • layer를 통과하면서 인접한 patch들을 점점 합치면서 계산한다.

이러한 구조 덕분에 FPN이나 U-Net처럼 계층적인 정보를 활용한 여러 테크닉도 사용할 수 있다. 가장 작은 window 안의 patch 수는 고정되어 있기 때문에 이미지 크기에 선형 비례하는 계산량만 필요로 한다. 이러한 이점 덕에 여러 vision task에서 backbone net으로 사용할 수 있다.

또 하나의 핵심 구조는 다음과 같다. 위와 같이 window를 나누어서 계산을 수행하면 각 window의 경계 근처 pixel들은 인접해 있음에도 self-attention 계산이 수행되지 않는데, 이를 위해 window 크기의 절반만큼 shift하여 비슷한 계산을 수행한다.

여기서 이러한 shifted window 방식은 기존의 sliding window 방식에 비해 더 효율적이다, 그 이유는

  • self-attention 계산을 수행할 때, sliding window 방식에서는 각각 다른 query pixel에 대해 다른 key sets에 대해 계산을 수행해야 해서 일반적인 하드웨어에서 low latency 문제를 경험하게 된다.
  • 이와 달리 shifted window 방식은 window 내의 모든 query patch는 같은 key set을 공유하기 때문에 하드웨어 상에서 memory access 면에서 latency가 더 적기 때문이다.

결과적으로, Swin Transformer는 Image Classification, Object Detection, Semantic Segmentation에서 ViT, DeiT, RexNe(X)t를 능가하였다.


CNN and variants: CNN, VGG, GoogleNet, ResNet, DenseNet, HRNet, EfficientNet 등 여러 논문이 수 년에 걸쳐서 빠르게 발전해왔다. 위의 논문들에 대해서는 여기를 참고하자.

Self-attention based backbone architectures: ResNet 기반 conv layer를 self-attention layer로 대체하는 시도가 있었으나 sliding window 방식으로 인핸 memory access 문제가 있었다. 전술했듯이 이 논문에서는 shifted window 방식을 사용하여 이를 해결했다.

Self-attention/Transformers to complement CNNs: CNN을 self-attention이나 Transformer로 보강하는 연구도 있었다. 최근에는 Transformer를 object detection이나 segmentation에 사용하기도 하였다.

Transformer based vision backbones: 말 그대로 Transformer를 vision 분야에다 적용시켜 backbone으로도 사용할 수 있는 건데 ViTDeiT 및 그 후속 논문들이 대표적이다.


3. Method

3.1. Overall Architecture

Swin Transformer는 4가지 버전이 있는데(Tiny, Small, Base, Large) 아래는 T 버전의 전체 구조이다.

  • 맨 앞에 Patch partition 과정이 있다. 여기서는 먼저 ViT와 같은 patch 분리 모듈을 통해 입력 RGB 이미지를 겹치지 않는 patch들로 나눈다.
    • 각 patch는 하나의 “token”과 같으며 그 feature는 raw pixel RGB 값을 이어붙인 것이다.
    • 이 논문에서는 각 patch의 크기는 $4 \times 4$이며, 따라서 feature는 $4 \times 4 \times 3 = 48$이 된다.
  • Stage 1:
    • 이후 Linear Layer를 통해 $H/4 \times W/4 \times 48$ 텐서를 $H/4 \times W/4 \times C$ 텐서로 변환한다. 생긴 걸 보면 $1 \times 1$ conv 같지만 Linear Layer가 맞다.
    • Swin Transformer Block이 이제 등장한다. 얘는 위 그림의 (b)에서 볼 수 있는데, 일반적인 MSA(Multi-head Self Attention) 대신 W-MSA(Window MSA)와 SW-MSA(Shifted Window MSA)라는 것을 사용한다. 이건 다음 섹션에서 설명한다. Activation function으로는 GELU를 사용한다.
  • Stage 2~4에서는 Patch Merging이 있다.
    • 이건 맨 처음 $4 \times 4$ 크기의 작은 patch들을 점점 합쳐가면서 더 넓은 부분을 한번에 보려는 과정이다.
    • 먼저 인접한 $2 \times 2$개의 patch를 concat한다. 그러면 채널 수가 4배로 된다.
    • 이를 linear layer를 써서 2C로 맞춘다. 따라서 Patch Merging을 통과하면 해상도는 $2 \times 2$배 줄고 채널은 2배로 늘어난다.
  • 이렇게 hierarchical한 구조로 각 단계마다 representation을 갖기 때문에 다양한 scale의 entity를 다루어야 하는 image 분야에서 괜찮은 성능을 낼 수 있는 것이다. 어떻게 보면 생긴 게 VGGNet이나 ResNet과 비슷하므로, 여러 vision task에서 이 Swin Transformer를 backbone으로 사용할 수 있다.
  • 참고로, (b)는 거의 비슷한 Swin Transformer를 2개 붙여 놓은 것이기 때문에, (a) 부분에서 $\times2$, $\times6$이라 되어 있는 부분은 각각 (b)를 1번, 3번 붙여 놓은 것이다.

3.2. Shifted Window based SelfAttention

위에서도 말했듯이 기존 Self-Attention은 모든 부분의 쌍에 대해 연산해야 하므로 계산량이 제곱에 비례한다. 이를 해결하고자 한다.

Self-attention in non-overlapped windows

사실 같은 내용이다.

  • 가장 작은 patch는 $4 \times 4$ pixel로 구성되어 있다.
  • Window는 $M \times M$개의 patch로 구성된다. 이 논문에서는 $M=7$로 고정이다.
  • 이미지는 이 Window가 $h \times w$개 있다. 이미지의 해상도는 $4Mh \times 4Mw$임을 알 수 있다.

즉 이미지 해상도가 $224 \times 224$라면, 첫번째 layer에서 patch의 크기는 $4 \times 4$이고, 이 patch를 $7 \times 7$개 모은 Window가 $h \times w = 8 \times 8$개가 존재한다.

이렇게 하면 그냥 MSA에 비해 많이 줄어든다.

  • $\Omega(\text{MSA})$ : $4hwC^2 + 2(hw)^2C$
  • $\Omega(\text{W-MSA})$ : $4hwC^2 + 2M^2hwC$

$M=7$으로 고정이므로 이미지 크기에 선형으로 비례한다.

Shifted window partitioning in successive blocks

위의 Window 방식이 좋기는 한데, Window 경계에 있는 patch들은 서로 인접해 있음에도 attention 계산을 수행할 수 없게 된다. 이를 위해 Window를 $\lfloor M/2 \rfloor$만큼 cyclic하게 shift한 다음에 비슷한 계산을 수행한다.

즉, Swin Transformer block은 다음과 같은 과정을 따른다. Layer Norm은 생략하고 설명하면(그림 3b와 같은 부분이다),

  • 이전 layer의 입력이 들어오면
  • W-MSA를 수행한다.
  • MLP에 통과시킨다.
  • SW-MSA를 수행한다: 이는 Cyclic Shift를 시키고 W-MSA 계산을 수행하는 것과 거의 같다. 그 다음엔 Cyclic shift 했던 것을 다시 되돌린다(Reverse cyclic shift).
  • MLP에 통과시킨다.
  • 그러면 이제 Swin Transformer block의 output이 나온다. 이는 다음 layer로 전달될 것이다.

물론, residual connection도 있는데 이는 그림을 보면 쉽게 이해할 수 있다.

Efficient batch computation for shifted configuration

Window를 shift하고 나면 우측과 하단 경계에 있는 Window들은 $M \times M$보다 크기가 작아진다.

SW-MSA 과정에서 Cyclic shift를 하면 전체 이미지의 반대쪽 경계에 있던 부분(A, B, C로 표시)끼리 연산을 하게 되는 것을 막기 위해 해당 부분을 mask 처리한다.

참고: zero padding으로도 할 수는 있는데 연산량이 증가하므로 이 논문에서는 쓰지 않았다.

Relative position bias

기존 Transformer에서는 Sinusodal 함수를 사용해서 positional encoding을 추가했었다.

이것보다는 상대좌표의 차이를 넣어주는 것이 성능 상으로 더 좋다고 한다. 그리고 아래 식과 같이 더해주는 부분도 Attention 연산 중으로 옮겨온 것을 알 수 있다.

[\text{Attention}(Q, K, V) = \text{SoftMax}(QK^T / \sqrt{d} + B)V]

$B \in \mathbb{R}^{(2M-1) \times (2M-1)}$가 relative position bias이다.

3.3. Architecture Variants

Swin Transformer도 ViT, DeiT와 비슷하게 Base model이 있다. Tiny는 4배 작고, Small은 절반, L은 2배 크다.

  • Swin-T: $C = 96$, layer numbers = {2, 2, 6, 2}. ResNet-50(DeiT-S)와 크기가 비슷하다.
  • Swin-S: $C = 96$, layer numbers = {2, 2, 18, 2}. ResNet-101과 크기가 비슷하다.
  • Swin-B: $C = 128$, layer numbers = {2, 2, 18, 2}
  • Swin-L: $C = 192$, layer numbers = {2, 2, 18, 2}

$C$는 채널 수이고, layer 수는 그림 3에서 Swin Transformer Block이 $\times 2, \times 6$만큼 있있던 것을 생각하면 된다.


4. Experiments

  • Image Classification으로는 ImageNet
  • Object Detection으로는 COCO
  • Sementic Segmentation으로는 ADE20K

데이터셋을 사용하였다.

4.1. Image Classification on ImageNet1K

Regular ImageNet-1K으로 학습한 model들의 비교가 (a)이다. Swin-B는 RegNet이나 DeiT에 비해서는 확실히 모델 크기과 계산량 대비 성능이 좋다. EfficientNet과는 비등한 수준이다.

ImageNet-22K로 학습한 모델끼리 비교한 결과는 (b)인데 Swin이 크기와 계산량 대비 확실히 더 성능이 좋다.

4.2. Object Detection on COCO

계산량 대비 성능이 Image Classification 때보다 더 크게 앞선다.

4.3. Semantic Segmentation on ADE20K

다른 Task(Object Detection, Semantic Segmentation)의 backbone으로 사용했을 때의 성능은 거의 state-of-the-art이다.

4.4. Ablation Study

  • Shifted windows 기법을 사용한 경우에 모든 task에서 성능이 더 높게 나온다.
  • Relative position bias의 효과를 분석하였는데, absolut position을 단독으로 쓰거나 같이 쓰는 것보다 relative position bias만 쓰는 것이 제일 좋다고 한다.

V100 GPU로 계산하면 이 정도의 시간이 걸린다. 꽤 빠르다고 알려진 Performer architecture보다 살짝 더 빠르다.


5. Conclusion

  • Swin Transformer는 기존 Transformer 대비 계산량을 줄이면서도 다양한 scale의 이미지를 처리할 수 있다.
  • Image Classification, Object Detection, Semantic Segmentation 등 여러 Vision task의 backbone으로 쓸 수 있다.
  • Shifted Window 방식은 충분히 효율적이다.

Comment  Read more

VideoBERT - A Joint Model for Video and Language Representation Learning, CBT(Learning Video Representations using Contrastive Bidirectional Transformer) 논문 설명

|

이 글에서는 Google Research에서 발표한 VideoBERT(와 CBT) 논문을 간략하게 정리한다.


VideoBERT: A Joint Model for Video and Language Representation Learning

논문 링크: VideoBERT: A Joint Model for Video and Language Representation Learning

Github: maybe, https://github.com/ammesatyajit/VideoBERT

  • 2019년 9월(Arxiv), ICCV 2019
  • Google Research
  • Chen Sun, Austin Myers, Carl Vondrick, Kevin Murphy, and Cordelia Schmid

Video에다가 BERT를 적용한 논문이다. Visual info는 Video의 frame를 1.5초마다 하나씩 뽑아 S3D embedding을 만들고, Audio는 ASR을 사용하여 텍스트로 변환하여 사용했다.

VL-BERT나 ViLBERT와는 달리 detection model이 없으므로, 그냥 S3D embedding을 갖고 clustering을 수행한다.그러면 어떤 frame이 어느 cluster에 속하는지 알기 때문에 대략적인 classification을 수행할 수 있게 된다.

학습은 3가지 task를 사용한다.

  1. Linguistic-visual alignment: 텍스트가 video frame의 장면과 일치하는지를 판별한다.
  2. Masked Language Modeling(MLM): BERT의 것과 같다.
  3. Masked Frame Modeling(MFM): MLM과 비슷한데, word token을 복구하는 대신 masked frame의 cluster class를 예측한다.

Downstream task로

  • Recipe Illustration(입력 문장이 들어오면 그에 맞는 video token을 생성한다)
  • Future frame prediction(다음 frame 예측)
  • Zero-shot action classification(비디오와 How to <mask> the <mask>와 갈은 템플릿 문장을 주면 문장을 완성하면서 어떤 action을 수행하는지를 맞추는 task)
  • Video captioning(Video에 맞는 caption 생성)

등을 수행하여 좋은 결과를 얻었다. 일부 결과를 아래에서 볼 수 있다.


CBT(Learning Video Representations using Contrastive Bidirectional Transformer)

논문 링크: Learning Video Representations using Contrastive Bidirectional Transformer

  • 2019년 9월
  • Google Research
  • Chen Sun1 Fabien Baradel1;2 Kevin Murphy1 Cordelia Schmid1

(거의) 갈은 저자들이 위의 VideoBERT 논문에서 end-to-end 학습을 막는 Clustering을 대체하는 방법을 제안한 논문이다.

텍스트에서 loss를 구할 때는 BERT에서와 같이 cross-entropy를 모든 단어에 대해서 확률을 계산하여 얻는다. 식으로 나타내면 다음과 같다.

그러나 Video에서는 모든 video에 대해 계산을 할 수가 없다(Video frame의 차원이 너무 높음). 따라서 모든 경우에 대해 하는 대신 negative sampling을 통해 일부만 뽑아서 계산을 수행하게 된다. 식으로 나타내면 다음과 같다.

위와 같이 NCE loss를 사용하여 Clustering을 없애면 end-to-end 학습이 가능하게 된다.

요약하면,

  • frame $\mathbf{x} = \lbrace x_1, …, x_m \rbrace $과 ASR token $\mathbf{y} = \lbrace y_1, …, y_n \rbrace $이 주어지면 모델은 그 correspondence/alignment를 학습한다.
  • $\mathbf{x, y}$를 concat하여 cross-modal Transformer(VideoBERT 등)에 집어넣으면 embedding sequence $\mathbf{h} = \lbrace h_1, …, h_{m+n} \rbrace$를 얻을 수 있다.
  • 전체 모델은 BERT, CBT, Cross-modal loss를 가중합하여 loss function으로 사용한다.

결과는 대략 아래와 같다.


Comment  Read more

VL-BERT, ViL-BERT 논문 설명(VL-BERT - Pre-training of Generic Visual-Linguistic Representations, ViLBERT - Pretraining Task-Agnostic Visiolinguistic Representations for Vision-and-Language Tasks)

|

이 글에서는 VL-BERT와 ViLBERT 논문을 간략하게 정리한다.


VL-BERT: Pre-training of Generic Visual-Linguistic Representations

논문 링크: VL-BERT: Pre-training of Generic Visual-Linguistic Representations

Github: https://github.com/jackroos/VL-BERT

  • 2020년 2월(Arxiv), ICLR 2020
  • University of Science and Technology of China, Microsoft Research Asia
  • Weijie Su, Xizhou Zhu, Yue Cao, Bin Li, Lewei Lu, Furu Wei, Jifeng Dai

Visual-Language BERT로, Visual info와 Language info를 BERT에다가 넣는 방법론을 제시한다.

  • 학습 샘플은 image + 이미지를 설명하는 sentence 쌍으로 이루어진다.
  • VQA task에 대해서는 2개의 문장(question, answer)이다.

BERT와 굉장히 유사하다. Langauge 쪽은 거의 똑갈다고 보면 된다.

왼쪽의 파란색 부분을 텍스트 부분, 중간~오른쪽의 붉은색 부분을 이미지 부분이라 하자.

다른 점은

  • Visual Feature Embedding이 새로 추가가 되었다.
    • 텍스트 부분에서는 이미지 전체를 visual feature embedding으로 만들어 넣는다.
    • 이미지 부분에서는 detect된 object들을 하나하나 embedding으로 만들어 넣는다.
  • BERT의 2번째 문장 대신 [IMG] token을 사용한다.
  • 마지막에 [END] token이 추가되었다.
  • Segment Embedding은 텍스트의 경우 A, 이미지의 경우 C로 넣는다.
  • 이미지 부분의 Sequence Position Embedding은 딱히 순서가 없으므로 똑같은 값을 넣는다. (위 예시에서는 image region은 7의 값을 갖는다)

Pre-training task는 MLM과 비슷한 task를 진행하는데,

  • 텍스트에 대해서는 MLM과 같다. 단, MLM with Visual clues라고 이름 붙였는데, 텍스트만 있는 게 아니라 이미지 정보를 같이 사용하여 예측하기 때문이다.
  • Object detect를 할 때 Faster-RCNN으로 뽑아내는데, 이 때 object class가 나온다. 이를 Ground Truth로 사용하여, 특정 object 부분이 가려졌을 때, 이미지의 나머지 부분 + 텍스트 정보를 갖고 이 class를 예측하는 task를 수행할 수 있다. 이는 Masked RoI Classification with Linguistic Clues라 부른다.

VQA에 대해서 학습할 때도 거의 갈은데, Question에는 Mask를 씌우지 않고 대신 Answer에만 masking을 수행한다. 그러면 주어진 Question에 대해 답을 맞추는 것과 같아진다.

위 그림에서는 VQA 말고도 다른 downstream task에서 input/output의 형태를 나타내고 있다.

VCR, VQA, Reffering Expression Comprehension) downstream task에 대한 결과는 아래와 같다.


ViLBERT: Pretraining Task-Agnostic Visiolinguistic Representations for Vision-and-Language Tasks

논문 링크: ViLBERT: Pretraining Task-Agnostic Visiolinguistic Representations for Vision-and-Language Tasks

Github: https://github.com/facebookresearch/vilbert-multi-task

  • 2019년 8월(Arxiv), NIPS 2020
  • Georgia Institute of Technology, Facebook AI Research, Oregon State University
  • Jiasen Lu, Dhruv Batra, Devi Parikh, Stefan Lee

위의 VL-BERT와 거의 같은 방식인데(이름도 비슷하다), Cross-modal Attention을 썼다는 점이 가장 중요한 차이이다.

참고로 TRM은 Transformer이다.

TRM은 원래의 것과 같고, Co-TRM이 Co-attention Transformer이다. 아래 그림에서 그 차이를 볼 수 있다.

Co-TRM을 보면 왼쪽의 Co-TRM에서는 Q를 Visual 쪽에서, K와 V는 Language 쪽에서 받는다.
반대로, 오른쪽 Co-TRM에서는 Q를 Language 쪽에서, K와 V는 Visual 쪽에서 받는다.

Training task로는 BERT의 MLM과 NSP와 거의 비슷하다.

  • Masked multi-modal learning(MLM과 비슷함): image region에 대해 semantic classes의 distribution을 예측한다. Faster-RCNN의 예측 결과가 GT로 사용된다(이 부분은 VL-BERT의 것과 같다).
    • 텍스트 부분은 MLM과 같다.
  • Multi-modal alignment prediction(NSP와 비슷함): 모델은 (image, text) 쌍을 입력으로 받아 여러 image patch를 추출한다. 텍스트의 각 부분과 이미지의 각 부분이 연관이 있는지(aligned / not aligned)를 예측한다. 이 task가 상당히 강력하다고 한다.

VQA, VCR, Grounding Referring Expressions, Caption-Based Image Retrieval, ‘Zero-shot’ Caption-Based Image Retrieval 등에 대해 실험을 진행하였고 결과는 아래와 같다. 비교한 모든 부분에서 성능이 제일 좋다고 한다.

Comment  Read more