Post

[컴퓨터 비전] 합성곱 신경망 (Convolutional Neural Network)

[컴퓨터 비전] 합성곱 신경망 (Convolutional Neural Network)

기존 선형 분류기는 이미지 공간 구조를 파괴한다는 문제점이 있다. 따라서 이미지에 대한 신경망 구조를 설계할 때 2차원 구조를 고려하면서도, 단순히 layer를 쌓는게 아니라 계산 그래프 (computation graph) 입장에서 연산이 효율적이고 역전파가 잘 되도록 설계해야한다.

이를 해결하기 위해 등장한 것이 CNN이다.

CNN (Convolutional Neural Network)

CNN은 특징 추출기 (Feature Extractor), FC Layer는 분류기 (Classifier)의 역할을 하며, CNN에서 특징 추출은 과정은 주로 Convolution Layer와 Pooling Layer를 통해 이루어진다.

fig1 출처: Stanford CS231n, Lecture 5 (Image Classification with CNNs)

Convolution Layer

내적은 하나의 벡터가 다른 벡터와 얼마나 유사한지를 나타내기 때문에 템플릿 (Template) 매칭으로 볼 수 있다.

FC Layer에서는 입력 벡터와 각 뉴런의 가중치를 내적해서 하나의 스칼라를 출력한다.

fig2 출처: Stanford CS231n, Lecture 5 (Image Classification with CNNs)

Convolution Layer에서도 마찬가지로, 필터와 입력 이미지의 일부분을 내적해서 하나의 스칼라를 출력한다. 즉, 출력은 해당 필터의 템플릿과 이미지의 특정 부분이 얼마나 일치하는지를 나타내며, 출력된 2D Activation Map (Feature Map)은 이미지의 각 부분이 해당 필터와 얼마나 일치하는지를 나타낸다.

fig3 출처: Stanford CS231n, Lecture 5 (Image Classification with CNNs)

FC layer에서 가중치의 행마다 1개의 bias가 존재하였고, Convolution Layer에서는 필터 하나마다 1개의 bias가 존재한다.

fig4 출처: Stanford CS231n, Lecture 5 (Image Classification with CNNs)

필터의 채널 크기는 입력의 채널 크기와 같아야하며, 필터의 개수는 출력의 채널 크기를 결정한다는 것을 기억해야 한다.

입력의 크기가 $C_{in}\times H\times W$이고 원하는 출력 채널의 크기가 $C_{out}$이라면, 필터의 크기는 $C_{out}\times C_{in}\times K_W\times K_H$이어야 한다.

fig5 출처: Stanford CS231n, Lecture 5 (Image Classification with CNNs)

내적은 선형 연산자이다. CNN에서 사용하는 컨볼루션 연산도 일종의 내적이기 때문에 여러 layer를 쌓아도 여전히 선형 연산자이다. 따라서 선형 분류기에서처럼 컨볼루션 연산 사이에도 활성 함수를 추가해야 한다.

fig6 출처: Stanford CS231n, Lecture 5 (Image Classification with CNNs)

필터 시각화

아래는 AlexNet의 첫 번째 layer의 필터들을 시각화한 것이다.

몇 개는 색상 대비와 같은 RGB이미지에 대응되는 필터, 모서리와 같은 이미지의 공간적 구조에 대응되는 필터가 존재하는 것을 볼 수 있다.

fig7 출처: Stanford CS231n, Lecture 5 (Image Classification with CNNs)

깊은 layer일수록 필터는 모서리와 같은 세밀한 것보다는 더 큰 공간 구조를 학습한다.

아래 그림은 입력 이미지의 일부가 어떤 필터에 강하게 반응하는지를 시각화한 것이다.

초기 layer와 달리 알파벳처럼 큰 구조를 포착하는 것을 볼 수 있다.

fig8 출처: Stanford CS231n, Lecture 5 (Image Classification with CNNs)

수용 영역 (Receptive Field)

수용 영역은 하나의 출력이 입력 이미지에서 어느 영역을 보는지를 나타낸다.

Effective receptive field는 원본 이미지의 픽셀 중 얼마나 많은 픽셀수가 나중에 네트워크의 한 활성화에 영향을 미칠 수 있었는가에 대한 것임

아래 그림에서 Output의 한 칸은 Input의 7x7칸에 영향을 받고 있으며, 따라서 이 7x7 영역이 출력의 수용 영역이다.

fig9 출처: Stanford CS231n, Lecture 5 (Image Classification with CNNs)

결과적으로, CNN의 layer가 깊어질수록 하나의 필터가 커버하는 수용 영역은 점점 넓어진다.

특징맵 (Feature Map)

일반적으로 Convolution Layer를 지날수록 특징맵의 공간 해상도 (Spatial Resolution)는 점점 줄어들고 채널 크기는 증가한다.

그러면 각 Layer의 특징맵에는 어떤 정보가 담기게 될까?

초기 layer의 특징맵은 공간 해상도가 크기 때문에 세밀한 위치 정보를 잘 보존한다. 이때 특징맵에 담기는 특징은 주로 edge, 색상 대비와 같은 저수준의 시각적 패턴 (low-level feature)으로, 이를 의미적으로 거친 (Semantically coarse) 특징이라고 표현한다.

후반 layer로 갈수록 특징맵의 공간 해상도는 줄어들지만, 수용 영역이 넓어지고 채널이 깊어지면서 정보가 압축된다. 이때는 ‘차’, ‘사람’과 같은 고수준의 개념적 특징 (high-level feature)이 담긴다. 공간 해상도가 줄어들었기 때문에 위치 정보는 거의 사라지지만, 의미적으로는 가장 세밀하게 정제된 (Semantically fine-grained) 특징을 담게 된다.

예를 들어, 자동차 이미지를 CNN에 입력했을 때 초기 layer는 ‘바퀴의 둥근 형태’, ‘헤드라이트의 빛’과 같은 단순하고 의미적으로 거친 특징을 포착한다. 반면 수십 개의 layer를 지난 후 마지막 layer에서는 이 모든 정보가 종합되어 ‘이것은 바퀴가 4개 달리고 헤드라이트가 있는 자동차이다’라는 의미적으로 세밀한 정보로 응축된다.

Pooling Layer

신경망 내부에서 공간적 크기를 줄이는 다운샘플링 연산 중 하나이다.

fig10 출처: Stanford CS231n, Lecture 5 (Image Classification with CNNs)

기본적으로 연산 후 출력의 크기가 $s=2$인 stride와 동일하지만 추가적인 필터가 필요하지 않기 때문에 컴퓨팅 비용이 저렴하다.

fig11 출처: Stanford CS231n, Lecture 5 (Image Classification with CNNs)

  • Max Pooling은 영역 내에서 최대값을 선택하는 비선형 연산이다.
  • Avg Pooling은 영역 내에서 평균을 계산하는 선형 연산이다.

Translation Equivariance

합성곱과 풀링은 이미지의 2차원 공간 구조를 존중한다는 개념을 수학적으로 공식화하는 한 가지 방법이다.

즉, 이미지를 변환한 뒤 conv 연산을 수행하든, conv연산을 수행한 뒤 결과를 변환하든 동일한 결과를 얻을 수 있다.

이는 이미지를 처리할 때 추출되는 특징은 이미지의 내용에만 의존해야 하며, 그 내용이 이미지의 어느 위치에 있는지에는 의존하지 않아야 한다는 것을 의미한다.

fig12 출처: Stanford CS231n, Lecture 5 (Image Classification with CNNs)

This post is licensed under CC BY 4.0 by the author.