Rászabadítottam a mesterséges intelligenciát Lisszabon színeire és kaptam egy halom csíkot
A Lisszabonban eltöltött újabb három hónapom és az AI fejlesztői képzés meghozta a kétségkívül hasznos gyömölcsét: egymás mellé tudtam pakolni egy halom színes csíkot.
Mik ezek a színek?

Fogtam a @cores_de_lisboa (magyarul Lisszabon színei) Instagram oldal egyhavi termését (feburár 26. és március 26 között), majd megkértem a Gépet, hogy keresse meg az öt legdominánsabb színt mindegyik képen és rakja be ezeket egy kis színpalettába, ahol a színsávok szélessége attól függ, milyen gyakran fordul elő az adott szín. Ezeket a kis színpalettákat aztán összevarrtam egy naggyá, balról jobbra kronológiai sorrendben. Tehát öt sáv képvisel egy képet.
Ha megnézed az alábbi képeket és nem vagy színtévesztő, akkor valószínűleg egyből kiégeti a retinádat néhány szín.


A Gép az elsőből ilyen palettát csinált:

A másodikból pedig ilyet:

Sok ilyet aztán elforgatva egymás mellé pakoltam Inkscape-ben.
Diszklémer: Eleve írhattam volna úgy a kódot, hogy rögtön egy ilyen nagy színpalettát köpjön ki, de akkor még nem tudtam, pontosan mit fogok kihozni a kis színes négyzetekből. Eredetileg jó ötletnek tűnt, hogy minden kis négyzetet 90 fokkal elforgatok és csempeszerűen lefedek vele egy felületet, de az horror volt. Úgyhogy kikötöttem ennél a megoldásnál, amit a klímacsíkok inspiráltak.

Fun fact: eredetileg politikusok posztjainak színképeit akartam a klímacsíkokkal összevetni pár hete, de az túl macerás volt és nem adott élvezhető eredményt. Most viszont vissza tudtam nyúlni picit ahhoz az ötlethez. Nevezzük újrahasznosításnak.
Ez jól néz ki, de kicsit kamu
Van néhány bökkenő a megoldásommal. Mielőtt azonban beavatlak titeket az átverésbe, gyorsan leszögezem, hogy eleve nem volt célom túlcizellálni a problémát. Egy adatvizualizációs koncepciót akartam kipróbálni, illetve tesztelni az egyik gépi tanulásos könyvtárat, amit valószínűleg használni fogok nemsokára egy komoly(abb) munkához.
Az algoritmusom tehát nem pont úgy működik, mint a szemünk az agyunk. Kezdjük az első problémával:
Csak színleli a fontos színeket
Ha egy hatalmas fehér hómező közepén lefotózok egy vérvörös pici fürdőkádat, valószínűleg mindenki azt mondaná, hogy a fürdőkád színe a domináns a képen. Evolúciósan nem volt épp hátrány, hogy a semleges háttérből ki tudtuk ragadni az elütő részleteket. (Ilyenkor általában a kardfogú tigrist szokták felhozni példaként, de egyrészt ez a képesség szerintem már jóval korábban megjelent, másrészt egy vörös fürdőkád nyargalása hasonló riadalmat keltett volna egy korabeli ősállatban.)
Evolúció ide vagy oda, a Gépnek csontmindegy, mi van a fotón. Ő csak annyit lát, hogy hány pixel van egy képen, és annak az egyes pixelek vörös, zöld és kék csatornája milyen értéket tárol. Tehát a hómezőn a fehéret tartja majd a legfontosabbnak, a pirosat meg másodlagosnak. (Lehetne persze finomhangolni az ízlésén, de az szétfeszítette volna egy hétvégi hobbiprojekt kereteit.)
Ilyen színek nincsenek is a képen
Ha kicsit alaposabban megnézitek a színpalettákat, akkor feltűnhet, hogy valójában azok a színek nincsenek is feltétlenül a képen.

A modell, amit használtam – leegyszerűsítve – azt csinálta, hogy némi matekozás után megnézte, hogy oszlanak el az egyes képeken az RGB-értékek (vörös-zöld-kék). Ezután saját belátására volt bízva, hogy ezt a színkáoszt hogy osztja fel ezeket öt csoportra. (Ez az úgynevezett felügyelet nélküli gépi tanulás. Az egy elég gyakori probléma, hogy egy halom ömlesztett adatban mintázatokat kell keresni és csoportokat kialakítani. Ilyen például az is, amikor a böngészési adataid alapján úgy gondolja az algoritmus, hogy te az a kategória vagy, akit rettenetesen fog majd érdekelni egy Wish hirdetés.)
Mind az öt csoportban volt egy “átlagszín”, amihez az abba tartozó pixelek a legközelebb estek a gép szerint. A képen gyakori színek egész jól vannak reprezentálva, de a maradékot egy-két nehezen értelmezhető színkategóriába próbálja belegyömöszölni.
Gondolkodtam azon a megoldáson, hogy több mint öt csoportot alakíttatok ki vele, és csak a top ötöt tetetem bele a színpalettába, de egyrészt nekem jobban tetszik, hogy semleges színek választják el egymástól a harsányabbakat, másrészt pedig nem volt benne annyi. Mondjuk úgy, hogy ez nem bug, hanem feature. Még akkor is, ha a nagyon sokféle színt körülbelül egyenletesen tartalmazó képeken a valós színek szinte alig köszönnek vissza a palettán.
Más szemében az RGB-t is
Az RGB-modell elvben rengeteg színt képes elkülöníteni. Már ha a tizenhatmillió-hétszázhetvenhétezer-kettőszáztizenhat rengetegnek számít. Mi, emberek ennek a töredékét, ráadásul azokat sem túl “egyenletesen”. (Az külön cikket érdemelne, hogy mitől függ a színérzékelés és hogy mely színeket tudjuk jobban elkülöníteni egymástól, mint másokat.) Bármennyire is lenyűgöző a színválaszték, az RGB-modellnek tehát óriási hátránya, hogy nem igazán képezi le azt, ahogy valójában érzékeljük a színeket.
Bár az eredmény szerintem így is elég esztétikus, ha matematikailag precízebb szeretnék lenni, akkor legközelebb valószínűleg olyan színtereket választanék, amelyek jobban figyelembe veszik az emberi színérzékelés korlátait előnyeit. Ilyenek például a HSV (hue, saturation, brightness value – árnyalat, telítettség, világosság) vagy a CIELAB színtér, vagy ezek kombinációi.
I