Lær AI med Python · leksjon

Betingede GAN-er og stiloverføring

cGAN med klassebetinging, CycleGAN-konseptet og nevral stiloverføring med VGG.

Leksjon 4 av 413 trinn

Betingede GAN-er og stiloverføring er en gratis leksjon i Lær AI med Python på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Lær AI med Python, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Lær AI med Python inneholder totalt 4 leksjoner.

Kontrollere hva GAN-er genererer

En vanlig GAN produserer tilfeldige eksempler; det er ikke mulig å be om en bestemt klasse. Denne leksjonen dekker betinget generering (cGAN-er), oversettelse av bilder uten par (CycleGAN) og nevral stiloverføring.

Betingede GAN-er (cGAN)

En cGAN legger til en betingelse, for eksempel en klasseetikett, i både generatoren og diskriminatoren. Da kan man be om «generer en 7» ved å gi etiketten sammen med støyen.

Kondisjonering av generatoren

Generatoren konkatenerer etiketten (one-hot-kodet eller embeddet) med støyvektoren. Den kombinerte inndataen gjør at den kan generere eksempler fra den forespurte klassen.

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)

Kondisjonering av diskriminatoren

Diskriminatoren mottar også etiketten, så den vurderer ikke bare «er dette ekte?», men «er dette et ekte eksempel på denne klassen?». Dette tvinger generatoren til å respektere betingelsen.

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

Oversettelse av bilder uten par

Ofte mangler vi samsvarende par, for eksempel det samme motivet av en hest som en sebra. CycleGAN oversetter mellom to domener ved hjelp av bilder uten par, og lærer oversettelsen fra hest til sebra og tilbake uten samordnede eksempler.

To generatorer, to domener

CycleGAN bruker to generatorer: G: A to B og F: B to A, hver med sin egen diskriminator. Sammen oversetter de i begge retninger mellom domenene.

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

Sykluskonsistenstap

Hovedideen er at en oversettelse fra A til B og tilbake til A bør gi originalen tilbake. Sykluskonsistenstapet håndhever F(G(a)) == a, noe som begrenser avbildningen uten parvise data.

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

Nevral stiloverføring

Nevral stiloverføring blander innholdet i ett bilde med stilen i et annet, for eksempel et foto malt i Van Goghs stil. Utdata­bildet optimaliseres direkte ved hjelp av features fra et forhåndstrent CNN.

Innholdstap

Innholdstapet holder utdataenes overordnede struktur nær innholdsbildet ved å matche dype featurekart fra CNN-et. Det bevarer hva som finnes i bildet.

content_loss = mse(features_out, features_content)

Stiltap og Gram-matrisen

Stil fanges opp av Gram-matrisen, altså korrelasjonene mellom featurekanalene. Ved å matche Gram-matriser overføres teksturer og farger. Stiltapet sammenligner Gram-matrisene til utdataene og stilbildet.

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))

Kombinere tapene

Det totale tapet er en vektet sum: alpha * content_loss + beta * style_loss. Ved å justere vektene balanserer man hvor mye resultatet bevarer innholdet, mot hvor sterkt det tar til seg stilen.

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

Kort sjekk

Test kunnskapen om betinget generering.

Oppsummering: Betingede GAN-er og stiloverføring

Det ble gjennomgått at cGAN-er konkatenerer en klasseetikett med inndataene til generatoren og diskriminatoren for kontrollert generering, at CycleGAN bruker sykluskonsistenstap til oversettelse uten par, og at nevral stiloverføring kombinerer innholdstap med et Gram-matrisebasert stiltap for å male bilder på nytt.

Gratis å komme i gang

Lær deg Python med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
53
Leksjoner
225

Ofte stilte spørsmål

Er leksjonen «Betingede GAN-er og stiloverføring» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Lær AI med Python, inkludert «Betingede GAN-er og stiloverføring», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Lær AI med Python inneholder totalt 4 leksjoner.

Hva lærer jeg i «Betingede GAN-er og stiloverføring»?

cGAN med klassebetinging, CycleGAN-konseptet og nevral stiloverføring med VGG. Du øver på Lær AI med Python med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Lær AI med Python?

Ingen tidligere erfaring er nødvendig. Lær AI med Python på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.

Hvor lang tid tar leksjonen «Betingede GAN-er og stiloverføring»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Lær AI med Python-leksjonen?

Ja. Alle Lær AI med Python-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Autoenkodere for læring av representasjoner
  2. Variasjonelle autoenkodere (VAE)
  3. GAN-er: generator og diskriminator
  4. Betingede GAN-er og stiloverføring
← Tilbake til Lær AI med Python