Study Archives/Deep Learning

Convolution

ns4A 2023. 11. 16. 09:59

제 블로그 예전 포스트들을 보시면 신호처리와 제어공학에서의 컨볼루션을 한번 다룬적이 있었습니다. 신호처리에서의 컨볼루션은 주로 시계열 데이터 또는 1차원 신호에 대한 분석에 사용되는데 쓰였죠. 또한 이는 Linearity(선형성)와  Time-Invariance(시불변성)을 만족해야 했었습니다.

 

영상처리에서의 컨볼루션은 원본 영상 데이터에 대한 특징 추출(딥러닝), 혹은 영상에 대한 다양한 효과나 변환을 적용하기 위해(noise 제거, 특정 정보 강조) 사용됩니다. 신호처리와 마찬가지로 영상의 컨볼루션 또한  Linearity와 Shift-Invariance를 만족해야만 합니다. 왜 Time이 아니라 Shift인가 하면 시계열 데이터를 다루던 신호분야와 다르게 영상은 2차원, 혹은 3차원을 갖는 행렬데이터이기에 입력 데이터의 이동방향에 구애받지않고 시스템 특성이 동일하게 이동하는 Shift-Invariance가 필요합니다.

 

이론적인 이야기는 여기까지만하고 실제로 컨볼루션이 어떻게 수행되는지 확인해보겠습니다.

https://www.superdatascience.com/blogs/convolutional-neural-networks-cnn-step-1-convolution-operation
https://medium.datadriveninvestor.com/convolutional-neural-networks-3b241a5da51e

 

우선 준비물은 입력이 되어줄 원본의 영상, 그리고 필터, 혹은 커널이라 불리는 추출기 2개가 필요합니다. 이제 이 커널은 입력영상의 (0, 0) 즉, 좌상단 처음부터 시작해 오른쪽 끝까지, 그후 다음칸으로 내려가 다시 오른쪽 끝까지. 그렇게 1칸씩 이동하며 영상의 모든 곳을 훑어갑니다.

이때 필터의 크기(3x3)만큼 입력이미지에 이런식으로 겹치는 부분이 있을겁니다. 이 부분에서 연산이 이루어지고 그 결과 값을 출력으로 내보내게 되는데 연산 자체는 매우 간단합니다. 그냥 겹치는 각 픽셀끼리 곱해주고 더해주면 그만입니다.

가량 위의 경우에는 $7\times1 + 4\times1 + 3\times1 + 2\times0 + 5\times0 +  3\times0 +  3\times1 +  3\times1 +  3\times2 = 6$이 되겠네요.

이런식으로 커널이 이미지를 쭉 훑으며 출력칸을 다 채우게되면 컨볼루션의 출력 이미지, 혹은 feature map이라고도 불리는 결과 값을 얻어낼 수 있습니다. 출력에 대해 만약 기대하는 효과나 원하는 값이 있다면 필터의 크기나 필터의 계수 값, 혹은 입력이미지에 특정한 처리를 해준다던가 하는 식으로 변화를 줄 수 있을겁니다.

첫 번째로 패딩입니다. 앞서말했던 방법 중 "입력이미지에 특정한 처리"에 해당합니다. 정확히는 입력 이미지의 외곽에 특정한 수를 둘러줍니다. 꼭 1겹이 아니라 2, 3겹 혹은 그 이상으로 본인이 필요한만큼 두르면 됩니다. 이때 채워지는 값은 보통은 0을 사용하고 이를 제로 패딩이라 합니다. 패딩은 주로 출력 크기의 조절과 경계 부분의 정보 보존에 영향을 미치며, 컨볼루션 연산의 효율성과 성능을 향상시키는 데 사용됩니다.

 

두 번째는 스트라이드입니다. 아까 컨볼루션 연산을 설명할 때 커널(=필터)가 입력 이미지를 1칸씩 훑으며 지나간다고 했는데 사실 1칸씩 움직이는 것은 정확히 말하면 기본 값이고, 스트라이드 값을 지정해주면 그 값만큼 이동합니다.

즉 스트라이드는 커널이 입력 이미지를 훑어 지나갈때의 보폭이죠. stride=2이면 2칸씩, 3이면 3칸씩 이동하게 될겁니다. 큰 스트라이드는 계산 효율성을 높이고 공간 해상도를 줄이며, 작은 스트라이드는 세밀한 특징을 추출하고 더 높은 공간 해상도를 유지합니다.

 

$\text{출력 width} = \left\lfloor \frac{\text{입력 width } - \text{필터 width } + 2 \times \text{패딩}}{\text{스트라이드}} \right\rfloor + 1$

 

$\text{출력 height} = \left\lfloor \frac{\text{입력 height } - \text{필터 height } + 2 \times \text{패딩}}{\text{스트라이드}} \right\rfloor + 1$

 

결국 패딩과 스트라이드는 공간 해상도, 즉 출력 영상의 크기를 조절하는데 직접적으로 영향을 줍니다.

 

세 번째는 필터의 크기입니다. 일반적으로 작은 필터는 지역적인 작은 패턴이나 특징을 잘 감지해 세부적인 특징을 추출할 수 있습니다. 이는 특징 추출에서는 이미지 내의 선, 모서리 등과 같은 지역적인 구조를 감지하고 학습의 경우에는 큰 필터 하나보다 많은 매개변수를 가질 수 있어 모델이 데이터에서 다양한 패턴을 학습하도록 돕습니다. 또한 계산량이 적기 때문에 모델이 더 효율적으로 학습될 수 있는 장점도 있습니다.

 

반면에 큰 필터는 더 넓은 영역의 정보를 고려하여 전역적인 특징을 추출할 수 있습니다. 이는 이미지 전체에서 큰 패턴이나 객체를 감지하는 데 도움이 되지만 많은 파라미터를 가지기 때문에 계산량이 증가하고 모델의 훈련 및 실행 속도가 느려질 수 있습니다.

 

네 번째로 설명할 필터의 계수는 그 용도와 효과에 대해 많은 종류가 있는데 이는 다음 포스트에서 자세히 다뤄보도록 하겠습니다.

 

'Study Archives > Deep Learning' 카테고리의 다른 글

Deep Learning Fundamentals  (0) 2026.03.09
RGB-D 데이터에서 Depth Estimation과 Semantic Segmentation 이해하기  (0) 2026.03.09
Data Augmentation  (0) 2023.11.18
Optimizer, Gradient descent  (0) 2023.11.17
Activation Function  (0) 2023.11.16