본문 바로가기

Deep Learning

CNN 이란 무엇인가?

CNN은 Convolution neural network 의 약자이며 이미지 분석에 자주 사용됩니다.

간단히 말하면 Convolution Filter를 통해 반복되는 패턴을 학습하는 것 입니다.

 

CNN의 구조

 

CNN은 Feature 을 추출하는 단계와 그 이후 FC layer에 연결하여 Softmax를 통해 분류를  진행하는 2단계로 나누게 됩니다.

  • Feature Extraction : 합성곱을 통한 Feature map 추출
  • Classification : FC ( Fully connet ) Layer를 통해 이미지 분류

 

우선 Feature 추출에 관한 합성곱에 대해 이야기를 해보고  ,  FC layer와 연결하기 위한 Pooling 에 대해 이야기 해보겠습니다. 그전에 CNN에 사용되는 이미지에 대해서 좀더 이야기 해보겠습니다.

컴퓨터의 이미지 처리 방식

컴퓨터에 이미지파일은 어떻게 저장되고 읽어드릴까요?

이미지는 0~255의 값을 가지는 필셀의 값을 저장하고 읽습니다. 0 이면 검은색 , 255는 흰색을 나타냅니다.

흑백이미지는 0~255의 픽셀정보를 가진 이미지 이고 , 칼라이미지는 R , G , B 3개의 채널을 가진 픽셀정보의 조합이라 생각하면 됩니다.

 

이미지 필터

핸드폰 어플을 통해 이미지에 필터를 줘서 이미지를 변환시킬수 있습니다. 이런 이미지 필터는 원본 이미지에 필터 혹은 커널이라는 특정값을 가진 행렬과 연산을 통해 보정하게 됩니다.

이때 사용되는 연산을 필터 연산 ( Pixcel-wise) 이라하고 원본이미지와 필터의 픽셀별로 곱한후 합한 결과입니다.

아래로 치면 1*1+2*0+3*1+2*1+1*0+0*1+3*0+0*1+1*0 = 6 입니다.

 

이미지처리에 CNN을 사용하는 이유

 

만약 5 X5 이미지의 픽셀을 아래 그림과 같이 한개로 쫙 붙였다고 생각하면 25개의 특성을 가진 노드가 되고 이것을 통해 Neural Network을 구성할수 있습니다.  이것을 각 픽셀을 하나의 특성으로 사용한것입니다. 하지만 여기서의 문제점은 무엇일까요?

 

이미지는 지역정보가 포함되어야 합니다. 사람얼굴로 치면 귀는 어디에 있고, 코는 어디에 있고 등의 위치정보가 중요한데 , 이런 지역정보를 무시하고 한개의 벡터로 쫙 붙여서 Neural Network를 구성하면 지역정보를 반영할수 없게 됩니다. 그래서 합성곱 연산을 사용하게됩니다.

합성곱연산이 무엇일까요?

아래는 5 by 5 입력 이미지에 3 by 3 필터를 통한 합성곱 연산을 진행하여 2 by 2 Output 을 도출하는 과정입니다.

각각 필터연산을 통해 input 과 필터간의 연산을 진행후 연산범위를 우측으로 옮기고 진행하고 , 그다음에는 아래로 연산범위로 움직여 연산을 진행하면서 필터로 이미지를 전체적으로 쭉 훑어 그 결과과 도출됩니다.

그러면 Output 의 각각 요소들은 그때 계산된곳의 지역적인 정보를 담고 있습니다. 그리고 이것을 Feature map , 즉 특성맵이라고 부릅니다.

이러한 합성곱 연산을 통해 은닉층을 깊게 쌓게 되면 하나의 노드가 가지는 정보의 Region 는 점점 커지게 됩니다.

 

Color Image의 합성곱 연산

위에서 Color 이미지는 3개의 채널로 구성되어 있다고 말씀드렸죠? R, G , B 개별 채널의 합성곱 연산을 통해 나온 결과의 합을 Color 이미지에서의 특성맵이라고 생각하면 됩니다.

 

Pooling

이미지 크기를 유지하고 Feature map을 발췌하여 FC Layer로 이동하면 연산량이 커지게 됩니다.

연산량을 줄이면서 , Feautre의 특징을 강조하기 위해 Pooling 을 사용합니다.

Pooling 에는 Max Pooling , Average Pooling , Min Pooling 등이 있습니다. 

  • Max Pooling : Feature map 에서 최대값을 대표값으로 지정
  • Average Pooling : Feature map 에서 평균값을 대표값으로 지정
  • Min Pooling : Feature map 에서 최소값을 대표값으로 지정

CNN은 주로 Max Pooling 을 사용합니다.

 

CNN의 학습

기본적으로 신경망의 학습과 동일합니다. . 왜냐면 Pooling 이후에 FC Layer와 연결되는 부분은 기존의 신경망과 동일하기 때문에  Input을 통해 분류가 된 예측값과 실제값과의 차이를 최소화 하는 가중치를 찾아 Update하는 학습을 진행합니다. 

역전파 알고리즘이 동일하게 적용되고, 이것을 통해 가중치 업데이트를 하여 error를 최소화 합니다.