본문 바로가기

AI 기반 기술

CNN 모델의 기초

 

 

 

이번 글에서는 딥러닝 기반 영상인식의 가장 기본이 되는 모델인 CNN에 대해서 살펴보겠습니다.
CNN(Convolution Neural Network)은 딥러닝 기반의 영상인식 분야에 있어서 가장 기본이 되는 모델이라고 할 수 있습니다.
CNN 모델은 Convolution, 즉 합성곱을 이용하여 이미지 처리에 필요한 가중치의 수를 줄임으로써 연산량의 감소와 효과적인 이미지 처리를 목표로 하는 모델입니다.
신경망으로서의 동작을 수행하기 위하여 Convolution Filter를 사용하고 있으며 Convolution Layer와 Fully Connected Layer를 중심으로 이미지 처리를 수행합니다.
중심이 되는 두 종류의 Layer 중에서 Convolution Layer는 이미지의 특징점을 효과적으로 찾기위해 사용하며, Fully Connected Layer는 발견한 특징점을 기반으로 이미지를 분류하는데 활용하고 있습니다.

CNN 모델은 우리의 눈과 뇌에서 처리되는 신경과학적인 시각처리방식에서 아이디어를 얻어 고안된 모델입니다.
왜 이런 형태의 모델이 만들어졌는지 이해하기 위해서는 눈과 뇌에서 처리되는 시각정보 처리 구조에 대하여 살펴볼 필요가 있습니다.
이에 대한 내용은 "기반지식/뇌과학" 카테고리의 "우리의 눈과 뇌에서 일어나는 시각정보 처리과정" (https://aidalab.tistory.com/23)에서 다루고 있으니 관심있으신 분들은 읽어보시기 바랍니다.


우리의 뇌가 시각정보를 처리하기 위하여 사용하는 기관은 눈과 시신경, 시각피질로 구성되어 있습니다.
이 중에서 시각피질을 구성하고 있는 단순세포, 복합세포의 기능를 모형으로 만든 것이 CNN의 시작이라고 볼 수 있습니다.
시각피질의 단순세포는 전달된 영상 정보에 대하여 엄격한 위치 선택성을 가지는, 다시 말해서 정확한 입력패턴에 반응하는 성질을 가지고 있습니다. 반면 복합세포는 입력패턴을 조금 벗어나도 반응이 일어나죠.
이러한 단순세포와 복합세포의 역할을 모형화하여 그려보면 아래와 같습니다.

시각피질에서의 단순세포와 복합세포 역할 모형화


딥러닝 관련서적이나 인터넷 검색결과에서 자주 볼 수 있는 CNN의 개념과 유사함을 알 수 있습니다.
그럼 눈과 시각피질 사이의 시각정보 처리과정과 CNN에서 사용하는 개념을 연관시켜볼까요?

 

    * 망막에서의 빛 인식영역 → 입력층 
    * 시각피질의 단순세포에 의한 입력패턴 대응 영역  중간층 
    * 시각피질의 복합세포에 의한 활성화 및 차원축소 영역  출력층 
    * 해당 영역에 대한 수용영역(수용야 또는 감수영역이라고도 함)  필터(커널이라고도 함) 
    * 수용영역의 크기  윈도우 
    * 수용영역의 이동범위  스트라이드 
    * 수용영역의 영역범위 처리  패딩 

와 같이 연관된다고 볼 수 있습니다.

 

 

 

 

 

그렇다면 가장 기본적인 CNN의 구조를 살펴보겠습니다.

CNN의 기본적인 구조


그림에서 보시는 것처럼 가장 큰 특징은 Convolution Layer와 Pooling Layer의 반복으로 모델이 구성된다는 것입니다.
여기서의 반복 방식은 시스템 설계자가 가장 효율적일 수 있는 방법으로 각각 다르게 구성할 수 있습니다.
예를 들면 Convolution Layer만 여러 층을 배치하고 제일 마지막에 Pooling Layer를 하나만 배치할 수도 있습니다.
또한 지역 콘트라스트 정규화(LCN, Local Contrast Normalization) 층을 배치하는 경우도, 배치하지 않는 경우도 있습니다.

그럼 CNN 기본 모델에서 각 구성요소들을 살펴보겠습니다.

 

(1) Convolution Layer

먼저 Convolution Layer입니다.
Convolution Layer를 사용하는 목적은 입력된 이미지에서 테두리, 선, 색 등 이미지의 시각적인 특징이나 특성을 감지하기 위해서 입니다.
아래의 그림은 Convolution Layer에서의 입력 계층과 은닉 계층의 구성을 보여줍니다.

입력 계층과 은닉 계층



그림에서 보시는 것처럼 입력 계층과 은닉 계층의 크기는 1:1 로 매핑되지 않습니다.
그림에서 5x5 의 크기로 구성되어 있는 윈도우는 기본적으로 주어진 크기만큼 좌표를 이동하며 입력 계층의 데이터를 탐색해 나갑니다.
이 때, 윈도우는 기존에 위치한 영역의 좌표들을 겹쳐가면서 이동, 탐색하는데 이렇게 이동할 때의 간격을 스트라이드라고 합니다.
스트라이드의 크기는 사용자가 임의로 지정할 수 있습니다.
그림에서는 5x5의 크기를 가지는 윈도우를 보여주고 있는데, 윈도우가 5x5인 경우는 5x5=25 와같이 25개의 픽셀이 은닉층의 하나의 뉴런에 대응합니다.
그림으로 스트라이드의 이동을 설명하자면 아래와 같습니다.

스트라이드가 1인 경우 28x28 크기의 입력계층에서 5x5의 윈도우가 이동하며 탐색하는 영역

 

탐색을 위한 윈도우의 이동 방식

 

그런데 이렇게 좌표를 겹쳐가면서 윈도우를 이동한다면 이미지의 가장자리 부분은 내부의 영역보다 탐색 기화가 적어지겠죠.
가장 외곽의 1픽셀씩은 1회만 탐색, 두 번째 픽셀은 2회만 탐색..
그렇다면 전체 이미지를 공평하게 탐색하지 못합니다.
그래서 도입된 방법이 패딩입니다.
패딩은 더 좋은 결과를 내기 위하여 윈도우를 이미지 영역 밖으로 확장할 때 사용하는 것으로 아래의 그림일 보시면 쉽게 이해가 될 것입니다.

 

패딩을 적용하는 방식

지금까지 Convolution Layer에서 각 요소들이 움직이는 방식을 살펴보았습니다.

그렇다면 Convolution Layer에서의 연산은 어떻게 처리되는 것일까요?

 

CNN 모델에서 말하는 Convolution, 즉 합성곱이란 입력되는 이미지와 모델에서 사용하는 필터 사이에 정의된 합성곱 연산을 말합니다.

이미지의 합성곱은 입력된 이미지에서 필터의 명암 패턴과 유사한 명암 패턴이 어디에 있는지 검출하는 기능, 즉 필터가 나타내는 특징적인 명암 구조를 이미지로부터 추출하는 작용을 수행합니다.

 

여기서 말하는 필터란 무엇을 말하는 것일까요?

필터는 커널이라고도 부르는데 입력 계층의 윈도우를 은닉 계층의 뉴런 하나로 압축할 때, Convolution Layer에서는 윈도우 크기만큼의 가중치와 1개의 편향 값(bias)을 적용하게 됩니다.

예를 들면, 윈도우의 크기가 5x5라면 5x5개의 가중치와 1개의 편향 값이 필요한거죠.

여기에서 사용되는 5x5개의 가중치와 1개의 편향 값을 필터라고 합니다.

필터는 해당 은닉 계층을 만들기 위한 모든 윈도우에 공통적으로 적용하여 사용합니다.

 

그렇다면 이처럼 필터를 사용하는 이유는 무엇일까요?

필터를 사용하게 되면 입력된 이미지를 인식처리하기 위해서 필요한 가중치의 수를 줄일 수 있고, 가중치의 수가 줄어든다면 전체 연산량을 대폭으로 감소시킬 수 있습니다.

예를 들어보면, 입력층의 크기가 28x28일 때, 기본 신경망의 경우에는 28x28=784, 즉 784개의 가중치를 찾아서 사용해야 하는데 Convolution Layer에서는 윈도우의 크기인 5x5개인 25개의 가중치만 찾으면 됩니다.

이런 이유로 연산량을 대폭 감소시켜서 더 빠르고 효율적인 학습이 가능하도록 합니다.

그러나 장점이 있으면 단점도 있겠죠.

필터를 사용하여 가중치를 대폭으로 감소시킴에 따라 복잡한 특징을 가지는 이미지를 분석하기가 어려워 집니다.

그래서 이에 대한 보완책으로 여러 개의 필터를 사용하게 되는데, 분석하고자 하는 내용에 따라 필터의 개수를 어떻게 정하는가 하는 것이 중요한 사전작업이 됩니다.

 

 

(2) Pooling Layer 

 

다음으로 Pooling Layer에 대해서 살펴보겠습니다.

Pooling Layer는 Convolution Layer 다음에 주로 배치되는데 Convolution Layer와는 어떤 관계를 가지고 있을까요?

CNN 모델에서는 이미지 데이터, 즉 2차원의 평면행렬에서 지정한 영역의 값들을 하나의 값으로 압축을 하게 됩니다.

여기서 압축할 때 Convolution Layer는 앞에서 설명드렸듯이 필터, 즉 가중치와 편향 값을 적용하는 역할을 하며, Pooling Layer는 해당 범위의 값들 중에서 하나를 선택해서 가져오는 역할을 합니다.

어떤 값을 가져올 것인지 결정하는 방법으로는 Max Pooling, Average Pooling 등 여러가지 방법이 있는데 Max Pooling 방법이 많이 쓰이고 있습니다.

이렇게 정해진 영역에서 Max Pooling 등을 이용하여 하나의 값만 가져오는 방법은 Convolution Layer에서 해당 영역 내의 영상 위치가 다소 변경되더라도 아무런 지장없이 인식할 수 있게 해 주는 장점을 가집니다. 

 

Convolution Layer와 Pooling Layer의 역할

 

(3) LCN Layer 

 

다음으로는 지역 콘트라스트 정규화(LCN, Local Contrast Normalization) 계층이 있습니다.

LCN Layer는 꼭 적용되어야 하는 계층은 아닙니다.

우리가 입력하는 이미지 중에서 자연물 이미지와 같이 주변의 조명, 카메라의 노출 등 환경의 변화에 따라서 이미지 전체의 밝기, 대비가 크게 변하는 경우 LCN Layer를 사용합니다.

다른 이미지 밝기의 정규화 방법으로는 CNN 모델에서 훈련데이터로 사용될 이미지의 집합에 대한 통계치를 이용하여 이미지의 명암을 전체적으로 조절하는 방법이 있는데 원래부터 어두운 이미지와 밝은 이미지의 차이가 큰 경우 적절하게 조절했다고 하기는 어려운 경우가 있습니다.

LCN 방법은 이미지 한 장, 한 장에 대하여 개별적으로 조절을 하기때문에 더욱 정확한 정규화가 이루어진다고 볼 수 있습니다.

LCN Layer에서는 고정된 가중치를 사용하므로 학습 가능한 파라미터는 따로 없습니다.

 

 

(4) Fully Connected Layer 

 

다음으로 Fully Connected Layer가 있습니다.

Fully Connected Layer는 기존의 신경망에서 각 층별 연결에 사용되는 방식으로 전결합층이라고 할 수 있습니다.

기존의 신경망 모델을 보시면 보유하고 있는 모든 노드가 서로 연결되어 있습니다.

따라서 수많은 연산이 발생하게 됩니다.

그런데 CNN의 특징은 모든 노드를 결합하지 않음으로써 연산량을 줄이고 효율성을 높이는 방식이라고 말씀드렸죠?

그럼 왜 Fully Connected Layer를 사용할까요?

우리가 CNN 모델을 통해서 지금까지 학습해온 데이터는 입력된 이미지를 분류한다는 최종 목적을 가지고 있습니다.

최종 분류를 하기 위해서는 결국 분류하기 위한 목록에서 어떤 Label을 선택해야하는지가 핵심입니다.

최종 결과를 분류하기 위한 기반 정보를 모두 가지고 있어야 분류를 위한 SoftMax 함수를 사용할 수 있겠죠.

따라서 Fully Connected Layer에서는 지금까지 처리된 결과데이터를 가진 모든 노드를 연결시켜 1차원 배열로 풀어서 표시합니다.

이 정보들을 이용하여 분류가 수행되는 것입니다.

이 과정에서 이미지의 공간정보가 사라진다는 단점도 있는데 그런 단점을 보완하기 위하여 Fully Connected Layer를 사용하지 않고 Convolution Layer-Pooling Layer의 결과를 그대로 사용하는 경우도 있습니다.

다시말해서 필수 계층은 아니긴 하지만 일단 기본적으로는 Fully Connected Layer를 이용하는 것이 정식 방법입니다.

 

 

(5) SoftMax Layer 

 

마지막으로 SoftMax 함수를 통해서 최종 분류결과를 계산하는 계층입니다.

SoftMax 함수는 주로 2개 이상의 카테고리를 분류할 때 사용되는 함수이며, 각각의 카테고리 별로 계산된 확률값을 이용하여 분류를 수행합니다.

SoftMax가 아닌 다른 함수를 사용하여도 무방하며 어떤 함수를 사용하는가에 따라서 성능차이가 있을 수 있습니다.

 

 

지금까지 CNN 모델에 대해서 알아보았습니다.

관련된 수식이라든지.. 그런 부분은 모델이 변경에 따라 언제든지 바뀔 수 있는 부분이라서 이 글에서는 따로 언급하지 않았고 모델을 이루는 각 계층에 따라 개념과 왜 그렇게 사용하는지를 이해하는 것에 중점을 두었습니다.

관련 구현코드 등은 차후에 "실습해보기" 카테고리에서 다룰 것입니다.

 

그럼 끝으로 CNN 모델의 전체 구조에 대한 예시 그림을 보면서 마치겠습니다.

 

 

 

 

 

 

 

728x90
반응형