IT 프로그래밍/논문 리뷰

[CNN]

기술1 2025. 3. 16. 00:40

논문이 어떻게 학습했는지 위주로 설명을 할 예정입니다. 

 

MNIST 데이터의 분류

CNN 구조 예시

  1. 입력 이미지: 28x28 크기의 이미지입니다.
  2. 첫 번째 Convolution 레이어:
    • Padding = 1, Kernel = 3x3, Stride = 1
    • ReLU 활성화 함수 사용
    • 출력 크기: 32 x 28 x 28
      • 패딩을 1로 주었기 때문에, 28x28 크기가 그대로 유지됩니다.
      • 3232개의 필터를 사용한 결과입니다.
  3. 첫 번째 MaxPooling 레이어:
    • Kernel = 2x2, Stride = 2
    • 출력 크기: 32 x 14 x 14
      • 풀링을 통해 이미지 크기가 절반으로 줄어듭니다. (28x28 -> 14x14)
  4. 두 번째 Convolution 레이어:
    • Padding = 1, Kernel = 3x3, Stride = 1
    • 출력 크기: 64 x 14 x 14
      • 64개의 필터를 사용하여 64개의 채널을 생성합니다.
  5. 두 번째 MaxPooling 레이어:
    • Kernel = 2x2, Stride = 2
    • 출력 크기: 64 x 7 x 7
      • 풀링을 통해 이미지 크기가 다시 절반으로 줄어듭니다. (14x14 -> 7x7)
  6. 출력:
    • 64 x 7 x 7 크기의 특징 맵이 나오며, 이 값들을 3136개의 1차원 벡터로 펼칩니다.
    • 이 벡터는 **MLP (Multi-Layer Perceptron)**를 통과하여 분류기가 됩니다.
    • 최종 출력은 분류 결과가 됩니다. (예: 10개의 클래스가 있을 경우, 10개의 확률 값으로 출력)

요약

  • 입력: 28x28 이미지
  • 첫 번째 Convolution: 32x28x28 (32개의 필터, 3x3 크기, stride 1, padding 1)
  • 첫 번째 MaxPooling: 32x14x14 (2x2 필터, stride 2)
  • 두 번째 Convolution: 64x14x14 (64개의 필터, 3x3 크기, stride 1, padding 1)
  • 두 번째 MaxPooling: 64x7x7 (2x2 필터, stride 2)
  • Flattening: 3136개의 1차원 벡터로 변환
  • MLP 통과 후: 분류기를 통해 최종 출력

헷갈릴만한 포인트 : 32x14x14에서 64x14x14 바뀌는 이유에서 CNN에서 각 레이어의 출력 채널 개수는 사용하는 필터의 개수에 의해 결정됩니다. 첫번재 Conv layer에서는 32개의 필터를 사용하여 32개의 채널을 가진 출력이 나왔습니다. 

 

즉 32개의 특징 맵이 생성이 된 것이죠. 두 번째 conv layer에서는 64개의 필터를 사용하는 이유는, 보다 복잡하고 추상적인 특징을 추출하기 위해서입니다. 첫 번째 레이어에서 32개 특징 기반, 두 번째 64개의 다른 필터를 사용해 새로운 특징을 추출합니다.

 

VGGnet

그 유명한 VGGnet, ComputerVision 전공자라면 무조건 알아야 하는 것입니다. 

 

CNN 구조 예시 (224x224 이미지)

  1. 입력 이미지:
    • 크기: 3 x 224 x 224 (RGB 이미지)
  2. 첫 번째 Convolution 레이어 (Conv3-64):
    • 필터 크기: 3x3
    • 필터 개수: 64개
    • 패딩: 1 (패딩을 1로 설정하여 출력 크기가 유지됨)
    • 출력 크기: 64 x 224 x 224
      • 64개의 필터로 각각 특징을 추출하여 64개의 채널을 생성합니다. 패딩을 1로 주었기 때문에, 출력 크기는 224x224로 유지됩니다.
  3. MaxPooling 레이어:
    • Kernel: 2x2
    • Stride: (2,2)
    • 출력 크기: 64 x 112 x 112
      • MaxPooling을 통해 각 채널마다 크기가 절반으로 줄어들어 112x112가 됩니다. 채널 수는 그대로 64개입니다.
  4. 두 번째 Convolution 레이어 (Conv3-128):
    • 필터 크기: 3x3
    • 필터 개수: 128개
    • 패딩: 1
    • 출력 크기: 128 x 112 x 112
      • 128개의 필터를 사용해 112x112 크기의 특징 맵을 생성합니다. 출력 채널 수는 128개로 증가합니다.
  5. MaxPooling 레이어:
    • Kernel: 2x2
    • Stride: (2,2)
    • 출력 크기: 128 x 56 x 56
      • MaxPooling을 통해 각 채널마다 크기가 절반으로 줄어들어 56x56가 됩니다.
  6. 세 번째 Convolution 레이어 (Conv3-256):
    • 필터 크기: 3x3
    • 필터 개수: 256개
    • 패딩: 1
    • 출력 크기: 256 x 56 x 56
      • 256개의 필터를 사용해 56x56 크기의 특징 맵을 생성합니다.
  7. MaxPooling 레이어:
    • Kernel: 2x2
    • Stride: (2,2)
    • 출력 크기: 256 x 28 x 28
      • MaxPooling을 통해 각 채널마다 크기가 절반으로 줄어들어 28x28가 됩니다.
  8. 네 번째 Convolution 레이어 (Conv3-512):
    • 필터 크기: 3x3
    • 필터 개수: 512개
    • 패딩: 1
    • 출력 크기: 512 x 28 x 28
      • 512개의 필터를 사용해 28x28 크기의 특징 맵을 생성합니다.
  9. MaxPooling 레이어:
    • Kernel: 2x2
    • Stride: (2,2)
    • 출력 크기: 512 x 14 x 14
      • MaxPooling을 통해 각 채널마다 크기가 절반으로 줄어들어 14x14가 됩니다.
  10. 다섯 번째 Convolution 레이어 (Conv3-512):
    • 필터 크기: 3x3
    • 필터 개수: 512개
    • 패딩: 1
    • 출력 크기: 512 x 14 x 14
      • 512개의 필터를 사용해 14x14 크기의 특징 맵을 생성합니다.
  11. MaxPooling 레이어:
    • Kernel: 2x2
    • Stride: (2,2)
    • 출력 크기: 512 x 7 x 7
      • MaxPooling을 통해 각 채널마다 크기가 절반으로 줄어들어 7x7이 됩니다.

Flatten과 Fully Connected (FC) 레이어

  1. Flatten:
    • 512 x 7 x 7 크기의 특징 맵을 1차원 벡터로 펼칩니다.
    • 512 x 7 x 7 = 25088개의 값으로 평탄화됩니다.
  2. Fully Connected (FC) 레이어:
    • 노드 개수: 4096개
    • Flatten된 값을 4096개의 노드로 변환합니다.
    • 이 레이어는 이미지의 최종적인 분류를 위한 결정을 내리기 위한 역할을 합니다.
  3. 출력 레이어 (Softmax):
    • Softmax 함수를 사용하여 1000개의 클래스 중 하나로 분류합니다.
    • Softmax를 통해 각 클래스의 확률을 계산하고, 가장 높은 확률을 가진 클래스를 최종 예측값으로 선택합니다.