AI 개발 & 프로그래밍 💻

🚀 "[AI 개발 4단계] CNN 기초 가이드: 합성곱 신경망을 활용한 이미지 처리 및 모델 구축"

AI JB 2025. 2. 23. 05:00

[AI 개발 4단계] CNN 기초 가이드: 합성곱 신경망을 활용한 이미지 처리

이제 딥러닝의 기본을 익혔다면, **CNN(합성곱 신경망, Convolutional Neural Network)**을 배워볼 차례입니다. CNN은 이미지 인식 및 처리에 특화된 딥러닝 모델로, 얼굴 인식, 의료 영상 분석, 자율주행 등 다양한 분야에서 활용됩니다. 이번 포스팅에서는 CNN의 개념을 이해하고, 실습을 통해 간단한 이미지 분류 모델을 구축하는 방법을 배우겠습니다.

 

 

CNN 기초 가이드

 


1. CNN(합성곱 신경망)이란?

CNN(Convolutional Neural Network)은 이미지 데이터를 분석하고 패턴을 학습하는 데 최적화된 딥러닝 모델입니다.

 

예를 들어 스마트폰의 얼굴 인식 시스템(Face ID)은 CNN을 활용하여 사용자 얼굴의 특징을 학습하고, 기존 데이터와 비교하여 인증을 수행합니다. 또한, 의료 영상 분석 시스템에서는 CNN을 이용해 X-ray나 MRI데이터를 분석하여 질병을 조기에 감지할 수 있습니다. 이러한 기술은 CNN이 이미지의 특징을 효과적으로 학습하고 분류하는 능력을 갖추었기 때문에 가능해 졌습니다.

기존의 신경망(ANN)과 달리, CNN은 이미지의 공간적 구조를 유지하면서 특징을 추출하는 능력이 뛰어납니다.

1️⃣ CNN의 주요 특징

✔️ 합성곱(Convolution) 연산: 필터(커널)를 이용해 이미지에서 중요한 특징을 추출합니다. 예를 들어, 가장자리 감지나 색상 패턴 인식이 가능합니다.
✔️ 풀링(Pooling) 연산: 특징 맵(Feature Map)의 크기를 줄여 연산량을 감소시키고, 중요한 정보만 유지하는 역할을 합니다.
✔️ 활성화 함수(Activation Function): 비선형성을 추가하여 신경망이 복잡한 패턴을 학습할 수 있도록 합니다. 대표적인 활성화 함수로는 **ReLU(Rectified Linear Unit)**가 사용됩니다.
✔️ 완전 연결층(Fully Connected Layer): 최종적으로 CNN이 학습한 특징을 바탕으로 분류 작업을 수행합니다.

2️⃣ CNN이 사용되는 대표적인 분야

✔️ 얼굴 인식 (예: Face ID, 감시 시스템)
✔️ 의료 영상 분석 (예: X-ray, MRI 진단 보조)
✔️ 자율주행 (예: 도로 객체 인식, 차선 감지)
✔️ 제조업 품질 검사 (예: 결함 감지)


2. CNN 모델 구조 이해

CNN 모델은 여러 개의 계층으로 구성되며, 각 계층은 이미지의 특징을 점진적으로 학습합니다. 예를 들어, 고양이와 개를 구분하는 CNN 모델을 생각해봅시다.

 

1️⃣ 입력층(Input Layer): 28x28 픽셀의 흑백 이미지를 입력합니다. 이 층은 원본 이미지를 받아들여 후속 레이어로 전달합니다.

2️⃣ 합성곱층(Convolutional Layer): 작은 3x3 필터(커널)를 이용해 이미지에서 윤곽선과 질감 같은 저수준 특징을 감지합니다. 초기 층에서는 단순한 선과 모양을 감지하고, 깊어질수록 보다 복잡한 구조를 학습합니다.

3️⃣ 풀링층(Pooling Layer): MaxPooling(최대 풀링) 기법을 적용해 가장 강한 특징을 유지하면서 데이터 크기를 줄여 연산 속도를 높이고 과적합을 방지합니다.

4️⃣ 완전 연결층(Fully Connected Layer, FC Layer): 합성곱층에서 추출된 특징들을 바탕으로 최종적인 판단을 내립니다. 개별 뉴런이 각 클래스(예: 고양이, 개)에 대한 확률을 계산합니다.

5️⃣ 출력층(Output Layer): Softmax 활성화 함수를 사용하여, 최종적으로 입력된 이미지가 '고양이'일 확률과 '개'일 확률을 출력합니다.

1️⃣ CNN의 기본 계층 구조

  1. 입력층(Input Layer): 이미지 데이터를 입력 (예: 28x28 픽셀 흑백 이미지)
  2. 합성곱층(Convolutional Layer): 필터를 적용하여 특징 맵(Feature Map) 생성
  3. 풀링층(Pooling Layer): 특징 맵을 다운샘플링하여 데이터 크기 감소
  4. 완전 연결층(Fully Connected Layer, FC Layer): 최종 분류 수행
  5. 출력층(Output Layer): 예측 결과 출력

각 층은 이미지 데이터를 점진적으로 분석하며, 초기 층에서는 단순한 선과 모양을 인식하고, 깊은 층에서는 복잡한 구조를 학습하게 됩니다.


3. CNN을 활용한 이미지 분류 모델 만들기

이제 간단한 CNN 모델을 만들어 보겠습니다. 이번 예제에서는 TensorFlow/Keras를 사용하여 MNIST 숫자 손글씨 이미지를 분류하는 모델을 구현합니다.

필요한 라이브러리 설치

pip install tensorflow keras numpy matplotlib

설치 확인 방법

python -c "import tensorflow as tf; import keras; print('설치 완료!')"

Python 코드 실행 방법

  1. Jupyter Notebook 사용 (추천)
    • 터미널 또는 명령 프롬프트에서 jupyter notebook 입력 후 실행
    • 새 Python 노트북을 열고 아래 코드를 실행
  2. Python 스크립트 실행
    • 메모장에서 cnn_model.py 파일을 생성
    • 아래 코드를 복사하여 저장
    • 터미널 또는 명령 프롬프트에서 python cnn_model.py 입력 후 실행

CNN 모델 구현 코드

import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as plt

# 1. 데이터 불러오기
mnist = keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()

# 2. 데이터 전처리
x_train = x_train.reshape(-1, 28, 28, 1) / 255.0
x_test = x_test.reshape(-1, 28, 28, 1) / 255.0

# 3. CNN 모델 설계
model = keras.Sequential([
    keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(28, 28, 1)),
    keras.layers.MaxPooling2D(2,2),
    keras.layers.Conv2D(64, (3,3), activation='relu'),
    keras.layers.MaxPooling2D(2,2),
    keras.layers.Flatten(),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(10, activation='softmax')
])

# 4. 모델 컴파일 및 학습
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5)

# 5. 모델 평가
test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2)
print(f'테스트 정확도: {test_acc:.2f}')

코드 설명

  • 데이터 불러오기: TensorFlow 내장 MNIST 데이터셋을 로드
  • 데이터 전처리: CNN 입력에 맞게 데이터 형태 변환 및 정규화
  • CNN 모델 설계: 합성곱(Conv2D), 풀링(MaxPooling2D), 완전 연결층(Dense)으로 구성
  • 모델 학습 및 평가: Adam 옵티마이저 사용, 정확도(Accuracy) 측정

4. CNN 모델 개선 방법

✔️ 더 깊은 신경망 설계: 합성곱층과 뉴런 수를 늘려 모델 성능 향상
✔️ Dropout 기법 적용: 과적합 방지를 위해 일부 뉴런을 랜덤으로 비활성화
✔️ 데이터 증강(Augmentation): 이미지 회전, 이동 등을 적용하여 데이터 다양성 증가
✔️ 전이 학습(Transfer Learning): 사전 학습된 모델을 활용하여 성능 개선
✔️ GPU 활용: 딥러닝 연산 속도를 높이기 위해 GPU 사용


맺음말: CNN을 활용한 이미지 분류 첫걸음

CNN은 이미지 처리에 강력한 성능을 제공하는 신경망 모델입니다. 이번 실습을 통해 CNN의 개념을 이해하고, 간단한 이미지 분류 모델을 구현하는 방법을 배웠습니다. 처음에는 복잡해 보이지만, 실습을 거듭하면서 점점 익숙해질 것입니다.

저도 처음 CNN을 접했을 대는 개념이 어려웠지만, 간단한 프로젝트를 만들어 보면서 이해도가 높아졌습니다. 여려분도 직접 모델을 만들어 보고 실험해보면서 CNN의 원리를 체감해보는게 좋을  것 같습니다.

혹시 실습 중 궁금한 점이 있거나, 더 알고 싶은 내용이 있다면 댓글로 질문을 남겨주세요!! 여러분이 CNN을 활용해 어떤 프로젝트를 만들어보고 싶은지도 궁금합니다!

🚀