📌 InternImage [CVPR 2023]

InternImage: Exploring Large-Scale Vision Foundation Models with Deformable Convolutions

Paperswithcode 홈페이지에서 Detection, Segmentation 등 많은 Benchmark Dataset에서 최고의 성능(SOTA)를 달성한 (무친성능의) 모델이다.

 

🤔 Brief

Architecture

 

Basic block: transformer와 같이 Layer Norm, FFN으로 구성
StemDownsampling layer: 기존 CNN의 설계(s2, p1은 각각 stride=2, padding=1)

 

 

 

 

목적

ViT, EfficientNet처럼 새로운 backbone모델Computer Vision분야에서도 GPT같은 foundation model을 만들겠다!!
(By. Deformable Convolutions)

 

 

 

 

 

 

 

 

 


1.  태생적인 CNN의 문제점과 극복

🤔 Why? Transformer > CNN

최근, ViT와 같은 Attention-base 모델들이 CNN보다 널리 사용되고 좋은 성능을 낸다.

 

Reason 1)

∙ CNN은 3x3처럼 고려 
 Transformer(MSA)는 모든 input을 고려.
 CNN은 Receptive field가 너무 작아 상대적으로 멀리보지 못함(= Long-Range Dependency 차이)

Reason 2)

CNN은 layer가 쌓이면서 이런 단점을 극복되는 것이 철학.
항상 모든 input을 고려, 학습하는 ViT와 비교해 넓은 공간적 통합이 부족


Ex) ERF의 경우
  ∙ ViT의 경우, layer는 항상 input에 적절한 영향을 받는다.
  ∙ CNN은 filter_size의 크기에 따라 커진다.
(ERF: 출력층의 하나의 뉴런에 영향을 미치는 input_pixel들의 공간 크기를 나타내는 것.)

 

 

 

 

 

 

 

 

 


Sol) DCN (Deformable Convolution)

1. ERF

  • Convolution filter가 고정되지 않고 알아서 퍼지기에 넓은 범위를 볼 수 있다!!
  • 이에 대한 증명으로 ERF를 사용 (ERF 확인 시, 넓게 퍼짐을 통해 증명)


2. ViT & Main Contribution

따라서 이 논문에서는 SOTA ViT에서 MSA 대신, 

"DCN(Deformable Convolution)을 잘 끼워 넣는다는 것"이 주요 내용이다.

→ 정확도∙연산량 등 transformer SOTA보다 더 좋다는 것이 main contribution


3. DCN v1 / DCN v2

[등장이유]

  • 크기, 포즈, 시점 등의 이유로 SIFT, Affine transform 등의 전처리가 필요한 경우가 존재.
  • CNN내에서, 알아서 conv연산이 필요한 경우, conv연산이 이루어지도록 학습해보자!라는 취지

 

 

[기존 CNN 연산]

3x3 filter의 경우, 하나의 output feature element를 만들기 위해 다음과 같은 연산을 진행한다.

  • Feature vector의 3x3크기만큼 conv연산 진행, 그 값을 모두 더함 하나의 element로 만드는 작업을 반복

 

[DCN V1의 주장]

  • 이때, pn을 학습하게 하는 것이 DCN 이다!

 

📌 이때, pn 3x3상수가 아닌, learnable param인 ∆pn이 된다면?

→ 이상적으로 알아서 학습이 필요한 위치에서 convolution이 진행될 것.

 

 

🚩 위치 학습 방법

1. 기존 convolution과 별개로 pn을 학습할 수 있는 convolution(∆pn)을 하나 더 붙임
2. p 를 weight처럼 학습
3. 그 p 를 feature x를 통해 convolution을 진행.
4. 이를 통해 위치정보가 반영된 convolution을 할 수 있게 됨.

 

 

 


[DCN V2의 주장]

위치 + 중요도∙영향력도 고려.

  • filter의 위치에 따른 영향력, mn(modulation변수)를 고려해보자! 

 

🚩 영향력 학습 방법

1. 앞과 같이 단순히 convolution을 하나 추가
2.
같은 방법으로 영향을 받는 정도까지 학습

 


 

4. DCN V3

<기존 DCN V1, V2의 문제점>

위의 DCN V2를 그대로 ViT에 넣으려고 하니 다음과 같은 문제가 발생

문제점

Prob 1) ViT SOTA에 끼워넣을 때, Convolution 개수에 따라 linear하게 parameter와 memory복잡성이 증가

Prob 2) DCN V2의 modulation이 불안정


ERF의 경우

  ∙ modulation filter의 sigmoid: 어떨 때는 평균이 1에 가깝고 어떨 때는 0에 가까움
  ∙ 이는 output에서 어느 것이 중요한지 판단이 안됨 (= 불안정)

 

 

 

 

 

<DCN V3의  3가지 Solution>

1. MobileNet에서 사용되는 "Depthwise Convolution"을 도입, weight를 합침
(= 경량화; 최종 결과를 토대로 볼 때, 성능보다는 연산량, 경량화를 우선)
weight를 합쳐 경량화를 하기 위해
   i) group을 나눠 group별로 하나의 weight만 학습하게 함
   ii) 그 group안에서 Depth-Wise Convolution을 진행, position과 modulation 학습
   iii) 이때, modulation factor는 softmax로 계산

2. Self-Attention처럼 MHA의 느낌이 나도록 "Group Convolution"을 도입


3. Sigmoid대신 Softmax를 사용 (→ 불안정성을 3x3 filter로 해결)

 

 

 

 

 

 


🤔 Appendix와 마무리...

ViT에서 benefit을 가져오고, EfficientNet처럼 쌓는다.(Scaling규칙)

 

 

 

Appendix

Appendix 내용을 볼 때, Stage별 ERF를 보면, 
∙ Stage 1,2에서는 작은 부분을 보고
 Stage 3,4에서는 ERF가 크게 커지는 것을 알 수 있다.



추가적으로, ResNet은 ERF가 학습이 되든 말든 Local하게 존재하지만
InternImage는 ERF가 Stage 3, 4가 넘어가게 되면, ERF가 많이 커짐을 알 수 있다. 

 

 

 

 

Limitation

높은 속도를 요구하는 경우, 그렇게 좋지는 않다.
(MobileNet에서 사용되는 "Depthwise Convolution"을 도입해 weight를 합침을 통해 경량화를 진행했음에도 불구하고)
But, 자신들이 처음이어서 봐달라는 식으로 마무리되었다.

+ Recent posts