← AI 놀이터 홈으로

🖼️ CNN — 합성곱으로 이미지 특징 뽑기 (Convolutional Neural Network)

3×3 필터를 이미지 위에서 밀며 곱하고 더하면, 선·모서리 같은 특징이 저절로 드러나요. 합성곱 → ReLU → 풀링의 신호 흐름을 직접 만져 보세요.

📖 따라하기 가이드 — 1 / 7 단계

Step 1. 컴퓨터에게 이미지는 숫자 격자예요

왼쪽의 입력 이미지는 12×12칸의 숫자 격자예요. 각 칸(픽셀)은 0~1 사이 값이고, 값이 클수록 진하게 칠했어요. CNN(합성곱 신경망)은 이 숫자 격자에서 특징(선, 모서리 같은 무늬)을 뽑아내는 모델이에요. 화면은 왼쪽부터 입력 → 특징 맵 → 풀링 결과 순서로, 신호가 흘러가는 파이프라인을 그대로 보여줘요.

🔬 합성곱 파이프라인

입력 12×12
합성곱→3×3 필터가 훑어요
특징 맵 10×10
→2×2 최대 풀링
풀링 결과 5×5

읽는 법: 입력은 진할수록 픽셀 값이 1에 가까워요 (클릭·드래그로 그리기, 지우개 토글로 지우기). 특징 맵과 풀링 결과는 양수 = 파랑, 음수 = 주황이고 절댓값이 클수록 진해요 (최댓값 기준 정규화). 특징 맵 위에 마우스를 올리면 그 값이 입력의 어느 3×3 창에서 계산됐는지 노란 테두리로 보여줘요.

🖼️ 입력 이미지 프리셋

프리셋을 고른 뒤에도 캔버스 위에서 자유롭게 덧그릴 수 있어요.

🔍 필터(커널) 3×3

칸을 직접 수정해서 나만의 필터를 만들어 보세요. 진짜 CNN은 이 9개 숫자를 학습으로 스스로 찾아요.

📊 지금 상태

입력 shape
12×12
특징 맵 shape
10×10
풀링 후 shape
5×5
특징 맵 최댓값
3.00
최댓값 위치
2행 8열
선택한 필터
세로 엣지

12×12가 3×3 필터를 지나면 10×10이 되고 (12 − 3 + 1), 2×2 풀링을 지나면 절반인 5×5가 돼요. 최댓값 위치는 필터가 가장 강하게 반응한 곳 — 찾는 특징이 거기 있다는 뜻이에요.

🧮 수식과 파이썬

특징맵[i,j] = Σ 필터[a,b] × 입력[i+a, j+b]
필터를 이미지 위에서 밀며(convolve) 곱하고 더해요
🐍 파이썬 코드로 보면? (펼치기)
import torch
import torch.nn as nn

# 흑백 이미지 1장: (배치, 채널, 높이, 너비) = (1, 1, 12, 12)
x = torch.rand(1, 1, 12, 12)

conv = nn.Conv2d(1, 8, kernel_size=3)  # 3×3 필터 8장 (학습으로 찾음)
relu = nn.ReLU()                       # 음수는 0으로
pool = nn.MaxPool2d(2)                 # 2×2 창에서 최댓값만

h = conv(x)      # 필터를 밀며 곱하고 더하기
print(h.shape)   # torch.Size([1, 8, 10, 10]) ← 필터 8장이라 채널 8
h = relu(h)
h = pool(h)
print(h.shape)   # torch.Size([1, 8, 5, 5])
# 진짜 CNN은 이 블록을 여러 층 쌓고, 마지막에 펼쳐서 MLP로 분류해요