본문 바로가기

Etc../인공지능 연구동향

[인공지능 연구동향] Convolutional_Neural_Netwrok_기본

CNN이 필요한 이유

neural network

  • Neural Network 구조는 input data의 형태에 대해 크게 초점을 맞추지 않음

  • 임의의 Vectorized된 input이 들어왔을때 결과를 확인하는 정도 였음.

  • 초점을 image에 맞추면 CNN이 필요함.


CNN

  • 사람은 물론 다양한 정보를 활용하여 행동을 결정, 주로 시각적인 정보를 폭넓게 활용
  • 사람의 얼굴 인식, 차선과 앞뒤차량 인식, 수술 및 진단 등에 사용

이미지를 Neural Network 구조에 Input으로 바로 집어 넣으려면?

문제점

  • 이미지는 픽셀로 이루어진 2d grid 형태
  • 1024 x 768 사이즈의 이미지는 가로로 1024개, 각 가로마다 세로로 768개의 픽셀로 이루어져 있음
  • 한 픽셀에는 RGB에 대한 정보도 담겨 있음 (3차원 배열)
  • 이미지를 이루는 픽셀도 숫자로 표현되기 때문에 input으로 바로 사용할 수 있긴 함.
  • 하지만 바로 Vectorize 시켜 input을 넣게 된다면 문제가 발생함.
  • 픽셀값의 위치와 구성이 달라지기 때문.
  • 이외에도 object의 조명 , 원근감, 장애물, 배경의 색상 등에도 영향을 받음

이미지가 가지고 있는 특징을 반영하려면?

  • object는 주변 픽셀들의 조합으로 이루어짐.

  • 픽셀마다 가까운 픽셀들이 특정 object를 이루는데 연관성이 있음.

  • 예를 들어, 눈을 검출하기 위해선 특정위치에서 일정한 범위 안에 있는 픽셀들의 집합으로 파악하게 됨.

  • 가까이 있는 픽셀은 일반적으로 더 강한 연관이 있고 이를 locality라고 함.

  • translztion invariance : 이미지에서 의미 있는 패턴은 어디에서나 나타날 수 있고 여러번 나타날 수도 있음

  • weight sharing : 같은 네트워크 파라미터를 사용해 다양한 위치에서 등장하는 비슷한 local패턴을 찾아낼 수 있어야 함.

  • topological structure : 모든 object에 대한 독립적인 학습을 진행하는 것이 아니라 서로 다른 object들의 공통적인 low-level feature를 학습하고 조합할 수 있다면 좀 더 효율적으로 다양한 object를 파악 할 수 있을 것.



building block

fully-connected unit

  • 전체 이미지에 있는 모든 픽셀 값을 더해 wx + b 연산을 한 후 합산하여 output인 y를 생성
  • 이러한 연산은 이미지가 가지는 특징을 반영하는 데 한계가 있음.

locally- connected unit

  • 이미지가 가지는 특징을 최대한 잘 반영하기 위해서는 local한 부분들에 대해 연산을 수행해야 함.
  • 이미지에서 3x3, 9x9 등 local한 영역에 대해서만 연산을 수행
  • 그 결과 input의 topology를 유지하여 output도 2d grid 형태로 나오게 됨

Convolutional unit

  • 모든 local한 연산에 동일한 parameter를 사용한다면 Convolutional unit을 얻을 수 있음
  • locally-connected unit과의 차이점은 wx+b연산에 parameter가 사용된 것 뿐.
  • 이는 weight sharing과도 연관됨
  • Receptive field : output neuron을 생성하는데 사용되었던 input 영역 ( ex. 3x3 , 9x9 ...)
  • feature map : Convolutional units의 집합, 2D grid 형태
  • kernel ( 혹은 *filter *) : Receptive filed에 적용되는 weight
  • convolution 연산은 input의 local한 영역과 kernel간 각 위치에서의 곱셈 후 전체를 더하여 계산.
  • 모든 영역에 대해 kernel을 sliding하여 convolution 연산을 진행하면 feature map을 얻을 수 있음

Kernel

  • 일반적으로 하나의 Kernel만 사용하지는 않음
  • kernel은 네트워크가 찾고 싶어 하는 특징에 대한 정보가 담겨져 있는 셈이라 많은 kernel을 사용하여 다양한 특징을 추출하고자 함.
  • 여러개의 kernel을 사용하게 되면 kernel 수만큼 feature maps가 만들어 지고 사용한 kernel 수만 큼 일종의 channel을 가지게 됨.
  • 일반적으로 이미지는 RGB 3개의 channel을 가지므로 3x3 사이즈의 kernel을 사용하기 보다는 channel을 고려하여 3x3x3사이즈인 filter을 사용해 27개의 픽셀에 대해 convolution을 진행



Convolution 연산의 형태

가장 기본적인 COnvolution 연산

  • output의 사이즈는 수식으로 표현하자면 input.size - kernel.size + 1
  • 9x9의 픽셀을 가지는 이미지에 3x3 kernel을 적용하여 convolution을 진행하면 7x7사이즈의 feature map이 생성됨.
  • 즉, output 사이즈는 input사이즈보다 작아짐.

full convolution

  • 연산이 진행되지 않던 input의 가장자리에 임의의 값을 추가하여 input의 모든 픽셀이 연산에 사용되도록 함
  • padding : 임의의 값을 채우는 것을 의미함. 딥러닝에서는 주로 0으로 채우는 zero padding을 사용
  • zero padding은 연산이 간단하고 input의 크기를 키울 수 있음.
  • output의 사이즈는 input.size + kernel.size -1
  • 즉, input사이즈보다 더 큰 output사이즈가 만들어 짐
  • padding 사이즈를 적절하게 설정하면 input과 output의 사이즈를 동일하게 만들 수 있음.

Strided convolution

  • 만약 Stride = 2라면, 연산을 한번 수행하고 두칸을 건너뛰어 연산을 수행 함.
  • 이러한 방식은 output resolution을 줄이고자 할 때 사용됨

dilated convolution

  • 일반적인 kernel이 3x3 사이즈라고 가정했을 때, 각 요소가 한칸 이상 띄워져 있어 5x5사이즈에 균일하게 분포되어 있는 kernel형태를 사용하는 독특한 형태.
  • 나머지 연산 방식은 sliding하는 형태로 위의 방식과 동일함
  • kernel의 요소의 갯수와 값은 같지만 좀 더 넓은 receptive field를 커버할 수 있는 장점이 있음
  • 수많은 구조에서 연산 효율성을 위해 사용되고 있음

Depthwise convolution

  • 이미지와 같이 R,G,B 3개의 채널을 가지고 있을때 일반적인 convolution은 3x3x3의 filter를 가지고 연산
  • Depthwise convolution은 Kernel을 가지고 각 채널에 대해 따로 연산을 수행
  • 각 채널마다 feature map을 생성
  • 적은 연산량으로 feature map들을 생성할 수 있기 때문에 efficient한 네트워크를 만들기 위해 종종 사용 됨

Pooling

  • 해당 영역에 대해서 mean값이나 max 값을 이용해서 resolution을 줄이고자 사용함.
  • 연산을 수행하는 위치의 픽셀값이 0,1,2,3이라면 mean= 2, max = 4 인데 max pooling을 사용할 경우 feature map에는 4가 들어감.



Convolution Neural Network

  • 지금까지 봐왔던 building block들을 계속해서 쌓아나가며 만들게 됨.
  • 보통 줄여서 CNNs라고 부르거나 convnets라고 부름.
  • 100개, 때로는 수백개가 넘는 깊은 layers를 가지며 Convolutions나 Pooling을 통해 계층을 표현해 나감




참고 : K-MOOC 인공지능 연구동향 - 중앙대학교 김영빈 교수님