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

Ik·2022년 7월 28일
0

Data

목록 보기
18/34

CNN

CNN?

  • Deep learning 구조
  • 주로 컴퓨터 비전(이미지, 동영상관련 처리) 에서 사용되는 딥러닝 모델로 Convolution 레이어를 이용해 데이터의 특징을 추출하는 전처리 작업을 포함시킨 신경망(Neural Network) 모델

Computer vision with CNN

Couputer Vision

  • 이미지, 동영상 관련 등의 비정형 데이터를 이용한 딥러닝
  • 어려운 이유
    • 사람과 컴퓨터가 보는 이미지의 차이
    • 컴퓨터가 보는 이미지는 0 ~ 255 사이의 숫자로 이뤄진 행렬
      • 숫자들의 패턴을 찾는 것이 힘듬

종류

Image Classification (이미지 분류)

  • 입력된 이미지가 어떤 라벨에 대응되는지 이미지에 대한 분류(Classification)을 처리

Object Detection(물체 검출)

  • 이미지 안의 Object(물체)들의 위치를 찾고 어떤 물체인지 분류하는 작업
  • box 형태의 x,y 좌표를 찾음
    • box 종류
      • box 대각선 두 점
      • box 중앙과 높이, 길이
  • Localization : 이미지안에서 하나의 Object의 위치와 class를 분류
    • 분류와 함께 사용된 경우에 box이용해 분리
      • 일반적인 분류는 box 이용 X
  • Dection: 이미지 안의 여러개의 Object의 위치와 Class를 분류

Image Segmentation

  • 픽셀 별로 분리
    • ex) 사람, 물체 분리해서 이용
  • Detection과의 차이점은 분리 유무
    • Detection의 경우 box를 이용해 검출하는데 box가 겹치는 부분이 존재
    • Segmentation의 경우 픽셀이 겹치지 않는다

Image Captioning

  • 이미지에 대한 설명문을 자동으로 생성

Super Resolution

  • 저해상도의 이미지를 고해상도의 이미지로 변환

Neural Style Transfer

  • 입력 이미지와 스타일 이미지를 합쳐 합성된 새로운 이미지 생성
  • 이미지 스타일 변경

Text Dectection & OCR

  • Text Dectection: 이미지 내의 텍스트 영역을 Bounding Box로 찾아 표시
  • OCR: Text Detection이 처리된 Bounding Box 안의 글자들이 어떤 글자인지 찾음

Human Pose Estimation

  • 인간의 관절 포인트(Keypoint)를 점으로 추정해 자세예측

CV vs 전통적인 영상처리 방식

  • Handcrafted Feature (전통적인 영상처리 방식)
    • 분류하려고 하는 이미지의 특징들을 사람이 직접 찾아서 만든다
      • 찾아낸 특징들을 기반으로 학습
      • 특성 추출을 위해 Filter 행렬을 주로 이용
    • 사람이 직접 찾기 때문에 특징을 놓친다면 학습 못해 성능 떨어짐
    • 인적 자원의 한계
  • End to End learning (딥러닝)
    • 이미지의 특징 추출부터 추론까지 자동으로 학습

CNN 구성

  • 이미지로부터 부분적 특성을 추출하는 Feature Extraction 부분과 분류를 위한 추론 부분
  • Feature Extraction 부분에 이미지 특징 추출에 성능이 좋은 Convolution Layer를 사용
    • Feature Exctraction : Convolution Layer
    • 추론 : Dense Layer (Fully connected layer) 등
      • 추론에 Convolution Layer 사용가능하며 이런 Network를 Fully Convolution Network(FCN)이라고 한다
    • 입력에 Dense Layer를 사용한 경우
      • 이미지의 공간적(spatial) 구조를 학습하는 것이 어렵다
      • 이미지를 input으로 사용하면 weight의 양이 이 매우 큼
  • 일반적으로 convolutional layer + pooling layer 구조를 여러 개 쌓는다
    • 동일한 레이어들의 구조를 반복해서 쌓을 때 그 구조를 Layer block이라고 한다
    • convolution과 pooling layer를 묶어서 반복한 것을 convolution block이라고 한다
  • Bottom단의 Convolution block에서 Top 단의 convolution block으로 진행 될 수록 **feature map의 size(height, width)는 작아지고 channel(depth)는 증가
    • Top단으로 갈수록 더 큰 영역에서 특성을 찾게 되므로(이미지 크기가 줄기 때문에 더 넓은 영역 파악)더 많은 특성을 찾도록 하기 위해
  • Fully connected layer를 이용해 추론

Convolution(합성곱) 연산

  • Convolution Layer는 이미지와 필터간의 Convolution(합성곱) 연산을 통해 이미지의 특징을 추출
  • 합성곱 연산은 input data와 weight간의 가중합을 구할 때 한번에 구하지 않고 작은 크기의 Filter를 이동시키면서 가중합을 구한다
  • filter와 부분 이미지의 conv(합성곱) 결과가 나온다는 것은 그 부분 이미지에 filter가 표현하는 이미지 특성이 존재한다는 것
    • CNN의 filter는 데이터 학습에 의해 만듬

Filter

  • Hand Craft 방식의 Filter
    • 사람이 직접 연구를 통해 filter 개발했던 경우
    • 필요한 특성이 N개 있다면 그것들을 찾기 위해서 Filter N개를 만들어 특성을 추출하고 추출한 특성들을 머신러닝 모델의 입력으로 넣어 학습시켰다
    • 종류
      • Sobel filter
        • X-Direction Kernel : 이미지의 수직 윤곽선
        • Y-Direction Kernel : 이미지의 수평 윤곽선
  • Deep Learning(CNN)에서의 Filter
    • 입력층(Bottom)과 가까운 Convolution 레이어일 수록 input image의 작은 영역에서의 특징들을 찾는다
      • 작은 영역에서의 특징을 찾기 때문에 이미지의 엣지나 경계선 등 일반화가 쉬운 이미지의 기초적인 표현을 찾는다
      • 비교적 간단하게 판단한 수 있는 특징들
    • 출력층(Top)과 가까운 Convolution 레이어일 수록 input image의 넒은(큰) 영역에서의 특징들을 찾는다
      • 넓은 영역에서의 특징을 찾기 때문에 일반화가 곤란한 구체적인 이미지의 표현을 찾는다
      • 작은 범위의 특징들이 합쳐져 큰 범위의 특징이 된다 생각하면 된다

CNN in keras(parameter)

  • hyperparameter
    • filters
      • Layer를 구성하는 filter(kernel)의 개수
      • Feature map output의 깊이
        • Feature map
          • Filter를 거쳐 나온 결과물, 특성 개수
          • Feature map의 개수는 Filter당 한개가 생성
          • Feature map의 크기(shape)는 Filter의 크기(shape), Stride, Padding 설정에 따라 달라진다
    • kernle_size
      • 개별 Filter의 크기(height, width)
      • 보통 홀수 크기로 잡는다(3, 5...)
        • 보통 3x3 필터 사용
    • padding
      • input tensor의 외곽에 특정 값(보통 0)을 둘러싼다
    • stride
      • 연산시 Filter의 이동 크기
  • Input shape
    • (데이터 개수, height, width, channel)
      • Height : 세로 길이
      • Width : 가로 길이
      • Channel : 하나의 Data를 구성하는 행렬의 개수
        • Data의 경우 행렬 여러 개가 겹쳐져 있는 형태일 수도 있다
        • 흑백(Gray scale) 이미지는 하나의 행렬로 구성
        • 컬러의 경우 RGB의 각 이미지로 구성되어 3개의 행렬로 구성
  • input과 filter 예
    • input(6x6x3), filter(3x3x3) 1개인 경우
      • 4x4
    • filter 3개인 경우
      • 4x4x3

Padding

  • 이미지 가장자리의 픽셀은 convolution 계산에 상대적으로 적게 반영
    • CNN 자체가 가장자리 속성을 적게 반영
  • 이미지 가장자리를 0으로 둘러싸서 가장자리 픽셀에 대한 반영 횟수를 늘림
  • => 이미지 외곽이 filter를 거치는 횟수가 적은데 더 많은 횟수를 거치기 위해 0으로 이미지를 늘린다

Strides

  • Filter(Kernel)가 한번 Convolution 연산을 수행한 후 옆 혹은 아래로 얼마나 이동할 것인가를 설정
  • (가로이동크기, 세로이동크기) 를 지정하는데 둘이 같을 경우 하나만 지정
    • ex)
    • stride=2: 한 번에 두 칸씩 이동 (feature map의 너비와 높이가 2배수로 다운샘플링 되었음을 의미)
    • convolution layer에서는 일반적으로 1을 지정

Max Pooling Layer

  • 해당 영역의 input 중 가장 큰 값을 출력
  • 일반적으로 2x2 크기에 stride는 2를 사용 (겹치지 않게 한다)
  • 강제적인 downsampling(이미지의 크기 줄임) 효과
    • Input의 size를 줄여 계산속도를 높임
    • 특징의 공간적 계층구조를 학습 => 부분적 특징을 묶어 전체적인 특징의 정보를 표현

0개의 댓글