📖 CNN은 이미지를 분석하기 위한 패턴을 찾는데 유용한 알고리즘으로 널리 알려진 이미지 처리 기법입니다.
이번 포스팅에선 CNN(합성공 신경망)에 대해 기초부터 쉽게 정리해 보겠습니다.
FCNN은 input image를 픽셀의 행으로 직렬화 시킨 후, 입력 신호로 주는 방식으로 동작을 합니다.
이러한 방식은 직렬화를 수행하는 과정에서 데이터의 형상이 무시된다는 문제점이 존재합니다.
즉, 픽셀은 주변 픽셀과 관련이 있는데 Fully conneted layer에 집어넣기 위해 직렬화를 수행하면서 상관관계들을 잃게 됩니다. 때문에 데이터의 전체 관계를 고려하지 못하게 된다는 문제점이 존재하여 이를 보완하기 위해 개발되었습니다.
CNN은 이미지의 한 픽셀과 주변 픽셀들과의 연관성을 유지시키며 학습시키는 것을 목표로 합니다.
모든 부분과 연결(fully-connected)되는 것이 아닌, 작은 국소적인 일부 영역에 연결(local connected)합니다.
근접한 영역의 픽셀(피쳐)들에 집중하여, 특징을 더 잘 관찰하는 효과를 얻을 수 있습니다.
메모리 & 컴퓨팅 코스트를 줄이는 효과를 얻을 수 있습니다.
파라미터 공유(weight tying)가 가능합니다.
만약, 미리 학습과정에서 2번 이상 weight를 사용해 표현을 변환하는데, 그 변환 과정이 서로 거의 같아야 한다는 사전 지식이 있다면 이를 이용하는 것입니다.
학습하여야 하는 파라미터를 줄일 수 있습니다.
때문에 이미지 객체가 어떤 곳에 있든 그 객체의 특징을 일관되게 관찰할 수 있는 것입니다.
이미지의 특징을 찾아내기 위한 공용 파라미터(shared parameter)입니다.
CNN에서는 동의어로 커널(kernel)이라고도 합니다.
이미지 픽셀 하나하나는 실수입니다.
컬러는 각 픽셀을 RGB 3개의 실수로 표현한 3차원 데이터인데, 여기서 각 차원을 chnnel이라 합니다.
만약 필터(kernel, shared weight)로 작용하는 것이 n개 라면, n개의 채널을 갖습니다.
필터 크기의 사이즈를 말합니다.
kernel size라고도 합니다.
위 예시는 stride = 1, filter size(노란 부분) = 3X3입니다. 결과적으로, convolved feature는 3X3형태의 결과를 도출합니다.
만약 stride = 2라면, convolved feature는 2X2형태의 결과를 도출하게 됩니다.
필터 사이의 간격을 의미합니다.
3X3으로 filter size가 같을 때, 1, 2, 4 dilation rate일 때는 위와 같습니다.
합성곱 계층을 거치면서 이미지의 크기는 점점 작아지게 되고 이미지의 가장자리에 위치한 픽셀들의 정보는 점점 사라지게 됩니다.
이러한 문제점을 해결하기 위해 이용되는 것이 padding입니다.
입력 이미지 가장자리에 특정값으로 설정된 픽셀을 추가함으로써 입력 이미지와 출력 이미지 크기를 같거나 비슷하게 만드는 역할을 하며,
edge나 모서리 부분의 픽셀 정보도 충분히 활용할 수 있게 하는 역할도 해줍니다.
만약 padding 값이 모두 0이라면, zero-padding이라고 합니다.
convolution layer를 거쳐 나온 feature map에서 모든 데이터가 필요하지는 않습니다.
pooling layer를 거치면서 적당한 이미지 크기도 줄이고 특정 feature만 강조하게 됩니다.
일반적으로 pooling과 stride를 동일한 크기로 설정하여 모든 원소가 한 번씩 처리되도록 합니다.
1차원 배열의 형태로 평탄화된 행렬을 통해 이미지를 분류하는데 사용되는 계층입니다.
구체적인 예를 들어 목적이 multi-class 분류라면, 앞에서 convolution layer와 pooling layer를 통해 얻은 2차원 벡터의 행렬을 1차원 배열로 평탄화한 뒤, ReLU 활성화함수로 뉴런을 활성화하고, softmax함수로 이미지를 분류하는 것까지 Fully connected layer라고 할 수 있습니다.
Dense layer라고도 합니다.