HTML

Az élet kódjai

Csináld maga. Senki nem csinálja meg helyetted.

Friss topikok

Rajzolj, te gép!

2022.10.10. 00:01 Travis.CG

Vicces, hogy a tudományos-fantasztikus könyvek nagy többsége az öntudatra ébredt robotokat hideg logikával mutatja be, képtelenek a művészetre és bármilyen kreatív tevékenységre, viszont a végletekig racionálisak. Ennek ellenére a valóságban a tanuló algoritmusok tök hülyék, viszont kreatív alkotásban lepipálnak néhány embert.

A változás szele érezhető. A Function idején egy hirtelen szabálymódosítással meg is tiltották a tanuló algoritmussal generált képek nevezését. A döntés érthető. Relatíve olcsón egész jó minőségű képeket lehet létrehozni. Igazából rengeteget lehet vitatkozni arról, hogy ez most jó-e vagy rossz. Előkerül a ki a művész, mi a művészet kérdés. Ehelyett inkább nézzük meg, mire is képes az algoritmus.

Az egyetlen nyílt forráskódú rajzoló program a stable diffusion névre hallgat. Ezt tudjuk lokálisan is futtatni. Ennek is egy memória optimalizált változatát teszteltem, mert ez lefut a 10 éves számítógépemen (bár a videokari csak 7 éves). Először is installáltam a miniconda-t.

git clone https://github.com/basujindal/stable-diffusion
cd stable-diffusion
conda env create -f environment.yaml
conda activate ldm

Ezután le kell tölteni egy 5GB-os modellt (sd-v1-4.ckpt) a HuggingFace oldaláról. Erre nem tudok közvetlen linket adni, mert regisztrálni kell az oldalra. Át kell nevezni model.ckpt-re és bemásolni a stable-diffusion/models/ldm/stable-diffusion-v1 könyvtárba. Ha a könyvtár nem létezik, létre kell hozni. És ennyi.

Az első szkript, amit futtathatunk, a txt2img.py. Angolul írunk egy kifejezést, mire a program a legjobb tudásához mérten előállít egy képet. Mint az elején írtam, ez egy tök hülye algoritmus, és ezt elég könnyű észrevenni. Először is, teljesen hiányzik belőle a "józan paraszti ész". Tehát láthatunk embereket például három lábbal. Vagy a fej teljesen meg is tekeredhet a törzshöz képest. Bevallom néhány kép a Kör című horrort juttatta eszembe.

Az arc sokszor kivehetetlen. Csak mellékesen jegyzem meg, volt egy barátom, aki imádott rajzolni, de az emberi arc neki sem ment jól. Ezért ha embert rajzolt, az mindig csukját viselt. Az ő szintjére már eljutott ez a program.

Tehát minél részletesebb képet akarunk, annál pontosabban kell megmondanunk, mit is akarunk látni. Nézzünk meg egy alkotási folyamatot.

Nekem van egy demó ötletem, ami úgy kezdődne, hogy egy robot kitöri egy felhőkarcoló ablakát és kiugrik. Ehhez kerestem koncepciónak különböző képeket az interneten, de nagyon nyögve nyelős a folyamat. Viszont sokkal jobb, ha a géppel elkészíttetem. Így sokkal hamarabb eljutok egy olyan képhez, ami már közelebb van ahhoz, amit elképzeltem.

Elsőre a következőt írtam be neki:

humanoid robot jumping through skyscaper's window

seed_35_00008.png

Mint látható, az algoritmus hülye. Ha átugrok egy ablakon, akkor kitörik az üveg. Ez egyáltalán nem evidens a programnak. Ezért módosítottam:

python3 optimizedSD/optimized_txt2img.py --prompt "humanoid robot breaking out the skyscaper's window, jumping out, glass debris everywhere" --H 512 --W 512 --seed 27 --n_iter 2 --n_samples 5 --ddim_steps 50

seed_30_00003.png

Ez már egy picit jobb lett. A robot lába még mindig elé béna. Ráadásul a képen úgy tűnik befelé ugrik, nem kifelé.

Azt sem szabad elfelejteni, hogy az algoritmus igencsak függ a tanuló adatoktól. Például mikor egy jövőbeli katonát akartam hatalmas fegyverrel, akkor a fejemben egy brutál Master Chief jelent meg, vagy valami rémálom a Warhammer univerzumból. Ennek ellenére ezt kaptam:

python3 optimizedSD/optimized_txt2img.py --prompt "futuristic soldier with big gun in rural village" --H 512 --W 512 --seed 27 --n_iter 2 --n_samples 5 --ddim_steps 50

seed_153869_00003.png

Az összes elkészített képen vagy feketék vagy koreaiak vannak.

A legkeményebb próbatételnek viszont a lányom kérése bizonyult. Mikor látta, miket művelek, azt kérte, írjam be "pelenka szitál". Két napig próbáltam kiszedni a lányomból, hogy ez mi a túrót jelent, mire képes volt úgy lefordítani, hogy legalább én megértsem.

"Apa, ez azt jelenti, hogy a pelenkának van szeme meg szája és tart egy szitát." Továbbra sem értem, mit is akar ez jelenteni, és pontosabb részleteket is nehéz tőle kérni, mert elkezd röhögni ezen a hülyeségen és utána képtelenség a további kommunikáció. Azért a tőlem telhető legjobbat megpróbáltam kihozni:

python optimizedSD/optimized_txt2img.py --prompt "happy diaper with eyes and mouth and nose holds a sieve" --n_iter 2 --n_samples 6

seed_170694_00010.png

A többi képet inkább nem teszem be, mert a Humángenetika című egyetemi jegyzetemben a születéskori rendellenességek képei kutya fülék ahhoz képest, amit a program kiadott magából.

Egy kép többet ér ezer szónál, és ez a stable diffusion esetén is igaz. Ugyanis ha nem vagyunk elégedettek a képpel, amit kapunk, adhatunk neki némi támpontot saját skiccel.

python optimizedSD/optimized_img2img.py --prompt "humanoid robot breaking out skyscaper's window, jumping out, glass debris everywhere" --init-img ~/tmp/sketch.png --strength 0.8 --n_iter 2 --n_samples 6

Ebből

sketch.png

ezt

seed_747975_00001.png

készítette. Ezt pedig egy következő iterációban is használhatjuk, folyamatosan javítva a képet, egyre közelebb hozva ahhoz, amit elképzeltünk.

Szólj hozzá!

Címkék: machine learning

A bejegyzés trackback címe:

https://cybernetic.blog.hu/api/trackback/id/tr4317941654

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása