제퍼넷 로고

고급 생성 AI 탐색 | 조건부 VAE

시간

개요

제너레이티브 AI의 흥미로운 세계를 살펴보는 이 기사에 오신 것을 환영합니다. 우리는 주로 조건부 변형 자동 인코더(Conditional Variational Autoencoder, CVAE)에 초점을 맞출 것입니다. 이는 AI 예술성의 다음 단계와 같으며 VAE(Variational Autoencoder)의 장점과 특정 지침을 따르는 기능을 결합하여 이미지 생성을 미세하게 조정할 수 있는 기능을 제공합니다. 이 기사 전체에서 우리는 CVAE에 대해 자세히 알아보고 다양한 실제 시나리오에서 CVAE를 사용할 수 있는 방법과 이유를 알아보고 CVAE의 잠재력을 보여주기 위해 이해하기 쉬운 코드 예제도 제공할 것입니다.

조건부 VAE | 생성 AI
출처 : IBM

이 기사는 데이터 과학 블로그.

차례

VAE(변형 자동 인코더) 이해

CVAE에 대해 알아보기 전에 VAE의 기본 사항에 중점을 두겠습니다. VAE는 인코더와 디코더 네트워크를 결합한 일종의 생성 모델입니다. 이는 데이터의 기본 구조를 학습하고 새로운 샘플을 생성하는 데 사용됩니다.

Variational Autoencoder 이해 | 조건부 VAE | 생성 AI

물론입니다. VAE(Variational Autoencoder)를 설명하기 위해 커피 선호도와 관련된 간단한 예를 사용하겠습니다.

사무실에 있는 모든 사람의 커피 선호도를 표현하고 싶다고 상상해 보세요.

  • 인코더 : 각 사람은 자신이 선택한 커피(블랙, 라떼, 카푸치노)를 몇 가지 단어(예: 단단함, 크리미함, 순함)로 요약합니다.
  • 유사 : 동일한 선택(예: 라떼) 내에서도 우유, 단맛 등의 차이가 있음을 이해합니다.
  • 잠재 공간: 커피 선호도가 달라질 수 있는 유연한 공간을 만듭니다.
  • 디코더 : 이러한 요약을 사용하여 동료의 선호도를 존중하면서 약간의 변형을 가해 동료를 위한 커피를 만듭니다.
  • 생성력: 개인의 취향에 맞지만 정확한 복제품은 아닌 새로운 커피 스타일을 만들 수 있습니다.

VAE는 유사하게 작동하여 데이터의 핵심 기능과 변형을 학습하여 약간의 차이가 있는 새롭고 유사한 데이터를 생성합니다.

다음은 Python과 TensorFlow/Keras를 사용한 간단한 VAE(Variational Autoencoder) 구현입니다. 이 예에서는 단순화를 위해 MNIST 데이터세트를 사용하지만 이를 다른 데이터 유형에 적용할 수 있습니다.

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
import numpy as np # Load and preprocess the MNIST dataset
(x_train, _), (x_test, _) = keras.datasets.mnist.load_data()
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0 # Define the VAE model
latent_dim = 2 # Encoder
encoder_inputs = keras.Input(shape=(28, 28))
x = layers.Flatten()(encoder_inputs)
x = layers.Dense(256, activation='relu')(x)
z_mean = layers.Dense(latent_dim)(x)
z_log_var = layers.Dense(latent_dim)(x) # Reparameterization trick
def sampling(args): z_mean, z_log_var = args epsilon = tf.keras.backend.random_normal(shape=(tf.shape(z_mean)[0], latent_dim)) return z_mean + tf.exp(0.5 * z_log_var) * epsilon z = layers.Lambda(sampling)([z_mean, z_log_var]) # Decoder
decoder_inputs = keras.Input(shape=(latent_dim,))
x = layers.Dense(256, activation='relu')(decoder_inputs)
x = layers.Dense(28 * 28, activation='sigmoid')(x)
decoder_outputs = layers.Reshape((28, 28))(x) # Define the VAE model
encoder = keras.Model(encoder_inputs, [z_mean, z_log_var, z], name='encoder')
decoder = keras.Model(decoder_inputs, decoder_outputs, name='decoder')
vae_outputs = decoder(encoder(encoder_inputs)[2])
vae = keras.Model(encoder_inputs, vae_outputs, name='vae') # Loss function
def vae_loss(x, x_decoded_mean, z_log_var, z_mean): x = tf.keras.backend.flatten(x) x_decoded_mean = tf.keras.backend.flatten(x_decoded_mean) xent_loss = keras.losses.binary_crossentropy(x, x_decoded_mean) kl_loss = -0.5 * tf.reduce_mean(1 + z_log_var - tf.square(z_mean) - tf.exp(z_log_var)) return xent_loss + kl_loss vae.compile(optimizer='adam', loss=vae_loss)
vae.fit(x_train, x_train, epochs=10, batch_size=32, validation_data=(x_test, x_test))

조건부 변형 자동 인코더(CVAE) 설명

CVAE는 조건부 입력을 도입하여 VAE의 기능을 확장합니다. CVAE는 특정 조건이나 정보를 기반으로 데이터 샘플을 생성할 수 있습니다. 예를 들어, 원하는 클래스 레이블을 입력으로 모델에 제공하여 고양이나 개 이미지를 조건부로 생성할 수 있습니다.

실시간 예를 사용하여 이해해 보겠습니다.

CVAE를 통한 온라인 쇼핑 운동화를 온라인으로 쇼핑한다고 상상해 보십시오.

  • 기본 VAE(조건 없음): 웹사이트에서는 임의의 운동화를 보여줍니다.
  • CVAE(조건부 포함): 색상(빨간색), 크기(10), 스타일(러닝) 중에서 원하는 것을 선택하세요.
  • 인코더 : 웹사이트는 귀하의 선택을 이해하고 이러한 조건에 따라 운동화를 필터링합니다.
  • 유사 : 귀하의 조건 내에서도 변형(빨간색의 다양한 색조, 운동화 스타일)이 있다는 것을 인식하여 이를 고려합니다.
  • 잠재 공간: 변형이 허용되는 '스니커즈 커스터마이징 공간'을 만들어줍니다.
  • 디코더 : 귀하의 개인화된 조건을 활용하여 귀하의 선호도에 가장 잘 맞는 운동화를 보여드립니다.

온라인 쇼핑 웹사이트와 같은 CVAE는 특정 조건(귀하의 선호도)을 사용하여 귀하의 선택과 밀접하게 일치하는 맞춤형 데이터(운동화 옵션)를 생성합니다.

VAE(Variational Autoencoder) 예제에 이어서 CVAE(Conditional Variational Autoencoder)를 구현할 수 있습니다. 이 예에서는 MNIST 데이터 세트를 고려하고 클래스 레이블을 기반으로 조건부로 숫자를 생성합니다.

# Define the CVAE model
encoder = keras.Model([encoder_inputs, label], [z_mean, z_log_var, z], name='encoder')
decoder = keras.Model([decoder_inputs, label], decoder_outputs, name='decoder')
cvae_outputs = decoder([encoder([encoder_inputs, label])[2], label])
cvae = keras.Model([encoder_inputs, label], cvae_outputs, name='cvae')
인코더 | 디코더
출처 : 리서치게이트

VAE와 CVAE의 차이점

VAE

  • VAE는 예술 작품을 만드는 예술가와 비슷하지만 약간의 무작위성이 있습니다.
  • 특별한 지시 없이도 다양한 변형 데이터를 생성하는 방법을 배웁니다.
  • 무작위 아트와 같이 조건 없이 새로운 데이터 샘플을 생성하는 데 유용합니다.

CVAE

  • CVAE는 특정 요청을 따를 수 있는 아티스트와 같습니다.
  • 주어진 조건이나 지침에 따라 데이터를 생성합니다.
  • 주요 특징을 유지하면서 말을 얼룩말로 바꾸는 등 생성된 내용을 정밀하게 제어하려는 작업에 유용합니다.

CVAE 구현: 코드 예제

손으로 쓴 숫자를 생성하기 위한 CVAE를 구현하기 위해 TensorFlow와 Keras를 사용하는 간단한 Python 코드 예제를 살펴보겠습니다.

# Import necessary libraries
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.models import Model # Define the CVAE model architecture
latent_dim = 2
input_shape = (28, 28, 1)
num_classes = 10 # Encoder network
encoder_inputs = keras.Input(shape=input_shape)
x = layers.Conv2D(32, 3, padding='same', activation='relu')(encoder_inputs)
x = layers.Flatten()(x)
x = layers.Dense(64, activation='relu')(x) # Conditional input
label = keras.Input(shape=(num_classes,))
x = layers.concatenate([x, label]) # Variational layers
z_mean = layers.Dense(latent_dim)(x)
z_log_var = layers.Dense(latent_dim)(x) # Reparameterization trick
def sampling(args): z_mean, z_log_var = args epsilon = tf.keras.backend.random_normal(shape=(tf.shape(z_mean)[0], latent_dim)) return z_mean + tf.exp(0.5 * z_log_var) * epsilon z = layers.Lambda(sampling)([z_mean, z_log_var]) # Decoder network
decoder_inputs = layers.Input(shape=(latent_dim,))
x = layers.concatenate([decoder_inputs, label])
x = layers.Dense(64, activation='relu')(x)
x = layers.Dense(28 * 28 * 1, activation='sigmoid')(x)
x = layers.Reshape((28, 28, 1))(x) # Create the models
encoder = Model([encoder_inputs, label], [z_mean, z_log_var, z], name='encoder')
decoder = Model([decoder_inputs, label], x, name='decoder')
cvae = Model([encoder_inputs, label], decoder([z, label]), name='cvae')
#import csv

이 코드는 CVAE 모델의 기본 구조를 제공합니다. 이미지를 훈련하고 생성하려면 적절한 데이터 세트와 추가 조정이 필요합니다.

CVAE의 응용

CVAE는 다음을 포함한 다양한 도메인에 적용됩니다.

이미지-이미지 변환:  콘텐츠를 보존하면서 한 도메인에서 다른 도메인으로 이미지를 번역하는 데 사용할 수 있습니다. 말 사진이 있고 주요 특징을 유지하면서 얼룩말로 바꾸고 싶다고 상상해 보세요. CVAE는 다음과 같이 할 수 있습니다.

#import csv# Translate horse image to a zebra image
translated_image = cvae_generate(horse_image, target="zebra")

스타일 전송: CVAE를 사용하면 이미지 간에 예술적 스타일을 전송할 수 있습니다. 당신이 사진을 가지고 있고 그것을 반 고흐의 "별이 빛나는 밤"과 같은 유명한 그림처럼 보이길 원한다고 가정해 보십시오. CVAE는 해당 스타일을 적용할 수 있습니다.

#import csv
# Apply "Starry Night" style to your photo
styled_image = cvae_apply_style(your_photo, style="Starry Night")
  • 이상 탐지: 데이터의 이상 징후를 탐지하는 데 효과적입니다. 정상적인 심장 박동의 데이터 세트가 있고 불규칙한 심장 박동을 감지하려고 합니다. CVAE는 이상 징후를 발견할 수 있습니다.
# Detect irregular heartbeats
is_anomaly = cvae_detect_anomaly(heartbeat_data)
  • 약물 발견: CVAE는 약물 발견을 위한 분자 구조를 생성하는 데 도움이 됩니다. 생명을 구하는 약물을 위한 새로운 분자를 찾아야 한다고 가정해 보겠습니다. CVAE는 분자 구조를 설계하는 데 도움이 될 수 있습니다.
#import csv# Generate potential drug molecules
drug_molecule = cvae_generate_molecule("anti-cancer")

이러한 애플리케이션은 CVAE가 이미지를 변환하고, 예술적 스타일을 적용하고, 이상 현상을 감지하고, 약물 발견과 같은 중요한 작업을 지원하는 동시에 기본 데이터를 의미 있고 유용하게 유지하는 방법을 보여줍니다.

도전과 앞으로의 방향

도전

  • 모드 축소: CVAE를 때때로 모든 색상을 사용하는 것을 잊어버리는 화가처럼 생각하십시오. CVAE가 다양한 항목에 대해 동일한 색상(표현)을 계속 사용하면 모드 붕괴가 발생합니다. 따라서 그들은 모든 동물을 단 하나의 색상으로 칠하여 다양성을 잃을 수도 있습니다.
  • 고해상도 이미지 생성: 예술가에게 작은 캔버스에 세밀하고 큰 벽화를 그려달라고 요청한다고 상상해 보십시오. 그것은 도전적이다. CVAE는 매우 상세하고 큰 그림을 만들 때 비슷한 문제에 직면합니다.

미래 목표

연구자들은 CVAE를 더 좋게 만들고 싶어합니다.

  • 모드 축소 방지: 아티스트(CVAE)가 가지고 있는 모든 색상(표현)을 사용하여 보다 다양하고 정확한 결과를 얻을 수 있도록 노력하고 있습니다.
  • 고해상도 아트: 그들은 사용된 기술을 개선하여 예술가(CVAE)가 더 크고 더 상세한 벽화(이미지)를 그릴 수 있도록 돕는 것을 목표로 합니다. 이런 식으로 우리는 CVAE로부터 인상적이고 고품질의 작품을 얻을 수 있습니다.

결론

출처 : 아이뉴스

조건부 변형 자동 인코더는 Generative AI의 획기적인 발전을 나타냅니다. 특정 조건을 기반으로 데이터를 생성하는 능력은 다양한 응용 분야에서 가능성의 세계를 열어줍니다. 기본 원리를 이해하고 이를 효과적으로 구현함으로써 고급 이미지 생성 이상을 위한 CVAE의 잠재력을 활용할 수 있습니다.

주요 요점

  1. 생성적 AI 발전: 조건부 입력으로 이미지 생성을 활성화합니다.
  2. 간단한 커피 비유: VAE를 커피 선호도를 요약하고 본질을 보존하면서 변형을 허용하는 것과 같다고 생각하십시오.
  3. 기본 VAE 코드: MNIST 데이터 세트를 사용하여 초보자에게 친숙한 VAE Python 코드 예제가 제공됩니다.
  4. CVAE 구현: 이 기사에는 조건부 이미지 생성을 위한 CVAE를 구현하는 코드 조각이 포함되어 있습니다.
  5. 온라인 쇼핑 예시: 온라인 운동화 쇼핑에 대한 비유는 조건에 따라 데이터를 맞춤화하는 CVAE의 능력을 보여줍니다.

자주 묻는 질문

Q1. 조건부 VAE는 VAE와 어떻게 다릅니까?

A. VAE는 임의성을 지닌 데이터를 생성하는 반면, CVAE는 특정 조건이나 제약 조건이 있는 데이터를 생성합니다. VAE는 임의의 예술 작품을 만드는 예술가와 같습니다.

Q2. AI 및 기계 학습 분야에서 조건부 VAE의 역할은 무엇입니까?

A. CVAE(조건부 변형 자동 인코더)는 AI 세계에서 매우 유용합니다. 특정 조건에 따라 맞춤형 데이터를 생성하여 다양한 애플리케이션에 대한 가능성을 열어줄 수 있습니다.

Q3.CVAE용 오픈 소스 또는 사전 학습된 모델인 라이브러리는 무엇입니까?

A. 예, CVAE 구축을 위한 도구를 제공하는 TensorFlow 및 PyTorch와 같은 오픈 소스 라이브러리를 찾을 수 있습니다. 일부 사전 학습된 모델과 코드 예제를 이러한 라이브러리에서 사용하여 프로젝트를 시작할 수 있습니다.

Q4. 특정 작업에 사용할 수 있는 사전 훈련된 CVAE 모델이 있습니까?

A. 사전 훈련된 CVAE 모델은 CNN(Convolutional Neural Networks)과 같은 다른 아키텍처에 비해 덜 일반적입니다. 그러나 모델을 미세 조정하여 작업에 맞게 조정할 수 있는 사전 훈련된 VAE를 찾을 수 있습니다.

이 기사에 표시된 미디어는 Analytics Vidhya의 소유가 아니며 작성자의 재량에 따라 사용됩니다.

spot_img

라이프사이VC

라이프사이VC

최신 인텔리전스

spot_img