끄적이는 개발노트
260703_강의 정리 (CNN) 본문
728x90
deep learning · CNN
CNN(합성곱 신경망) 정리
- 이미지의 지역적 패턴을 학습하는 Convolution 연산
- Pooling으로 특징맵 크기를 축소하며 핵심 정보만 압축
- Grad-CAM으로 모델이 이미지의 어디를 보고 판단했는지 시각화
1. CNN의 핵심 개념
"이미지의 지역적 패턴을 학습하는 신경망 구조"
- Channel — 이미지의 색상 정보 층 (RGB = 3채널)
- Convolution — 필터가 이미지를 훑으며 특징을 추출하는 연산
- Filter (Multi filter) — 하나의 이미지에서 여러 특징을 동시에 뽑아내는 필터 묶음
- Pooling — 특징맵 크기를 줄이며 중요한 정보만 압축
- Padding / Stride — 출력 크기를 조절하는 두 축
💡 새 개념
채널 Channel
- 이미지를 구성하는 색상별 층 — RGB 이미지는 6×6×3처럼 마지막 숫자가 채널 수
사진 한 장이 색상별로 겹쳐진 투명 필름 3장이라고 생각하면 됨
필터 Filter
- 이미지를 훑으며 특정 패턴(엣지, 질감 등)을 뽑아내는 작은 행렬
- 필터가 여러 개면 그만큼 다양한 특징을 동시에 추출 가능
서로 다른 색안경 여러 개로 같은 사진을 보는 것 — 안경마다 다른 특징이 도드라져 보임
2. Convolution 연산
"필터를 이미지 위에서 슬라이딩하며 대응 원소끼리 곱해 더하는 연산"
(I * K)(i, j) = ΣΣ I(i+m, j+n) · K(m, n)
I 입력 이미지 (Input)
K 커널 / 필터 (Kernel)
(i, j) 출력 위치 좌표
m, n 커널 내부 좌표 (필터를 순회하는 인덱스)
예시 1 — 2×2 필터 연산
→ 2·2 + 3·1 + 0·1 + 1·3 = 10 (좌상단 2×2 블록과 필터의 대응 원소 곱의 합)
예시 2 — 3×3 커널, Sliding Window
→ 54×0 − 78×(−1) − 102×5 − 134×(−1) + 146×0 − 165×(−1) − 172×0 = 268
- 출력의 한 픽셀(강조된 값)이 입력의 3×3 영역 전체 정보를 압축한 결과
예시 3 — 6×6 입력, 3×3 필터, Stride=1
빨간 박스(입력 3×3 섹션) × 주황 박스(필터) 원소별 곱-합 → 출력의 파란 박스 값(3)
💡 새 개념
슬라이딩 윈도우 Sliding Window
- 필터가 입력 위를 정해진 간격(stride)만큼씩 이동하며 전체 feature map을 채워나가는 과정
도장을 한 칸씩 옮겨 찍으며 도화지 전체를 채우는 것과 비슷함
출력 크기 공식 (padding, stride 포함)
Output = ⌊(N − F + 2P) / S⌋ + 1
N 입력 크기
F 필터 크기
P 패딩
S 스트라이드
→ N=5, F=2, P=0, S=1 → (5−2)/1+1 = 4 → 슬라이드의 4×4 출력과 일치
→ N=6, F=3, P=0, S=1 → (6−3)/1+1 = 4 → 예시 3의 4×4 feature map과 일치
정리
· 필터가 여러 개면 출력 채널 수 = 필터 개수
· 필터가 여러 개면 출력 채널 수 = 필터 개수
3. Pooling
"특징맵 크기를 줄이고 중요한 신호만 남기는 연산"
- Max Pooling — 영역 내 최댓값만 추출 (예: 15, 13, 11, 16)
- Average Pooling — 영역 내 평균값 추출
Pooling도 동일한 출력 크기 공식을 따름 (P=0인 경우가 일반적)
→ N=4, F=2, S=2 → (4−2)/2+1 = 2 → 4×4 → 2×2 결과와 일치
정리
· Pooling은 학습 파라미터가 없음 — 단순 연산으로 크기만 축소
· Pooling은 학습 파라미터가 없음 — 단순 연산으로 크기만 축소
4. CNN 망의 전체 구조
"Convolution + Pooling을 반복한 뒤 Fully Connected로 분류"
1
Input (N, H, W, C)
배치, 세로(높이), 가로(너비), 채널 순서
2
Convolution → Max Pooling (반복)
특징 추출과 크기 축소를 여러 층에 걸쳐 반복
3
Flatten
다차원 특징맵을 1차원으로 펼침
4
Fully Connected Feedforward network
펼쳐진 특징을 받아 최종 분류를 수행
5
Logit → Softmax
최종 클래스 확률 출력
💡 새 개념
Input Shape (N, H, W, C)
- 이미지 배열은 관례적으로 행(row=세로)이 먼저, 열(column=가로)이 나중에 옴 — numpy 배열 인덱싱과 동일한 원리
세로(H)가 가로(W)보다 항상 먼저 온다는 점 주의
주의
· 흔히 (배치, 가로, 세로, 채널) 순서로 오해하기 쉬우나, 올바른 순서는 (배치, 세로, 가로, 채널) — 즉 (N, H, W, C)
· 흔히 (배치, 가로, 세로, 채널) 순서로 오해하기 쉬우나, 올바른 순서는 (배치, 세로, 가로, 채널) — 즉 (N, H, W, C)
5. 메모리 문제와 ImageDataGenerator
"대용량 이미지 데이터를 한 번에 메모리에 올릴 수 없는 문제 해결"
- 문제 — 전체 이미지를 한꺼번에 메모리에 로드하면 용량 초과
- 해결 — 배치 단위로 디스크에서 필요한 만큼만 읽어옴
- 부가 기능 — 실시간 augmentation(회전, 확대, 반전 등) 동시 처리 가능
정리
· 학습 중 매 배치마다 이미지를 새로 불러오므로 메모리 효율적
· 학습 중 매 배치마다 이미지를 새로 불러오므로 메모리 효율적
6. CAM vs Grad-CAM
"모델이 이미지의 어느 부분을 보고 판단했는지 시각화하는 두 가지 방법"
| 구분 | CAM (오리지널) | Grad-CAM (진화형) |
|---|---|---|
| 구조 제약 | GAP 필수 사용 | 제약 없음 (Flatten도 가능) |
| 원리 | GAP 가중치를 특징맵에 직접 매핑 | Gradient로 클래스 중요도 역산 |
| 적용 범위 | 특정 구조에만 적용 가능 | 대부분의 CNN에 적용 가능 |
💡 새 개념
GAP Global Average Pooling
- 채널별 평균을 내 하나의 값으로 압축
- Flatten은 위치정보를 모두 펼치지만 GAP은 채널당 1개 값으로 요약 → 파라미터 수 급감
특징맵 한 장을 대표하는 숫자 하나로 요약하는 것
정리
· Grad-CAM이 더 널리 쓰이는 이유 = 구조 제약이 없어 범용성이 높기 때문
· Grad-CAM이 더 널리 쓰이는 이유 = 구조 제약이 없어 범용성이 높기 때문
728x90
'머신러닝' 카테고리의 다른 글
| 260707_강의 정리 (생성모델 - AE, VAE, GAN) (0) | 2026.07.08 |
|---|---|
| 260706_강의 정리 (전이학습) (0) | 2026.07.06 |
| 260702_강의 정리 (Optimizer) (0) | 2026.07.02 |
| 260702_강의 정리 (Tensorflow, Keras) (0) | 2026.07.02 |
| 260701_강의 정리 (Tensorflow, FFNN) (0) | 2026.07.01 |