[파이썬] Keras 3D 이미지 분류

이미지 분류는 컴퓨터 비전 분야에서 매우 중요한 주제 중 하나입니다. 이제는 2D 이미지 뿐만 아니라 3D 이미지도 널리 사용되는데, 예를 들어 의료 영상, 자율 주행 자동차 및 로봇 비전 분야에서 3D 이미지 분류가 필요합니다.

Keras는 딥러닝 라이브러리로 사용하기 쉬운 API와 많은 기능을 제공하여 이미지 분류 작업을 간편하게 할 수 있습니다. 이번 블로그에서는 Keras를 사용하여 3D 이미지 분류를 수행하는 방법을 알아보겠습니다.

데이터셋

3D 이미지 분류를 위해 사용할 데이터셋을 준비해야 합니다. 예제로는 Brain Tumor dataset을 사용하겠습니다. 이 데이터셋은 뇌 종양 영상을 포함하고 있으며, 뇌종양에 대한 분류 작업을 수행하는데 적합합니다.

환경 설정

먼저, Keras와 필요한 다른 라이브러리들을 설치해야 합니다. Python 패키지 관리자인 pip를 사용하여 다음과 같이 설치할 수 있습니다:

pip install keras tensorflow numpy matplotlib

모델 구성

3D 이미지 분류에 대한 모델을 구성하기 위해, 다음과 같은 코드 예제를 사용할 수 있습니다:

from keras.models import Sequential
from keras.layers import Conv3D, MaxPooling3D, Flatten, Dense

model = Sequential()
model.add(Conv3D(32, kernel_size=(3, 3, 3), activation='relu', input_shape=(64, 64, 64, 1)))
model.add(MaxPooling3D(pool_size=(2, 2, 2)))
model.add(Conv3D(64, kernel_size=(3, 3, 3), activation='relu'))
model.add(MaxPooling3D(pool_size=(2, 2, 2)))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

위의 코드에서는 Sequential 모델을 사용하여 CNN (Conv3D) 아키텍처를 구성합니다. Conv3D 레이어는 3D 이미지를 처리하는데 사용되며, MaxPooling3D 레이어는 공간적인 다운샘플링을 수행합니다. 마지막으로, Flatten 레이어는 3D 형태의 데이터를 1차원으로 변환하여 Dense 레이어로 입력할 수 있도록 합니다.

데이터 전처리

데이터를 모델에 입력하기 전에 적절한 전처리가 필요합니다. 3D 이미지의 경우, 데이터를 3D 형태로 유지하고 픽셀 값을 0과 1 사이로 정규화하는 것이 일반적입니다.

import numpy as np

# 데이터 로드
X_train = np.load('path/to/train_data.npy')
y_train = np.load('path/to/train_labels.npy')
X_test = np.load('path/to/test_data.npy')
y_test = np.load('path/to/test_labels.npy')

# 데이터 전처리
X_train = X_train.astype('float32') / 255.0
X_test = X_test.astype('float32') / 255.0

# 데이터 차원 변경
X_train = np.expand_dims(X_train, axis=4)
X_test = np.expand_dims(X_test, axis=4)

위의 코드는 데이터를 로드하고, 픽셀 값을 정규화하며, 데이터의 차원을 변경하여 모델에 맞춥니다.

모델 훈련

모델을 구성하고 데이터를 전처리한 후, 모델을 훈련시킬 차례입니다:

model.fit(X_train, y_train, batch_size=32, epochs=10, validation_data=(X_test, y_test))

위의 코드에서 fit 함수를 사용하여 모델을 훈련시킵니다. batch_size는 한 번에 처리되는 샘플 수이며, epochs는 전체 데이터를 몇 번 반복할지를 지정합니다. validation_data 인자를 사용하여 검증 데이터로 모델의 성능을 평가할 수 있습니다.

모델 평가

훈련 후에는 모델의 성능을 평가해야 합니다. evaluate 함수를 사용하여 테스트 데이터에 대한 정확도를 계산할 수 있습니다:

score = model.evaluate(X_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

결론

이번 블로그에서는 Keras를 사용하여 3D 이미지 분류를 수행하는 방법을 알아보았습니다. 이를 통해 3D 이미지로부터 유용한 정보를 추출하고, 다양한 분야에서 응용할 수 있는 딥러닝 모델을 개발할 수 있습니다.

Keras의 유연하고 간결한 API를 통해, 복잡한 모델을 쉽게 구성하고 훈련시킬 수 있습니다.