정리노트
Deep Learning (10)_CNN (Convolution Neural Network)_1 본문
지난번 포스팅에서,
CNN Architecture에는 크게 3가지 Building Block이 있다고 했다.
-> Convoluion Layer, Fully Connected Layer, Pooling Layer
직전 포스팅에서
Convoluion Layer, Fully Connected Layer에 대해서는 다뤘고,
이번 포스팅에서는 나머지 Building Block인 Pooling Layer에 대해서 다뤄보려고 한다.
그리고, 이런 Building Block으로 만든 CNN의 예시로 어떤 것들이 있는지 살펴보고,
Pytorch상에서 이를 어떻게 구현하는지 알아보겠다.
◆ 목차
◎ A Simple Convolution neural Network
◎ Pooling Layers
○ Max Pooling
○ Average Pooling
○ Summary Of Pooling
◎ Dilation
◎ a Simple Pytorch Example of the CNN (참조)
◎ A Simple Convolution neural Network
먼저,
지난 포스팅에서 다룬
Fully Connected Layer와 Convolution Layer 두가지로만 간단한 CNN을 구성해보도록 해보자.
아래와 같이 39X39 RGB Channel에 대한 image input이 있다고 할때
이를
3개의 Convolution Layer와
마지막에 Fully Connected Layer를 넣어...(최종 Activation Function앞)
Output하는 모델을 구성하면 아래와 같이 쓸 수 있다.
Class Label 개수에 따라, 최종 output인 y-hat 차원이 결정되며,
Binary Classification일경우, Sigmoid,
n-ary Classification일 경우 Softmax Activation Function이 사용된다.
◎ Pooling Layers
우선, CNN에서 Pooling layer가 무엇인지,
아래 블로그에서 잘 설명하고 있어서 먼저 첨부해두겠다.
https://kevinthegrey.tistory.com/142
https://hobinjeong.medium.com/cnn%EC%97%90%EC%84%9C-pooling%EC%9D%B4%EB%9E%80-c4e01aa83c83
그리고 Keras 공식 홈페이지에서도 잘 설명이 되어있다.
https://keras.io/api/layers/pooling_layers/#maxpooling2d
Pooling Layer란, Convolution Filter Size를 Managable 하게 줄여주는 Filter로,
너무 많은 필터가 존재할때, Neural Network가 Overfitting되는 것을 막아주는 역할도 하고,
이미지 사이즈를 줄이고 싶을때 사용되기도 한다.
이런 Pooling Layer는 여러가지 종류가 존재하는데
가장 대표적으로 사용되는 Pooling Layer에는 Max Pooling Layer과 Average Pooling Layer가 있다.
○ Max Pooling Layer
Max Pooling은 Filter size내에 있는 값중 가장 큰 값을 선택하여 Mapping하는 Pooling Layer로,
작동원리는 아래와같다.
Filter Size가 3이고, Stride가 1이라면, 아래처럼 작동한다.
....쭉 끝까지 해보면
만약 Channel이 여러개있다면
○ Average Pooling Layer
Max Pooling Layer가 Filter 안에 있는 Value중 가장 큰 Value를 선택하는 Layer이라면,
Average Pooling Layer는 평균값을 넣어주는 Layer이다.
작동원리가 간단하니, 아래 그림으로 가볍게 설명하고 넘어가도록 하겠다.
○ Summary Of Pooling
Pooling Layer에서..
Hyperparameter로 설정해 주어야 하는 값은
Filter size와, Stride Size이고, Learning과정에서 Update되는 Parameter는 존재하지 않는다.
그리고 이때 input size와 output Size는
◎ Dilation
https://3months.tistory.com/213
Convolution Filter Size를 크게하거나, 많은 필터를 사용하게 되면 Overfitting Problem에서 자유로울 수 없다고 하였고,
Pooling Layer와 Convolution Layer의 조합으로 이 문제를 해결한다고 하였다.
-> pooling을 통해 dimension을 줄이고 다시 작은 크기의 filter로 conv를 하면, 전체적인 특징을 잡아낼 수 있다.
하지만, Pooling layer를 사용하였을시 발생하는 문제가 한가지 있는데,
Filter Size가 작아지기 때문에, 기존의 정보 손실로부터 자유로울 수 없다는 점이다.
이런 문제를 해결하기위해 사용되는 기법이 바로 Dilation이다.
Dilated Convolution은 필터 내부에 zero padding을 추가해 강제로 receptive field를 늘리는 방법이다. 위 그림은 파란색이 인풋, 초록색이 아웃풋인데, 진한 파랑 부분에만 weight가 있고 나머지 부분은 0으로 채워진다.
-> 이렇게 함으로서, Pooling을 수행하지 않고도 Overfitting Problem을 해결할 수 있으면서도,Filter Size로인한 정보손실을 어느정도 막을 수 있게된다.
* Dilation은 주로 image Segmentation에서 많이 사용되는 기법이다.이부분은 위에 링크걸어둔 블로그에 잘 정리가 되어있으니 참조
◎ a Simple Pytorch Example of the CNN (참조)
가장 단순한 CNN Model을 Pytorch로 구현하면 아래와 같다.
위 처럼 데이터를 준비하고,
Test에서는 Auto Gradient기능을 꺼주고,
Model initilaization을 진행해준후
Training을 시작해주면
-> How to Save & Load Model
'AI > Deep Learning' 카테고리의 다른 글
Deep Learning (12)_CNN_3 : ResNet (0) | 2022.06.15 |
---|---|
Deep Learning (11)_CNN_2.. LeNet-5, Alex Net, VGG Net (0) | 2022.05.22 |
Deep Learning (9)_Convolution Layer (0) | 2022.05.22 |
Deep Learning (8)_Tensorboard & Tuning Parameter (0) | 2022.05.21 |
Deep Learning (7) _Batch Normalization (0) | 2022.05.21 |