본문 바로가기

Computer Vision + Python/이미지 분석 & 인식 (중급자)

Python에서 딥러닝 기반 이미지 분류(Image Classification) – Keras/TensorFlow 사용법

Python에서 딥러닝 기반 이미지 분류(Image Classification) – Keras/TensorFlow 사용법

인공지능(AI) 기술의 발전은 이미지 처리 분야에 혁신적인 변화를 가져왔습니다.
그중 이미지 분류(Image Classification) 는 컴퓨터가 이미지를 보고 그 속의 객체를 인식하고 분류하는 핵심 기술로,
자율주행, 의료 영상 분석, 보안 감시, 제품 품질 검사 등 다양한 산업에서 활용되고 있습니다.

이번 글에서는 Python과 Keras/TensorFlow를 활용한 딥러닝 기반 이미지 분류 모델 구축 방법을 단계별로 알아보고,
실제 코드 예제와 함께 모델 학습 및 예측 과정을 설명하겠습니다.


이미지 분류(Image Classification)의 개념

이미지 분류란 입력된 이미지가 어떤 카테고리에 속하는지를 예측하는 작업입니다.
예를 들어, 사진이 ‘고양이’인지 ‘개’인지, 또는 의료 이미지가 ‘정상’인지 ‘이상’인지를 자동으로 판별하는 것이죠.

이 과정은 크게 다음 세 단계로 구성됩니다.

  1. 데이터 전처리 (Preprocessing) – 이미지를 모델에 적합하게 변환
  2. 모델 학습 (Training) – 딥러닝 모델이 이미지 특징을 학습
  3. 예측 및 평가 (Prediction & Evaluation) – 새로운 이미지의 클래스 예측

딥러닝에서는 주로 합성곱 신경망(CNN, Convolutional Neural Network) 구조를 사용합니다.
CNN은 이미지의 공간적 특징(엣지, 질감, 형태 등)을 효율적으로 학습하여 높은 정확도를 보입니다.


Python 환경 구성과 데이터셋 준비

이미지 분류를 구현하기 위해 다음과 같은 라이브러리를 설치해야 합니다.

pip install tensorflow keras matplotlib numpy

Keras는 TensorFlow의 고수준 API로, 빠르고 직관적인 모델 설계를 지원합니다.
초보자도 몇 줄의 코드로 복잡한 신경망을 구현할 수 있습니다.

학습 데이터셋으로는 대표적으로 CIFAR-10, MNIST, ImageNet 등이 있으며,
Keras에서는 기본적으로 CIFAR-10과 MNIST를 쉽게 불러올 수 있습니다.

from tensorflow.keras.datasets import cifar10

(x_train, y_train), (x_test, y_test) = cifar10.load_data()
x_train = x_train / 255.0
x_test = x_test / 255.0

이렇게 데이터를 불러오고 정규화(Normalization) 과정을 거치면 모델이 더 안정적으로 학습할 수 있습니다.


CNN 기반 이미지 분류 모델 구축

이미지 분류에 가장 널리 사용되는 구조는 합성곱 신경망(CNN) 입니다.
CNN은 이미지의 국소적 특징을 계층적으로 추출하여 분류 성능을 높입니다.

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout

model = Sequential([
    Conv2D(32, (3,3), activation='relu', input_shape=(32,32,3)),
    MaxPooling2D(2,2),
    Conv2D(64, (3,3), activation='relu'),
    MaxPooling2D(2,2),
    Flatten(),
    Dense(128, activation='relu'),
    Dropout(0.5),
    Dense(10, activation='softmax')
])
  • Conv2D: 이미지의 패턴을 추출하는 합성곱 계층
  • MaxPooling2D: 특징 맵 크기를 줄여 계산 효율 향상
  • Dense: 추출된 특징을 기반으로 클래스 예측

모델을 컴파일하고 학습시키는 코드는 다음과 같습니다.

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(x_train, y_train, epochs=10, validation_data=(x_test, y_test))

10회 반복 학습 후, 모델은 테스트 데이터에서 80~90%의 정확도를 달성할 수 있습니다.


이미지 분류 모델의 평가와 예측

학습이 완료되면, 모델의 성능을 평가하고 실제 예측을 수행할 수 있습니다.

test_loss, test_acc = model.evaluate(x_test, y_test)
print(f"테스트 정확도: {test_acc * 100:.2f}%")

또한, 새로운 이미지를 입력하여 모델이 어떤 클래스로 인식하는지도 확인할 수 있습니다.

import numpy as np
import matplotlib.pyplot as plt

predictions = model.predict(x_test)
index = np.random.randint(0, len(x_test))
plt.imshow(x_test[index])
plt.title(f"예측: {np.argmax(predictions[index])}")
plt.show()

이 과정은 AI 비전 시스템의 핵심 단계로,
실제 응용 환경에서 모델의 일반화 능력을 평가하는 중요한 절차입니다.


사전 학습된 모델(Pretrained Model) 활용

이미지 분류 프로젝트에서 시간을 절약하고 정확도를 높이기 위해
사전 학습된 모델(Transfer Learning) 을 활용할 수도 있습니다.

TensorFlow의 keras.applications 모듈에는 다양한 고성능 모델이 내장되어 있습니다.

from tensorflow.keras.applications import VGG16

base_model = VGG16(weights='imagenet', include_top=False, input_shape=(224,224,3))

VGG16, ResNet, InceptionV3 등은 대규모 ImageNet 데이터로 학습된 모델로,
이를 재활용하면 적은 데이터로도 높은 성능을 얻을 수 있습니다.

이 접근법은 특히 의료 영상 진단, 위성 이미지 분석, 제품 품질 검사
데이터 확보가 어려운 분야에서 매우 유용합니다.


데이터 증강(Data Augmentation)을 통한 성능 향상

이미지 분류 모델의 정확도를 높이기 위해 데이터 증강(Data Augmentation) 기법을 적용할 수 있습니다.
이는 원본 이미지를 회전, 반전, 확대 등의 방식으로 변형하여
모델이 다양한 상황에서도 인식할 수 있도록 훈련시키는 방법입니다.

from tensorflow.keras.preprocessing.image import ImageDataGenerator

datagen = ImageDataGenerator(
    rotation_range=20,
    width_shift_range=0.2,
    height_shift_range=0.2,
    horizontal_flip=True
)
datagen.fit(x_train)

데이터 증강은 오버피팅(Overfitting)을 방지하고
실제 환경에서의 예측 안정성을 크게 높이는 효과가 있습니다.


이미지 분류 기술의 응용 분야

이미지 분류 모델은 다음과 같은 산업 전반에서 활용됩니다.

  • 🏥 의료 분야: X-ray, CT, MRI 분석을 통한 질병 진단
  • 🚗 자율주행: 교통 신호와 도로 객체 인식
  • 🛍️ 전자상거래: 상품 이미지 자동 태깅 및 추천
  • 🔒 보안 감시: 이상 행동 감지 및 얼굴 인식
  • 🌱 농업: 작물 질병 자동 판별

이처럼 이미지 분류는 인간의 시각적 인식 능력을 대체하거나 보조하는 핵심 AI 기술로 자리잡고 있습니다.


결론

Python과 Keras/TensorFlow를 활용한 이미지 분류는
딥러닝의 기본 개념을 실습하며 실제 응용으로 확장할 수 있는 좋은 출발점입니다.

CNN을 통해 이미지의 특징을 학습하고,
전이 학습(Transfer Learning)과 데이터 증강 기법을 결합하면
소규모 데이터셋에서도 높은 정확도를 얻을 수 있습니다.

이미지 분류 기술은 앞으로 AI 기반 비전 시스템, 자동화 품질 검사, 의료 영상 분석
다양한 산업 분야에서 더욱 중요해질 것입니다.