Convolutional Neural Network (CNN)

장영준·2023년 2월 8일
0

Deeplearning-Study

목록 보기
1/4

CNN이란?

CNN이란 일반 Deep Neural Network에서 이미지나 영상과 같은 데이터를 처리할 때 발생하는 문제점들을 보완한 방법이다.

DNN의 문제

DNN은 기본적으로 1차원 형태의 데이터를 많이 사용하여 하나의 row로 표현이 가능하지만, 이미지 데이터와 같이 최소 2차원 형태의 데이터를 활용할 수 없었다.

CNN에서의 문제 해결


위와 같은 이미지를 아래처럼 변환한다.

(현재는 흑백이라 1개의 차원으로 구성되어 있지만, 색상이 있는 이미지에서는 RGB 값을 사용하기 때문에 3개의 차원으로 구성된다)

CNN은 하나의 이미지로부터 픽셀 간의 연관성을 살린 여러개의 이미지를 먼저 생성하는 것에서 시작한다.

Convolution

방법은 다음과 같다.
1. 위 그림에서처럼 3 X 3 이미지를 추출하여 임의의 3 X 3 값을 가지고 있는 데이터와 곱해준다. (랜덤 값을 가지고 있는 이 3 X 3 데이터를 필터 라고 한다.)
2. 이후에는 한칸씩 (stride 값에 따라 이동하는 칸수가 다르다) 옆으로 이동하며 계속 값을 생성한다.
3. stride=1 이라고 가정하면 10 X 10 크기의 이미지가 생성된다.

12 X 12 크기의 이미지가 10 X 10 크기의 이미지로 변환되면 손실이 발생하지 않을까 ?

이에 대비하여 padding을 준다.
padding이란, 원본 이미지 데이터를 0으로 한번 쭉 둘러싸 필터를 거친 후에도 이미지가 같은 크기를 유지할 수 있게 만드는 작업이다.

위의 과정을 CNN에서 Convolution이라고 부른다.

Pooling

위의 convolution 과정을 거치면 너무 많은 이미지가 생성되어 문제가 발생한다.
이에 이미지를 분석하는 데 있어 영향을 주지 않는 부분이 없을까에 관해 생각하게 된다.
-> 이에 1개의 이미지에 대한 1개의 출력을 만들며 padding 없이 filter만 적용하는 것을 pooling 이라고 한다.

pooling의 종류에는 대상 영역에서 최댓값을 취하는 연산인 최대 풀링 (Max Pooling), 대상 영역의 평균을 취하는 연산인 평균 풀링 (Mean Pooling)이 있다.

Flatten


Convlution과 Pooling을 지속적으로 반복하면, 이미지 숫자가 많아지며, 크기는 점차 감소한다.
이는 곧 1차원 데이터로 간주할 수 있다는 말이다.
이후에는 DNN과 같은 방식으로 이미지를 처리해 주면 된다.

참고자료

profile
배움의 개발자

0개의 댓글