CNN(Convolutional Neural Network)
1. CNN 개요
CNN(Convolutional Neural Network)은 이미지 데이터 처리에 특화된 딥러닝 모델로, 특징 추출(Feature Extraction)과 분류(Classification)를 자동으로 수행할 수 있다.
(1) CNN의 주요 구성 요소
- Convolution Layer (컨볼루션 레이어) → 이미지 특징 추출
- Activation Function (비선형 활성화 함수, 주로 ReLU) → 비선형성 부여
- Pooling Layer (풀링 레이어) → 차원 축소, 중요한 정보 유지
- Fully Connected Layer (완전 연결층) → 최종 분류
2. 컨볼루션 연산 (Convolution Operation)
(1) 컨볼루션 필터(3×3 필터)
- 컨볼루션 필터는 이미지에서 패턴(특징)을 추출하는 역할
- 필터 크기: 일반적으로 3×3 또는 5×5 크기를 많이 사용
- 출력 크기(Feature Map, 피처맵): 입력 이미지에 필터를 적용하여 생성됨
(2) 패딩 (Padding)
컨볼루션을 수행하면 이미지 크기가 줄어들 수 있기 때문에, 패딩을 추가하여 크기를 유지할 수 있다.
- Valid Padding: 패딩을 추가하지 않고 연산 → 이미지 크기 줄어듦
- Same Padding: 원본 크기를 유지하도록 패딩 추가
import tensorflow as tf
import numpy as np
# 3x3 필터 생성 (엣지 감지)
filter_3x3 = np.array([[1, 0, -1],
[1, 0, -1],
[1, 0, -1]], dtype=np.float32)
filter_3x3 = filter_3x3.reshape((3, 3, 1, 1)) # (height, width, in_channels, out_channels)
# TensorFlow에서 필터 적용
image = tf.random.normal([1, 5, 5, 1]) # 5x5 이미지
conv_layer = tf.nn.conv2d(image, filter_3x3, strides=[1, 1, 1, 1], padding="SAME")
print(conv_layer.shape) # 출력 Feature Map 크기 확인
3. 다채널(Multi-Channel) 컨볼루션
(1) RGB 채널 개념
- 일반적인 컬러 이미지는 RGB 채널을 가지며, Depth = 3(R, G, B)
- 필터(Filter)의 Depth는 입력 이미지의 채널 개수와 동일해야 함
(2) 필터(Filter)의 구조
컨볼루션 필터는 4차원 텐서로 표현됨.
[필터 높이, 필터 너비, 입력 채널 수, 출력 채널 수]
예를 들어, RGB 이미지에 대해 10개의 필터를 적용하면:
filter_shape = (3, 3, 3, 10) # 3x3 크기의 필터, 입력 채널 3개, 출력 채널 10개
- in_channels = 3 (RGB)
- out_channels = 10 (Feature Maps 개수)
4. 스트라이드(Stride)
- Stride: 필터를 이동시키는 간격
- 기본값: stride = 1
- stride = 2 로 설정하면 한 칸씩이 아닌 두 칸씩 이동하여 연산량 감소
conv_layer = tf.nn.conv2d(image, filter_3x3, strides=[1, 2, 2, 1], padding="SAME")
- strides = [1, 2, 2, 1]
- 첫 번째 1: 배치 크기 유지
- 2,2: 가로, 세로 방향으로 2칸씩 이동
- 마지막 1: 채널 유지
5. 활성화 함수(Activation Function)
컨볼루션 연산 후, 비선형성을 부여하기 위해 활성화 함수를 적용해야 한다.
(1) ReLU (Rectified Linear Unit)
- 가장 많이 사용되는 활성화 함수
- 음수 값을 0으로 변환하여 기울기 소실 문제 해결
f(x)=max(0,x)f(x) = max(0, x)
relu_output = tf.nn.relu(conv_layer)
(2) Softmax
- 최종 분류 단계에서 사용
- 출력을 확률 값(0~1)로 변환하여 여러 클래스 중 하나를 선택
softmax_output = tf.nn.softmax(relu_output)
6. 풀링(Pooling)
(1) 풀링(Pooling) 레이어의 역할
- 특징을 유지하면서 크기를 줄여 연산량 감소
- 약간의 위치 변화에도 강인한 모델을 만들기 위해 사용
(2) 풀링 종류
풀링 종류 설명
맥스 풀링 (Max Pooling) | 필터 영역에서 가장 큰 값 선택 |
평균 풀링 (Average Pooling) | 필터 영역의 평균 값 선택 |
pooling_layer = tf.nn.max_pool(relu_output, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding="SAME")
- ksize = [1, 2, 2, 1] → 2×2 필터 사용
- strides = [1, 2, 2, 1] → 2칸씩 이동
7. Fully Connected Layer (완전 연결층)
(1) CNN 마지막 단계
- 컨볼루션 & 풀링을 반복한 후 출력층(Fully Connected Layer, FC Layer)에서 최종 분류
- 보통 Flatten(평탄화)하여 Dense Layer(완전 연결층)에 연결
flatten = tf.keras.layers.Flatten()(pooling_layer)
fc_layer = tf.keras.layers.Dense(units=128, activation='relu')(flatten)
output_layer = tf.keras.layers.Dense(units=10, activation='softmax')(fc_layer) # 10개 클래스 분류
8. CNN을 이용한 분류 모델 구조
CNN을 사용한 대표적인 이미지 분류 모델 구조:
- Input Image (입력)
- Conv Layer (컨볼루션 연산, 특징 추출)
- ReLU (비선형성 부여)
- Pooling Layer (맥스풀링, 차원 축소)
- Conv + ReLU + Pooling 반복
- Flatten Layer (1차원 변환)
- Fully Connected Layer (분류)
- Softmax (최종 확률 출력)
9. CNN 모델 구현 예제 (TensorFlow)
import tensorflow as tf
from tensorflow.keras import layers, models
# CNN 모델 생성
model = models.Sequential([
layers.Conv2D(32, (3,3), activation='relu', input_shape=(32, 32, 3)), # 3x3 필터 32개
layers.MaxPooling2D((2,2)), # 2x2 맥스풀링
layers.Conv2D(64, (3,3), activation='relu'),
layers.MaxPooling2D((2,2)),
layers.Conv2D(64, (3,3), activation='relu'),
layers.Flatten(),
layers.Dense(64, activation='relu'), # Fully Connected Layer
layers.Dense(10, activation='softmax') # 출력층 (10개 클래스)
])
# 모델 요약 출력
model.summary()
10. 정리
- CNN은 이미지 데이터를 처리하기 위해 설계된 딥러닝 모델
- 컨볼루션 연산(필터), 패딩, 스트라이드 개념 중요
- ReLU 활성화 함수로 비선형성 추가
- 맥스풀링으로 차원 축소 및 중요한 특징 유지
- Fully Connected Layer에서 최종 분류 수행
728x90
'인공지능 대학원 > AI 영상처리' 카테고리의 다른 글
딥러닝 개념 (0) | 2025.03.31 |
---|---|
인공신경망 MLP,CNN (0) | 2025.03.31 |
CIFAR-10로 CNN 이미지 분류 (0) | 2025.03.31 |
비선형 함수(Nonlinear Function)의 필요성 (0) | 2025.03.20 |
딥러닝 이전의 영상 인식 및 딥러닝 기반 기술 (0) | 2025.03.09 |