Search
Duplicate

딥러닝 - CNN

태그
인공지능
딥러닝

CNN (Convolutional NN)

CNN은 무엇일까?

Convolutional Neural Networks의 약자로 딥러닝에서 주로 이미지나 영상 데이터를 처리할 때 쓰이며, 이름에서 알수 있다시피 Convolution이라는 전처리 작업이 들어가는 Neural Network 모델이다.

왜 쓰기 시작했을까?

DNN (Deep Neural Network)의 문제점으로부터 출발한다
일반 DNN은 기본적으로 1차원 형태의 데이터를 사용한다
때문에 이미지가 입력값이 되는 경우, 이것을 flatten시켜서 한줄 데이터로 만들어야 하는데, 이 과정에서 이미지의 공간적 / 지역적 정보가 손실되게 된다. 또한 추상화 과정 없이 바로 연산과정으로 넘어가 버리기 때문에 학습시간과 능률의 효율성이 저하된다.
이러한 문제점에서부터 고안한 해결책이 바로 CNN이다.
→ CNN은 이미지를 날 것(raw input) 그대로 받음으로써, 공간적/지역적 정보를 유지한 채 특성(feature)들의 계층을 빌드업한다
→ CNN의 중요 포인트는 이미지 전체보다는 부분을 보는 것, 그리고 이미지의 한 픽셀과 주변 픽셀들의 연관성을 살리는 것이다.
예) 어떠한 이미지가 주어졌을 때, 이것이 새의 이미지인지, 아닌지를 결정할 수 있는 모델을 만든다고 가정!
→ 새의 주요 특징인 부리가 중요한 포인트가 될 수 있다
→ 때문에 모델이 주어진 이미지에 새의 부리가 있는지 없는지, 판가름 하는 것이 중요 척도
→ 하지만 새의 전체 이미지에서 새의 부리 부분은 비교적 작은 부분이다
→ 때문에 모델이 전체 이미지를 보는 것보다는 새의 부리 부분을 잘라 보는게 더 효율적
→ 이것을 해주는 것이 CNN
→ CNN의 뉴런이 패턴(새 부리)을 파악하기 위해서 전체 이미지를 모두 다 볼 필요 없다

Convolution 작동 원리

→ 2차원 이미지의 예 (픽셀 단위로 구성)
→ MNIST Dataset에서 추출한 샘플 중 하나 → 손 글씨로 쓰여진 ‘8’의 gray scale 이미지
→ 28 x 28 단위의 픽셀로 구성되어 있다
→ 이 데이터 입력값을 28 x 28 matrix로 표현할 수 있다
→ 2차원 이미지를 matrix로 표현할 수 있다는 뜻
→ CNN에 넣어줄 입력값은 이렇게 matrix로 표현된 이미지이다
→ 5 x 5 matrix로 표현된 이미지 입력값이 있다고 가정!
→ CNN에는 필터(커널)가 존재한다
→ 위 경우에는 3 x 3 크기의 필터
→ 하나의 필터를 이미지 입력값에 전체적으로 훑어준다고 생각하면 된다
→ 즉, 우리의 입력값 이미지의 모든 영역에 같은 필터를 반복 적용해 패턴을 찾아 처리하는 것이 목적
→ 이미지 위에 이 필터를 훑어줄 때(이 필터를 이용해 연산처리 할 때) 어떤일이 발생?
→ 연산처리는 matrix와 matrix간의 Inner Product라는 것을 사용

Inner Product 란?

→ 같은 크기의 두 matrix를 놓고, 그 위치에 있는 숫자를 곱해 모두 더해 주는 것
→ 영상 처리할때 convolution 처리와 비슷
→ 이렇게 빨간 테두리를 한칸씩 옮겨가면서 필터의 연산처리를 해준다 (반복)
→ Convolution 처리의 결과값이 필터의 크기와 같은 3 x 3으로 줄어들었다 → 손실되는 부분이 발생했다는 뜻
→ 이런 문제를 해결하기 위해 Padding이라는 방법 사용
→ 쉽게 말해 0으로 구성된 테두리를 이미지 가장자리에 감싸준다
→ 이렇게 되면 입력값의 크기와 결과값의 크기가 같아졌다 → 즉 손실이 없어졌다