Transformers in Computer Vision — An Overview

Jongchan Park
Lunit Team Blog
Published in
17 min readMay 24, 2021

This post is available in the Korean language only.
본 포스팅은 2021년 2월까지 arXiv 등에 공개된 논문들을 기반으로 작성되었습니다.

Introduction

Transformer는 NeurIPS 2017에서 처음 발표된 attention 기반의 NLP 모델 입니다. 기존의 NLP 모델들은 주로 recurrent 구조를 기반으로, long-range dependency를 해결하고자 attention 기법을 추가적으로 사용했습니다. Transformer는 feature embedding과 token 간의 attention으로 구성된 transformer block으로 구성되어 있으며, recurrent구조를 벗어나 feedforward구조를 사용하고 있습니다. 현재 Transformer는 NLP (및 sequence modeling) task에서 가장 많이 쓰이는 구조 중 하나이며, 최근 널리 알려진 OpenAI의 GPT-3, DeepMind의 AlphaFold 등의 임팩트 있는 연구들에서도 사용되었습니다.

최근 Sequence modeling 연구 결과와 더불어, computer vision (CV) 분야에서도 Transformer를 활용하고자 하는 수많은 연구 결과들이 발표되었습니다. 이런 연구들이 ImageNet classification 및 low-level image processing에서 최고 성능(SotA)을 달성하는 등(A. Dosovitskiy et al., H. Chen et al.), 기존 CNN 방법들 대비 여러 장점을 보여주고 있다는 점을 주목할만 합니다.

Lunit의 연구팀은 여러 블로그 포스팅을 통해서 Transformers in Computer Vision 트렌드를 파악하고, insight를 정리하여 공유하고자 합니다. 이번 포스팅에서는 Transformer가 무엇인지, 그리고 computer vision에는 어떻게 적용할 수 있는지를 소개하고, 마지막으로 중요한 관련 논문을 정리해봅니다.

Transformer overview

본 섹션은 Transformer를 요약합니다. 세부 내용은 논문 원문을 참조하시기 바랍니다.

Transformer는 NeurIPS 2017에서 발표된 Attention is all you need (A. Vaswani et al.)에서 제안된 seq2seq 모델입니다. 기존에 널리 사용되던 RNN 기반의 seq2seq 모델과는 다르게 recurrent한 구조가 아닙니다. 따라서 (1) 순서대로 계산할 필요가 없고 (2) 병렬화로 더 효율적인 large-batch 학습이 가능하고, (3) 더 많은 데이터를 쉽게 활용할 수 있고, (4) self-attention을 사용하여 long-range dependency를 더 잘 활용할 수 있습니다. Transformer는 이러한 장점으로 더불어 언어 모델링 분야에서 최고 성능을 보여주고 있습니다.

Figure 1: RNN unroll each word individually. Transformer process input in parallel. (Image source: Illustrated Guide to Transformers | by Jingles (Hong Jing) | Towards Data Science)

Transformer의 구조는 아래 Fig.2 좌측 그림에서 나와있듯이, 좌측의 encoder와 우측의 decoder로 구분될 수 있습니다. encoder와 decoder는 여러개의 동일 구조 block을 쌓아올린 모습이며, 각 block은 multi-head attention과 feed forward embedding으로 구성됩니다. 각 block의 입력과 출력은 동일한 개수의 token embedding 이며, 각 token은 초기에 positional encoding을 더해서 입력으로 사용됩니다.

Figure 2: The illustrated transformer. Left: overall architecture; Middle: Query-Key-Value attention architecture; Right: Multi-Head Attention architecture (source: Ashish Vaswani et al., Attention Is All You Need, NeurIPS 2017)

Multi-Head Attention (MHA): Query-Key-Value (Q/K/V)를 사용하는 전형적인 memory 구조를 사용합니다. 주어진 query에 대해서, 모든 key와의 affinity (or similarity)를 계산한 후, softmax 정규화된 값으로 value를 돌려줍니다. Non-local Neural Networks가 익숙하신 분이라면, 매우 비슷한 구조를 가진다는 것을 알 수 있습니다. Fig.2를 보면, 3종류의 MHA가 있습니다. 각각의 특성을 이어서 설명합니다. 이름에 multi가 붙는 이유는, 여러 종류의 attention을 병렬화하여 사용하기 때문 입니다. 특정 layer에서 여러 종류의 관계를 modeling하기 위함 입니다.

Multi-Head Self-Attention (MHSA): Encoder에서 사용되는 구조 입니다. Fig.2의 좌측 화살표를 보면, 입력이 encoder token에서만 주어집니다. 즉, Q/K/V 모두 encoder token에서 생성된다는 것이며, 모든 encoder token간의 관계를 모델링하는 기능을 담당합니다. CV의 self-attention에 익숙한 분들은 context embedding과 유사하다고 볼 수 있습니다. Q/K/V가 동일한 소스에서 생성되었으므로 self-attention 이름이 붙습니다.

Figure 3: The illustrated masked self-attention. (source: https://jalammar.github.io/illustrated-gpt2/)

Masked Multi-Head Attention: Decoder에서 사용되는 구조 입니다. Fig.2 좌측 그림의 우측 하단을 보면, MHSA와 비슷하게 decoder token에서 Q/K/V가 생성됩니다. MHSA와 다른 점은 중간에 mask가 들어간다는 점 입니다. sequence modeling의 경우 테스트 시 순차적으로 출력을 생성하는데 (auto-regressive), MHSA구조를 사용하면 미래의 (아직 생성되지 않은) token을 참조하게 됩니다 — leftward information flow (Fig.3 좌측). Mask를 사용하여 leftward info flow를 막고, 학습/테스트의 간극을 없애며, 더 나아가서 batch training을 가능하게 합니다 (Fig.3 우측).

Multi-Head Attention (decoder): Fig.2 좌측 그림의 우측 중간을 보면, MHA의 K/V는 encoder token을 사용하고, Q로는 decoder token을 사용합니다. 즉, decoder token을 query로 사용하여 encoder token의 정보를 가져오는 역할을 합니다.

Positional embedding: CNN이나 RNN은 각 입력의 위치 정보가 묵시적으로 주어지지만, Transformer의 경우 각 토큰이 위치에 상관 없이 독립적으로 처리되기 때문에, positional embedding을 주어야 합니다.

Advantages of Transformer: (1) minimal inductive bias로 인해서 표현할 수 있는 함수의 범위가 넓습니다 (conv op도 학습 가능); (2) 연산을 병렬화 할 수 있어서 RNN 대비 대규모 학습이 용이합니다; (3) 모델의 capacity가 커서 학습 데이터의 양 대비 성능 포화도가 낮습니다.

Disadvantages of Transformer: (1) attention으로 인한 연산량이 많습니다; (2) 학습에 많은 데이터와 많은 시간이 소요됩니다.

Transformers in Computer Vision

앞서 설명한 Transformer 구조는 sequence-to-sequence를 위해서 제안되었습니다. 이런 아키텍쳐를 이미지 데이터에 적용하기 위해서는 크게 3가지 측면으로 고민이 필요합니다 (Fig.4). 첫 번째로 token을 정의해야 하고, 두 번째로는 CV task에 맞추어 출력하도록 구조를 조정해야 합니다. 마지막으로, 순수한 Transformer 구조는 많은 연산량과 학습 시간을 필요로 하기 때문에, CNN과 Transformer를 적절히 조합하는 등의 backbone variation을 사용할 수 있습니다.

Figure 4: A block diagram showing how to apply Transformers in CV tasks.

Token definition

  • Pixels as tokens (iGPT, M. Chen et al.): 가장 단순한 정의는 한 개의 픽셀을 하나의 token으로 보는 방법 입니다. 이 경우 32x32 사이즈의 영상이 1024개의 token으로 변환됩니다. iGPT논문에서는 해당 방법을 이용해서 기존 CNN과 비슷한 수준의 성능을 도달했습니다. 하지만, token 개수에 대해 quadratic한 연산량이 요구되는 transformer에서는 모델의 크기가 극도로 제한될 수 밖에 없습니다 (최대 크기 64x64).
  • Features as tokens (ViT, A. Dosovitskiy et al.): CNN feature는 이미지보다 해상도가 낮기 때문에 token의 개수를 합리적인 수준으로 줄일 수 있습니다. 그리고 각 토큰이 많은 정보를 담고 있기 때문에 합리적인 성능에 도달할 수 있습니다. 다만, CNN과 Transformer를 섞어서 사용하기 때문에 두 모델 장단점 trade-off가 불가피합니다 (inductive bias, training time, etc). 비슷한 방법을 사용한 다른 연구로는 DETR, BoTNet, VT, IPT 등이 있습니다.
  • Image patches as tokens (ViT, A. Dosovitskiy et al.): ViT 논문에서 16x16크기의 패치를 flatten하여 token으로 사용하는 방법을 제안했습니다. Token의 개수를 합리적인 수준으로 줄일 수 있으며, 순수한 Transformer를 사용할 수 있습니다. 충분한 데이터 (JFT-300M)를 사전 학습에 사용하여, 기존의 ImageNet classification SotA를 뛰어넘는 성능을 보여주었습니다. Pixel / image patch 둘 다 사용하는 방법도 있습니다 (TNT, K. Han et al.).

Task-adaptation

앞서 입력 token을 정의하였으니, 출력도 정의해주어야 합니다. Transformer는 seq2seq를 위해 고안되었기 때문에, 기본 출력도 sequential하게 나옵니다. CV task는 sequential한 출력이 아니기 때문에 수정하여 적용해주어야 합니다.

  • Classification — average features (iGPT, M. Chen et al.): iGPT에서는 모델의 특정 layer의 token embedding을 평균낸 뒤, class logit으로 linear projection합니다. 높은 성능을 위해서 여러 layer feature를 붙여서(concat) 사용하기도 합니다.
  • Classification — class token (ViT, A. Dosovitskiy et al.): ViT 논문에서는 classification을 위한 전용 token을 첫 번째 입력으로 사용합니다. 최종 출력된 token 중 첫 번째에 해당하는 token embedding을 입력으로 하는 classifier를 함께 학습합니다. 다른 최종 token embedding은 class prediction에 사용되지 않습니다.
  • Detection — fixed number of anchors (DETR, N. Carion et al.): 사전에 정해진 개수의 anchor token을 정의하고 (100개), 각 anchor token에 대해서 bbox regression / classification을 수행합니다. 각 anchor에 대해서 사전에 위치/크기를 정해주지 않기 때문에, GT와 직접 매칭이 되지는 않습니다. 대신 해당 연구에서는 모델 출력과 GT간에 bipartite matching (Hungarian algorithm)을 통해서 매칭을 해줍니다. 본 방법은 NMS와 같은 후처리를 하지 않아도 성능이 기존 Faster R-CNN 등 baseline보다 성능이 약간 더 좋습니다.

Backbone variation

Transformer를 CV에 적용한 대부분의 논문은 원형 backbone을 사용합니다. 하지만 몇몇 연구에서는 CNN과 함께 사용하여 더 효율적인 구조를 제안하였습니다.

  • Hybrid model (equivalent to features as tokens above): Low-level feature는 CNN으로 추출한 다음에 Transformer 구조를 사용하는 방법은 두 가지 모델의 장점을 잘 활용할 수 있습니다. CNN의 구조적인 특성으로 최초의 visual feature를 계산량/파라미터 효율적으로 학습할 수 있고, Transformer의 구조적인 특성으로 여러 semantic feature의 관계를 학습할 수 있습니다.
  • Transformer block in CNNs: Non-Local Neural Networks 처럼 일종의 context embedding 모듈로 활용하는 방법이 있습니다. Visual Transformer (VT) 에서는 CNN feature를 입력으로 하여 여러 종류의 visual token을 계산합니다. 그리고 해당 token간의 관계를 모델링한 후, CNN feature에 다시 합쳐줍니다. 해당 연구는 강력한 transformer를 효율적으로 활용하여, 기존 CNN 대비 더 적은 연산량으로 높은 성능을 보여줍니다. 유사한 연구로는 BoTNet (A. Srinivas et al.)이 있습니다.

Conclusion and Open Questions

NLP와 같은 seq2seq 모델링에서 Transformer는 이미 널리 사용되고 있습니다. CV 도메인에서도 Transformer를 창의적으로 활용하고, 그 효용을 검증하는 연구들을 보면 매우 흥미로운 연구 트렌드인 것은 확실합니다. 연구자 입장에서 왜 Transformer는 강력한지, 그리고 제품을 만드는 입장에서 단순 흥미를 넘어 왜 Transformer를 활용해야 하는지에 대한 질문에 답할 필요가 있습니다.

Transformer는 성능을 효율적으로 높이는 방법입니다: BoTNet, VT-ResNet 등의 연구를 보면, CNN feature를 입/출력으로 하는 Transformer 구조를 제안하고, 기존의 CNN을 대체하거나 중간에 추가하여 사용합니다. 성능, 연산량 그리고 파라미터 증가량을 보면 꽤나 효율적으로 성능 향상을 이룰 수 있습니다. 그리고 이미 NLP 등에서 널리 사용되는 구조이기 때문에 GPU 뿐만 아니라 TPU 등 하드웨어에서 최적화를 잘해주리라 기대합니다.

Transformer는 inductive bias가 적습니다: 입력에 대한 가정이 적고, 따라서 그로 인한 모델 search space가 더 넓습니다. 추측컨대, 이로 인해서 학습 데이터를 많이 소화할 수 있고 (많이 필요로 하기도 하고), 학습에 소요되는 시간이 훨씬 깁니다. 하지만 잘 학습시킬 수만 있다면 image에 대한 inductive bias가 강하게 들어간 CNN를 뛰어넘는 성능이 나오는 것이 ViT 논문 등에서 검증되었습니다.

모델 구조가 단순합니다: 대부분의 Transformer를 사용한 연구의 backbone은 초기 Transformer 버전에서 크게 벗어나지 않습니다. AlexNet에서 시작하여 EfficientNet, ReXNet등으로 이어지는 수많은 변형이 있는 CNN과는 대조적인 모습입니다. 새로운 task에 적용할 때 많은 튜닝 없이 쉽게 사용할 수 있다는 점은 장점 입니다. 반대로 CV에 적용했을 때 Backbone 측면에서 발전의 여지가 더 있을 것 같다는 생각도 듭니다.

Transformer는 왜 강력한가: Transformer는 단순히 성능이 좋은 것 뿐만 아니라, multi-modal 입출력을 잘 소화하고 (UniT, CLiP), few-shot learning(GPT-3), multi-task learning도 잘합니다(GPT-3, UniT). 이에 대한 직관적인 이해는 아직 널리 알려진 바가 없습니다. 어쩌면 많은 수의 parameter로 인한 것일 수도 있고, 최소한의 inductive bias 때문일 수도 있고, 입력에 따른 dynamic한 연산 때문일 수도 있습니다. 특히 마지막 이유가 중요하지 않을까 생각합니다만, 이 모든 것은 아직 추측입니다.

본문에 오류가 있거나, 토론이 필요하신 경우 jcpark@lunit.io 로 메일을 보내주세요. 읽어주셔서 감사합니다. 다음 블로그 포스팅에서는 Transformer를 Computer Vision에 적용한 주요 논문들을 리뷰할 예정입니다.

본 포스팅은 2021년 2월까지 arXiv 등에 공개된 논문들을 기반으로 작성되었습니다.

Useful Resources

Selected, related papers on Transformers in computer vision

--

--

Jongchan Park
Lunit Team Blog

Deep Learning Researcher, working at Lunit Inc. Mainly interested in computer vision for recognition. https://sites.google.com/view/jongchanpark