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 사이의 값으로 출력할 수 있습니다.
이 내용을 바탕으로, 다음은 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이 이미지 데이터를 다루는 신경망으로 적합한 것을 알 수 있습니다.
'AI 논문 리뷰(AI Paper Review) > 컴퓨터비전(Computer Vision)' 카테고리의 다른 글
[논문정리] DenseNet 개념 정리 (0) | 2023.09.01 |
---|---|
[논문정리] ResNet 개념 정리 (0) | 2023.09.01 |
[논문 정리] DeiT: Training data-efficient image transformers & distillation through attention (0) | 2023.09.01 |
[논문 정리] Swin Transformer: Hierarchical Vision Transformer using Shifted Windows (0) | 2023.09.01 |
[논문 정리] AN IMAGE IS WORTH 16X16 WORDS:TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE (0) | 2023.09.01 |