지금까지 배운 Fully Connected Network는 이미지를 1차원으로 펼쳐서(Flatten) 학습했습니다.
CNN은 이미지의 공간적 구조를 유지하면서 특징을 추출하는 방법입니다.
CNN의 전체 구조는 다음과 같습니다.
입력 이미지 → Convolution → ReLU → Pooling → ... → Flatten → Fully Connected → 출력
1. Convolution (컨볼루션)
개념
필터(커널)를 입력 이미지 위에 슬라이딩하며 내적(Dot Product) 연산을 수행하여 특징 맵(Feature Map)을 생성합니다.
입력 이미지 필터(3×3) 특징 맵
┌─────────────┐ ┌───────┐ ┌─────────┐
│ 1 2 3 4 │ │ 1 0 │ │ │
│ 5 6 7 8 │ * │ 0 1 │ → │ 특징 │
│ 9 10 11 12 │ │ -1 0 │ │ 맵 │
│ 13 14 15 16 │ └───────┘ └─────────┘
└─────────────┘
필터가 이미지 위를 슬라이딩하면서 각 위치에서 Dot Product를 수행합니다.
이 과정에서 이미지의 엣지, 곡선, 텍스처 같은 특징들이 추출됩니다.
채널 수 규칙
입력 채널 수 = 필터 채널 수
출력 채널 수 = 사용하는 필터 개수
예를 들어 RGB 이미지(채널 3)에 필터 32개를 사용하면:
입력 : [N, 28, 28, 3]
필터 : [3, 3, 3, 32] ← [높이, 너비, 입력채널, 필터개수]
출력 : [N, 28, 28, 32]
Stride (스트라이드)
필터를 얼마나 건너뛰며 이동할지 설정합니다.
Stride = 1 Stride = 2
□□□□□□ □□□□□□
□■■■□□ → 1칸 □■■■□□ → 2칸
□□□□□□ □□□□□□
- Stride가 클수록 출력 특징 맵의 크기가 작아집니다
Padding (패딩)
입력 이미지 가장자리에 0을 채워 출력 크기가 줄어드는 것을 방지합니다.
SAME 패딩 (0 추가) VALID 패딩 (없음)
┌─────────────┐ ┌─────────┐
│ 0 0 0 0 │ │ │
│ 0 [이미지]0 │ │ 이미지 │ → 크기 줄어듦
│ 0 0 0 0 │ │ │
└─────────────┘ └─────────┘
출력 크기 유지 출력 크기 감소
주로 SAME 패딩을 사용해 입력과 출력의 크기를 동일하게 유지합니다.
2. Pooling (풀링)
개념
이미지의 가로, 세로 크기를 줄여 중요한 특징만 남기는 서브 샘플링(Sub-sampling) 역할을 합니다.
Max Pooling (맥스 풀링)
필터 내에서 가장 큰 값을 선택합니다.
특징이 가장 강하게 나타나는 부분을 추출합니다.
입력 (4×4) Max Pooling (2×2) 출력 (2×2)
┌────────────┐ ┌────────┐
│ 1 3 2 4│ 최댓값 선택 → │ 6 8 │
│ 5 6 1 2│ │ 12 16 │
│ 4 2 9 7│ └────────┘
│ 8 12 3 16│
└────────────┘
Average Pooling (에버리지 풀링)
필터 내의 모든 값을 평균 냅니다.
값들이 희석되는 단점이 있어 주로 Max Pooling을 사용합니다.
3. 전체 구조
입력 이미지 [N, 28, 28, 1]
↓
Convolution → ReLU 특징 추출
↓
Pooling 크기 축소
↓
Convolution → ReLU 더 깊은 특징 추출
↓
Pooling 크기 축소
↓
Flatten [N, H, W, C] → [N, H*W*C]
↓
Fully Connected 분류
↓
출력 (클래스 수)
앞부분(Convolution + Pooling)에서 이미지의 특징을 추출하고,
뒷부분(Fully Connected)에서 추출된 특징을 바탕으로 분류합니다.
Fully Connected와 CNN 비교
Fully Connected CNN
| 입력 처리 | 이미지를 1차원으로 펼침 | 이미지의 공간 구조 유지 |
| 특징 추출 | 모든 픽셀을 동등하게 처리 | 필터로 지역적 특징 추출 |
| 파라미터 수 | 많음 | 적음 (필터 공유) |
| 이미지 분류 | 비교적 낮은 성능 | 높은 성능 |
정리
개념 설명
| Convolution | 필터를 슬라이딩하며 특징 맵 생성 |
| Stride | 필터 이동 간격 |
| Padding | 가장자리에 0을 채워 출력 크기 유지 |
| Feature Map | Convolution 연산의 결과물 |
| Max Pooling | 필터 내 최댓값 추출, 크기 축소 |
| Fully Connected | 추출된 특징으로 최종 분류 |
CNN은 이미지 분류, 객체 감지, 얼굴 인식 등 다양한 컴퓨터 비전 분야에서 핵심적으로 사용됩니다. 🚀
'AI > ML' 카테고리의 다른 글
| RNN : 순서가 있는 데이터를 처리하는 신경망 (0) | 2026.04.02 |
|---|---|
| CNN으로 MNIST 손글씨 분류하기 (TensorFlow) (0) | 2026.03.29 |
| Dropout : 과적합을 막는 정규화 기법 (0) | 2026.03.25 |
| Weight Initialization : 웨이트 초기화의 중요성 (0) | 2026.03.25 |
| ReLU로 MNIST 손글씨 분류하기 (TensorFlow) (0) | 2026.03.23 |