코딩 다이어리

CNN 본문

머신러닝/딥러닝

CNN

yc7764 2022. 12. 23. 18:30

CNN(Convolutional Neural Networks)이란?

  • Convolution 연산을 이용해 전처리 작업이 들어가는 Neural Network 모델
  • 사람의 시신경 구조를 모방한 기술로 이미지를 인식하기 위해 패턴을 찾기 위한 모델
  • 이미지를 1차원 데이터로 변환시키지 않고 2차원 형태를 유지하기 때문에 이미지의 지역적, 공간적 정보를 유지한 채 학습을 함
  • 학습을 진행하면서 이미지 전체가 아닌 부분을 살펴보며 이미지의 한 픽셀과 주변 픽셀들의 연관성을 살림
  • Feature Map을 생성하는 필터까지 학습이 가능해 컴퓨터 비전(Computer Vision) 분야에서 성능이 우수
  • 자율 주행, 얼굴 인식과 같은 객체 인식이나 컴퓨터 비전이 필요한 분야에 많이 사용됨

CNN의 주요 개념

1. 합성곱(Convolution)

  • 하나의 함수와 또 다른 함수를 반전 이동한 값을 곱한 다음, 구간에 대해 적분하여 새로운 함수를 구하는 수학 연산자
  • 즉 두 함수를 서로 곱해서 합한다는 의미를 가짐
  • CNN에서는 필터(Filter)로 이미지를 이동하며 합성곱 연산을 하면서 부분적으로 특징값들을 뽑아내는데 사용
  • 입력층에 가까울 수록 가장자리(Edge), 곡선(Curve)과 같은 저수준(Low Level) 특징을 학습하며 출력층에 가까울 수록 질감(Texture), 물체 일부분(Object Parts)과 같은 고수준(High Level) 특징을 인식

2. 이미지와 필터의 합성곱 연산 과정

  • 위의 그림과 같이 5x5 크기의 2차원 이미지와 3x3 크기의 2차원 필터를 이용해 합성곱을 진행
  • 필터가 이미지 전체를 이동하며 합성곱 연산을 진행
  • 즉, 이미지의 왼쪽 상단에서부터 연산을 진행하며, 위의 그림처럼 빨간 테두리 부분의 Matrix와 필터를 합성곱 연산
  • 합성곱 연산은 모든 원소들끼리의 곱을 더하는 연산으로 위의 그림에서 나오는 예시를 실제 계산해보면 아래와 같음

$$ \left(1\times1\right)+\left(1\times0\right)+\left(1\times1\right)+\left(0\times0\right)+\left(1\times1\right)+\left(1\times0\right)+\left(0\times1\right)+\left(0\times0\right)+\left(1\times1\right)=4 $$

  • 위의 그림처럼 이미지의 전체를 필터가 이동하면서 합성곱 연산을 진행하며 결과값이 나오게 됨
  • 이때 입력값이 5x5 크기의 데이터이지만 합성곱 연산을 통해 나온 결과값은 3x3 크기의 데이터로 작아짐
  • 입력값과 필터의 크기를 이용해 결과값의 크기를 계산할 수 있음
    • 입력값의 크기가 $ d_{1}\times d_{2} $이고 필터의 크기가 $ k_{1}\times k_{2} $일 때, 결과값의 크기는 $ \left(d_{1}- k_{1}+1\right)\times\left(d_{2}- k_{2}+1\right) $

3. Padding

  • 입력 데이터가 합성곱 연산을 거치면 데이터의 크기가 줄어들게 되며, 이런 현상은 이미지의 가장자리에 위치한 픽셀들의 정보가 점차 사라지게 됨
  • 이러한 현상을 막기위해 이미지의 가장자리에 특정 값을 갖는 픽셀을 추가하는데 이를 Padding이라고 하며 0의 값으로 픽셀을 추가할 경우 Zero Padding이라고 함
Padding을 안한 경우(왼쪽)와 Zero Padding을 한 경우(오른쪽)

4. Stride

Stride Length = 1인 경우(왼쪽)와 Stride Length = 2인 경우(오른쪽)
  • Stride는 필터가 이미지를 이동할 때 움직이는 거리이며 출력값에 영향을 끼침
  • 위의 그림은 동일한 입력 이미지와 필터에 대해 Stride 값에 따른 출력값의 변화를 나타냄
  • Stride Length가 1인 경우 5x5 크기의 출력값을 가지고 Stride Length가 2인 경우 3x3 크기의 출력값을 가짐

5. Pooling

  • 왼쪽 그림과 같이 합성곱 과정을 한 개의 이미지에서 10개의 이미지 결과값이 도출되어 연산량이 과도하게 증가
  • 각 결과값(Feature Map)의 크기를 축소해주기 위해 Pooling을 사용
  • Pooling에는 Max Pooling, Average Pooling, Min Pooling 등이 있지만 CNN에서는 주로 Max Pooling을 사용
    • 실제 뉴런이 가장 큰 신호에만 반응하는 것과 유사하고 노이즈가 감소하고 속도가 빨라져 영상의 분별력이 향상됨
  • Max Pooling은 해당 선택 영역에서 가장 큰 값을 대표값으로 가져와 결과값을 도출함
  • 선택 영역 내부에서는 픽셀들이 이동 및 회전 등에 의해 위치가 변경되어도 출력값이 동일하므로, 이미지를 구성하는 요소들의 이동 및 회전 등에 의해 CNN의 출력값이 영향을 받는 문제를 완화
  • 이미지의 크기가 크게 줄기 때문에 신경망의 Model Parameter가 크게 감소하며, 학습 시간이 절약되고 과대적합(Overfitting) 문제를 어느정도 완화함

Fully Conneted Layer

  • Convolution Layer와 Max Pool Layer를 거치면 입력 데이터에서 Feature를 추출할 수 있고, 이 과정을 반복하여 다시 Feature에서 새로운 Feature를 추출할 수 있음
    • 예시로 고양이 이미지에서 직선이나 곡선의 조합으로 고양이의 눈, 귀라는 특징을 추출할 수 있음
  • Flatten Layer에서 앞의 Layer들에서 나온 결과값의 데이터 타입을 Fully Connected Layer의 입력 형태로 변환
  • Fully Conneted Layer에서 추출된 이미지의 특징을 이용해 무엇을 의미하는 데이터인지 분류

CNN의 Hyper-parameters

  • weight와 같이 모델 내부에 있으며 데이터에서 값이 추정될 수 있는 설정변수인 parameter가 아닌 모델 외부에 있으며 데이터로부터 값이 추정될 수 없는 설정변수를 하이퍼 파라미터(Hyper-parameters)라고 함
  • 하이퍼 파라미터에 따라 모델의 성능에 영향이 끼치므로 적절한 하이퍼 파라미터를 찾아 튜닝해야 함
  • 사용자가 튜닝 가능한 하이퍼 파라미터(즉, 모델을 설계할 때 고려해야하는 사항)
    • Convolutional layers: 필터의 갯수, 필터의 크기, stride값, zero-padding의 유무
    • Pooling layers: Pooling방식 선택(MaxPool or AvgPool), Pool의 크기, Pool stride 값(overlapping)
    • Fully-connected layers: 넓이(width)
    • 활성함수(Activation function): ReLU(가장 주로 사용되는 함수), SoftMax(multi class classification),Sigmoid(binary classification)
    • 손실함수(Loss function): Cross-entropy for classification, L1 or L2 for regression
    • 최적화(Optimization) 알고리즘과 이것에 대한 hyperparameter(보통 learning rate): SGD(Stochastic gradient descent), SGD with momentum, AdaGrad, RMSprop
    • Random initialization: Gaussian or uniform, Scaling

참고사이트

https://towardsdatascience.com/a-comprehensive-guide-to-convolutional-neural-networks-the-eli5-way-3bd2b1164a53

A Comprehensive Guide to Convolutional Neural Networks — the ELI5 way

Artificial Intelligence has been witnessing a monumental growth in bridging the gap between the capabilities of humans and machines…

towardsdatascience.com

https://sonsnotation.blogspot.com/2020/11/7-convolutional-neural-networkcnn.html

[머신러닝/딥러닝] 9-1. Convolutional Neural Network(CNN)

sonsnotation.blogspot.com

https://rubber-tree.tistory.com/entry/%EB%94%A5%EB%9F%AC%EB%8B%9D-%EB%AA%A8%EB%8D%B8-CNN-Convolutional-Neural-Network-%EC%84%A4%EB%AA%85

[딥러닝 모델] CNN (Convolutional Neural Network) 설명

저번 포스팅에서는 딥러닝의 모델별 특징에 대해 알아보았습니다. 2021.07.10 - [SW programming/Computer Vision] - AI, 머신러닝, 딥러닝 이란? 그리고 딥러닝 모델 종류 그리고 이번 포스팅에서는 그 중 Compu

rubber-tree.tistory.com

Comments