Data Analysis & ML/Deep Learning

[Deep Learning][딥러닝] CNN 개요

YSY^ 2020. 11. 9. 18:25

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

  • DCNN (Deep Convolutional Neural Network)

Overview

  • 컴퓨터 비전(이미지, 동영상관련 처리) 에서 사용되는 딥러닝 모델
  • 특히 이미지 분류에 가장 많이 사용된다.
  • 일반적으로 Convolution layer, Pooling Layer, Fully-connected layer 로 구성되어 있다.
    • Convolution layer와 pooling layer: Feature Extraction 담당
    • Fully-connected layer : 분류 담당

CNN 응용

  1. 이미지 분류

    • 64*64 이미지를 입력하였을 때 고양이인지 여부 판단

2. Object detection(객체 찾기)

  • 이미지 안의 물체를 탐색하여 자동차에 네모 박스
  • 찾는 항목을 찾아 표시해주는 것.
  • ex) 자동차 번호판 인식

3. 이미지를 새로운 스타일로 변환

  • 입력 이미지와 스타일 이미지를 합쳐 새로운 이미지 생성
  • 이미지 스타일 변경해주는 것.
  • ex) 사진을 피카소 그림스타일로 변경.

 

CNN 구성

  • 이미지로 부터 부분적 특성을 추출하는 Feature Extraction 부분과 분류를 위한 Classification 부분으로 나뉜다.
    • Feature Exctraction : Convolution Layer
    • Classification : Dense Layer (Fully connected layer)

 

Dense Layer를 이용한 이미지 처리의 문제점

  • 이미지를 input으로 사용하면 dimension(차원)이 매우 큼
  • 64 * 64 픽셀 이미지의 경우
    • 흑백은 Unit(노드)당 64 * 64 = 4096 개 학습 파라미터(가중치-weight)
    • 컬러는 Unit(노드)당 64 * 64 * 3 (RGB 3가지) = 12288 학습 파라미터(가중치-weight)
  • Hidden unit의 수에 따라 weight의 수가 지나치게 커지기 때문에 메모리 부족과 많은 계산 필요
  • Fully connected layer(dense layer)만을 사용한다면 이미지의 공간적 구조 학습이 어려움

 

합성곱 연산 이란

  • Convolution Layer는 이미지와 필터간의 합성곱 연산을 통해 이미지의 특징을 추출해 낸다.

 

이미지와 합성곱

  • 필터(커널) : 이미지에서 특성(패턴)을 추출

  • 대상 이미지

[출처] https://adeshpande3.github.io

  • 필터(커널)

필터와 이미지의 노란 박스 부분을 합성곱하면 6600 이 나온다.
필터와 이미지의 노란 박스 부분을 합성곱하면 0 이 나온다.

필터와 부분 이미지의 합성곱 결과가 값이 나온다는 것은 그 부분 이미지에 필터가 표현하는 이미지특성이 존재한다는 것이다.

 

검증된 필터 적용의 예

  • Sobel 필터
  • X-Direction Kernel: 이미지에서 수평 윤곽선(edge)를 찾는다.
  • Y-Direction Kernel: 이미지에서 수직 윤곽선(edge)를 찾는다.

왼쪽: X 적용, 오른쪽: Y 적용
둘을 합치면 위와 같이 원본 이미지의 특징 중 윤곽선을 추출할 수 있다.

CNN에서 Filter

  • CNN의 Layer는 이런 Filter(Kernel)들로 구성되 있다.
  • CNN은 주어진 Filter(Kernel)를 사용하는 것이 아니라 Filter(Kernel)의 값을 가중치(파라미터로)로 데이터를 학습해 찾아낸다.

CNN도 레이어를 쌓는다.

  • 첫번째 레이어는 부분적 특징을 찾는다.
  • 다음 단계에서는 이전 레이어에서 찾아낸 부분적 특징들을 합쳐 점점 추상적 개념을 잡아낸다.

Convolutional operation의 작동방식

  • hyper parameter 정의

    • Filter의 크기: 일반적으로 3 * 3, 5 * 5 크기의 filter를 주로 사용 (보통 홀수 사이즈로 잡는다.)
    • Filter의 수: Feature map output의 깊이

      Featuer Map

      • Filter를 거쳐 나온 결과물
  • 흑백 이미지는 하나의 행렬로 구성

  • 컬러 이미지는 RGB의 각 이미지로 구성되어 3개의 행렬로 구성

  • 예)
    • Input image는 6 X 6 X 3 형태 (높이, 너비, 채널)
    • Filter: 3 X 3 X 3$ 크기 1개 (높이, 너비, 채널)
    • Output: 4 X 4 feature map 1개 생성

  • 예)
    • Input image는 6 X 6 X 3 형태의 volume
    • Filter: 3 X 3 X 3 크기 2개
    • Output: 4 X 4 feature map 2개 생성

Padding

  • 이미지 가장자리의 픽셀은 convolution 계산에 상대적으로 적게 반영
  • 이미지 가장자리를 0으로 둘러싸서 가장자리 픽셀에 대한 반영 횟수를 늘림
  • "valid" padding
    • Padding을 적용하지 않음
  • "same" padding
    • Input과 output의 이미지 크기가 동일하게 되도록 padding 수를 결정

 

Strides

  • Filter(Kernel)이 한번 Convolution 연산을 수행한 후 옆 혹은 아래로 얼마나 이동할 것인가.
  • Stride=2: 한 번에 두 칸씩 이동 (feature map의 너비와 높이가 2배수로 다운샘플링 되었음을 의미)

Max Pooling Layer(최대풀링)

  • 해당 영역의 input 중 가장 큰 값을 출력
  • 일반적으로 2*2 크기의 window, stride=2 사용 (겹치지 않게 한다.)
  • 강제적인 subsampling 효과
    • weight 수를 줄여 계산속도를 높임
    • 특징의 공간적 계층구조를 학습한다. => 부분적 특징을 묶어 전체적인 특징의 정보를 표현하게 된다.
  • 학습할 weight가 없음: 일반적으로 convolutional layer+pooling layer를 하나의 레이어로 취급

Max pooling layer(2 × 2 pooling kernel, stride 2, no padding)

Fully-connected layer

  • Feature Extraction layer들을 거처 나온 output에 대해 분류는 fully-connected layer 에서 처리한다.
  • output을 flatten 한 뒤에 처리한다.

Example of CNN architecture

  • 일반적으로 convolutional layer (+ ReLU or other activations) + pooling layer를 여러 개 쌓음
  • Network가 진행될 수록 feature map의 크기는 줄어들고 깊이(개수)는 증가
  • 마지막에 Fully connected layer(+ ReLU or other activations) 추가
  • Output 형태에 맞는 output layer

 

CNN structure with Keras

  • Input shape: (image_height, image_width, image_channels)

  • Convolution레이어: tensorflow.keras.layers.Conv2D(filters, kernel_size, strides=(1, 1), padding='valid', activation=None)

    • filters: the dimensionality of the output space (i.e. the number of output filters)
    • kernel_size: height and width of the 2D convolution window
    • strides: the strides of the convolution along the height and width
    • padding: "valid" or "same"
    • activation: activation function https://keras.io/activations/
  • MaxPooling레이어:tensorflow.keras.layers.MaxPooling2D(pool_size=(2, 2), strides=None, padding='valid')

    • pool_size: Pooling window size
    • strides: default = pool_size
  • tensorflow.keras.layers.Flatten()

    • Flattens the input
    • Fully connected layer를 적용하기 위함
728x90
반응형