I'm Lim

[개념 정리] Convolution 연산 종류 본문

Lecture & etc/Torch

[개념 정리] Convolution 연산 종류

imlim 2022. 12. 28. 20:10

Introduction

  2012년 AlexNet의 ILSCVRC 2012년 이후로 CNN 기반의 딥러닝 모델이 컴퓨터 비전 분야에서 큰 활약을 하고 있습니다. 그에 따라, 가장 기초적인 (Naive) Convolution 연산도 다양한 발전이 있었습니다. PyTorch 프레임워크에서 가지는 하이퍼 파라미터를 기준으로 다양한 Convolution 연산들을 정리하고, 어떤 논문에서 아래 개념들이 사용되었는지 정리하는 시간을 가지려고 합니다.

1. Naive Convolution

1 ) 개념 및 해당 개념을 사용한 논문

  • 가장 흔히 알려져있고, 자주 사용되는 Convolution입니다. Torch에서 Conv2d가 이 Convolution 연산에 해당합니다. LeNet 논문에서도 설명하였듯이, 기존 Linear 레이어의 여러가지 한계때문에 탄생했습니다. 아래의 그림처럼 Conv연산은 2D에서 동작하여 Local feature들을 잘 추출한다는 특징이 있습니다. 

  • CNN 기반 모델이라면 해당연산을 사용하지 않은 논문을 찾기가 더 힘들다고 할 정도로 매우 많이 사용됩니다.

 

Naive Convolution [ 1 ]

2 ) 파라미터 소개 및 설명

Torch.nn.Conv2d [ 2 ]

 

  • In_channels & out_channels : 입력 채널의 수와 출력 채널의 수를 결정하는 파라미터

    - CNN기반 딥러닝 모델은 레이어가 깊어질수록 feature map의 크기는 줄여가고 channel의 수는 키우는 형태를 갖습니다.

    - 추후에 말씀드리겠지만, Xception 논문 기준으로 channel의 수는 중요한 의미를 갖게 됩니다 (channel dimension).

  • kernel_size : 필터의 커널사이즈를 가리키는 파라미터

    - 커널사이즈는 쉽게 말해서 "얼만큼 볼거냐?"로 말할 수 있습니다. 즉, Convolution 필터가 연산을 처리하는 영역의 크기를 뜻합니다.

    - 커널 사이즈는 LeNet과 AlexNet에서는 레이어가 깊어질수록 점점 작아지는 형태를 가졌습니다. 하지만, VGGNet 이후로 3 x 3으로 고정하여 사용되기 시작했습니다.


  • stride : 필터의 연산을 얼만큼의 간격을 두고 진행할 것인지를 의미하는 파라미터

    - stride는 얼만큼의 간격을 두고 Conv연산을 진행할지에 관한 파라미터입니다. 예를 들어, 7 x 7 이미지가 존재하는데 3 x 3 Conv와 stride를 2로 두었다고 가정하겠습니다. 그렇다면, 출력 feature map의 크기는 3 x 3이 됩니다. 

    - 연산량을 줄이기 위해서 stride를 키울 수도 있겠지만, 이 역시 VGGNet 이후로 1 x 1으로 고정되었습니다. 다만, feature map의 크기를 줄이기 위한 Pooling 연산시에 kernel의 크기와 stride 크기를 2로 두어 절반으로 줄이는 형태로 자주 사용됩니다.


  • Padding & Padding_mode : feature map의 가장자리를 채우는 파라미터

    - Padding은 LeNet 논문에서는 feature map 가장자리의 연산 횟수와 중앙의 연산 횟수가 일치하지 않다는 문제점을 보완하기 위해 사용된다고 하였지만, 이후에는 feature map의 크기를 유지시키기 위한 목적으로 사용됩니다.

    - Padding은 여러가지 방식이 있습니다. 0으로 채우는 zero padding도 있고, 원래 feature map을 대칭하여 채울 수도 있습니다. 주로 0을 사용하는 것 같지만, padding_mode에서 여러가지 파라미터를 통해 padding을 수행할 수 있습니다.


  • bias : bias의 여부를 결정하는 파라미터

    - 이 파라미터가 True면 Conv 연산이 출력하는 feature map에 학습가능한 bias를 추가합니다 (기본적으로 True).

 

2. Dilated Convolutions

1 ) 개념 및 해당 개념을 사용한 논문

  • Atrous Convolution으로도 불리며, Segmentation 분야의 DeepLab 계열이 적극적으로 활용합니다.

  • 동일한 컴퓨터 계산량으로 더 넓은 영역을 커버해서, 실시간으로 처리해야하는 경우 자주 사용된다고 합니다.

 

Atrous Convolution [ 1 ]

2 ) 파라미터 소개 및 설명

  • dilation : 커널의 간격을 결정하는 파라미터

    - 위 그림 (dilation=2)에서 보이는 것처럼 dilation은 커널의 간격을 결정합니다. 컴퓨터 계산량을 유지하면서도 마치 5 x 5 Conv 연산처럼 동작합니다. 

 

3. Group Convolution

1 ) 개념 및 해당 개념을 사용한 논문

  • Group Convolution은 ResNext 논문에서 Cardinality라는 개념을 도입하면서 사용된 Conv 연산입니다.

  • 이 연산은 입력 채널을 group의 개수만큼 나눈 후, 각각 conv 연산을 수행합니다.

2 ) 파라미터 소개 및 설명

  • groups : ResNext의 cardinality 파라미터

    - 이 파라미터는 완벽히 ResNext에서 설명한 것과 동일하기 때문에 자세한 설명은 생략하겠습니다.

 

4. Transposed Convolution

1 ) 개념 및 해당 개념을 사용한 논문

  • deconvolution으로도 불렸던 연산입니다 (실제로는 Conv연산의 역연산이 아닌 Tranpose 연산이라 Transposed Convolution으로 불립니다).
     
  • ZFNet에서 Transposed Convolution을 이용하여 Convolution 레이어의 시각화를 진행했습니다. 뿐만 아니라, Encoder-Decoder 구조의 Decoder에서도 feature map의 크기를 복원하기 위해 자주 사용됩니다.

 

Transposed Convolution [ 1 ]

2 ) 파라미터 소개 및 설명

Torch.nn.ConvTranspose2d

  • 전반적인 파라미터 역할 자체는 Conv2d와 동일합니다. 그러나, 연산과정이 차이가 존재합니다.

  • 자세한 연산 과정은 어떤 분이 자세히 설명해주셔서 https://cumulu-s.tistory.com/29를 참조하시면 될것 같습니다.

Reference

[ 1 ] https://towardsdatascience.com/types-of-convolutions-in-deep-learning-717013397f4d

[ 2 ] https://pytorch.org/docs/stable/generated/torch.nn.Conv2d.html

 

 

 

Comments