[모두를 위한 딥러닝2] CNN #1

YSL·2021년 7월 18일
0

모두를 위한 딥러닝2

목록 보기
10/23

Convolution

  • convolution

    : 이미지 위에서 stride 값만큼 filter를 이동시키면서 겹쳐지는 부분의 각 원소의 값을 곱해서 모두 더한 값을 출력으로 하는 연산
    - stride : filter가 한 번에 얼마나 이동할 것인가
    - padding : input 이미지 상하좌우에 0으로 패딩값만큼 둘러싸준다

- filter 만들기
[ torch.nn.Conv2d(input_channels, output_channels, kernel_size, stride = 1, padding = 0, dilation = 1, groups = 1, bias = True) ]
ex) input: 1장, output: 1장(filter가 1장이므로 output도 1장), kernal size: 3x3일 때

=> conv = nn.Conv2d(1, 1, 3)

out = conv(input)일 때,
- 입력의 형태
1. input type : torch.Tensor
-> 'Tensor타입'이어야 한다
2. input shape : (N x C x H x W)
-> N: batch_size, C: input_channel, H: height, W: width
- output size = [ {input size - filter size + (2*padding)} / stride ] +1
+) 만약 +1 하기 전 값에서 소수점이 발생하면, 소수점은 버리고 정수만 취한다
+) input size가 AxA형태가 아니라 AxB형태인 경우, (A, B)로 넣고 계산한다

ex) 예제 문제 풀이



  • Neuron(perceptron)과 convolution의 관계

    1. perceptron의 weight값으로 filter가 들어간다.

    2. 1의 perceptron에 input 데이터가 연결되어 연산이 진행된다.


    +) filter 역시 bias를 가질 수 있기 때문에 실제 연산 후 출력값은 [계산값 + bias ]



  • Pooling
    : 이미지의 크기를 줄이기 위해 사용한다.
    (fully connected 연산을 대체하기 위해 Average Pooling을 사용하기도 함)

    • Max Pooling
      ex) size = 2일 때, input 이미지의 2x2 부분 중 가장 큰(Max) 값을 내보냄 -> Max값으로 구성된 더 작은 크기로 resize
    • Average Pooling
      ex) size = 2일 때, input 이미지의 2x2 부분의 평균 값을 내보냄
      -> 평균값으로 구성된 더 작은 크기로 resize


  • 실습





  • convolution과 cross-correlation

    실습에서는 filter를 뒤집지 않고 그대로 계산했기 때문에 연산자는 convolution이 아니라 cross-correlation으로 적혀있음

    • convolution : g가 filter라 가정할 때, 이 filter값을 뒤집은 후 기존 이미지와 얼마나 겹치는가에 해당되는 값으로 출력값을 결정한다.
      -> g 뒤집고 계산
    • cross-correlation : filter값을 뒤집지 않고 그대로 넣는다.
      -> g 안 뒤집고 계산

0개의 댓글