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을 통해 계층을 표현해 나감
'Etc.. > 인공지능 연구동향' 카테고리의 다른 글
[인공지능 연구동향] Object Detection, Semantic Segmentation 사례 분석 (0) | 2021.08.28 |
---|---|
[인공지능 연구동향] Convolutional_Neural_Netwrok_구조 사례 분석 (0) | 2021.08.28 |
[인공지능 연구동향] Neural_Networks_학습_방법과_이슈 (0) | 2021.08.28 |
[인공지능 연구동향] Neural_Netwrok_기본 (0) | 2021.08.28 |
[인공지능 연구동향] Deep Learning OverView (0) | 2021.08.28 |