• Declan 데클란

Swin Transformer에 대해 알아보기


안녕하세요! 항상 당신 곁에, 의료 전문가 아티큐, Declan 데클란입니다.

이번 Tech 블로그에서는 ViT(Vision Transformer)를 발전 시켜 object detection, semantic segmentation 등 computer vision 분야에 transformer를 적용하기 위해 연구된 Swin Transformer 논문을 리뷰해보겠습니다.


논문은 아래의 링크를 참고해주시기 바랍니다.

Swin Transformer: Hierarchical Vision Transformer using Shifted Windows

Ze Liu, Yutong Lin, Yue Cao, Han Hu, Yixuan Wei, Zheng Zhang, Stephen Lin, Baining Guo, Microsoft Research Asia

[관련 논문 바로가기]


논문에서는 Computer vision 분야에서 두루 사용할 수 있는 backbone을 만들기 위해 연구를 진행한 것이라고 합니다. 기존의 Transformer는 언어 분야에서 많이 사용되었고 좋은 성능향상을 가져왔습니다. 하지만 Vision 분야는 언어와는 다르게 해상도와 같은 스케일 변동이 커서 그대로 적용할 수 없었습니다. 그래서 논문에서는 Shifted windows를 이용한 계층적 transformer를 이용하여 연산 효율성을 높이고 스케일 변화에 유연한 구조를 제안했습니다.

[코드 링크 바로가기]


Transformer를 vision에 적용하기 위한 2가지 과제

언어 분야에서 높은 성능을 보여준 transformer를 Vision 분야에서 사용하기 위해서는 크게 2가지의 차이를 극복하는 것이 중요합니다.


첫 번째로는 Scale입니다. 언어 영역에서는 Token (transformer processing의 기본 구성요소)는 고정적이 규모이지만 vision에서는 scale에 따라 크게 달라집니다.


두 번째로는 vision은 pixel 수준의 매우 세밀한 prediction이 필요한 task가 많다는 것입니다. Self-attention 과정이 이미지의 크기에 따라 이차적인 연산 complexity를 가져서 어렵습니다. (사진의 크기가 2배가 되면 계산을 4배가 필요해집니다.)












이 2가지의 과제를 극복하기 위해서, Swin transformer는 위의 그림(a)과 같이 작은 크기의 patch(회색 윤곽선)를 깊게 들어갈수록 인접 patch들과 결합을 하여 scale에 따라 token의 개수를 변화 시켜 FPN과 U-Net 계열에도 활용이 가능하며, Local window내의 patch끼리만 self-attention을 진행하여 이미지 크기에 따라 일차(선형)적인 연산 complexity로 만들어 주었습니다.










하지만 Local window 내에서 self-attention을 수행하는 것은 서로 다른 window에 있는 patch들이 단절되어 연결성에 문제가 있습니다. 이를 보완하기 위해 적용한 것이 위의 그림인 shifted window 기법입니다. Layer-l에서는 정규 window partitioning을 채택 후 각 Local window에서 self-attention을 하고 다음 Layer-l+1 에서는 그림과 같이 이전 window와 어긋나는 형태의 window partitioning을 생성합니다. 이로 인해 window들의 연결성을 확보하여 성능을 향상했습니다. (아래 Table을 보면 shifted window의 성능 향상을 볼 수 있습니다.)







Swin Transformer의 전반적인 구조

위의 그림(a)은 논문의 Swin-T(기본 구조 Swin-B의 0.25배 모델)의 구조를 나타낸 것입니다. 먼저 ViT와 같이 RGB 이미지를 겹치지 않는 patch로 분할하는 patch partition 과정을 거칩니다. 이 과정에서 각 patch는 token처럼 다뤄지고 feature는 raw pixel 값의 결합이고 논문에서는 4x4의 patch 크기를 구현하고 각 patch는 48(4x4x3) feature dimension을 갖습니다.


그런 다음 stage 1에서 linear embedding layer를 통해 C(Swin-T에서는 96) dimension으로 만들어 줍니다. 그런 다음 그림(b)의 Swin Transformer Block을 통과합니다. Stage 2, 3, 4에서는 계층성을 만들기 위해서 patch Merging 과정으로 시작합니다. 2x2의 인접 patch들의 feature를 결합하면 feature dimenstion이 4배가 되지만 Linear Layer를 통해 2배의 dimension을 출력합니다. 결국 Patch Merging 과정을 통과하면 Token은 4배 줄고 dimension은 2배가 됩니다. 그다음 각각 swin Transformer Block을 통과합니다.


Swin Transformer Block은 그림(b)에 나타난 것처럼 MSA(Standard Multi-head self-attention)모듈을 Shifted window 기반으로 교체한 W-MSA와 SW-MSA를 사용하며 Layer Normalization은 MSA 모듈과 MLP 전에 각각 행해집니다.

Shifted Window 기반 Self-Attention









Standard transformer의 구조는 Token과 모든 다른 Token 사이의 관계가 모두 계산되는 Self-attention을 수행합니다. 이것은 위에서도 언급됐듯이 엄청난 계산량 증가를 불러옵니다. 위의 식(1)은 Standard self-attention의 연산량입니다. 해상도(hw)의 제곱에 비례한 것을 볼 수 있습니다. 하지만 논문에서 제안한 Local window 내에서의 Self-attention을 수행하게 된다면 식(2)과 같이 해상도(hw)와 선형적 비례관계로 낮출 수 있습니다.


또한 shifted window로 2가지의 partitioning 구성을 연속으로 사용하여 효율적 계산을 유지하는 동시에 window 간의 연결성을 확보했습니다. 연산의 과정을 위의 식(3)과 같습니다.









Shifted window partitioning은 window의 개수가 달라진다는 문제가 있습니다. Shift 하기 전의 window보다 가로, 세로에 각각 1개씩 더 많아지고 설정된 window의 크기(MxM)보다 작은 window가 생깁니다. 여기서 발생하는 문제를 해결하기 위해 위의 그림처럼 작은 window 중 절반을 masking을 하고 cyclic shift를 이용하여 MxM 크기의 window로 합쳐서 self-attention을 진행하는 방법을 사용하였습니다.


마무리

Swin Transformer는 Object detection task인 COCO에서 58.7(+2.7) box AP와 51.1(+2.6) mask AP를 기록하고, Semantic Segmentation task인 ADE20K에서 ImageNet-22K pre-training을 이용하여 53.5(+3.2)mIOU를 기록하는 등 다양한 vision task에서 성능 개선을 이뤘습니다. 이것은 vision classification에서만 좋은 성능을 보인 ViT에서 많은 발전을 이룬 것으로 보입니다.


지금까지 Swin Transformer에 대해 알아보았습니다.

다음에도 유익한 Tech 관련 정보를 가지고 다시 돌아오도록 하겠습니다. 감사합니다. :)



 

작성자: Declan

썸네일 이미지: Heidi

삽입 이미지: Declan

업로드: Clark


인용 시 출처를 표기해 주세요.

 

조회수 469회댓글 0개