Corgi Dog Bark

ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Pytorch Conv2d 와 Maxpool2d 설명
    카테고리 없음 2021. 5. 14. 21:13
    반응형

    1. Convolution 이란?


    - convolution 이란 convolution layer 의 크기(=stride 값) 만큼을 이동시키면서 겹쳐지는 부분의 각 원소의 값을 곱하여서 모두 더한 값을 출력하는 층이다. 그러면 이걸 왜 적용시키냐?? 가 궁금하실 것이다.

     

    - convolution layer을 적용시키는 것은 이미지를 인식 시킬때, 주변의 값들을 관계를 알아내기 위해서이다. 한마디로 수직의 특성을 가진 convolution Layer 를 이미지에 적용시킨다면, 이미지값에서 수직인 값들이 나오게 되고, 수평인 값들을 뽑아내는 특징을 가진 Conv Layer 을 적용시키면 수평의 값들이 나오게 된다.

     

    - 좀 더 이해가 쉽게 되기 위해서 밑의 그림을 살펴보자.

    - 이 그림에서 보듯이 edge detection 을 하는 conv 를 적용했을 때는 우측 상단의 이미지, 그리고 좀 더 샤프한 이미지를 얻는 conv layer 을 적용시켰더니 좌측값과 같은 이미지 특성이 나오는 것을 확인 할 수 있다.

     

    - 여기서는 설명을 안할 것이지만, 우리가 보통 생각하는 이미지는 필터가 3개 존재한다.(RGB의 값) 따라서 적용되는 Conv Layer의 값은 다른 특별한 처리를 안해주었다면 , RGB 에 해당하는 필터값 3개를 Conv 레이어 값으로 설정한다.

     

     

     

     

    2. PyTorch nn.Conv2d


    - 파이토치에서는 다음과 같은 모듈을 사용하는데, torch.nn 모듈안에 들어있으므로, import torch.nn을 해주어야 한다.

     

    -input type 은 당연히 torch.Tensor 로 shape 의 크기는 다음과 같다. 그전에 Conv2d 를 연산하게 된다면, stride(conv layer 의 크기, 그리고 이 conv layer 를 얼마만큼 띄엄띄엄 해주는 지=> padding 값 을 설정해주어야 한다.)

     

    - input shape = (N,C,H,W)  => (batch_size, channel, height, width) 가 되어야 한다.

    따라서 다음과 같이 torch.Tensor(1,1,64,64) 을 집어넣어주게 되고, Conv2d(1,1,3,padding =1) 을 설정해주게 된다면,

    stride = 3(convlayer 의크기값) 이고 batch_size 와 channel 의 개수가 각각 1개씩이라는 것이다. 모양은 다음과 같을 것이다.

     

     

     

     

    3. PyTorch MaxPool2d


    - Pooling : 보통 MaxPooling 을 사용하지만, Average Pooling Layer 을 사용하는 경우도 있다. Pooling Layer 에서는 따로 학습값이 진행되지 않고, backpropagation 값을 그대로 전달해 준다.

     

    - Pooling 값의 사이즈는 kernel_size 로 설정이 가능하며, 마찬가지로 padding stride, 등등이 설정가능하지만 , kernel_size를 주는 것이 보통의 방법이다.

     

    - Pooling Layer 을 사용하게 되면 size 가 pooling Layer 의 사이즈 만큼 줄어들게 된다.

     

     

     

    4. CNN ( Conv2d + MaxPool2d)


    - 따라서 다음과 같은 1*28*28 의 이미지가 있을때, 이것은 흑백이미지일것이다. 왜냐면 RGB 값으로 이루어진 값이 아니기 때문에 채널수가 1개이다. 

    - 따라서 다음과 같은 5*5*5 의 필터를 적용한다 하는데 , 이는 정확히 (1*5*5)의 필터를 가진 Conv2d를 5개 사용해서 5*24*24 를 만들겟다는 것이다. (맨처음에 1개층 밖에 없는데 필터 5개를 어떻게 한꺼번에 적용하겠는가!!)

     

    - 그런다음 pooling 층을 지나게 되면, pooling size =2 이므로 크기가 절반 줄어들게 되어 , 5*24*24 의 이미지 출력층이 나오게 된다.

     

     

     

    - 모두의 딥러닝 2을 보고 정리한 글입니다.

    모두를 위한 머신러닝/딥러닝 강의 (hunkim.github.io)

     

    모두를 위한 머신러닝/딥러닝 강의

     

    hunkim.github.io

     

    반응형

    댓글

Designed by Tistory.