0Pricing
Learn AI with Python · 강의

조건부 GAN과 스타일 전이

클래스 조건을 적용한 cGAN, CycleGAN 개념, VGG를 활용한 신경망 스타일 전이를 다룹니다.

조건부 GAN과 스타일 전이은(는) CoddyKit의 무료 Learn AI with Python 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Learn AI with Python 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Learn AI with Python 강의에는 총 4개의 강의가 포함되어 있습니다.

GAN이 생성하는 결과 제어

일반 GAN은 무작위 샘플을 생성하므로 특정 클래스를 지정할 수 없습니다. 이 단원에서는 조건부 생성(cGAN), 짝이 없는 이미지 변환(CycleGAN), 신경망 스타일 전이를 다룹니다.

조건부 GAN(cGAN)

cGAN은 생성자와 판별자 모두에 조건(예: 클래스 레이블)을 추가합니다. 이제 잡음과 함께 레이블을 입력해 “7을 생성해 줘”라고 요청할 수 있습니다.

생성자에 조건 추가

생성자는 레이블(원-핫 벡터 또는 임베딩)을 잡음 벡터와 연결합니다. 결합된 입력을 사용하면 요청한 클래스에 해당하는 샘플을 생성할 수 있습니다.

label_emb = embedding(label)        # e.g. dim 10
z = torch.randn(batch, 100)
gen_input = torch.cat([z, label_emb], dim=1)
fake = generator(gen_input)

판별자에 조건 추가

판별자도 레이블을 받으므로 단순히 “이것은 실제인가?”만 판단하는 것이 아니라 “이것은 이 클래스의 실제 예시인가?”를 판단합니다. 이를 통해 생성자가 조건을 반드시 따르도록 합니다.

d_input = torch.cat([image, label_emb], dim=1)
score = discriminator(d_input)

짝이 없는 이미지 변환

서로 대응하는 쌍이 없는 경우가 많습니다(예: 같은 말을 얼룩말로 바꾼 이미지). CycleGAN은 짝이 없는 이미지를 사용해 두 도메인 사이를 변환하며, 정렬된 예시 없이 말에서 얼룩말로, 다시 얼룩말에서 말로 변환하는 법을 학습합니다.

두 생성자, 두 도메인

CycleGAN은 두 생성자를 사용합니다. G: A to B와 F: B to A이며, 각 생성자에는 자체 판별자가 있습니다. 두 생성자는 함께 두 도메인 사이를 양방향으로 변환합니다.

# G: photo -> painting
# F: painting -> photo

순환 일관성 손실

핵심 아이디어는 A를 B로 변환한 다음 다시 A로 변환했을 때 원본이 나와야 한다는 것입니다. 순환 일관성 손실은 F(G(a)) == a를 강제하여, 쌍을 이룬 데이터 없이도 매핑을 제한합니다.

cycle_loss = (
    l1(F(G(a)), a) +
    l1(G(F(b)), b)
)

신경망 스타일 전이

신경망 스타일 전이는 한 이미지의 콘텐츠와 다른 이미지의 스타일을 결합합니다(예: 반 고흐가 그린 것처럼 보이는 사진). 사전 학습된 CNN의 특징을 사용해 출력 이미지를 직접 최적화합니다.

콘텐츠 손실

콘텐츠 손실은 깊은 CNN 특징 맵을 일치시켜 출력의 고수준 구조가 콘텐츠 이미지와 가깝게 유지되도록 합니다. 이미지에 무엇이 있는지를 보존합니다.

content_loss = mse(features_out, features_content)

스타일 손실과 그램 행렬

스타일은 특징 채널 사이의 상관관계를 나타내는 그램 행렬로 포착합니다. 그램 행렬을 일치시키면 텍스처와 색상이 전달됩니다. 스타일 손실은 출력 이미지와 스타일 이미지의 그램 행렬을 비교합니다.

def gram(f):
    b, c, h, w = f.size()
    f = f.view(c, h * w)
    return f @ f.t()

style_loss = mse(gram(features_out), gram(features_style))

손실 결합

전체 손실은 가중합입니다. alpha * content_loss + beta * style_loss와 같습니다. 가중치를 조정하면 결과가 콘텐츠를 얼마나 보존할지와 스타일을 얼마나 강하게 적용할지의 균형을 조절할 수 있습니다.

total = alpha * content_loss + beta * style_loss
total.backward()  # gradients update the output IMAGE

빠른 확인

조건부 생성에 대한 지식을 확인해 보세요.

요약: 조건부 GAN과 스타일 전이

cGANs는 제어된 생성을 위해 클래스 레이블을 생성자(및 판별자)의 입력에 연결하고, CycleGAN은 짝이 없는 변환에 순환 일관성 손실을 사용하며, 신경망 스타일 전이는 콘텐츠 손실과 그램 행렬 스타일 손실을 결합해 이미지를 다시 그린다는 것을 학습했습니다.

자주 묻는 질문

“조건부 GAN과 스타일 전이” 강의는 무료인가요?

네 — “조건부 GAN과 스타일 전이” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Learn AI with Python 강의 전체를 잠금 해제할 수 있습니다. Learn AI with Python 강의에는 총 4개의 강의가 포함되어 있습니다.

“조건부 GAN과 스타일 전이”에서 뭘 배우나요?

클래스 조건을 적용한 cGAN, CycleGAN 개념, VGG를 활용한 신경망 스타일 전이를 다룹니다. 브라우저에서 직접 실행하는 실습 코드로 Learn AI with Python을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Learn AI with Python을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Learn AI with Python은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“조건부 GAN과 스타일 전이” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Learn AI with Python 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Learn AI with Python 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 표현 학습을 위한 오토인코더
  2. 변분 오토인코더(VAE)
  3. GAN: 생성자와 판별자
  4. 조건부 GAN과 스타일 전이
← Learn AI with Python(으)로 돌아가기