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
3. Convolutional Networks / L2. Convolutional Neural Networks - Pooling Layers
Pooling Layers - CNN을 구성하는데 필요한 중간, 최종 레이어에 대해 알아보자. - Pooling layer 라 부르는 이 레이어는 주로 콘볼루션 레이어를 input으로 받아들인다. - 콘볼루션 레이어는 각 필터당 하나
kevinthegrey.tistory.com
https://hobinjeong.medium.com/cnn%EC%97%90%EC%84%9C-pooling%EC%9D%B4%EB%9E%80-c4e01aa83c83
CNN에서 pooling이란?
* 20.12.22. update, 블로그 옮겼습니다. 공교롭게도 이 블로그를 시작하자마자 취직을 해서 글을 이어쓸 수 없었네요. 이제라도 다시 시작하려고 합니다.
hobinjeong.medium.com
그리고 Keras 공식 홈페이지에서도 잘 설명이 되어있다.
https://keras.io/api/layers/pooling_layers/#maxpooling2d
Keras documentation: Pooling layers
keras.io
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
Segmentation과 Dilated Convolution
Segmentation classification이 사진에서 어떠한 물체가 '존재하는지' 를 판단하는 것이라면 Segmentation은 이미지에서 픽셀단위로 해당 픽셀이 어떤 Class에 속하는지를 예측하는 태스크로 볼 수 있다. Input
3months.tistory.com
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