일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- sr
- a*
- 딥러닝
- MDSR
- 신경망
- residualnetwork
- AStar
- DFS
- superresolution
- residuallearning
- 동적계획법
- 준지도학습
- EDSR
- NeuralNetwork
- SRCNN
- PYTHON
- 합성곱
- 비지도학습
- 지도학습
- 8puzzle
- BFS
- leetcode
- deeplearning
- pixelshuffle
- Increasing Triplet Subsequence
- convolution
- CNN
- 증가하는부분수열
- RESNET
- Today
- Total
이것저것 코딩하는 블로그
[Computer Vision] CNN - Convolution Neural Network 본문
0. Fully-connected Layer (완전 연결 신경망)
앞서 신경망의 기초 개념을 살펴보았으니, 이번에는 다양한 신경망의 종류를 살펴보겠다. 그 중 가장 기본적인 것은 완전 연결 신경망 (fully-connected layer) 인데, 이는 이전에 살펴본 신경망들과 같이 k-1번째 계층의 모든 뉴런들과 k번째 계층의 모든 뉴런들이 연결되어 있는 신경망을 말한다.
이러한 계층 (이를 Affine 계층이라고 한다)을 쌓고, 하나의 fully-connected layer 뒤에 활성화 계층 (활성화 함수)를 연결한 것이 지금까지 살펴본 신경망의 기초 단위였다. 그러나 이는 어마어마한 계산량을 요구한다. 그렇다면 CNN은 이런 계층과 어떤 차이가 있을까?
1. CNN의 기본 구조 – Convolution
CNN을 살펴보기에 앞서 알아야 할 것이 있는데, 바로 Convolution(합성곱) 연산이다. 합성곱 연산의 정의는 ‘합성곱 연산은 두 함수 f, g 가운데 하나의 함수를 반전(reverse), 전이(shift)시킨 다음, 다른 하나의 함수와 곱한 결과를 적분하는 것을 의미한다.’ 라고 적혀 있는데, 우리에게 적용될 합성곱 연산은 행렬 차원의 합성곱 연산이다. 이는 이미지 처리에서 말하는 필터 연산에 해당하는데, 구체적인 예를 보면서 살펴보자.
합성곱 신경망에는 입력 데이터와 필터가 있고, 그로 인해 결과값 (feature map) 이 나온다. 왜 feature map인지는 뒤에 가서 설명하겠다. 그렇다면 어떤 계산 과정을 통해 나오는 것일까? 필터와 동일한 사이즈의 입력 데이터의 부분 행렬과 필터를 연산하여, 그 값이 결과의 하나의 값이 된다. 위의 예제로
자세히 살펴보자.
2. CNN의 기본 구조 – Pooling
Pooling은 행렬에서 세로.가로 방향의 공간을 줄이는 연산이다. Pooling에는 스트라이드라는 개념이 있는데, 스트라이드가 n이면 대상 행렬의 n*n 부분행렬에서 pooling 연산을 수행하여 하나의 값만을 도출한다. 어떤 과정으로 이루어지는지 pooling 중의 하나인 max pooling의 예제를 통해 살펴보자.
4*4 행렬에 스트라이드가 2인 max pooling 연산을 수행한 결과이다. 스트라이드의 크기가 2이므로 2*2 행렬로 대상 행렬을 나눈 후, 2*2 행렬에서의 최댓값을 구한다. 만약 average pooling이라면 2*2 행렬의 평균값을 구하는 등 다양한 연산으로 바뀔 수 있다.
3. CNN의 작동 과정
그렇다면 위의 두 과정을 어떻게 이미지 처리에 이용할까? CNN은 convolution – activation (ReLU) – pooling이 한 블록이 되어 이 블록을 쌓아 만들어진다.
1) Convolution
이미지는 R, G, B 세 개의 구성 요소로 이루어져 있다. 이 때 각각의 성분을 한 channel이라고 부른다. 이미지의 크기가 n*m이라면, 초기 데이터는 n*m*3의 형태로 입력된다 (화소별 R, G, B 채널값이 각각의 층을 이룬다). 그 후 convolution 계층에서 R, G, B 채널에 각각 convolution 연산을 적용하여 feature map을 뽑는다. Filter의 가중치 값은 앞의 글에서 언급한 신경망의 오차역전파법을 통해 이미지의 feature을 가장 잘 뽑을 수 있는 값으로 갱신된다. Channel의 개수는 3개에 국한되지 않고, feature의 개수에 따라 유동적으로 변할 수 있다.
2) Activation
활성화 함수를 통해 feature map에서 의미 있는 값들만 출력하는 과정을 거친다.
3) Pooling
Pooling 계층을 통해 feature map에 나타난 특징을 강화할 수 있다.
4. CNN Overview
[그림 5]에서와 같이, CNN은 convolution – activation – pooling의 과정을 여러 번 (이는 사용자가 정의한다) 거친 뒤, 완전 연결 계층을 거친다. Classification의 경우 softmax 함수를 통해 각각의 값을 확률로 바꾸는 과정을 거쳐 가장 높은 확률을 가진 label을 답으로 정의한다. 그렇다면 super-resolution (SR) 에서는 어떻게 CNN이 사용될까? 다음 포스트에서 알아보도록 하자.
'Computer Vision' 카테고리의 다른 글
[Computer Vision] EDSR review (0) | 2020.12.09 |
---|---|
[Computer Vision] ResNet Review (0) | 2020.12.09 |
[Computer Vision] SRCNN - Super-Resolution CNN (0) | 2020.12.09 |