이번 포스트에는 이미지를 다루기 위해 CNN을 정리해보겠다.
(이미지만 가능한 것으로 해석될 수 있는데 CNN은 text, sound, 일반 데이터들을 다 다룰 수 있다.)
강아지와 고양이 이미지가 있을 때 사람은 쉽게 구분할 수 있다.
하지만 컴퓨터가 보는 관점은 0과 1로 되어있는 숫자 들일뿐이다.
그러면 CNN의 원리를 이해하기 쉽게 설명해 보겠다.
위와 같이 강아지 이미지가 있다고 치면 조그만 필터로 사진 전체를 돌면서 특징을 찾는다.
이렇게 강아지 눈을 찾고, 코를 찾고, 발을 찾고 이런 특징들을 찾으면
'이 사진은 강아지다.'라고 판단할 수 있게 된다.
그러면 각 필터와 사진의 부분이 같은지 확인하는 convolution layer연산 방식을 보자.
필터는 우선 원하는 부분을 추출하기 위한 임의의 값으로 초기화가 되고 앞으로 학습이 된다.
이번 예시에서는 필터를 3*3 행렬의 값으로 아래와 같이 초기화하겠다.
<필터>
1 | -1 | -1 |
-1 | 1 | -1 |
-1 | -1 | 1 |
<사진>
1 | -1 | -1 |
-1 | 1 | -1 |
-1 | -1 | 1 |
이렇게 된 상태에서 element-wise 연산으로 진행한다.
element wise는 행렬곱이 아닌 [0,1]*[0,1] +[0,2]*[0,2] + [0,3]*[0,3] 이런 식으로 연산하는 것이다.
그렇게 다 더한 후 필터의 size(3*3 = 9)로 나눈다.
이 과정이 끝난 후 1*1 행렬이 남을 것이다.
나중에 이렇게 사이즈가 줄어드는 것을 계산해서 모델을 설계해야 한다.
사이즈와 특징을 추출하기 위해 padding, stride, dilation을 사용하는데
이것은 다음 포스트에 정리하겠다.
또 이 결과물의 사이즈를 줄이기 위해 pooling이라는 방법을 사용한다.
(2,2) 사이즈, max pooling의 예를 들겠다.
0.5 | 0.3 |
0.1 | 1 |
여기 max pooling을 사용하면 (1,1) 사이즈의 1이 된다.
가장 큰 값만 남기는 것이다.
Convolution layer를 그림을 통해 정리해보겠다.
다음과 같이 이미지와 필터가 있다.
위에서의 3은 depth고
이미지일 때 3은 보통 RGBchannel이다.
이미지의 채널과 필터의 depth는 항상 같다.
필터가 이미지를 순환하면서 연산을 마치고 나온 결과물을 activation map이라고 한다.
위에서 말했듯이 사이즈가 줄어들게 된다.
보통 여러 특징을 추출하기 위해 여러 필터를 쓴다.
6개의 필터를 쓴다고 가정해보면 뒤의 activation map(28,28,1)이 6개가 나와서
(28,28,6) 사이즈의 activation maps가 나올 것이다.
보통 이렇게 나온 결과에 ReLU를 거치고,
필터 개수를 늘려서 또 Convolutional layer와 ReLU를 거치고
이를 여러 번 반복하게 된다.
그러면 결과물의 각 activation map에 사진의 특징이 추출될 것이다.
보통 이를 pooling 하고 Fully Connected layer를 거쳐서 이 특징이 어떤 종류인지 판별하게 된다.
여기까지 CNN의 원리를 정리해봤다.
다음 포스트에서는 위에서 말한 padding, dilation, stride를 정리해보겠다.
'Studying > Machine Learning' 카테고리의 다른 글
[머신러닝] CNN 모델 구현 with Pytorch (CIFAR-10 dataset) (2) | 2022.07.22 |
---|---|
[머신러닝] Convolution Layer - Padding, Stride, Dilation (4) | 2022.07.21 |
[머신러닝] Activation function(활성화 함수) 정리 (2) | 2022.07.19 |
[머신러닝] Pytorch Linear Regression & MLP - Mnist 활용 (8) | 2022.07.18 |
[머신러닝] K-Means Clustering - 물고기 데이터셋 (0) | 2022.07.18 |
댓글