본문 바로가기

코딩/Deep Learning

[파이썬/Pytorch] 딥러닝 - CNN(Convolutional Neural Network) 2편 : Padding, Pooling

반응형

2021.09.14 - [코딩/Deep Learning(Pytorch)] - [파이썬/Pytorch] 딥러닝- CNN(Convolutional Neural Network) 1편

 

 

1. 패딩(Padding)

 

  이전 편에서 설명한 내용이지만 Conv층은 1개가 아닌 여러개로 이루어질 수 있다. 1개 Conv층에서 Kernel을 지나게 되면 당연히 결과인 특성맵(Feature map)의 사이즈는 계속 줄어들게 된다.(아래 이미지 참고)

 

여러개 Conv (2*2 Kernel) 적용시 특성맵 크기 변화

  

  컨볼루션 연산 자체가 이미지 데이터의 공간적인 구조를 보존하기 위해 진행되는데 여러번 Conv 층을 지나게 되면 공간적인 구조가 소실되게 된다. 따라서, CNN에서는 패딩(Padding)이라는 것을 사용한다. 

 

  아래 이미지는 4*4 입력데이터에 Padding=1을 설정한 경우이다. 패딩 설정값은 제로 패딩(Zero-padding)이다. 4*4 입력 data를 3*3 Kernel을 통해 Conv 연산시 특성맵의 사이트가 4*4 그대로 유지되는 것을 확인할 수 있다.

 

padding = 1 사용시 특성맵의 크기

 

아래는 Pytorch 사용시 torch.nn 모듈에 속한 Conv 층 구현 코드이다. 파라미터 내용을 보면 알겠지만 padding이 있다. 아무 것도 설정하지 않을시 default값은 0이다. 위 이미지와 같이 구현하려면 padding=1을 입력하면 된다.

 

* Pytorch torch.nn 모듈 Conv 구현

torch.nn.Conv2d(in_channel, out_channel, kernel_size, stride=1, padding=0...)

 

 

2. 풀링(Pooling)

 

  풀링은 이미지의 사이즈를 줄이는 과정이다.. 즉, 모델 전체 매개변수의 크기를 줄여준다. 풀링을 하는 이유를 검색해보니 Data 사이즈를 줄여서 CNN 모델이 과적합되는 것을 방지한다고 한다. Data 사이즈가 줄어들므로 당연히 메모리 리소스도 효율적으로 사용할 수 있다. 또한, 풀링의 경우 Conv 층처럼 


※ 과적합(Overfitting)

  어떤 딥러닝 모델에 대해 과적합이 되면 모델의 성능이 떨어질 수 있다. 여기서 과적합이란 딥러닝 모델이 학습데이터를 과도하게 학습한 상태를 말한다. 데이터가 많아져서 학습을 많이하면 정확도가 오히려 높아지는 것 아니냐고 반문할 수도 있다. 실제 딥러닝에서는 학습데이터가 과도해지면 기존 데이터에 대해서는 예측 정확도가 높아지나 새로운 데이터를 예측할 때는 불필요한 데이터까지 학습한 상태로 정확도가 떨어진다고 한다. 


 

  아래 이미지는 2*2 pooling, stride=2일 경우의 풀링 예제이다. Max pooling의 경우 정해진 풀링 사이즈에서 최대값을 뽑아내는 것이고, Average pooling은 말그대로 평균을 계산하는 것이다. 

 

 

Max pooling, Average Pooling

 

  풀링은 언뜻보면 Conv 연산과 비슷하지만 채널수가 변하지 않으며 가중치 w가 따로 없다는 점에서 차이가 있다.

 

* Pytorch torch.nn 모듈 중 Max Pooling 구현

torch.nn.MaxPool2d(kernel_size, stride=None, padding=0...)

 

728x90