CNN과 Feature extraction(feat. Padding, Pooling)
▶ 초심공룡을 아는가, 그 모임엔 막내가 정말 치명적이다.
나는 문장이 길거나 복잡하면 이해 못한다. 그래서 간단하게 짤라서 정리한다.
* CNN
1. 정의
CNN - 이미지나 영상 데이터를 처리할때 쓰이는 딥러닝 모델 (Convolutional Neural Networks의 약자)
2. 출현배경
1) 기존에 사용하던 DNN(딥러닝 모델)은 기본적으로 1차원 형태의 데이터를 사용한다.
2) 이미지는 2 or 3 차원 데이터이다.
3) DNN 모델로 이미지 데이터를 학습시키기 위해선 이미지 데이터를 1차원으로 평면화시킨다.
4) 이미지 데이터를 평면화시키면 이미지의 공간/지역 정보가 손실된다.
5) 공간/지역 정보손실 때문에 이미지의 특징을 추출하고 학습하는데 비효율적이고, 정확도를 높이는데 한계가 생긴다.
6) CNN 모델은 이미지의 공간/지역 정보를 유지하며 학습이 가능하다.
7) 따라서 CNN 모델이 출현했다.
3. 특징
1) 사람의 시신경 구조를 모방함
2) 이미지의 패턴을 찾는데 유용함
3) 데이터를 직접 학습하고 패턴을 사용해 이미지 분류
4) 자율주행자동차, 얼굴인식등 객체인식이나 컴퓨터비전을 사용하는 분야에서 많이 쓰임
5) 사람이 여러 데이터를 보고 기억했다가 무엇인지 판단하는 것과 비슷함
4. 구조
CNN 모델의 구조는 두 부분으로 나눈다.
(1) Feature extraction/learning
(2) Classification
그림을 보라.
이 글의 제목과 관련된 Feature extraction/learning 에 대한 설명만 하겠다.
1) Feature extraction/learning
이 부분은 Convolution Layer 와 Pooling layer 가 여러 겹으로 쌓인 형태이다.
1-1) Convolution Layer
이미지 또는 영상 데이터를 받아 필터링을 하고 활성함수를 적용해 특징을 찾는 래이어
[순서]
{1} 이미지 데이터를 입력받는다
{2} 필터(커널)로 필터링을 한다
{3} 필터링한 값에 활성함수(activation function) 적용하여 결과값 얻는다
* 순서 {1}에 대한 설명
예를 들어 입력받은 2차원 이미지 데이터를 표현할때 픽셀(Pixel)로 구성된 행렬(Matrix)로 표현한다
* 순서 {2}에 대한 설명
행렬로 구성된 이미지에 필터(커널)를 적용하여 특징을 추출한다. (CNN에 존재하는 필터가 있다)
4x4 행렬로 정리된 이미지 데이터에 3x3 행렬의 필터를 적용하는 예시이다.
필터를 적용할때 사용하는 방법이 있다. Stride와 Padding
Stride
Stride는 필터를 얼만큼 움직여 적용할지 정하는 값이다. 예시를 보자.
Stride 값에 따라 필터링한 결과값도 달라진다. 근데 보통은 Stride=1 로 설정한다.
Padding
앞에 예시를 보면 알듯이 Convolution Layer를 거칠수록 이미지의 크기는 점점 줄어들고 이미지 가장자리의
픽셀들 정보가 점점 사라지는데 Padding은 이러한 문제를 해결해준다. 예시를 보자.
이런식으로 입력받은 이미지 데이터 가장자리에 특정한 값의 픽셀을 감싸줌으로 이미지의 크기도 유지하고 정보손실도 막아주는 방법이다.
예시처럼 0 값인 픽셀로 Padding을 하는 것을 zero-padding 이다. CNN은 주로 zero-padding을 이용한다.
1-2) Pooling layer
Convolution Layer을 거쳐 나온 이미지 데이터를 적당한 크기로 줄이고 특징을 강조하는 래이어
처리방법은 3가지 있다.
- Max Pooling
- Average Pooling
- Min Pooling
CNN 에서는 주로 Max Pooling 을 사용한다.
예시와 같이 2x2 크기의 선택 영역마다 Max Pooling을 적용했다