Detekcia porna z obrázkov

22. dubna 2016

Jednou z dôležitých častí vyhľadávania na internete je detekcia a následné filtrovanie explicitného obsahu. Jedná sa o pomerne komplexný problém zložený z rôznych podproblémov. Jedným z takýchto podproblémov je aj detekcia porna na obrázku. Práve na tento podroblém sme sa nedávno v Sezname zamerali. Zadanie bolo jednoduché – porno detektor dostal obrázok a mal určiť či sa na danom obrázku nachádza porno alebo nie. Ako dobre sa nám porno darí rozpoznávať si môžete vyskúšat v našom interaktívnom deme.

Aj keď sa v mnohých prípadoch väčšina z nás zhodne na tom, ktoré obrázky zobrazujú porno a ktoré nie, existuje aj pomerne veľké množstvo takých, ktoré spadajú do šedej zóny. V tejto skupine obrázkov je hranica medzi pornom a nepornom veľmi neurčitá a spravidla subjektívna, pretože každý z nás vníma porno inak. Nanešťastie, náš porno detektor musí tieto dve kategórie presne rozseknúť (napríklad pri filtrovaní explicitného obsahu v obrázkovom vyhľadávaní musíme vedieť, či obrázok ukážeme vo výsledkoch, alebo nie), a preto sme boli nútení k tejto otázke pristúpiť „inžiniersky“ a nejakú hranicu jednoducho objektívne nastaviť.

„Mozgom“ nášho porno detektoru je matematický model nazývaný hlboká konvolučná neurálna sieť. Štruktúra siete je inšpirovaná tým, ako človek spracováva zrakový vnem v mozgu.

V princípe sa táto neurálna sieť skladá z dvoch častí – prvá časť skenuje obrázok a hľadá v ňom rôzne vzory, ktoré môžu byť jednoduché (hrany, farby, tvary), zložitejšie (oko, nos, koleso, okno) až komplexné (tvár, auto, dom).

Druhá časť siete následne na základe nájdených vzorov rozhoduje, do ktorej kategórie nakoniec obrázok zadelíme (v našom prípade boli kategórie len dve – porno vs neporno, ale model neurálnej siete je všeobecný a dokáže pracovať aj s tisíckami rôznych kategórií). Takto postavenú sieť potom pomocou metód strojového učenia trénujeme na dôsledne vybraných obrázkoch.

Správne vybrať tieto reprezentatívne obrázky je jednou z najdôležitejších (a najpracnejších) úloh. Ak totiž napríklad sieti ukážeme kreslené porno obrázky bez toho, aby sme jej ukázali súčasne aj kreslené „neporno“ obrázky, táto sieť si zgeneralizuje „kreslenosť“ ako silný indikátor porna a následne bude Krteček a Mickey Mouse označený za nevhodný obsah.

Internú reprezentáciu jednotlivých obrázkov v neurálnej sieti si môžeme predstaviť ako akési body vo vysokorozmernom priestore (každý obrázok je reprezentovaný ako „bod“ s viac ako štyri tisíc súradnicami). Pomocou redukcie dimenzionality sme tieto body premietli do trojrozmerného priestoru. Takto nám vznikol akýsi trojrozmerný „obrázkový vesmír“, ktorý názorne ukazuje akým spôsobom naša neurálna sieť „rozmýšľa“ o obrázkoch.

Obrázky, o ktorých si sieť myslí, že sú podobné, vytvárajú v tomto vesmíre zhluky. Tak môžeme vidieť napríklad zhluk rastlín, ktorý má v sebe lokálne podzhluky žltých, fialových alebo červených kvetín. Ďalej môžeme sledovať zhluk jedla, ale aj zhluky výstrihov, zhluk plaviek hneď vedľa zhluku spodnej bielizne, alebo zhluk vagín, prípadne veľmi výrazný zhluk už spomínaného kresleného porna.

Aj keď sieť pracuje celkom spoľahlivo (správne detekuje porno u približne 95% obrázkov z našej testovacej sady, čo je výsledok porovnateľný s človekom), niektoré obrázky, ktoré človek považuje za významovo odlišné, sú pre sieť podobné. Tieto obrázky určitým spôsobom ilustrujú princíp fungovania konvolučných neurálnych sietí – sieť sa pozerá hlavne na vizuálnu štruktúru obrázku a zatiaľ „nechápe“ význam alebo funkčnosť zobrazených objektov. Tak vidíme, že k obecnej umelej inteligencii a strojovému uvažovaniu ešte vedie dlhá cesta.

Sdílet na sítích