[딥러닝] CNN의 이해

Updated:

일반 Dense Layer에서 ImageClassification 시 주요 문제

  • Fashion MNIST의 경우 분류 대상이 이미지에서 고정된 위치에 있지만 분류 대상이 이미지의 어디에 있을지 모르는 경우가 대부분이다.
  • 이미지의 크기가 커질 수록 너무 많은 Weight가 필요.

  • 공간적인 특성을 무시하고 1차원적으로 구현

Deep Learning CNN 구조

input image -> Convolutional layers (Feature Extractor) -> Fully connected layer -> Ouptput class

합성곱 계층에서 학습은 Feature Extractor에 집중, Fully connected layer에서는 classifier에 집중.

  • Classification에 맞는 최적의 Feature를 추출
  • 최적의 Feature 추출을 위한 최적 Weight값을 계산
  • 최적 Feature 추출을 위한 필터(필터 Weight) 값을 계산

Deep Learning CNN 에서의 Filter 값 결정

  • 일반적인 Vision 영역에서는 사용자가 filter를 선택
  • Deep Learning CNN에서는 최적의 filter값을 학습을 통해 스스로 최적화한다.

Stride와 Padding

stride

stride는 입력 데이터에 Conv Filter를 적용할 때 Sliding Window가 이동하는 간격을 의미한다.

stride를 키우면 공간적인 feature 특성을 손실할 가능성이 높아지지만, 오히려 불필요한 특성을 제거하는 효과를 가져 올 수 있으며 Convolution 연산 속도를 향상 시킨다.

padding

  • Filter를 적용하여 Conv 연산 수행 시 출력 Feature Map이 입력 Feature Map 대비 계속적으로 작아지는 것을 막기 위해 적용
  • 좌우 끝과 상하 끝에 각각 열과 행을 추가 한 뒤, 0 값을 채워준다.

  • 모서리 주변의 Conv 연산 횟수가 증가되어 모서리 주변 feature들의 특징을 보다 강화하는 장점이 있다.

  • keras에서 Conv2D() 인자로 padding=’same’을 넣어주면 자동으로 크기 유지
  • padding=’valid’를 적용하면 별도의 padding을 적용하지 않고, Conv연산 수행

Pooling

  • Conv 적용된 Feature map의 일정 영역 별로 하나의 값을 추출하여(주로 Max 또는 Average 적용) Feature map의 사이즈를 줄인다. 일반적으로 Pooling크기와 Stride를 동일하게 부여하여 모든 값이 한번만 처리 될 수 있도록 한다.
  • 비슷한 feature 들이 서로 다른 이미지에서 위치가 달라지면서 다르게 해석되는 현상을 중화 시켜줌
  • 크기를 줄이므로 Computation 연산 성능 향상
  • Max Pooling의 경우 Sharp한 feature 값을(Edge등) 추출하고 Average Pooling의 경우 보다 Smooth한 feature값을 추출

Strides/Padding과 Pooling 비교

  • Stride를 증가시키는 것과 Pooling 모두 출력 Feature Map의 크기를 줄이는데 사용.
  • Pooling의 경우 특정 위치의 feature값이 손실 되는 이슈 등으로 인하여 최근 Advanced CNN에서는 많이 사용되고 있지 않음.
  • LeNet, AlexNet, VGG의 경우는 CNN (Stride/Padding) -> Activation -> Pooling으로 이어지는 전형적인 구조를 갖추었으나 이후 발표되는 논문 등에서 Stride로 feature Map 크기를 줄이는 것이 Pooling보다 더 나은 성능을 보인다는 연구 결과를 발표하기 시작
  • ResNet부터 이어지는 최근 CNN에서는 최대한 Pooling을 자제하고 Stride를 이용하여 Network을 구성하는 경향이 강해 졌다.

참고 자료

딥러닝 CNN 완벽가이드

Leave a comment