컴퓨터비전

[논문리뷰] InternImage: Exploring Large-Scale Vision Foundation Models withDeformable Convolutions

PIAI 2024. 5. 11. 18:45

참조

 

 

[논문리뷰] AN IMAGE IS WORTH 16X16 WORDS:TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE(Vision Transformer)

참고 자료 [논문리뷰] Attention is All you need의 이해 소개 Attention Is All You Need The dominant sequence transduction models are based on complex recurrent or convolutional neural networks in an encoder-decoder configuration. The best perfor

lcyking.tistory.com

 

들어가며

본 논문은 Vision Transformer(ViT)와, Deformable Convolution Network(DCN) V2에 대한 사전 지식이 있다는 가정하에 작성되었습니다. ViT는 본 포스팅에 있어 참조할 자료가 있지만, DCN은 다른 포스팅에 정리한 글이 많으니 참조하시길 바랍니다.

 

최근 큰 스케일을 가지는 ViT가 컴퓨터 비전에서 좋은 성과를 내고 있었고, 그에 따른 후속 연구들이 많이 나오고 있었습니다. 그에 반해, CNN에 대한 연구는 저조해지고 있었죠. 이러한 이유는 Transformer와 Convolution의 구조적인 측면에 있고, 그 차이는 아래와 같습니다.

 

  1. Long-range dependencies

    • 일반적으로 수용필드가 크면 성능도 좋다고 잘 알려져 있는데, CNN은 고정된 사이즈의 커널(e.g. 3*3)을 이용한다는 제한점이 있습니다. 이 낮은 수용필드를 늘리기 위해, 해상도를 Pooling을 줄여가며 다양한 해상도에서 이 커널을 Stacking 하는 구조를 가져 극복하려 했지만 한계가 있었습니다.
    • 이에 반해, 
  2. Adaptive Spatial Aggregation

    • 또한, CNN은 아무리 다른 데이터가 입력으로 들어와도 커널에 대한 Weight가 바뀌지 않고, 이에 따라 inductive bias가 너무 강합니다.
      -> inductive bias가 강하면 적은 데이터에도 수렴은 빠르다는 장점이 있지만, 데이터가 많아지고 모델에 대한 파라미터 수가 증가해도 어느 정도에서 수렴해 모든 데이터를 수용하지 못한다는 단점도 존재함.

    • Transformer의 Multi-Head Self-Attention(MHSA)는 입력에 따라 동적인 Weight를 가지고, inductive bias가 없습니다.
      -> CNN과 반대로 inductive bias가 없어 적은 데이터에 수렴을 못한다는 단점이 존재하지만, 데이터가 많아지고 모델에 대한 파라미터 수가 증가하면 모든 데이터를 수용할 수 있다는 장점이 존재함.

 

위에서 정의한 CNN의 단점은 수용필드가 작고, 커널에 대한 고정된 Weight를 가지는 inductive bias가 너무 강하다는 겁니다. 최근 데이터의 수가 기하급수적으로 증가함에따라 이 모든 데이터를 수용하지 못하는 CNN의 구조는 배제되기 시작했고, 자연스레 Transformer 구조에 대한 연구만 이루어지고 있었죠.

 

하지만, 본 논문에서는 위의 CNN의 단점을 모두 극복하며, CNN도 많은 데이터를 수용할 수 있는 구조로 설계가 가능하다는 것을 보여주었습니다. 그 핵심은 DCN V2의 구조를 도입하고, 이 구조를 ViT와 비슷한 형식으로 변형시키는 것입니다. 그래서 이 구조를 DCN V3라고 명명하였습니다. 

 

이에 대한 자세한 구조는 아래에서 살펴보겠습니다.

 

 

Deformable Convolution V3

 

본 논문은 DCN V2 구조를 기반으로 설계되었습니다. 수식은 아래와 같습니다.

 

 

  • k: 샘플링 포인트 수; \( w_k \in \mathbb {R}^{c*c} \): k번째 샘플링 포인트의 가중치

  • \( m_k \): k번째 포인트의 진폭(modulation)M에 대한 scalar(sigmoid 함수를 거쳐 [0, 1] 범위)

  • \( p_k \): k번째 포인트 커널의 사전 정의된 위치
    -> \(p_k \in \) {(-1, -1), (-1, 0), ..., (0, +1),..., (+1, +1)}, 3*3 커널이라 하면 총 9개

  • \( \Delta p_k \): k번째 포인트의 Offset

 

이 구조로 인해, 커널이 학습 가능한 Offset으로, 커널이 유동적으로 짧아지거나 길어져 수용필드가 기존보다 커진다고 주장합니다(첫번째 단점인 장기의존성 해결). 아울러, 커널이 이미지에 Condition 되기 때문에, 동적인 Weight를 가져 inductive bias도 약해진다고 합니다(두번째 단점인 적응적인 공간 집계 해결).

 

이렇게 단점을 해결한 건 맞지만 아직까지는 기존 DCN V2와 동일한 배경이죠? 그래서 본 논문은 여기서 나아가 몇 가지 개념을 더 확장하였습니다. 

 

  • 파라미터와 메모리 절감

    먼저 DCN V2가 이루어지는 그림은 아래와 같습니다. 


    DCN V3는 DCV V2의 offset 및 modulation을 예측하기 전 conv를 Depth-Wise Convolution(DWConv)으로 변경하였습니다. 데이터의 증가함에 따라 파라미터 수가 증가할 때, 기존 conv를 사용하는 것보다 DWConv를 사용하는 것이 파라미터와 메모리 복잡도를 줄일 수 있습니다.

  • Multi-Group mechanism

    제가 생각했을 땐 이 부분이 가장 중요한 것 같습니다. 기존에는 하나의 Linear layer로 offset와 modulation을 예측했습니다. 하지만 이 Linear layer를 하나가 아닌 여러개 구성하여, 여러 offset과 modulation의 그룹을 가진다면 더 풍부한 표현력을 학습할 수 있지 않겠냐는 것이 핵심입니다. 이 부분이 MHSA의 여러 헤드를 가지는 것과 아주 유사합니다. 

    그래서 기존 DCN V2 식에 각 Group에 대한 연산을 진행하면 아래와 같습니다.



    앞의 연산에 Group만 추가되었습니다. 한 Group g에 대해 \( w_g \in \mathbb {R}^{C * C^{'}} \)이고, \( C^{'} = C / G \)입니다. \( x_g \)는 \(x \)에 대한 feature map을 slice 한 \(x_g \in \mathbb {R} ^{C^{'} * H * W} \)이고, 나머지의 차원은 동일합니다

  • 샘플링 포인트에 따른 Modulation 정규화

    기존에는 샘플링 포인트 K에 따른 Modulation이 Sigmoid로 정규화 되어 [0, 1] 범위를 가졌습니다. 모든 K에 대한 합은 [0, K] 범위를 가지는데, 이 값이 데이터나 파라미터 수가 커질수록 점점 커지며 불안정해진다고 합니다.

    이 불안정성을 각 Group에 대한 샘플링 포인트에  Softmax로 변경하면, 합이 1로 안정되지 않겠냐는 것이라 주장합니다. 실제로 Sigmoid를 적용했을 때 성능이 크게 감소하였습니다.

 

이 모든 과정을 sudo 코드로 보면 아래와 같습니다. 

def forward(self, input):
    """
    :input                       (N, H, W, C)
    :output                      (N, H, W, C)

    N: Batch_size, H: Height, W: Width, C: Channel
	K: offset의 수
    """
    N, H, W, _ = input.shape

    x = self.input_proj(input) # (N, H, W, C) 그대로

    x1 = input.permute(0, 3, 1, 2) # (N, H, W, C) -> (N, C, H, W)
    x1 = self.dw_conv(x1) # (N, C, H, W) -> (N, H, W, C); Dw_conv 적용 후, 차원 변환
    offset = self.offset(x1) # (N, H, W, C) -> (N, H, W, Group의 수 * (K*2))

    modulation = self.modulation(x1) # (N, H, W, C) -> (N, H, W, Group의 수 * K)
	modulation = modulation.reshape(N, H, W, self.group, -1) # (N, H, W, Group의 수 * K) -> (N, H, W, Group의 수, K)
    modulation = F.softmax(modulation, -1) # (N, H, W, Group의 수, K) 그대로; 각 그룹별 포인트들의 modulation을 softmax로계산
    
    x = DCNv3Function.apply( 
        x, offset, modulation,
        , self.group, self.group_channels) # (N, H, W, C)
        
   output = self.output_proj(x) # (N, H, W, C) 그대로

 

 

위와 같은 과정으로, 기존 단점을 극복하였을뿐더러 DWConv로 메모리도 아끼며, CNN의 inductive bias를 적게나마 상속받아 더 적은 학습 데이터와 시간으로도 성능이 좋은 이점도 동시에 얻었다고 합니다. 

 

 

마치며

 

DCN V2를 확장한 3가지 구조에 따른 실험 결과는 아래와 같습니다. 

 

 

유심히 보셔야할 것은 multi-group을 사용했을 때, 이미지 분류에서 약간 증가했지만, Object Detection(\(AP^b \))와 Semantic Segmantation(\(AP^m \)에는 더 놓은 성능 향상을 이루었습니다(더 자세한 실험 결과는 원문 참고). 이 부분은 더 큰 수용필드를 원하는 Dense Prection 분야에 적절하게 적용됐다고 할 수 있을 거 같습니다.

 

또한 Softmax를 사용하기 전 후, 성능이 크게 떨어진 것을 확인할 수 있습니다. 

 

이 밖에도 모델의 파라미터 수를 늘리기 위한 규칙도 정하였습니다. 

 

 

이 부분은 본 글에서는 다루지 않도록 하겠습니다.

 

 

요즘 계속해서 Transformer 기반의 논문만 나오고 있었는데, 본 논문은 CNN도 발전 가능성이 있다는 것을 보여준 논문입니다. 그 많은 후속 연구에 대한 많은 도움을 줄 것이라 예상합니다.

 

 

긴 글 읽어주셔서 감사합니다.

이만 포스팅을 마치도록 하겠습니다.