[파이썬] 이미지 생성 딥러닝 모델 활용

딥러닝은 컴퓨터 비전 분야에서 많은 성과를 거두고 있습니다. 특히 이미지 생성과 관련된 작업에서 딥러닝 모델을 활용하면 사실적이고 다양한 이미지를 생성할 수 있습니다. 이번 글에서는 파이썬을 사용하여 이미지 생성에 딥러닝 모델을 활용하는 방법을 알아보겠습니다.

환경 설정

딥러닝 모델을 활용하기 위해 우선적으로 필요한 환경을 설정해야 합니다. 파이썬에서 딥러닝을 다루기 위해 tensorflowkeras 라이브러리를 설치합니다. 아래의 명령어를 터미널 또는 명령 프롬프트에서 실행하여 라이브러리를 설치합니다.

pip install tensorflow keras

GAN (Generative Adversarial Networks)

GAN은 가장 널리 알려진 이미지 생성 딥러닝 모델 중 하나입니다. GAN은 두 개의 모델인 생성자(generator)와 판별자(discriminator)가 서로 경쟁하면서 학습됩니다. 생성자는 랜덤 벡터를 입력받아 실제같은 이미지를 생성하고, 판별자는 생성자에서 나온 이미지와 실제 이미지를 구별하도록 학습됩니다.

아래는 GAN을 구현하는 간단한 예제 코드입니다.

import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import Adam

# 생성자 모델 정의
def build_generator(input_dim):
    model = Sequential()
    model.add(Dense(128, input_dim=input_dim, activation='relu'))
    model.add(Dense(256, activation='relu'))
    model.add(Dense(512, activation='relu'))
    model.add(Dense(784, activation='sigmoid'))
    model.add(Dense(784, activation='tanh'))
    return model

# 판별자 모델 정의
def build_discriminator():
    model = Sequential()
    model.add(Dense(512, input_dim=784, activation='relu'))
    model.add(Dense(256, activation='relu'))
    model.add(Dense(128, activation='relu'))
    model.add(Dense(1, activation='sigmoid'))
    return model

# GAN 모델 정의
def build_gan(generator, discriminator):
    model = Sequential()
    model.add(generator)
    discriminator.trainable = False
    model.add(discriminator)
    return model

# 모델 생성
latent_dim = 100
generator = build_generator(latent_dim)
discriminator = build_discriminator()
gan = build_gan(generator, discriminator)

# 학습 설정
gan.compile(loss='binary_crossentropy', optimizer=Adam(0.0002, 0.5))

# 학습 데이터 준비
(X_train, _), (_, _) = mnist.load_data()
X_train = X_train.reshape((X_train.shape[0], X_train.shape[1]*X_train.shape[2]))
X_train = (X_train.astype(np.float32) - 127.5) / 127.5

# 학습
epochs = 100
batch_size = 128
steps_per_epoch = len(X_train) // batch_size

for epoch in range(epochs):
    for step in range(steps_per_epoch):
        # 판별자 학습
        idx = np.random.randint(0, X_train.shape[0], batch_size)
        real_images = X_train[idx]
        noise = np.random.normal(0, 1, (batch_size, latent_dim))
        fake_images = generator.predict(noise)
        X = np.concatenate((real_images, fake_images))
        y = np.concatenate((np.ones((batch_size, 1)), np.zeros((batch_size, 1))))
        discriminator_loss = discriminator.train_on_batch(X, y)

        # 생성자 학습
        noise = np.random.normal(0, 1, (batch_size, latent_dim))
        y = np.ones((batch_size, 1))
        gan_loss = gan.train_on_batch(noise, y)

    print(f"Epoch {epoch+1}/{epochs} - D loss: {discriminator_loss} - G loss: {gan_loss}")

결과 확인

GAN 모델을 학습한 후 생성자에서 생성된 이미지를 확인해봅시다. 아래 코드를 추가하여 생성된 이미지를 출력합니다.

import matplotlib.pyplot as plt

# 생성된 이미지 출력
noise = np.random.normal(0, 1, (25, latent_dim))
generated_images = generator.predict(noise)
generated_images = generated_images * 0.5 + 0.5  # 스케일링(0~1로 변환)
fig, ax = plt.subplots(5, 5, figsize=(10, 10))
idx = 0
for i in range(5):
    for j in range(5):
        ax[i, j].imshow(generated_images[idx].reshape((28, 28)), cmap='gray')
        ax[i, j].axis('off')
        idx += 1
plt.show()

이제 코드를 실행하면 생성된 이미지를 확인할 수 있습니다. 생성자 모델을 수정하거나 학습 파라미터를 조정하여 더 다양하고 품질 높은 이미지를 생성해보세요.

이러한 딥러닝 모델을 활용하여 이미지를 생성하는 방법은 딥페이크(Deepfake) 등의 응용에서도 사용됩니다. 이미지 생성 딥러닝 모델은 더욱 많은 분야에서 활용될 것으로 기대합니다.

참고 자료: