- toc {:toc}
Fully Connected Neural Net
2차원으로 된 이미지를 1차원으로 바꿔 학습
1차원으로 바꾸는 과정에서 공간정보가 손실된다.
→ 이미지의 형상은 고려하지 않고 단순 raw data를 처리하므로 많은양의 학습데이터가 필요하다.
→ 이미지가 회전 또는 움직이면 새로운 입력으로 데이터를 처리해줘야 한다.
→ 이미지의 크기가 커질수록 너무 많은 Weight가 필요하다.
{: width=“600”}{: .center}
CNN(Convolution Neural Network)
- CNN은 이미지를 인식하기 위해 패턴을 찾는데 특히 유용하다.
- 데이터를 직접 학습하고 패턴을 사용해 이미지를 분류한다. (특징을 수동으로 추출할 필요 없다.)
- 이미지의 공간정보를 유지한 채 학습한다.
합성곱 신경망의 구성요소
📌 합성곱 신경망을 구성하는 기본 개념과 동작 원리를 배우고 합성곱, 풀링 계산 방법을 익혀보자.
Convolution Layer
{: width=“600”}{: .center}
- 합성곱 - 입력데이터에 도장(가중치)을 찍어 유용한 특성만 드러나게 하는 것
- 일부에 도장을 찍어 가중치를 곱해 각각
계산 후 모두 합해 Output을 산출한다. - 가중치와 절편은 동일한 것을 사용한다.
- 특성 맵(feature map) - 합성곱 계산을 통해 얻은 출력
- 특성 맵 하나 하나가 추출된 feature를 나타낸다.
- 이미지는 보통 가로X세로X채널수 로 3차원으로 구성된다. 가로, 세로는 픽셀의 크기를 의미하고 채널수는 Red, Green, Blue 3원색의 색깔을 나타낸다.
- Fully Connected Layer와의 차이 ⇒ FC Layer와 같은 경우 3개의 채널을 계산을 위해서 모두 1차원으로 늘어뜨려야 하지만 Conv Layer의 경우 채널의 형태를 유지한다.
{: width=“600”}{: .center}
- Conv Layer를 통해서 유용한 특성(Feature)들을 뽑아낼 수 있다.
- 많은 Conv를 거칠수록 더 자세하고 함축된 특징들을 뽑아낸다.
필터와 커널
{: width=“600”}{: .center}
- CNN에서 필터와 커널은 거의 혼용되어 사용된다. 거의 같은 말이라 봐도 된다.
- 엄밀히 구분하면 필터는 여러개의 커널로 구성되어 있고 개별 커널은 필터내에서 서로 다른 값을 가질 수 있다.
- 위 그림에서 다른 색의 판 하나하나는 커널을 의미하고 커널로 구성된 전체를 1개의 필터라 한다. 이러한 필터들이 여러 개 구성해 Conv계산을 진행한다.
커널
- Kernel Size : 가로x세로 면적을 의미한다.
- 커널의 크기가 클수록 입력이미지에서 더 많은 정보를 가져올 수 있다.
패딩과 스트라이드
- 5x5 input을 3x3 Conv를 통해 나온 Feature map은 3x3이 된다. Conv Layer를 거칠수록 Feature map은 점점 더 작아지게 된다.
입력과 동일한 출력을 만들기 위해서는?
⇒ 더 큰 입력에 합성곱을 하는 것과 같이 계산해야 한다.
{: width=“300”}{: .center}
- 패딩 : 입력 배열 주위를 가상의 원소로 채우는 것
- 세임 패딩 : 입력과 특성 맵의 크기를 동일하게 만들기 위해 입력 주위에 0으로 패딩하는 것
- 밸리드 패딩 : 패딩 없이 순수한 입력 배열에서만 합성곱을 해 특성 맵을 만드는 경우
패딩을 사용하지 않는다면?
⇒ 각 모서리의 값들은 1번씩만 사용된다. ⇒ 중심부의 값들에 치중된 특성 맵이 나온다.
⇒ 이를 패딩하면 참여하는 비율의 차이가 줄어든다. (2픽셀을 패딩 시 참여비율이 같아진다.)
스트라이드
- 스트라이드 : 커널이 이동하는 크기. default=1
- 스트라이드가 늘어나면 Feature map의 크기를 대략 절반으로 줄인다.
- Convolution 연산 속도를 향상시킨다.
풀링
- 풀링 : 합성곱 층에서 만든 특성 맵의 가로세로 크기를 줄이는 역할 수행
- 합성곱과 같이 입력 위를 지나가면서 도장을 찍지만 풀링은 가중치가 없다.
- 최대 풀링(Max Pooling) : 도장을 찍은 영역에서 가장 큰 값을 선택
- 평균 풀링(Average Pooling) : 도장을 찍은 영역에서 평균값을 계산
- 풀링은 겹치지 않고 이동한다. [풀링의 크기 = 스트라이드]
- 사용 이유 : 합성곱에서 스트라이드를 크게 하여 특성 맵을 줄이는 것보다 풀링층에서 크기를 줄이는 것이 경험적으로 더 나은 성능을 내기 때문
{: width=“600”}{: .center}
출처: https://towardsai.net/p/l/introduction-to-pooling-layers-in-cnn
- 차이를 대비시킨 feature가 구별하는데 유리하기 때문에 보통 MaxPooling을 사용
Convolution layer의 Output 크기 계산
: Size(width) of output image : Size(width) of input image : Size(width) of kernels used in the Conv layer : Number of kernels : Stride of the convolution operation : Padding size
출력 이미지의 채널 수는 커널의 갯수(
MaxPolling의 Output 크기 계산
: Size(width) of output image : Size(width) of input image : Stride of the convolution operation : Pooling size
출력 이미지의 채널 수는 입력 이미지의 채널 수와 동일하다.
합성곱 신경망의 전체 구조
출처 : http://taewan.kim/post/cnn/
CNN의 전체 구조는 Feature를 추출하는 Feature extraction, 이후 FC layer를 통한 Classification으로 구성되어 있다.