Deep Learning - CNN (Convolutional Neural Network) 정리

David's Data Science·2021년 11월 16일
0

합성곱 신경망 CNN(Convolutional Neural Network)

이미지 처리에서 가장 범용적으로 사용되는 모델. 심층 신경망 모델 중 하나이며, 컨볼루션 레이어(Conv)와 풀링 레이어(Pooling)를 거쳐 이미지의 '특성'을 압축해 연결레이어(Fully Connected Layer)를 최종적으로 통과시켜 이미지에 대한 인식을 이용하는 방법이다.
* 이미지 처리 뿐 아니라 Conv1D Layer를 이용해 텍스트 처리에도 사용할 수 있지만, 범용적으로 이미지처리에 가장 많이 사용된다.

Convolutional Layer

합성곱 신경망의 주인공이 되는 레이어로, 이용해 입력받은 데이터의 일부에 특정 사이즈 필터의 가중치를 곱해 줌으로써 특징적인 부분을 좀더 압축해주는 레이어이다. 픽셀 단위로 구성되어있는 이미지에서 특정 부분의 특징들을 파악하기 위한 레이어. 일부 특징을 뽑을 크기의 Filter를 통해 이미지의 부분별 특징을 뽑은 Feature Map을 결과물로써 만들어내는 레이어

Filter (Kernel)

Conv Layer에서 특징을 뽑아내기 위한 가중치 행렬로, 지정한 사이즈의 크기로 이미지의 픽셀과 필터의 가중치를 곱해주면서 Feature Map을 형성한다.
여러개의 Filter를 통해 여러가지 가중치 행렬을 곱해주면서 Filter 수 만큼의 Feature Map을 가지게 된다.

Stride

Conv Layer에서 특징을 추출하기 위해 Filter를 움직이는 것 자체를 뜻한다. 코드 내에서 그 수치에 따라 몇 칸씩 넘어갈지 결정할 수 있다.

Feature Map

Conv Layer에서 Filter를 Striding 하면서 추출한 특징들의 결과물을 뜻한다. Feature map의 사이즈는 Conv Layer에서 Filter의 사이즈를 빼준뒤 1을 더한 값으로 보면 된다(Zero Padding을 적용하지 않을 경우)
이렇게 만들어지는 Feature Map은 각 Filter마다의 영향을 받아 Filter의 개수만큼 생성된다.

Zero Padding

Conv Layer에서 Filter를 통해 특징을 추출하다보면 사이즈가 작아지면서 데이터의 손실을 야기할 수 있다. 이런 점을 보완하기 위해 0으로 이미지데이터의 둘레를 감싸준다. 그렇게 될 경우, 사이즈 5x5인 이미지는 7x7이 될 것이고, 3x3 필터를 사용하더라도 똑같이 5x5의 결과가 나오게 된다.

Channel (bout colors)

한 이미지에서 다루고 있는 색의 영역 개수를 뜻한다. 흑백의 경우 Black or White으로 Binary한 2개의 채널을 가지고 있으며, 일반적인 컬러로 RGB의 경우 RED, GREEN, BLUE 세 가지 영역에서의 색을 다루기 때문에 채널이 3개라고 할 수 있다.
* 표현하기 나름인데, 필터 수를 채널 수로 명명하는 경우도 있으니 참고하여 사용한다.

Pooling Layer

다수의 Filter를 통해 Depth가 높아진 데이터의 층에서 여전히 이미지의 크기가 너무 큰 경우 이를 축소해서 필요한 특성들을 압축해서 볼 필요가 있다. Conv 결과값에서의 필요없는 부분을 제거하면서 압축하여 최적화 파라미터를 줄이고, 효율적으로 최종 분류를 하기 위함이다. 이는 Conv와 같은 Filter를 이용한 추출이 아니기 때문에 Filter로 인한 채널 수(Depth)가 커지지 않는다.
방법으로는 가장 큰 값으로 처리하는 Max Pooling이 있으며, 평균값으로 처리하는 Average Pooling이 있다.

Max Pooling

Pooling 사이즈를 선정한 뒤, Feature Map 내에서 해당 사이즈의 값을 내 가장 큰 값을 추출하는 방식이다. 8x8 사이즈의 이미지에서 2x2의 Max Pooling Layer를 통과한다면, 각각 2x2의 위치에서 가장 수치를 갖는 부분을 추려내어 4x4의 결과물을 나타낸다.
최대값을 이용해서 가능한 이미지의 특징적인 부분을 뽑아내는 방법이다.

Average Pooling

Pooling 사이즈를 선정한 뒤, Feature Map 내에서 해당 사이즈의 전체 값들의 평균을 추출하는 방식이다. 맥스 풀링과도 동일하게 8x8 사이즈의 이미지에서 2x2의 Average Pooling Layer를 통과한다면, 각각 2x2의 위치에서 가장 수치를 갖는 부분을 추려내어 4x4의 결과물을 나타낸다.
평균값을 이용하기 때문에 불필요한 특성도 가져올 수 있지만, 평균과 분산을 이용해 물체의 위치 파악에 용이한 방법으로 객체탐지(Object Detection)에 주로 사용된다.

Flatten Layer

Conv Layer와 Pooling을 여러차례 거치면서 압축된 이미지 데이터를 최종적으로 FCL(Fully Connected Layer)를 통과할 수 있도록 인풋값을 1차원으로 쭉 늘려 조정해주는 레이어.
기존에 5x5x1 layer였다면, 25x1의 1차원 형태로 길게 늘려주는 것이다.
기존의 2D 상태의 데이터를 1차원으로 변경해줌으로써 FCL에 넣을 수는 있지만, 공간정보가 사라지며, 학습해야 할 파라미터 수가 증가한다.

Gloval Average Pooling(GAP)

Flatten의 단점을 보완하는 방법이다. Task에 따라 다르겠지만, 전체 Feature Map에 대해 Pooling을 진행하고 전체 평균을 바탕으로 한개의 수치로 변형하는 방법이다.

profile
데이터 사이언티스트가 되고싶은 David입니다.

0개의 댓글