머신러닝과 딥러닝/딥러닝

CNN 기본 용어 및 개념 정리

Stat_in_KNU 2020. 12. 7. 17:17

작성동기

 

오늘은 CNN의 기본 용어와 개념을 정리해볼까합니다.

 

전에 인공지능과 관련된 인턴을 하면서, 이미지데이터를 많이 다루었음에도 불구하고 개념적으로 이해하지 못했었습니다. 

특히, S사 면접에서 질문이 들어왔을때 동문서답을 면치못했던 트라우마가 강하게 남네요.

물론 저는 통계학 전공이라 학교에서 인공지능 관련된것을 제대로 배운적이 없지만, 그래도 인턴과 공모전 등에서 CNN을 포함한 딥러닝 모델 개발의 경험이 있었기때문에 뼈아팠습니다.

 

아무튼 겸사겸사 CNN내용을 정리해볼까 합니다.

 


도입

 

기본적인 DNN모델은 "지역성"을 가져올수가 없습니다.

아래 MNIST데이터를 한번 예시로 들어보죠!

MNIST

MNIST는 대표적인 이미지 분류 문제이며, 0~9까지의 손글씨 이미지를 분류하는것이 목적입니다.

일반적인 DNN 모델에 이를 학습시키기 위해서는 28x28픽셀로 이루어진 데이터를 784크기의 벡터로 쭉 펴주어야합니다. 이렇게 되면 단점은 명확합니다, 이미지의 공간정보가 소실되어 학습이 비효율적이고 정확도에 한계점이 생깁니다.

이미지데이터의 원본을 유지하면서 학습할 수는 없을까 라는 의문점에서 출발한것이 CNN(Convolution Neural Network)입니다.

 

 

CNN을 도식화하여 요약한 그림

위 이미지를 보면 CNN의 대략적인 과정을 한눈에 이해할 수 있습니다.

(이미지 출처 : https://www.ibm.com/developerworks/library/cc-machine-learning-deep-learning-architectures/index.html)

 

여러개의 Convolution Layer를 거치고, 마지막에는 정답의 출력을 위해 FCNN(Fully connected Nueral Net : Deep Nueral Net이라 생각하면 됩니다.)을 거쳐 최종 Output을 내게됩니다.

(정답 Output은 결국 1차원 데이터가 되므로, Convolution으로 Feature를 추출하고 마지막에 1차원데이터로 변환을 위해 FCNN을 걸어줍니다.)

 


주요 용어

- Convolution(합성곱) & Filter(필터)

 

출처 : https://excelsior-cjh.tistory.com/79

합성곱에 대해 이해하기에 위 이미지가 가장 간략하고 좋았습니다.

Pixel은 2차원인데 필터를 통해 Feature를 추출하는 과정입니다. Filter의 각 성분들이 일반적인 딥러닝에서 가중치(w)

입니다.

합성곱 연산은 Filter를 입력데이터를 훑으면서 연산을 수행하면서 Feature를 추출해냅니다. 

 

- Channel(채널)

RGB채널 설명을 위한 이미지 (출처 : https://www.r-bloggers.com/2016/01/color-quantization-in-r/) 

이미지데이터를 다루어보신 분들은 아시겠지만, 컴퓨터에서 이미지는 일반적으로 R,G,B 세개의 채널로 이루어져있습니다. 이 세가지 색의 조합으로 우리가 아는 많은 색을 표현하는 것 입니다.

 

보통, 컬러이미지는 3개의 채널(R,G,B)를 가지고, 흑백이미지는 1개의 채널(GRAY, 흑 또는 백)를 가집니다.

 

- Stride(보폭)

 

출처 : https://indoml.com/2018/03/07/student-notes-convolutional-neural-networks-cnn-introduction/

 

출처 : https://indoml.com/2018/03/07/student-notes-convolutional-neural-networks-cnn-introduction/

Stride는 말그대로 보폭입니다. Filter가 데이터를 훑을때 보폭을 몇을 두고 훑어서 Feature를 낼것인가, 하는 파라미터입니다.

위 이미지를 보시면 쉽게 이해가 가능합니다.

Stride가 1일때는 모든 픽셀을 필터가 훑고, 2일때는 2칸씩 이동하면서 훑습니다. (훑는다는 표현이 맞는지 모르겠네요 ㅋㅋ)

stride = (3,4) 이런식으로 height와 width를 지정해 줄 수도 있습니다.

 

- Padding(패딩)

CNN에서는 Filter와 Stride의 작용으로 Feature Map 크기는 입력데이터보다 작아집니다.

Convolution Layer의 출력 데이터가 줄어드는 것을 방지하기 위한것이 패딩입니다. 특정값으로 지정된 픽셀만큼 채워넣는 것을 의미합니다. 보통은 0을 이용합니다.

 

Padding

- Pooing Layer

 

Pooling Layer는 Convolution Layer의 출력데이터(Activation Map 또는 Feature Map이라 합니다)의 크기를 줄이거나 특정 데이터를 강조하는 용도로 사용됩니다.

Max Pooling, Average Pooling, Min Pooling등을 이용합니다.

출처 : https://www.researchgate.net/figure/Illustration-of-Max-Pooling-and-Average-Pooling-Figure-2-above-shows-an-example-of-max_fig2_333593451

위 이미지를 보면 MaxPooling과 AveragePooling을 잘 이해할 수 있습니다.

일반적으로 CNN에서는 MaxPooling을 이용하지만

CAM과 같은 알고리즘을 이용할때 GAP(Global Average Pooling) 레이어를 이용하는 등 유연하게 바뀔 수 있습니다.

 


마무리

 

CNN기본 개념과 용어에 대해서 정리해보았습니다.

김태완님의 블로그를 많이 참고하였습니다. (taewan.kim/post/cnn/)

 

CNN, Convolutional Neural Network 요약

Convolutional Neural Network, CNN을 정리합니다.

taewan.kim

다음에는 CNN을 이용한 대표적인 모델과 심화 개념들을 정리해보도록 하겠습니다 ㅎㅎ.