
딥러닝을 공부하다 보면 반드시 마주치게 되는 구조 중 하나가 바로 CNN(Convolutional Neural Network, 합성곱 신경망)이에요.
CNN은 특히 이미지나 영상 같은 2차원 데이터를 처리하는 데 강점을 가진 신경망 구조로, 컴퓨터 비전 분야에서 폭넓게 활용되고 있죠. 이 글에서는 CNN의 기본 개념부터 주요 구성 요소, 간단한 코드 예제, 그리고 활용 사례까지 한 번에 살펴보겠습니다.
딥러닝 이전에 전통적인 머신러닝 방식으로 이미지를 다룰 때는, 사람 손으로 특징(feature)을 일일이 추출해야 했어요.
예를 들어, 에지 검출, 컬러 히스토그램 계산 등 수많은 전처리 과정을 거쳐야 했죠. 하지만 CNN은 “합성곱 연산(Convolution)”을 통해 이미지 속에 숨어 있는 중요한 패턴을 자동으로 학습할 수 있어요.
이러한 이유로 이미지 분류, 객체 검출, 세그멘테이션 등 다양한 컴퓨터 비전 과제에서 CNN이 주류가 되었습니다.
CNN 모델은 크게 아래와 같은 단계로 구성돼 있어요:
아래 그림을 간단하게 떠올려 보세요:
[이미지] → [Conv + ReLU] → [Pooling] → [Conv + ReLU] → [Pooling] → … → [Flatten] → [Dense] → [Output]
1~5 단계에서 이미지를 점점 압축하고 추출된 특징 맵(feature map)을 만들고, 6단계에서 1차원 벡터로 변환한 뒤, 7~8단계에서 최종 분류(or 회귀)를 수행합니다.
valid or same) f(x) = max(0, x) softmax (다중 클래스) 또는 sigmoid (이진) relu 사용아래 예제는 MNIST(28×28 흑백 손글씨 이미지)를 분류하는 아주 단순한 CNN 모델이에요.
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
# 1) 모델 정의
model = Sequential([
# (1) 합성곱 층: 32개의 3×3 필터, ReLU, 입력 크기 (28, 28, 1)
Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
# (2) 풀링 층: 2×2 MaxPooling
MaxPooling2D((2, 2)),
# (3) 합성곱 층: 64개의 3×3 필터, ReLU
Conv2D(64, (3, 3), activation='relu'),
# (4) 풀링 층: 2×2 MaxPooling
MaxPooling2D((2, 2)),
# (5) 평탄화
Flatten(),
# (6) 완전연결층: 128개 노드, ReLU
Dense(128, activation='relu'),
# (7) 출력층: 10개 노드, softmax
Dense(10, activation='softmax')
])
# 2) 컴파일
model.compile(
optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy']
)
# 3) 학습 (x_train: (60000, 28, 28, 1), y_train: (60000,))
model.fit(x_train, y_train, epochs=5, batch_size=64, validation_split=0.1)
Conv2D(32, (3,3), activation='relu', input_shape=(28,28,1))
(28, 28, 1) (흑백 이미지)MaxPooling2D((2,2))
Flatten()
(4, 4, 64) 라면, Flatten() 후 (4*4*64 = 1024,) 크기의 벡터가 만들어짐Dense(128, activation='relu')
Dense(10, activation='softmax')
valid: 패딩 없이 순수 합성곱 same: 출력 크기를 입력 크기와 동일하게 유지 이미지 분류(Image Classification)
객체 검출(Object Detection)
이미지 세그멘테이션(Image Segmentation)
의료 영상 분석(Medical Imaging)
스타일 변환(Style Transfer), 생성 모델(Generative Models)
CNN은 이미지나 영상 데이터를 다룰 때 “합성곱” 연산을 통해 자동으로 유의미한 특징을 추출하여, 높은 성능을 보여주는 강력한 신경망 구조예요.
핵심은 다음과 같습니다:
처음에는 간단한 구조로 시작해 보고, 점차 필터 개수나 레이어를 늘려가는 방식으로 실험해 보면 CNN의 작동 방식을 더 깊게 이해할 수 있어요.
Velog 포스트를 통해 배우며 직접 손으로 코드를 작성해 보고, MNIST나 CIFAR-10 같은 데이터셋으로 실습해 보면 더욱 빠르게 감을 잡을 수 있을 거예요.
궁금한 점이 있거나, 더 깊은 내용(예: ResNet, MobileNet, Transfer Learning 등)이 궁금하다면 댓글로 알려주세요!
즐거운 딥러닝 공부 되세요~ 😊
작성일: 2025년 6월 4일