[CS231N] Convolutional Neural Networks

bobsiunn·2021년 6월 25일
0

Study Memo - CS231N

목록 보기
6/7
post-thumbnail

5강. Convolutional Neural Networks

여러 개의 Filter를 통해 Input Image의 Feature를 추출하는 Convolution Layer, 그리고 추출한 Feature Image를 축소하는 Pooling에 대해 다루었습니다.
CS231N - 5강

  • Convolution Layer
  • Pooling Layer

Convolution Layer

Convolution Layer는 Input Image와 Filter 간의 Convolution (합성곱)을 통해 Image Feature를 추출하는 Layer입니다.


Why Convolution Layer?

Convolution Layer는 Connected Layer 이전에 Image를 최대한 단순화하기 위해 사용됩니다.

Neural Network에서 Height x Width x Depth로 구성된 Image Data는 Weight와의 원활한 연산을 위해 (Height x Width x Depth) x 1 사이즈의 행렬로 변환됩니다.

그리고 그 뒤에는 WxWx의 각 Row 내 Dot Product가 Activation Function을 거친 뒤에는 N x 1 사이즈의 행렬로 변화합니다.

이렇듯, 아무리 Image의 크기가 크다고 하더라도 최종 결과값은 (Class의 개수) x 1의 행렬로 축소되기 때문에 Input Image의 구체적인 Feature들을 놓치지 않기 위해서는 이미지 축소가 요구됩니다.


Convolution Layer?

Convolution Layer는 Input Image와 해당 이미지에서 Feature를 추출하는 Filter로 구성되어 있습니다.

Convolution Layer의 구조

  • Input Image
    : Height x Width x Depth 크기의 데이터입니다.
  • Filter
    : N x N x Depth 크기의 데이터로 Image에서 Feature를 추출하는 역할을 수행하여, Depth의 경우는 Image와 똑같이 맞춰줘야 합니다.

Convoltion Layer의 원리

Convoltion Layer는 Input Image의 각 부분에 Filter를 위치시키고, 합성곱 연산을 수행합니다.

Convolution 연산식
wTx+bw^Tx + b

  • wTw^T : 행렬 곱 연산 형식을 맞추기 위해 Transpose한 Filter입니다.
  • xx : Height x Width x Depth 크기의 Input Image입니다.
  • bb : Convolution 연산 오차를 적용하기 위한 bias입니다.

Convolution 연산식에 따라 모든 Input Image 부분에 합성곱을 수행하면, 그 값들로 구성된 Depth 1의 Activation Map이 만들어집니다.

이때, 1개의 Filter에 대해서 1개의 Activation Map이 만들어지는데, Filter가 늘어날 수록 여러 개의 Activation Map를 만듦으로써 다양한 Feature를 Activation Map에 담을 수 있습니다.

그리고 이러한 Convolution을 여러 차례 진행함으로써 보다 심층적인 Activation Map을 형성할 수 있습니다.

실행 결과

Convolution Layer 연산

Stride

Stride는 Convolution 연산 과정에서 Input Image의 한 부분을 연산한 후, 다음 연산 부분을 결정할 때, 이동하는 횟수를 의미합니다.
다음과 같이 3x3 Filter로 Convolution 연산을 진행한 이후
Stride가 1이라면, 이렇게 한 칸을 이동하여 다시 연산하게 되고
Stride가 2라면, 이렇게 두 칸을 이동하게 됩니다.


하지만, 모든 수가 Stride가 될 수 있는 것은 아닙니다.
위 사진처럼 가로 방향으로 Stride 만큼 이동한 결과, 양 끝 모서리가 맞으면서 다음 세로 줄로 넘어가야 하기에 (N - F) / Stride + 1의 값이 정수로 떨어지는 경우에만 해당 수를 Stride로 사용할 수 있습니다.

Zero Padding

Filter를 이동시키며 합성곱 연산을 수행하는 방법은 편리하나, 한 가지 한계점을 가집니다.

바로, Input Image 모서리 부분을 충분히 반영하지 못한다는 것입니다.

이는 Convolution 연산이 Filter와 Input Image의 양 모서리가 맞는 지점부터 시작됨으로써 생기는 한계점인데, 이는 Zero Padding이라는 방법을 통해 해결할 수 있습니다.
Zero Padding은 Input Image의 바깥 부분을 0으로 구성된 Row와 Column으로 둘러싸 모서리 부분부터 Convolution 연산이 가능하도록 하는 방법입니다.


Pooling Layer

Pooling Layer는 Convolution Layer의 결과물을 압축하기 위해 Max값만을 취하는 등의 축소 연산을 진행하는 Layer입니다.

Convolution Layer는 Image Feature를 추출해내지만, 보다 심층적인 Feature Map을 얻기 위해 여러 번의 Activation Map을 생성하는 과정에서 그 결과값이 지나치게 커질 수 있습니다.
이렇듯 과하게 커진 Feature Map을 Connected Layer가 연산하기 쉽게 만들기 위해 주어진 Map을 축소하는 Pooling을 수행할 수 있습니다.


Max Pooling

Max Pooling은 Pooling의 여러 방법 중 가장 보편적으로 쓰이는 방법으로, 주어진 Feature Map을 NxN으로 분할한 후 각 부분에서 가장 큰 값, Max 값만을 취해 새로운 Feature Map을 생성하는 방법입니다.
Pooling의 방법에는 Min Pooling, Average Pooling 등 여러 방법이 있지만, Max Pooling을 보편적으로 사용하는 이유는 최대값만을 취함으로써 원본 Map의 특이점만을 추출하는 것이 가능하기 때문입니다.


Full CNN 구조

지금까지 알아본 CNN의 구조를 간단하게 요약하면 다음과 같습니다.

1. Input Image 입력
2. Convultion 연산
3. Activation Function 적용
4. Pooling
5. Fully Connected Layer 연산
6. Class 판독


오타, 오역 등 지적은 언제나 환영입니다.

profile
Interest in Computer Graphics and Computer Vision

0개의 댓글