Pytorch_Convolution_layer

Pytorch Convolution layer에 대하여

모두를 위한 딥러닝 - 파이토치 강의 참고

  • Convolution layer란 이미지 위에서 filter가 stride값만큼 움직이며 이미지와 filter가 겹쳐지는 부분의 각 원소의 값을 곱하고 모두 더한 값을 출력으로 하는 연산이다.

  • 아래와 같은 이미지 위에서 stride가 1인 filter가 움직이며 나타나는 출력을 계산해보자.

  • Convolution

1
2
3
4
5
6
7
8
9
10
11
12
13
위의 그림에서 아래와 같은 필터를 사용했을 때 나오는 결과값을 하나 계산해보자

filter = [[1, 0, 1],
[0,1, 0],
[1, 0, 1]]

3x3필터가 이미지와 처음 겹쳐졌을 때 다음과 같은 연산이 수행된다.

output = (1*1) + (0*1) + (1*1) +
(0*0) + (1*1) + (0*1) +
(1*0) + (0*0) + (1*1) = 4

따라서, 우측 Convolution Feature의 처음 값이 4로 나타나는 것을 확인할 수 있고, 이후에도 stride가 1이므로, 한칸씩 움직이며 같은 연산을 반복한다.
  • zero-padding

    • zero-padding이란 이미지 주변에 패드를 끼우듯 0으로 채워진 테두리를 둘러 inpute size를 키워주는 것이다.

    • zero-padding을 사용하는 이유는 Convolution layer를 지났을 때 이미지의 크기를 보존해주기 위해서다.

    • 위에서 우리는 3x3 의 filter를 사용한 결과, 원래 이미지의 크기가 5x5에서 3x3으로 줄어든 것을 볼 수 있었다.

    • 이와같은 Convolution layer를 반복적으로 지날때 이미지의 크기가 작아져서 정보의 손실이 생기게된다.

    • 하지만, zero-padding을 이용해 원본 이미지의 size를 키워서 Convolution layer를 지나게 한다면, 원본 이미지의 크기를 보존시켜 정보의 손실을 최소화할 수 있게된다.

    • Convolution with zero-padding

    • 위의 그림에서 Input size가 Output에서도 보존되는것을 확인할 수 있다.


  • Output size 계산하기

    • Convolution layer를 지나쳤을때 나오는 output size는 input size, filter size, stride, padding에 의해 결정되며, 다음과 같은 공식을 따른다.

      1
      output size = ((input size - filter size + (2*padding)) / strid) + 1
    • 위의 이미지를 예시로 계산해보면 다음과 같다.

      1
      output size = ((4x4 - 3x3 + (2*1)) / 1) + 1 = (1x1 + 2) + 1 = (3x3)+1 = 4x4
    • input size의 높이와 넓이가 다를때도 동일하게 계산할 수 있다.

    • 이처럼 하나의 Convolution layer를 통과했을 때 나오는 output size를 계산할 수 있고 이를 다음 layer의 입력값으로 활용할 수 있게된다.

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×