정리노트

Deep Learning (10)_CNN (Convolution Neural Network)_1 본문

AI/Deep Learning

Deep Learning (10)_CNN (Convolution Neural Network)_1

Krex_Kim 2022. 5. 22. 18:39

 

 

 

지난번 포스팅에서,

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이라면, 아래처럼 작동한다.

....쭉 끝까지 해보면

지난 포스팅 Summary부분을 보면 공식 이해가 쉬울것이다

 

만약 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

 

 

Comments