CNN (Convolutional Neural Network) 개념
CNN(Convolutional Neural Network)은 이미지를 분석하기 위해 패턴을 찾는데 유용한 알고리즘으로 데이터에서 이미지를 직접 학습하고 패턴을 사용해 이미지를 분류한다. CNN의 핵심적인 개념은 이미지의 공간정보를 유지하며 학습을 한다. CNN은 필터링 기법을 인공 신경망에 적용함으로써 이미지를 더욱 효과적으로 처리하기 위해 Yann LeCun (https://en.wikipedia.org/wiki/Yann_LeCun)이 제안하였으며 (http://vision.stanford.edu/cs598_spring07/papers/Lecun98.pdf) 현재 딥 러닝에서 이용되고 있는 형태의 CNN이 제안되었다. 기존의 필터링 기법은 고정된 필터를 이용하여 이미지를 처리했다. 아래 그림은 필터의 종류와 기능이다.
이미지 관련 Deep Learning은 CNN이전과 이후의 세상으로 나눌 수 있다. CNN이 나오기 이전 이미지 인식은 2차원으로 이미지(채널까지 포함 3차원)를 1차원 배열로 바꾼 뒤 FNN (Fully- connected multi layered Neural Network) 신경망으로 학습시키는 방법 이었다. FNN의 문제점은 인접 픽셀간의 상관관계가 무시된다는 것이다. FNN은 벡터 형태로 표현된 데이터를 입력 받기 때문에 이미지를 반드시 벡터화 해야 한다. 그러나 이미지 데이터는 일반적으로 인접한 픽셀간의 상관관계가 매우 높기 때문에 이미지를 벡터화 (vectorization)하는 과정에서 정보 손실이 발생한다.
[FNN을 이용하여 이미지 처리를 위한 벡터화]
CNN은 이미지의 형태를 보존하도록 행렬 형태의 데이터를 입력 받기 때문에 이미지를 벡터화 하는 과정에서 발생하는 정보 손실을 방지할 수 있다. 즉 기본 개념은 "행렬로 표현된 필터의 각 요소가 데이터 처리에 적합하도록 자동으로 학습되게 하자"는 것이다.
일반적인 신경망은 affine로 명시된 fully-connected 연산과 ReLU와 같은 비선형 활성 함수 (nonlinear activation function)의 합성으로 정의된 여러 계층을 쌓은 구조이다. CNN은 Feature를 추출하는Convolution Layer와 추출된Feature를Sub-Sampling하는 Pooling Layer로 구성되어 있다. Convolution Layer는 이미지에 필터링 기법을 적용하고, Pooling Layer는 이미지의 국소적인 부분들을 하나의 대표적인 스칼라 값으로 변환함으로써 이미지 크기를 줄이는 등의 다양한 기능들을 수행한다.
[Convolutional Layer]
Convolution Layer의 정의는 합성곱이다. 현재 위치의 출력 데이터는 인접한 Pixel에 Convolution Filter을 곱해서 얻어진 값이다.
합성곱(合成-, convolution, 콘벌루션)은 하나의 함수와 또 다른 함수를 반전 이동한 값을 곱한 다음, 구간에 대해 적분하여 새로운 함수를 구하는 수학 연산자이다. 출처 : https://ko.wikipedia.org/wiki/%ED%95%A9%EC%84%B1%EA%B3%B1 |
아래 그림은 단일 채널에 대한 합성곱 계층 동작을 표현한 것이다. 4x4 매트릭은 입력 데이터이고 3X3메트릭은 필터이다. 이 필터가 데이터 적용되어 계산되는데, 필터가 데이터에서 한 칸씩 또는 두 칸씩 이동하면서 계산하는데, 이 값을 Stride라 한다. 이를 통해feature map을 만들 수 있다. 필터(또는 커널)의 구성에 따라 이미지 특징을 뽑을 수 있다.
아래 그림은 멀티 채널 입력 데이터에 필터를 적용한 합성곱을 나타낸다.
합성곱 계층을 거치면서 이미지의 크기는 점점 작아지게 되고 이미지의 가장자리에 위치한 픽셀들의 정보는 점점 사라지게 된다. 이러한 문제점을 해결하기 위해 이용되는것이 패딩 (Padding)이다. 패딩은 이미지의 가장자리에 특정값으로 설정된 픽셀들을 추가함으로써 입력 이미지와 출력이미지의 크기를 같거나 비슷하게 만드는 역할을 수행한다. 아래 그림은 0 값을 갖는 픽셀을 추가하는 zero-padding을 적용한 예이며, CNN에서는 주로 zero-padding이 이용된다.
[Pooling Layer]
Pooling (sub sampling 라고도 부른다.) 레이어는 컨볼루션 레이어의 출력 데이터를 받아서 출력 데이터(Activation Map)의 크기를 줄이거나 특정 데이터를 강조하는 용도로 사용된다. 풀링 레이어를 처리하는 방법으로는 Max Pooling, Min Pooling, Average Pooling 이 있다. 일반적으로 풀링과 stride를 동일한 크기로 설정하여 모든 원소가 한번씩 처리 되도록 한다.
Pooling Layer는 Convolution Layer와 비교하면 아래와 같은 특징이 있다.
· 학습대상 파라미터가 없음
· Pooling 레이어를 통과하면 행렬의 크기 감소
· Pooling 레이어를 통해서 채널 수 변경 없음
[Convolution Layer 출력 크기]
- 입력 데이터 높이: H
- 입력 데이터 폭: W
- 필터 높이: FH
- 필터 폭: FW
- Strid 크기: S
- 패딩 사이즈: P
[Pooling Layer 출력 크기]
요약하면 CNN은 입력 데이터에 대해서 필터를 통해 이미지의 특징을 추출하고 (Convolution Layer) , 특징을 강화하고 이미지의 크기를 축소(Pooling Layer)한다. 이 과정을 반복하여 처리된 결과를 출력한다.
[참고자료]
· https://untitledtblog.tistory.com/150
· https://hamait.tistory.com/535
· https://bcho.tistory.com/1149
· https://m.blog.naver.com/laonple/221193389981
· https://gruuuuu.github.io/machine-learning/cnn-doc/#
· https://crystalcube.co.kr/192
2020-03-06/ Sungwook Kang / http://sungwookkang.com
CNN, Convolutional Neural Network, 이미지 처리, CNN 알고리즘, 컨볼루션, 머신러닝, 딥러닝, Deep learning, AI, FNN 알고리즘
'SW Engineering > 머신러닝 딥러닝' 카테고리의 다른 글
머신러닝 학습 방법(Supervised, Unsupervised, Reinforcement) (0) | 2020.03.09 |
---|---|
인공지능 / 머신러닝 / 딥러닝 개념 (0) | 2020.03.08 |
파이썬과 OpenCV를 이용한 성별 및 연령 판별하기 (2) | 2020.03.03 |
신경망 분석(Neural Network) (0) | 2015.07.16 |
Naive Bayes Classifier (0) | 2015.07.16 |