본문 바로가기
AI | 딥러닝/Concept

[딥러닝 모델] CNN (Convolutional Neural Network) 설명

by 고뭉나무 2021. 7. 11.

저번 포스팅에서는 딥러닝의 모델별 특징에 대해 알아보았습니다.

2021.07.10 - [SW programming/Computer Vision] - AI, 머신러닝, 딥러닝 이란? 그리고 딥러닝 모델 종류

그리고 이번 포스팅에서는 그 중 Computer Vision에서 가장 많이 쓰이는 딥러닝 모델인 'CNN'에 대해 자세히 알아보도록 하겠습니다.

 

 

CNN 특징

https://gfycat.com/ko/smoggylittleflickertailsquirrel-machine-learning-neural-networks-mnist

 

  • Convolutional Neural Network, 합성곱 신경망
  • 인간의 시신경 구조를 모방한 기술
  • 특징맵을 생성하는 필터까지도 학습이 가능해 비전(vision) 분야에서 성능이 우수함
  • 이미지를 인식하기 위해 패턴을 찾는데 특히 유용함
  • 데이터를 직접 학습하고 패턴을 사용해 이미지를 분류함
  • 자율주행자동차, 얼굴인식과 같은 객체인식이나 computer vision이 필요한 분야에 많이 사용되고 있음
  • 이미지의 공간 정보를 유지한 채 학습을 하게 하는 모델 (1D로 변환하는 것이 아닌 2D 그대로 작업함)
  • 사람이 여러 데이터를 보고 기억한 후에 무엇인 지 맞추는 것과 유사함

 

 

CNN 구조

CNN 모델의 구조

 

Fully Connected Layer 만으로 구성된 인공 신경망의 입력 데이터는 1차원(배열) 형태로 한정된다. 한 장의 컬러 사진은 3차원 데이터이다. 배치 모드에 사용되는 여러 장의 사진은 4차원 데이터이다(그림 속에서 직육면체로 표현). 사진 데이터로 전연결(FC, Fully Connected) 신경망을 학습시켜야 할 경우에, 3차원 사진 데이터를 1차원으로 평면화시켜야 한다. 사진 데이터를 평면화 시키는 과정에서 공간 정보가 손실될 수밖에 없다. 결과적으로 이미지 공간 정보 유실로 인한 정보 부족으로 인공 신경망이 특징을 추출 및 학습이 비효율적이고 정확도를 높이는데 한계가 있다. 이미지의 공간 정보를 유지한 상태로 학습이 가능한 모델이 바로 CNN(Convolutional Neural Network)이다.

 

 

CNN 모델의 구조 & Layer 종류

 

CNN은 위 이미지와 같이 이미지의 특징을 추출하는 부분과 클래스를 분류하는 부분으로 나눌 수 있다. 특징 추출(Feature extraction/learning) 영역은 Convolution LayerPooling Layer를 여러 겹 쌓는 형태로 구성된다. Convolution Layer는 입력 데이터에 필터를 적용 후 활성화 함수를 반영하는 필수 요소이다. Convolution Layer 다음에 위치하는 Pooling Layer는 선택적인 레이어이다.

CNN 마지막 부분에는 이미지 분류(Classification)를 위한 Fully Connected Layer가 추가된다. 이미지의 특징을 추출하는 부분과 이미지를 분류하는 부분 사이에 이미지 형태의 데이터를 배열 형태로 만드는 Flatten 레이어가 위치 한다.

 

그럼 위에서 볼드 처리한 각 Layer가 어떻게 동작하는 지 알아보도록 하자.

 

 

 

Convolution(합성곱) Layer

 

Color 이미지는 3D

이미지 데이터는 그림 4와 같이 높이X너비X채널의 3차원 텐서 (tensor)로 표현될 수 있다. 만약, 이미지의 색상이 RGB 코드로 표현되었다면, 채널의 크기는 3이 되며 각각의 채널에는 R, G, B 값이 저장된다.

컬러 이미지 데이터에 대한 텐서 표현

 

Filter 적용

하나의 합성곱 계층에는 입력되는 이미지의 채널 개수만큼 필터가 존재하며, 각 채널에 할당된 필터를 적용함으로써 합성곱 계층의 출력 이미지가 생성된다. 

예를 들어, 높이X너비X채널이 4X4X1인 텐서 형태의 입력 이미지에 대해 3X3 크기의 필터를 적용하는 합성곱 계층에서는 아래 그림과 같이 이미지와 필터에 대한 합성곱 연산을 통해 2X2X1 텐서 형태의 이미지가 생성된다.

 

하나의 채널에 대한 Convolution(합성곱) 계층의 동작

위 그림의 예시에서는 bias를 더하는 것이 생략되었는데, 실제 구현에서는 합성곱을 통해 생성된 행렬 형태의 이미지에 bias라는 스칼라값을 동일하게 더하도록 구현되기도 한다.

 

 

Stride

이미지에 대해 필터를 적용할 때는 필터의 이동량을 의미하는 스트라이드(stride)를 설정해야한다. 아래 그림은 동일한 입력 이미지와 필터에 대해 스트라이드 값에 따른 출력 이미지의 변화를 보여준다.

 

(왼쪽) stride = 1인 경우, (오른쪽) stride = 2인 경우

CNN을 구현할 때 합성곱 계층의 스트라이드는 주로 1로 설정된다.

 

 

Padding

위에서 봤던 두 그림에서 볼 수 있듯이 입력 이미지에 대해 합성곱을 수행하면, 출력 이미지의 크기는 입력 이미지의 크기보다 작아지게 된다. 4x4 였던 입력 이미지가 합성곱을 수행하여 2x2 의 출력 이미지의 크기를 갖는다. 그러므로 합성곱 계층을 거치면서 이미지의 크기는 점점 작아지게 되고, 이미지의 가장자리에 위치한 픽셀들의 정보는 점점 사라지게 된다. 이러한 문제점을 해결하기 위해 이용되는 것이 패딩 (padding)이다.

패딩은 아래 그림과 같이 입력 이미지의 가장자리에 특정 값으로 설정된 픽셀들을 추가함으로써 입력 이미지와 출력 이미지의 크기를 같거나 비슷하게 만드는 역할을 수행한다. 이미지의 가장자리에 0의 값을 갖는 픽셀을 추가하는 것을 zero-padding이라고 하며, CNN에서는 주로 이러한 zero-padding이 이용된다.

아래 그림의 오른쪽처럼 1폭짜리 zero-padding을 적용하였더니 출력 이미지 크기가 입력 이미지 크기와 같이 4x4 로 유지된다.

(왼쪽) Padding을 안한 경우, (오른쪽) Zero-padding인 경우

Zero-padding의 경우, 이미지 손실이 없음을 확인할 수 있다.

 

 

 

 

Pooling Layer

이미지의 크기를 계속 유지한 채 Fully Connected layer로 가게 된다면 연산량이 기하급수적으로 늘 것이다. 적당히 크기도 줄이고, 특정 feature를 강조할 수 있어야 하는데 그 역할을 Pooling layer에서 하게 된다.

 

처리 방법은 총 세 가지가 있다.

  • Max Pooling
  • Average Pooling
  • Min Pooling

CNN에서는 주로 Max Pooling 사용한다. 이는 뉴런이 가장 큰 신호에 반응하는 것과 유사하다고 한다. 이렇게 하면 노이즈가 감소하고 속도가 빨라지며 영상의 분별력이 좋아진다.

아래 그림은 stride가 2로 설정된 max-pooling 기반 풀링 계층의 동작을 보여준다.

 

 

Max-pooling이 적용된 Pooling layer

위의 그림에서는 2X2 크기의 선택 영역마다 max-pooling을 적용했으며, 일반적으로 Pooling layer의 stride는 선택 영역의 높이 또는 너비의 크기와 동일하게 설정된다.

 

이미지 데이터의 특징은 인접 픽셀들 간의 유사도가 매우 높다는 것이다. 따라서 이미지는 픽셀 수준이 아니라, 특정 속성을 갖는 선택 영역 수준으로 표현될 수 있으며, Pooling layer은 이미지 데이터의 이러한 특징을 바탕으로 설계되었다. Max-pooling의 경우에는 선택 영역에서 가장 큰 값을 해당 영역의 대표값으로 설정하는 것과 같다. CNN에서는 이러한 Pooling layer을 이용함으로써 아래와 같은 다양한 이점들을 얻을 수 있다.

 

   ▷ 선택 영역 내부에서는 픽셀들이 이동 및 회전 등에 의해 위치가 변경되더라도 출력값을 동일하다. 따라서 Pooling layer을 이용할 경우, 이미지를 구성하는 요소들의 이동 및 회전 등에 의해 CNN의 출력값이 영향을 받는 문제를 완화할 수 있다.

   ▷ CNN이 처리해야하는 이미지의 크기가 크게 줄어들기 때문에 인공신경망의 model parameter 또한 크게 감소한다. 따라서 Pooling layer을 이용함으로써 CNN의 학습 시간을 크게 절약할 수 있으며, 오버피팅 (overfitting) 문제 또한 어느정도 완화할 수 있다.

 

 

 

 

Fully Connected Layer

지금까지 설명한 내용이 '특징 추출'을 위한 작업이었고 그 다음부터는 분류 작업이다. 이미지 특징을 추출하여 이것이 무엇을 의미하는 데이터 인지를 분류 작업하는 것이다.

 

여기에도 2가지 종류의 Layer가 있다.

  • Flatten Layer : 데이터 타입을 Fully Connected 네트워크 형태로 변경. 입력 데이터의 shape 변경만 수행
  • Softmax Layer : Classification 수행

여기에 해당하는 내용은 Computer Vision에서 크게 중요한 내용이 아니므로 이정도로 정리하겠다.

 

 

 

결론

설정 가능한 파라미터는 무엇이 있을까?

 

CNN의 파라미터로는 아래와 같다.

  • Convolution Filter의 개수
  • Filter의 사이즈
  • Padding 여부
  • Stride
  • Pooling layer 종류

 

하나씩 살펴보면,

 

Convolution Filter의 개수

각 Layer에서의 연산시간/량을 비교적 일정하게 유지하며 시스템의 균형을 맞추는 것이 좋다.
보통 Pooling Layer를 거치면 1/4로 출력이 줄어들기 때문에 Convolution Layer의 결과인 Feature Map의 개수를 4배정도 증가시키면 된다.

 

Filter 사이즈

작은 필터를 여러 개 중첩하면 원하는 특징을 더 돋보이게 하면서 연산량을 줄일 수 있다.
요즘 대부분의 CNN은 3x3 size를 중첩해서 사용한다고 한다.

 

Padding 여부

Padding은 Convolution을 수행하기 전, 입력 데이터 주변을 특정 픽셀 값으로 채워 늘리는 것이다.
Padding을 사용하게 되면 입력 이미지의 크기를 줄이지 않을 수 있다.

 

Stride

Stride는 Filter의 이동 간격을 조절하는 파라미터 이다.
이 값이 커지게 되면 결과 데이터의 사이즈가 작아지게 된다.

 

Pooling layer 종류

적당히 이미지 크기를 줄이면서 특정 feature를 강조하는 역할을 한다.

주로 Max 값을 뽑아내는 종류를 사용한다.

 

 

CNN은 Convolution과 Pooling을 반복적으로 사용하면서 불변하는 특징을 찾고, 그 특징을 입력데이터로 Fully-connected 신경망에 보내 Classification을 수행하는 것이다.

 

 


http://taewan.kim/post/cnn/

https://gruuuuu.github.io/machine-learning/cnn-doc/

https://untitledtblog.tistory.com/150

http://www.kibme.org/resources/journal/20180802153528786.pdf

 

 

위 글이 도움 되셨다면, 광고 한 번만 눌러주세요.

블로그 관리에 큰 힘이 됩니다:)

감사합니다 \( ˆoˆ )/​

반응형

댓글