Afbeeldingen maken met AI (kunstmatige intelligentie )
Het kan je niet ontgaan zijn: AI, kunstmatige intelligentie, is ineens o-ver-al in het nieuws. Behalve teksten genereren kan er nog veel meer met AI. Plaatjes maken bijvoorbeeld. Jij vertelt aan de generator wat je wilt zien, waarna Stable Diffusion, zoals deze AI-tool heet, de afbeeldingen voor je maakt. ID.nl legt je in dit artikel uit hoe je er zelf mee aan de slag kunt en hoe je er de beste resultaten mee boekt.
Let op: dit is een masterclass. Om de stappen in dit artikel te volgen, moet je wel beschikken over de nodige programmeerkennis en de juiste hardware.
Met AI kun je meer dan alleen teksten genereren. Stable Diffusion is een AI-tool waarmee je zelf afbeeldingen kunt maken. In deze masterclass laten we jou zien hoe deze AI-tool volledig naar de hand kan zetten. We behandelen onder andere de volgende punten:
- Benodigdheden
- Het gebruik van Stable Diffusion
- Prompt engineering & mutaties
Wil jij leren hoe je gemakkelijk oude foto's tot leven kan brengen? Lees dan: Deep Nostalgia: A.I. brengt oude foto's tot leven
Begin 2021 introduceerde OpenAI DALL-E, een neuraal netwerk dat was getraind met combinaties van grote hoeveelheden afbeeldingen en beschrijvingen daarvan. Met die kennis was DALL-E in staat om geheel nieuwe plaatjes te genereren op basis van een Engelstalige tekst die in het jargon een prompt wordt genoemd. Alhoewel de resultaten indrukwekkend oogden, kon het publiek er weinig mee; we mochten slechts online spelen met wat voorgekookte voorbeelden. De reden? OpenAI wilde uitgebreid onderzoek doen naar de gevolgen van dergelijke technologie (zie kader ‘Implicaties’).
Naar goed wetenschappelijk gebruik had men echter wel de basisprincipes achter deze technologie gepubliceerd en daar gingen onmiddellijk veel hobby-programmeurs mee aan de slag. Het gevolg was een stortvloed aan AI-modellen die weliswaar DALL-E niet konden evenaren, maar waar wel iedereen mee kon spelen.
Wellicht mede omdat deze modellen in rap tempo beter werden, besloot OpenAI medio 2022 om opvolger DALL-E 2 mondjesmaat voor publiek toegankelijk te maken en inmiddels kan iedereen zich aanmelden. De dienst werkt alleen op hun eigen hardware en het neurale netwerk wordt niet gedeeld. Je kunt je aanmelden op https://openai.com/dall-e-2.
Ondertussen zat de opensource-community niet stil en met steun van www.stability.ai werd (ongeveer tegelijk met DALL-E 2) Stable Diffusion gelanceerd, compleet met een getraind neurale netwerk, en dat alles opensource.
**Implicaties **
De komst van steeds betere text-to-image-modellen zorgt momenteel voor veel onrust, met name onder mensen die de kost verdienen met het maken van beeld (fotografen, illustrators en kunstenaars). De betere neurale netwerken zijn namelijk getraind met honderden miljoenen of zelfs miljarden van internet gesprokkelde afbeeldingen. Hoe zit het met de rechten van de mensen die deze hebben vervaardigd en wiens stijl de AI nu ineens kan nabootsen? Ongetwijfeld zal de komende jaren wetgeving worden ontwikkeld die hierin duidelijkheid moet brengen, maar in hoeverre die te handhaven is, is maar zeer de vraag. Vanwege de vele juridische vragen weigeren verschillende beeldbanken momenteel door AI gegenereerd beeld.
Andere punten van zorg rond deze revolutie gaan over het gemak waarmee iedereen nu beeld bij nepnieuws kan maken en de mate waarin AI bestaande stereotypen bevestigt.
Dit heb je nodig
Het vrijgeven van Stable Diffusion als opensource-model heeft ervoor gezorgd dat verschillende aanbieders van text-to-image-systemen het aan hun arsenaal hebben toegevoegd (zie kader ‘Alternatieven’).
Omdat Stable Diffusion in vergelijking tot zijn voorgangers relatief bescheiden eisen aan de hardware stelt, draait het ook op veel pc’s en dat biedt allerlei voordelen. Wij focussen ons ook op de pc, met de kanttekening dat alles wat we behandelen in veel andere omgevingen op vergelijkbare wijze werkt.
AI leunt zwaar op Python en de grafische hardware van Nvidia met minimaal 8 GB geheugen. Terwijl we dit schrijven, wordt ook gewerkt aan varianten die op andere (en nog bescheidenere) hardware werken.
Hoewel je lokaal de benodigde Python-scripts zou kunnen draaien, heeft het gebruik van het programma Visions of Chaos onze voorkeur. Deze software is oorspronkelijk bedoeld voor het maken van fractals en biedt een eenvoudige gebruikersinterface (die geen kennis van Python vereist). Het bevat een stortvloed aan opensource-AI, waaronder naast Stable Diffusion ook andere text-to-image-modellen, AI om foto’s en video’s te vergroten of in te kleuren, en heel veel meer.
Om Visions of Chaos voor AI te kunnen gebruiken, moet je eerst een aantal stappen zorgvuldig uitvoeren. Daarna kun je Visions of Chaos downloaden en installeren.
**Alternatieven **
Stable Diffusion draai je in een eenvoudige gebruikersinterface op de hardware van de makers op DreamStudio (2 dollar voor 200 afbeeldingen). Andere betaalde online alternatieven zijn Wombo Dream, NightCafé en MidJourney.
Heb je zelf geen geschikte hardware en wil je ook niet betalen, dan kun je terecht bij Google Colab. Hier vind je vele Python-scripts voor Stable Diffusion en aanverwante AI, zoals Deforum. Colab-scripts zijn Python-programma’s die je op de hardware van Google kunt draaien door simpelweg op de afspeelknop van elk codeblok te klikken. Verschijnt er een groen vinkje, dan kun je door met het volgende blok. Deze werkwijze is weliswaar wat minder comfortabel, maar wel vanaf elk apparaat met een browser gratis te gebruiken.
Vind je dat alles te complex en wil je toch niets betalen, dan is er de app VoiceArt (iOS en Android) waarin je je opdrachten zelfs kunt inspreken.
Stable Diffusion draaien
Heb je Visions of Chaos eenmaal geïnstalleerd, dan start je het programma en ga je naar Mode / Machine Learning / Image Generation / Text-to-image. Het programma controleert nu of je systeem aan alle vereisten voldoet die bij paragraaf 1 moesten worden geïnstalleerd en daarna kom je in de interface voor de functie text-to-image. Kies je hier Stable Diffusion uit de lijst achter Script, dan gaat Visions of Chaos de benodigde componenten downloaden en een virtuele omgeving opzetten waarin deze draaien. Dat laatste is nodig omdat verschillende AI-modellen een andere combinatie van Python-bibliotheken vereisen. Dankzij Visions of Chaos hoef je daar nooit zelf naar om te kijken.
Het ingewikkeldste deel is nu voorbij, want het downloaden van meer modellen en opzetten van meer omgevingen gebeurt slechts eenmalig, wanneer je een nieuwe AI voor het eerst gebruikt.
Tijd om ons eerste plaatje te maken. In het vak Prompt voeren we de tekst a cute kitten in en daarna klikken we op Stable Diffusion Settings. Hier zetten we de opties Image Count en Grid Columns op 1 en klikken we op Close and Generate.
Na ongeveer een halve minuut (op ons testsysteem) verschijnt het plaatje. In het statusvenster linksonder zie je overigens waar de resultaten standaard worden opgeslagen. Je kunt allerlei opslaglocaties aanpassen in het menu Options.
Beschikt je grafische kaart over voldoende geheugen (zoals op ons testsysteem), dan kun je overigens ook meerdere plaatjes tegelijk genereren.
Inspiratie opdoen
Zoiets simpels als ‘a cute kitten’ leent zich prima voor het snel maken van een plaatje, maar meestal is er heel wat meer nodig om het resultaat te krijgen dat je voor ogen hebt. Het maken van goede prompts is dan ook in rap tempo uitgegroeid tot een bijna wetenschappelijke bezigheid die prompt engineering wordt genoemd.
Behalve van personen en objecten heeft Stable Diffusion ook kennis van heel veel grafische technieken en media, kunststromingen en artiesten. Het uitpluizen van de vele mogelijkheden op dit gebied is misschien wel het krachtigste wapen in het arsenaal van de prompt engineer.
Een goed startpunt vormt het overzicht van (grafische) media en technieken op Wikipedia en bij Aesthetics Wiki vind je allerlei visuele stijlen. De overstap naar kunstrichtingen maak je op WikiArt waar je ook de naam van heel veel kunstenaars vindt, compleet met voorbeelden. Naast deze algemene sites kun je op internet zoeken naar overzichten van stijlen in architectuur en design, namen van bekende fotografen voor allerlei genres (portret, mode, landschap enzovoort). Al deze informatie bij elkaar vormt het begin van de inspiratie om betere prompts te formuleren die je meer naar eigen hand kunt zetten.
Nauwkeurigheid
In het prompt-venster van Visions of Chaos zie je een veld met de naam Seed. Dit houdt verband met de manier waarop deze en andere AI werken. Ze beginnen vaak met een afbeelding die uit ruis bestaat en proberen deze in het opgegeven aantal stappen (Iterations) om te toveren tot iets wat lijkt op de opgegeven prompt. Begin je met een andere waarde voor de seed, dan zal het eindresultaat ook anders zijn, wat betekent dat je met één prompt miljarden verschillende afbeeldingen kunt maken.
Vanwege de complexe wiskunde achter dit soort modellen waren veel voorgangers van Stable Diffusion niet-deterministisch. Met andere woorden: dezelfde seed gaf verschillende resultaten wanneer je er meerdere plaatjes mee genereerde.
De grote kracht van Stable Diffusion zit in het feit dat deze wél deterministisch is. Dat zorgt ervoor dat je het effect van wijzigingen in prompts nauwkeurig kunt testen en bestuderen.
Uitgebreid testen
Omdat Visions of Chaos verschillende mogelijkheden biedt om batches van prompts te verwerken, kun je dit soort tests eenvoudig ‘s nachts laten draaien.
Om te achterhalen welke kunstenaars de AI kent, kun je bijvoorbeeld een lijst met prompts maken in de vorm van an artwork by X en deze laten uitvoeren via Batch / A list of text prompts. Een andere mogelijkheid vind je onder dezelfde knop bij Iterative text prompts. Hier kun je een prompt invoeren zoals a painting of a %1 by %2 waarbij je onder %1 replacements wat onderwerpen opgeeft en bij %2 replacements een aantal kunstenaars.
Als voorbeeld kiezen we een vaste seed, zeg 1000, en geven de prompt a portrait of a beautiful girl. Vervolgens voegen we daar elementen aan toe om het resultaat te wijzigen (modifiers genaamd). Met a portrait of a beautiful girl, pencil sketch (of oil painting, gouache enzovoort) test je zo technieken en media. Met a portrait of a beautiful girl, by Albert Anker test en vergelijk je kunstenaars. En met a portrait of a beautiful girl, Steampunk (of medieval, ancient egyptian, cubism enzovoort) test je visuele stijlen.
Door dit soort tests uit te voeren, bouw je vanzelf een bibliotheek met referentiemateriaal op die je kunt gebruiken wanneer je beeld wilt gaan genereren voor een willekeurige gelegenheid. Daarmee zijn we er echter nog niet.
Spelen met variabelen
Oudere AI-modellen boden vaak de mogelijkheid om met ‘gewichten’ te werken, wat je extra controle gaf over het resultaat. Een prompt was dan bijvoorbeeld a forest | foggy:x | autumn:y, en door de waarden voor x en y groter of kleiner te maken, kon je de hoeveelheid mist en de sterkte van de herfstkleuren beïnvloeden. Stable Diffusion ondersteunt deze mogelijkheid vooralsnog niet, maar dat wil niet zeggen dat we geen controle hebben.
In Stable Diffusion geven we als vergelijking met dezelfde seed deze vier prompts:
- a foggy forest in autumn;
- a forest, foggy, autumn;
- foggy, autumn, a forest;
- autumn, foggy, a forest.
Zoals je ziet in de afbeelding zijn er nuanceverschillen in de uitkomst en dus is de woordvolgorde belangrijk. Overigens kun je ook proberen een element te versterken door het woord te herhalen (eventueel in een synoniem).
Prompt engineering
Met alle verzamelde kennis kunnen we serieus aan de slag met prompt engineering. Naast al genoemde stijlen, media en namen van kunstenaars kun je nog de nodige andere elementen toevoegen. Erg populair is de toevoeging trending on Artstation die je resultaat vaak net wat fraaier maakt. Ook veelgebruikt zijn modifiers die verwijzen naar grafische technieken uit 3D-games zoals raytracing en Unreal Engine.
Als voorbeeld van een grondig uitgewerkte prompt bekijken we het resultaat van:
an elaborately furnished 1970s retro-futuristic interior, octane render, raytracing, volumetric lighting, wide angle, sofa, coffee table in foreground, large potted plant, futuristic lamps, biomorphic windows look out on a futuristic cityscape, mandelbulb space, fractal textures, trending on Artstation, Unreal Engine 3D shading, shadow depth, by Rackstraw Downes, by Canaletto, by Paul Delvaux, by Jakub Schikaneder
Om exact hetzelfde resultaat te krijgen als wij gebruik je 1906332652 voor het veld Seed en 50 voor Iterations. Vervolgens klik je op Stable Diffusion Settings en zet je een vinkje bij Custom image size. Vul daar 960x512 in (mocht blijken dat je grafische kaart dat niet aankan, dan kun je kiezen voor een andere instelling bij VRAM Offloading). Kies bij Sampler k_lms, zet Scale op 15 en klik op Close and generate.
Mutaties
Zoals we eerder zeiden is Stable Diffusion deterministisch, maar dat geldt alleen wanneer je exact dezelfde instellingen gebruikt (inclusief de resolutie). Om te zien hoe dramatisch het verschil kan zijn, renderen we dezelfde prompt op 512x512.
Een andere belangrijke factor is de gebruikte Sampler (de methode waarmee de AI vanaf de initiële ruis naar het eindresultaat navigeert). We kiezen euler_ancestral in plaats van k_lms. Het resultaat is totaal anders dan ons vorige plaatje op 512x512, maar heeft wel een vergelijkbare uitstraling.
Een andere belangrijke factor voor het eindresultaat is de combinatie van Iterations en Scale. De eerste bepaalt het aantal stappen waarbinnen de AI beeld moet tonen en de tweede hoe nauwkeurig de prompt moet worden gevolgd. Het absolute minimum om vaak nog bruikbaar beeld te krijgen is Iterations=20 en Scale=7. Zeker met complexe prompts kan het resultaat dan snel wat rommeliger worden. Hogere waarden voor Scale vereisen vaak ook meer iteraties, maar een exacte formule is daarvoor niet te geven.
Omdat je met complexe prompts vaak ook flink grote waarden voor Scale kunt gebruiken, geven ze je meer ruimte om te experimenteren. Als laatste voorbeeld daarvan renderen we Iterations=100 en Scale=25.
Aan de slag
We hebben je laten zien hoe je complexe prompts leert bouwen door kennis te vergaren over de stijlen, media en kunstenaars die Stable Diffusion kent. Gelukkig hoef je het wiel niet helemaal opnieuw uit te vinden. Op www.urania.ai/top-sd-artists zie je hoe Stable Diffusion de stijl van bijna tweeduizend artiesten interpreteert. Op www.krea.ai kun je naast het effect van de namen van kunstenaars ook de werking van heel veel andere modifiers bestuderen en leren van de prompts van anderen. Dat laatste kan ook via de miljoenen doorzoekbare afbeeldingen op www.lexica.art.
Hoewel je met het langs deze weg genereren van plaatjes jarenlang bezig kunt zijn, is dat nog maar het begin. We hebben het namelijk nog niet eens gehad over het zelf trainen van AI of het maken van animaties. Er valt dus nog heel wat meer te ontdekken.
**Inpainting en outpainting **
Bij de lancering had DALL-E 2 twee belangrijke troeven in handen ten opzichte van Stable Diffusion. Het genereert om te beginnen standaard plaatjes op 1024 × 1024 pixels waar dat bij Stable Diffusion 512 × 512 pixels is. Daar staat tegenover dat je in Stable Diffusion ook veel andere resoluties kunt kiezen. Overigens met wisselend succes, omdat dit soort modellen altijd wordt getraind met vierkante plaatjes waardoor renderen in portret- of landschapsformaat soms tot herhaling van beeldelementen leidt.
De tweede troef van DALL-E waren de functies inpainting en outpainting. Met de eerste wis je een deel van een plaatje en laat je DALL-E daar naadloos iets anders voor invullen op basis van een prompt. Met de tweede ‘verzint’ DALL-E wat er buiten een plaatje te zien zou kunnen zijn en vult dat aan via een prompt. Inmiddels kent Stable Diffusion deze trucjes ook en worden ze via DreamStudio (zie kader ‘Alternatieven’) al aangeboden. Inpainting is daarnaast beschikbaar binnen Stable Diffusion WebUI dat Visions of Chaos ook voor je downloadt en installeert. Ongetwijfeld zal outpainting daaraan al zijn toegevoegd wanneer je dit leest.