Deep Learning CNN

HGY·2023년 9월 6일
0

DeepLearning

목록 보기
3/3

CNN (Convolutional Neural Network)

1998년 Yann lecumn 교수에 의해 1950년대 수행했던 고양이의 뇌파 실험에 영감을 얻어 미니지 인식을 획기적으로 개선할 수 있는 CNN 제안했다

  • CNN은 입력된 이미지에서 특징을 추출하기 위해 마스크를 도입하는 방법
  • 이미지 전체 영역에 대해 서로 동일한 연관성(중요도)로 처리하는 대신 특정 범위에 한정해 처리한다면 훨씬 효과적일 것이라는 아이디어 제시
  • Convolution은 비전에서 주로 filter연산을 뜻하며, 이미지의 특징을 찾기 위해 filtering을 수행

CNN은 이미지의 특징을 추출하는 부분과 클래스를 분류하는 부분으로 나눌 수 있다. 특징 추출(Feature extraction/learning) 영역은 Convolution LayerPooling Layer를 여러 겹 쌓는 형태로 구성된다. Convolution Layer는 입력 데이터에 필터를 적용 후 활성화 함수를 반영하는 필수 요소이다. Convolution Layer 다음에 위치하는 Pooling Layer는 선택적인 레이어이다.

CNN 마지막 부분에는 이미지 분류(Classification)를 위한 Fully Connected Layer가 추가된다. 이미지의 특징을 추출하는 부분과 이미지를 분류하는 부분 사이에 이미지 형태의 데이터를 배열 형태로 만드는 Flatten 레이어가 위치 한다.

Convolution

다양한 필터를 조각필터로 해당 패턴이 이미지 위에 있는지 확인하여 마킹하는 작업

Filter 적용

하나의 합성곱 계층에는 입력되는 이미지의 채널 개수만큼 필터가 존재하며, 각 채널에 할당된 필터를 적용함으로써 합성곱 계층의 출력 이미지가 생성된다.

예를 들어, 높이X너비X채널이 4X4X1인 텐서 형태의 입력 이미지에 대해 3X3 크기의 필터를 적용하는 합성곱 계층에서는 아래 그림과 같이 이미지와 필터에 대한 합성곱 연산을 통해 2X2X1 텐서 형태의 이미지가 생성된다.

위 그림의 예시에서는 bias를 더하는 것이 생략되었는데, 실제 구현에서는 합성곱을 통해 생성된 행렬 형태의 이미지에 bias라는 스칼라값을 동일하게 더하도록 구현되기도 한다.

Stride

이미지에 대해 필터를 적용할 때는 필터의 이동량을 의미하는 스트라이드(stride)를 설정해야한다. 아래 그림은 동일한 입력 이미지와 필터에 대해 스트라이드 값에 따른 출력 이미지의 변화를 보여준다.

(왼쪽) stride = 1인 경우, (오른쪽) stride = 2인 경우
CNN을 구현할 때 합성곱 계층의 스트라이드는 주로 1로 설정된다.

Padding

가장 위에서 봤던 그림에서 볼 수 있듯이 입력 이미지에 대해 합성곱을 수행하면, 출력 이미지의 크기는 입력 이미지의 크기보다 작아지게 된다. 4x4 였던 입력 이미지가 합성곱을 수행하여 2x2 의 출력 이미지의 크기를 갖는다. 그러므로 합성곱 계층을 거치면서 이미지의 크기는 점점 작아지게 되고, 이미지의 가장자리에 위치한 픽셀들의 정보는 점점 사라지게 된다. 이러한 문제점을 해결하기 위해 이용되는 것이 패딩 (padding)이다.

패딩은 아래 그림과 같이 입력 이미지의 가장자리에 특정 값으로 설정된 픽셀들을 추가함으로써 입력 이미지와 출력 이미지의 크기를 같거나 비슷하게 만드는 역할을 수행한다. 이미지의 가장자리에 0의 값을 갖는 픽셀을 추가하는 것을 zero-padding이라고 하며, CNN에서는 주로 이러한 zero-padding이 이용된다.

아래 그림의 오른쪽처럼 1폭짜리 zero-padding을 적용하였더니 출력 이미지 크기가 입력 이미지 크기와 같이 4x4 로 유지된다.

(왼쪽) Padding을 안한 경우, (오른쪽) Zero-padding인 경우

Zero-padding의 경우, 이미지 손실이 없음을 확인할 수 있다.

Pooling Layer

이미지의 크기를 계속 유지한 채 Fully Connected layer로 가게 된다면 연산량이 기하급수적으로 늘 것이다. 적당히 크기도 줄이고, 특정 feature를 강조할 수 있어야 하는데 그 역할을 Pooling layer에서 하게 된다.

처리 방법은 총 세 가지가 있다.

  • Max Pooling
  • Average Pooling
  • Min Pooling

CNN에서는 주로 Max Pooling 사용한다. 이는 뉴런이 가장 큰 신호에 반응하는 것과 유사하다고 한다. 이렇게 하면 노이즈가 감소하고 속도가 빨라지며 영상의 분별력이 좋아진다.

아래 그림은 stride가 2로 설정된 max-pooling 기반 풀링 계층의 동작을 보여준다.

위의 그림에서는 2X2 크기의 선택 영역마다 max-pooling을 적용했으며, 일반적으로 Pooling layer의 stride는 선택 영역의 높이 또는 너비의 크기와 동일하게 설정된다.

이미지 데이터의 특징은 인접 픽셀들 간의 유사도가 매우 높다는 것이다. 따라서 이미지는 픽셀 수준이 아니라, 특정 속성을 갖는 선택 영역 수준으로 표현될 수 있으며, Pooling layer은 이미지 데이터의 이러한 특징을 바탕으로 설계되었다. Max-pooling의 경우에는 선택 영역에서 가장 큰 값을 해당 영역의 대표값으로 설정하는 것과 같다. CNN에서는 이러한 Pooling layer을 이용함으로써 아래와 같은 다양한 이점들을 얻을 수 있다.

▷ 선택 영역 내부에서는 픽셀들이 이동 및 회전 등에 의해 위치가 변경되더라도 출력값을 동일하다. 따라서 Pooling layer을 이용할 경우, 이미지를 구성하는 요소들의 이동 및 회전 등에 의해 CNN의 출력값이 영향을 받는 문제를 완화할 수 있다.

▷ CNN이 처리해야하는 이미지의 크기가 크게 줄어들기 때문에 인공신경망의 model parameter 또한 크게 감소한다. 따라서 Pooling layer을 이용함으로써 CNN의 학습 시간을 크게 절약할 수 있으며, 오버피팅 (overfitting) 문제 또한 어느정도 완화할 수 있다.

Fully Connected Layer

지금까지 설명한 내용이 '특징 추출'을 위한 작업이었고 그 다음부터는 분류 작업이다. 이미지 특징을 추출하여 이것이 무엇을 의미하는 데이터 인지를 분류 작업하는 것이다.

여기에도 2가지 종류의 Layer가 있다.

  • Flatten Layer : 데이터 타입을 Fully Connected 네트워크 형태로 변경. 입력 데이터의 shape 변경만 수행
  • Softmax Layer : Classification 수행

여기에 해당하는 내용은 Computer Vision에서 크게 중요한 내용이 아니므로 이정도로 정리하겠다.

CNN 파라미터

설정 가능한 파라미터는 무엇이 있을까?

CNN의 파라미터로는 아래와 같다.

  • Convolution Filter의 개수
  • Filter의 사이즈
  • Padding 여부
  • Stride
  • Pooling layer 종류

하나씩 살펴보면,

Convolution Filter의 개수

각 Layer에서의 연산시간/량을 비교적 일정하게 유지하며 시스템의 균형을 맞추는 것이 좋다.
보통 Pooling Layer를 거치면 1/4로 출력이 줄어들기 때문에 Convolution Layer의 결과인 Feature Map의 개수를 4배정도 증가시키면 된다.

Filter 사이즈

작은 필터를 여러 개 중첩하면 원하는 특징을 더 돋보이게 하면서 연산량을 줄일 수 있다.
요즘 대부분의 CNN은 3x3 size를 중첩해서 사용한다고 한다.

Padding 여부

Padding은 Convolution을 수행하기 전, 입력 데이터 주변을 특정 픽셀 값으로 채워 늘리는 것이다.
Padding을 사용하게 되면 입력 이미지의 크기를 줄이지 않을 수 있다.

Stride

Stride는 Filter의 이동 간격을 조절하는 파라미터 이다.
이 값이 커지게 되면 결과 데이터의 사이즈가 작아지게 된다.

Pooling layer 종류

적당히 이미지 크기를 줄이면서 특정 feature를 강조하는 역할을 한다.
주로 Max 값을 뽑아내는 종류를 사용한다.

profile
바보 개발자 지망생

0개의 댓글