일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- #pytorch
- #gpu training
- #Linux
- #비선형
- #annotation
- #Jetson nano
- #activation function
- #object detection
- #Anaconda
- pytorch
- #선형
- #landmark
- Linux
- #torchvision
- Today
- Total
Wooks_learning
(2) Convolutional Neural Network(CNN)이란 무엇일까? 본문
딥러닝을 배우게 된다면 CNN이라는 방법이 나오게 된다. 그렇다면 CNN이란 무엇이고 이를 왜 사용하는 것일까?
일반적인 Deep Neural Network(DNN)같은 경우 1차원 형태의 flatten된 데이터를 input으로 사용한다.
다음과 같은 28x28 이미지를 학습 데이터로 사용할 때 DNN의 경우 다음과 같이 input으로 사용된다.
iris datset과 같은 정형 데이터는 상관이 없지만 위와 같은 이미지를 input data로 사용한다면 데이터의 공간적, 지역적 정보가 소실된다는 가장 큰 문제점이 발생하게 된다.(인접 픽셀간의 연관성이 사라짐.)
이를 해결하기 위해 CNN의 개념이 등장했는데, 어떠한 개념인지 아주 간단히 살펴보자.
우리가 숫자 0~9를 구별하는 모델을 만들고 싶다고 할 때 CNN을 사용하면 위와 같이 인접 데이터를 같이 사용하므로 숫자를 판단하는 어떠한 특징들을 살릴 수 있을 것이다. 그렇다면 여기서 하나 궁금한 것이 있다.
CNN으로 학습하는 것은 무엇일까?라는 생각을 할 수 있다. 밑에서 설명하겠지만 결론부터 말하면 filter의 값들을 학습시켜 feature들을 잘 뽑아내어 분류를 하려는 것이라고 할 수 있다.
1. CNN 이해를 위한 용어들
CNN을 이해하기 위해 몇 가지 용어의 정리들이 필요하다.
1) Filter 혹은 Kernel 혹은 Mask 등등 여러 단어들로 불리우는데 일반적으로 filter, kernel로 많이 불리운다. 해당 글에선 filter로만 사용하겠다.
2) stride : filter가 이미지 위에서 이동하는 간격
3) padding : 이미지 외곽에 지정된 픽셀만큼 어떠한 값으로 채워넣는 것.
1-1) Convolution
위의 그림은 3x3 filter가 이미지에 적용되어 convolved feature로 나오는 과정을 보여주는 그림이다.
그림을 단계별로 나누어 본다면 다음과 같다.
1-2) Filter란?
CNN을 설명하면서 계속 filter라는 얘기가 나오는데 filter가 정확하게 무엇이고 filter를 이미지에 입히면 어떻게 될까?
대표적인 filter로 sobel filter가 있다.
위의 이미지에 엣지들만 따고싶을 때 sobel filter를 적용하면 다음과 같이 나타나게 된다.
기존에는 사용자가 filter를 하나하나 적용하여 처리한 후, 분류를 했고 정확도도 굉장히 낮았다. 하지만 CNN의 등장 이후 높은 정확도, 효율성을 가지게 되었다. 이처럼 CNN의 특징은 filter의 학습을 통해 자동으로 적합한 filter를 생성하여 주는 것이 가장 특징이고 CNN이 가진 장점이다.
1-3) Padding
위 이미지는 원본 이미지에 padding을 적용한 모습을 나타낸다. 그렇다면 왜 저런 방법을 사용하여 학습하는 것일까?
CNN은 크게 두 가지 특징이 있다.
1) convolution연산이 끝날 때마다 원본 이미지의 크기가 줄어든다.
-> 하지만 우리는 연산을 할 때마다 이미지 크기를 줄이고 싶지 않다.
2) CNN연산을 할 때 모서리 부분의 픽셀은 딱 한번, 이미지 가운데 픽셀은 여러번 연산이 된다.
라는 특징이 있다.
-> 모서리 부분의 정보는 약해지고, 가운데 부분의 정보가 강해진다.
위의 문제점을 보완하기 위해 이미지 주변을 어떠한 숫자로 채운 padding이라는 방법을 생각해내게 되었다.
padding은 꼭 숫자를 0으로 하지 않아도 된다. 하지만 0이라는 값은 이미지 특징을 추출할 때 따로 영향을 주지 않아 대부분 0으로 채운 zero padding을 많이 사용한다.
1-4) Stride
stride란 filter를 이미지 위에서 얼마나 움직일지를 의미한다.
stride=1 이라면 한번 연산 후 옆으로 한 칸 이동.
stride=2 라면 한번 연산 후 옆으로 2칸 이동.
최종적으로 input이미지가 convolution layer를 한 번 거치면 다음 수식에 의해 output size가 결정된다.
$$({H+2*P-F_h\over\ S} +1, {W+2*P-F_w\over\ S} +1), H = image_h, W= image_w, P=padding, F_h=filter_h, F_w=filter_w, S=stride$$
만약 해당 수식의 결과가 실수라면 소수점 아래 부분은 버림.
2) Pooling
위에는 convolution layer에 대한 설명이었다면, 여기선 pooling layer에 대해서 설명하겠다.
그림으로 먼저 보자면,
pooling layer과 convolution layer의 차이는 필터 사용하는 것은 똑같지만, pooling layer에는 학습 파라미터가 없다는 점이다.
2-1) Max pooling
max pooling은 이미지를 원하는 크기만큼(위에선 2,2) 나누어 해당 크기 내의 픽셀에서 가장 큰 값을 뽑아 저장하는 형태이다.
장점 : 이미지에서 중요한 정보를 잡아놓는 데에 도움이 됨.
2-2) Average pooling
Average pooling은 이미지를 원하는 크기만큼 나누어 해당 크기 내의 픽셀끼리의 평균을 저장하는 형태이다.
장점: 중요한 정보, 덜 중요한 정보를 균형있게 잡아놓는 데에 도움이 됨.
pooling layer를 거친 feature map의 크기는
$$({H+2*P-F_h\over\ S} +1, {W+2*P-F_w\over\ S} +1), H = image_h, , W= image_w, P=padding, F_h=filter_h, F_w=filter_w, S=stride$$
convolution layer의 수식과 동일하고 마찬가지로 실수가 나온다면 소수점 아래 부분은 버림.
이처럼 pooling layer에서는 학습 파라미터가 없고, 효율적인 연산을 위한 layer라고 생각해 볼 수 있다.
3) CNN Architecture
위의 그림은 다음 단계를 따른다.
1) input 이미지가 conv layer를 지난다.
2) conv layer를 지난 feaure map이 pooling layer를 지난다.
3) pooling layer를 지난 feature map을 flatten(1자로 쭉 핌)하고 분류한다.
'딥러닝 > 딥러닝 이론' 카테고리의 다른 글
Anomaly detection 개념 및 방법론 (2) | 2025.01.03 |
---|---|
딥러닝에서의 Heuristic 뜻은 무엇일까? (2) | 2022.04.29 |
(3) What is a Linear model? (0) | 2021.10.13 |
(1) 딥러닝이란 무엇일까? (0) | 2021.09.16 |