Stručne povedané, počítače nevidia nič. A povedané trochu presnejšie: keď počítače „vidia“ nejaký obraz, nevidia v skutočnosti ten obraz, ale len osem miliónov malinkých farebných machuliek.
Z toho, čo občas vidíme v poučných televíznych filmoch alebo na technických výstavách, môžeme ľahko získať pocit, že počítače naozaj vidia. Roboty vyzbrojené kamerou spoľahlivo obídu prekážku, priemyslové automaty v automobilke pohľadom skontrolujú, či auto nemá nakrivo osadené dvere, počítače na hraniciach prečítajú poznávaciu značku prechádzajúceho auta. Alebo výstava šperkov a na nej drahý náhrdelník, na ktorý sa pozerá kamera pripojená na počítač. Nápis: „Nedotýkať sa!“. Nedisciplinovaný návštevník načiahne ruku, počítač spustí poplach. Vyzerá to úplne tak, ako keby systém videl ruku siahajúcu na náhrdelník.
.teta Ema
Čo to vlastne znamená vidieť? Digitálna kamera alebo fotoaparát zaznamenajú obraz vo forme niekoľkých miliónov pixelov (pixel predstavuje malinkú farebnú machuľku, jeden obrazový bod). Tento záznam však ešte určite nenazveme videním a vedením. Fotoaparát nevie, čo odfotil.
Obraz z kamery alebo fotoaparátu sa dá nahrať do počítača ako napríklad „jpeg“ grafický súbor. Grafický súbor je zakódovaná postupnosť miliónov čísel, z ktorých každé kóduje, akú farbu má príslušný obrazový bod. Na základe informácie z tohto súboru vie počítač vytvoriť na monitore alebo na tlačiarni pôvodný obraz. To však ešte stále neznamená, že počítač vie, čo vlastne ukazuje alebo tlačí. Na tlačiarni sa jednoducho vytlačia milióny farebných machuliek usporiadaných tesne jedna vedľa druhej do tvaru obdĺžnika.
To až keď sa na to pozrieme my, tak vidíme obraz: „Na fotke je teta Ema!“. Sú aj počítače schopné takéhoto videnia? Je možné, aby aj počítač videl, a potom aj vedel, že na fotke je teta Ema?
Príklady uvedené na začiatku tohto článku zdanlivo naznačujú niečo iné, ale fakt je, že počítače zatiaľ vidia len tie machuľky. Ako je teda možné, že rozoznajú ruku siahajúcu po náhrdelníku? Veľmi jednoducho. Každú desatinu sekundy si počítač nahrá z kamery milión machuliek a porovná s machuľkami nahranými pred okamihom. V statickej situácii sa dve po sebe nahrané skupiny machuliek príliš nelíšia. Ak tam vnikne ruka, nové machuľky sa veľmi líšia od starých, teda poplach.
Naprogramovať počítač tak, aby zvládol uvedenú úlohu, nie je vôbec ťažké. Počítače však dokážu omnoho viac. Vezmime si napríklad robota vybaveného kamerou. Na podnose má nasypané skrutky a matice. Spoľahlivo ich od seba rozpozná: keď treba skrutku, podá skrutku, keď treba maticu, podá maticu. Ako to vidí?
Nuž nevidí, on to len rozpozná. Nech je pre jednoduchosť podnos svetlý, pričom matice a skrutky sú tmavé. A nech sú navyše na podnose nariedko, teda nech sa navzájom neprekrývajú. Potom každá skrutka a matica je čosi ako veľká tmavá machuľa zložená z malých tmavých machuliek. Veľké machule sú od seba oddelené pozadím zo samých svetlých machuliek. Treba počítaču povedať, ako má rozlíšiť machule zodpovedajúce skrutkám od tých, ktoré zodpovedajú maticiam.
Ako? Napríklad takto: Nakresli si okolo každej veľkej machule čo najtesnejšie elipsu (to je v skutočnosti matematická operácia s číslami, ktorá sa dá počítaču povedať jednoducho). Potom si všimni, že niektoré elipsy, ktoré si nakreslil, sú skoro ako kružnice, kým iné elipsy sú veľmi pretiahnuté, úzke a dlhé. Machuľa, okolo ktorej je úzka dlhá elipsa s nerovnakými osami, je skrutka, ostatné sú matice.
Počítač teda dokáže rozpoznať skrutky a matice bez toho, že by ich naozaj videl. Rozpoznanie je možné vďaka tomu, že niekto vymyslel špeciálny postup na riešenie špeciálnej úlohy. Dôležité je slovo „špeciálny“. Programátor sa nesnaží naučiť počítač vidieť, snaží sa ho naučiť rozpoznávať veci v istej konkrétnej situácii.
Takéto špeciálne rozpoznávanie možno ďalej vylepšovať. V našom príklade sa napríklad môže stať, že niektorá skrutka neleží, ale ostala stáť na hlavičke. Pri pohľade zhora vyzerá takáto skrutka ako okrúhla machuľa a robot ju identifikuje ako maticu. Programátorovi program vrátia, že to celkom nefunguje.
Programátor sa zamyslí a uvedomí si, že maticové machule naozaj majú v strede svetlú škvrnu – dierku, cez ktorú presvitá farba podnosu. A tak pridá do programu ďalší test: má okrúhla machuľa v sebe svetlú škvrnu? Ak áno, je to matica, ak nie, je to skrutka postavená na hlavu.
Ľudia využívajúci nášho robota budú postupne chodiť s novými a novými požiadavkami. Prídu s tým, že čo keď sa machule prekrývajú a čo keď hento a tamto. Programátor do programu vždy pridá nejaké ďalšie pravidlá premyslené špeciálne na zvládnutie ďalších problematických situácií. Robot zdanlivo vidí čoraz lepšie, ale v skutočnosti nevidí vôbec nič.
.ujo Adidas
Súčasné fotoaparáty majú v sebe malý počítač, ktorý dokáže nájsť ľudskú tvár a zaostriť prednostne na ňu. Namierime aparát a on na displeji zarámuje tvár fotografovanej osoby do malého obdĺžnika.
Ako by mohol vyzerať počítačový program, ktorý by vedel nájsť na obrázku ľudskú tvár? Primitívny pokus by mohol vyzerať takto. Zlejeme vždy niekoľko susedných mikromachuliek do väčších machúľ. Asi tak, ako keď v televízii vyštvorčekujú tvár utajeného svedka. Detailné rysy sa stratia, ostanú len hrubé črty. Potom hľadajme typické príznaky tváre.
Prvý môže vyzerať takto: rozmazaná tvár je charakteristická tým, že má pozdĺžnu vodorovnú svetlú oblasť (čelo), pod ňou pozdĺžnu vodorovnú tmavšiu oblasť (oblasť očí a koreňa nosa), a ešte pod ňou zasa vodorovnú svetlú o niečo hrubšiu oblasť (líca a nos). Prezriem celý obrázok a hľadám miesta, na ktoré sa dá napasovať uvedená charakteristika.
Potom môžem skúsiť iný príznak. Tvár by mala mať dve tmavšie škvrny (oči), oddelené zvislou svetlejšou oblasťou (nos). Program bude chcieť, aby „tvár“ vyhovovala obom uvedeným príznakom (aj jeden aj druhý, to je akési logické prepojenie). Čím rafinovanejší program, tým viac príznakov skúma (na rozostrených a potom i detailne na zaostrených machuľkách). Prítomnosť alebo neprítomnosť týchto príznakov logicky spája do rozhodovacieho procesu, ktorého výsledkom je: „Tu vidím tvár“.
Ale znova: počítač nevidí, len ho niekto naučil vyhodnocovať všakové znaky a logicky ich spájať do nejakého rozhodnutia. A potom vždy vznikne otázka typu „A pozná to aj tvár, na ktorej má človek zažmúrené jedno oko?“, po ktorej nasleduje ďalšie vylepšovanie programu, a tak ďalej.
Jeden nedávno publikovaný program na vyhľadávanie tvárí bol testovaný na skupinovej fotke futbalového mužstva. Orámoval správne tváre futbalistov na snímke. Ale orámoval ako tvár aj futbalovú loptu, ktorú jeden z hráčov drží. Bola to „televízna“ futbalová lopta, z bielych a čiernych päťuholníkov a šesťuholníkov. Natočená, zhodou okolností, tak, že vpredu mala dva čierne päťuholníky. Počítač si asi myslel, že sú to oči na guľatej hlave.
A pritom išlo o veľmi rafinovaný program, ktorý bol schopný pracovať so stovkami rôznych príznakov. Rafinovanosť bola v tom, že optimálne logické prepojenia medzi týmito príznakmi si program našiel sám! Takzvaným samoučiacim sa spôsobom.
Veľmi približne to funguje takto: V programe sa logické spojky v rozhodovacom procese naprogramujú ako alternatívy, pričom každá ich konkrétna voľba znamená jeden konkrétny finálny program. Kombinácií rôznych volieb môžu byť milióny. Takémuto „nedefinitívnemu“ programu sa potom predostrú na riešenie obrázky, ktoré správne vyhodnotil človek – inštruktor. Program skúša používať rozličné logické spojky v rozhodovacom procese. Snaží sa voľbou konkrétnych logických prepojení vytvoriť takú verziu „seba samého“, ktorá sa vo výsledkoch čo najbližšie priblíži inštruktorovmu vyhodnoteniu. Najlepšia verzia sa potom môže použiť na vyhodnocovanie obrázkov, ktoré predtým človek – inštruktor už nevidel.
Počítače teda dokážu pri riešení špecializovaných úloh čoraz úspešnejšie predstierať, že vidia. Dokonca sa dokážu učiť predstierať to čoraz lepšie a lepšie. Ale dokážu vidieť? Nuž, nedokážu. Len zvonku to tak vyzerá.
Z toho, čo občas vidíme v poučných televíznych filmoch alebo na technických výstavách, môžeme ľahko získať pocit, že počítače naozaj vidia. Roboty vyzbrojené kamerou spoľahlivo obídu prekážku, priemyslové automaty v automobilke pohľadom skontrolujú, či auto nemá nakrivo osadené dvere, počítače na hraniciach prečítajú poznávaciu značku prechádzajúceho auta. Alebo výstava šperkov a na nej drahý náhrdelník, na ktorý sa pozerá kamera pripojená na počítač. Nápis: „Nedotýkať sa!“. Nedisciplinovaný návštevník načiahne ruku, počítač spustí poplach. Vyzerá to úplne tak, ako keby systém videl ruku siahajúcu na náhrdelník.
.teta Ema
Čo to vlastne znamená vidieť? Digitálna kamera alebo fotoaparát zaznamenajú obraz vo forme niekoľkých miliónov pixelov (pixel predstavuje malinkú farebnú machuľku, jeden obrazový bod). Tento záznam však ešte určite nenazveme videním a vedením. Fotoaparát nevie, čo odfotil.
Obraz z kamery alebo fotoaparátu sa dá nahrať do počítača ako napríklad „jpeg“ grafický súbor. Grafický súbor je zakódovaná postupnosť miliónov čísel, z ktorých každé kóduje, akú farbu má príslušný obrazový bod. Na základe informácie z tohto súboru vie počítač vytvoriť na monitore alebo na tlačiarni pôvodný obraz. To však ešte stále neznamená, že počítač vie, čo vlastne ukazuje alebo tlačí. Na tlačiarni sa jednoducho vytlačia milióny farebných machuliek usporiadaných tesne jedna vedľa druhej do tvaru obdĺžnika.
To až keď sa na to pozrieme my, tak vidíme obraz: „Na fotke je teta Ema!“. Sú aj počítače schopné takéhoto videnia? Je možné, aby aj počítač videl, a potom aj vedel, že na fotke je teta Ema?
Príklady uvedené na začiatku tohto článku zdanlivo naznačujú niečo iné, ale fakt je, že počítače zatiaľ vidia len tie machuľky. Ako je teda možné, že rozoznajú ruku siahajúcu po náhrdelníku? Veľmi jednoducho. Každú desatinu sekundy si počítač nahrá z kamery milión machuliek a porovná s machuľkami nahranými pred okamihom. V statickej situácii sa dve po sebe nahrané skupiny machuliek príliš nelíšia. Ak tam vnikne ruka, nové machuľky sa veľmi líšia od starých, teda poplach.
Naprogramovať počítač tak, aby zvládol uvedenú úlohu, nie je vôbec ťažké. Počítače však dokážu omnoho viac. Vezmime si napríklad robota vybaveného kamerou. Na podnose má nasypané skrutky a matice. Spoľahlivo ich od seba rozpozná: keď treba skrutku, podá skrutku, keď treba maticu, podá maticu. Ako to vidí?
Nuž nevidí, on to len rozpozná. Nech je pre jednoduchosť podnos svetlý, pričom matice a skrutky sú tmavé. A nech sú navyše na podnose nariedko, teda nech sa navzájom neprekrývajú. Potom každá skrutka a matica je čosi ako veľká tmavá machuľa zložená z malých tmavých machuliek. Veľké machule sú od seba oddelené pozadím zo samých svetlých machuliek. Treba počítaču povedať, ako má rozlíšiť machule zodpovedajúce skrutkám od tých, ktoré zodpovedajú maticiam.
Ako? Napríklad takto: Nakresli si okolo každej veľkej machule čo najtesnejšie elipsu (to je v skutočnosti matematická operácia s číslami, ktorá sa dá počítaču povedať jednoducho). Potom si všimni, že niektoré elipsy, ktoré si nakreslil, sú skoro ako kružnice, kým iné elipsy sú veľmi pretiahnuté, úzke a dlhé. Machuľa, okolo ktorej je úzka dlhá elipsa s nerovnakými osami, je skrutka, ostatné sú matice.
Počítač teda dokáže rozpoznať skrutky a matice bez toho, že by ich naozaj videl. Rozpoznanie je možné vďaka tomu, že niekto vymyslel špeciálny postup na riešenie špeciálnej úlohy. Dôležité je slovo „špeciálny“. Programátor sa nesnaží naučiť počítač vidieť, snaží sa ho naučiť rozpoznávať veci v istej konkrétnej situácii.
Takéto špeciálne rozpoznávanie možno ďalej vylepšovať. V našom príklade sa napríklad môže stať, že niektorá skrutka neleží, ale ostala stáť na hlavičke. Pri pohľade zhora vyzerá takáto skrutka ako okrúhla machuľa a robot ju identifikuje ako maticu. Programátorovi program vrátia, že to celkom nefunguje.
Programátor sa zamyslí a uvedomí si, že maticové machule naozaj majú v strede svetlú škvrnu – dierku, cez ktorú presvitá farba podnosu. A tak pridá do programu ďalší test: má okrúhla machuľa v sebe svetlú škvrnu? Ak áno, je to matica, ak nie, je to skrutka postavená na hlavu.
Ľudia využívajúci nášho robota budú postupne chodiť s novými a novými požiadavkami. Prídu s tým, že čo keď sa machule prekrývajú a čo keď hento a tamto. Programátor do programu vždy pridá nejaké ďalšie pravidlá premyslené špeciálne na zvládnutie ďalších problematických situácií. Robot zdanlivo vidí čoraz lepšie, ale v skutočnosti nevidí vôbec nič.
.ujo Adidas
Súčasné fotoaparáty majú v sebe malý počítač, ktorý dokáže nájsť ľudskú tvár a zaostriť prednostne na ňu. Namierime aparát a on na displeji zarámuje tvár fotografovanej osoby do malého obdĺžnika.
Ako by mohol vyzerať počítačový program, ktorý by vedel nájsť na obrázku ľudskú tvár? Primitívny pokus by mohol vyzerať takto. Zlejeme vždy niekoľko susedných mikromachuliek do väčších machúľ. Asi tak, ako keď v televízii vyštvorčekujú tvár utajeného svedka. Detailné rysy sa stratia, ostanú len hrubé črty. Potom hľadajme typické príznaky tváre.
Prvý môže vyzerať takto: rozmazaná tvár je charakteristická tým, že má pozdĺžnu vodorovnú svetlú oblasť (čelo), pod ňou pozdĺžnu vodorovnú tmavšiu oblasť (oblasť očí a koreňa nosa), a ešte pod ňou zasa vodorovnú svetlú o niečo hrubšiu oblasť (líca a nos). Prezriem celý obrázok a hľadám miesta, na ktoré sa dá napasovať uvedená charakteristika.
Potom môžem skúsiť iný príznak. Tvár by mala mať dve tmavšie škvrny (oči), oddelené zvislou svetlejšou oblasťou (nos). Program bude chcieť, aby „tvár“ vyhovovala obom uvedeným príznakom (aj jeden aj druhý, to je akési logické prepojenie). Čím rafinovanejší program, tým viac príznakov skúma (na rozostrených a potom i detailne na zaostrených machuľkách). Prítomnosť alebo neprítomnosť týchto príznakov logicky spája do rozhodovacieho procesu, ktorého výsledkom je: „Tu vidím tvár“.
Ale znova: počítač nevidí, len ho niekto naučil vyhodnocovať všakové znaky a logicky ich spájať do nejakého rozhodnutia. A potom vždy vznikne otázka typu „A pozná to aj tvár, na ktorej má človek zažmúrené jedno oko?“, po ktorej nasleduje ďalšie vylepšovanie programu, a tak ďalej.
Jeden nedávno publikovaný program na vyhľadávanie tvárí bol testovaný na skupinovej fotke futbalového mužstva. Orámoval správne tváre futbalistov na snímke. Ale orámoval ako tvár aj futbalovú loptu, ktorú jeden z hráčov drží. Bola to „televízna“ futbalová lopta, z bielych a čiernych päťuholníkov a šesťuholníkov. Natočená, zhodou okolností, tak, že vpredu mala dva čierne päťuholníky. Počítač si asi myslel, že sú to oči na guľatej hlave.
A pritom išlo o veľmi rafinovaný program, ktorý bol schopný pracovať so stovkami rôznych príznakov. Rafinovanosť bola v tom, že optimálne logické prepojenia medzi týmito príznakmi si program našiel sám! Takzvaným samoučiacim sa spôsobom.
Veľmi približne to funguje takto: V programe sa logické spojky v rozhodovacom procese naprogramujú ako alternatívy, pričom každá ich konkrétna voľba znamená jeden konkrétny finálny program. Kombinácií rôznych volieb môžu byť milióny. Takémuto „nedefinitívnemu“ programu sa potom predostrú na riešenie obrázky, ktoré správne vyhodnotil človek – inštruktor. Program skúša používať rozličné logické spojky v rozhodovacom procese. Snaží sa voľbou konkrétnych logických prepojení vytvoriť takú verziu „seba samého“, ktorá sa vo výsledkoch čo najbližšie priblíži inštruktorovmu vyhodnoteniu. Najlepšia verzia sa potom môže použiť na vyhodnocovanie obrázkov, ktoré predtým človek – inštruktor už nevidel.
Počítače teda dokážu pri riešení špecializovaných úloh čoraz úspešnejšie predstierať, že vidia. Dokonca sa dokážu učiť predstierať to čoraz lepšie a lepšie. Ale dokážu vidieť? Nuž, nedokážu. Len zvonku to tak vyzerá.
Ak ste našli chybu, napíšte na web@tyzden.sk.