본문 바로가기
AI 논문 리뷰(AI Paper Review)/컴퓨터비전(Computer Vision)

[논문정리] Convolution Neural Network (CNN) 개념 정리

by stevenkim_ 2023. 9. 1.

CNN input layer, convolutional layer, pooling layer, fully connected layer, output layer 이루어져 있습니다.

 

이미지는 높이, 너비, 채널의 값을 갖는 3차원 데이터로, 흑백의 채널은 1, 컬러 이미지의 채널은 RGB 값에 의해 3 가집니다.

 

Convolutional layer에서는 필터로 이미지의 모든 영역을 stride만큼 진행하여 순회하면서 특성을 추출합니다. Input 이미지와 필터를 포개 놓고 대응되는 숫자끼리 곱한 더하여 feature map 만듭니다.

 

Pooling Layer에서는 앞서 만든 feature map 차원을 낮추어 연산량을 감소시키고 특성 벡터를 추출하는 역할을 합니다. Average Pooling 커널의 값을 평균화를 시켜버려서 중요한 가중치를 갖는 값의 특성을 희미하게 만들 있어, CNN에서는 Max Pooling 주로 사용합니다.

 

Feature map fully connected layer 전달되는 과정에서 1차원 벡터로 펼쳐지게 됩니다. 이후 활성화 함수로는 소프트맥스 함수가 사용되는데, 모든 입력 신호의 지수함수의 분에 현재 입력 신호의 지수함수로 이루어져 있어서, 입력 받은 값을 0에서 1 사이의 값으로 출력할 있습니다.

softmax 함수 공식

 


 

내용을 바탕으로, 다음은 Fashion_mnist 데이터셋을 사용하여 CNN DNN 구현하여 비교해보았습니다.

먼저 필요한 라이브러리들을 호출하고, GPU 대신에 우선 CPU 사용하여 진행했습니다.

 

다운받은 fasion_mnist 데이터를 메모리로 불러오기 위해서 데이터로더에 전달하고, 배치 사이즈를 100으로 설정한 상태로 무작위로 20개 이미지 표본을 추출했습니다.

 


 

CNN CNN 아닌 다른 신경망과의 비교를 위해서 DNN 생성하고 학습시켰습니다.

Learning rate 0.001, 손실함수는 Cross Entropy, gradient 방식은 Adam으로 설정했습니다.

이렇게 DNN 모델을 생성하고 파라미터를 정의했습니다.

 

여기선 DNN 데이터를 적용해서 모델을 학습시켰습니다. 결과를 보면 최종적으로 정확도 86% 보였습니다.

 


이제 CNN 생성했습니다.

Layer1에서 Conv2d Convoltional Layer 생성할 , 현재 흑백사진이기 때문에 인풋 채널 파라미터를 1 설정했고, 아웃풋 채널은 32, 필터 사이즈는 3x3, 패딩 크기는 1 설정했습니다.

풀링층에서는 Max_pooling으로, 필터 사이즈를 2x2, stride 2칸씩으로 설정했습니다.

Layer1 받는 layer2에는 당연히 인풋 채널은 32 두었습니다.

이렇게 이미지 크기를 축소 시켰으면, fully connected layer에서 nn.Linear() 함수를 이용해서 layer2까지 거쳐 나온 아웃풋을 1차원 벡터로 줄입니다.

이제 이러한 과정을 거쳐

앞에 DNN 똑같이 파라미터를 정의해서 모델을 학습시키면, 최종 정확도가 90% 보이는 것을볼 있습니다.

DNN 비교해서 정확도가 약간 높고, 이미지 데이터가 많아질수록 DNN과의 비교에서 훨씬 차이의 정확도를 보입니다. CNN 이미지 데이터를 다루는 신경망으로 적합한 것을 있습니다.