Kasvojentunnistusta museokuvista

Testasimme kuinka hyvin kasvojen valokuvista havaitseminen onnistuu nykyisillä koneoppimisalgoritmeillä. Tulokset olivat erinomaisia.

Kasvot mustavalkokuvassa Kuva: Helsingin kaupunginmuseo.

Kasvojen tunnistus (facial recognition) on kuuma puheenaihe tällä hetkellä esimerkiksi joidenkin valtiollisten toimijoiden kontrollitaipumusten vuoksi. Sen sijaan kasvojen havaitseminen (face detection), jota tässä käsitellään, ei ole suuria intohimoja herättävä asia. Kasvojen tunnistuksessa yritetään yksilöidä henkilö, sen sijaan kasvojen havaitsemisessa yritetään yksinkertaisesti päätellä, onko kuvassa ihmiskasvot vai ei.

Tarkoitus oli tehdä suhteellisen nopea kokeilu millaisilla työkaluilla kasvojen havaitseminen onnistuu museokokoelmien mustavalko- ja värikuvista ja millaisia mitkä seikat vaikuttavat tunnistuksen laatuun.

Työkalut

Koneoppimisen de facto -kieli on python. Opencv, tensorflow ja keras ovat hyviä lähtökohtia.

Testauskoodit löytyvät githubista: https://github.com/OSC-JYU/face-detection-sample

Testaukset

Testasin kahta erilaista menetelmää: Opencv:n Haar Cascade -luokittelijaa ja Tensorflowta hyödyntävää Facenet-mallia.

Haar Cascade

Testasin Haar Cascade -luokittelijaa valmiilla koulutetulla mallilla (haarcascade_frontalface_default.xml), joka tulee OpenCV:n mukana.  Tämä metodi on nopea ja sillä pystyy tekemään reaaliaikaista kasvojen havaitsemista jopa selaimessa. Ongelmaksi muodostui sopivien parametrien löytäminen. Toisilla kuvilla malli oli liian herkkä (kts. kuva alla) ja jos herkkyyttää pienennettiin, niin toisilla kuvilla selkeitäkään tapauksia ei havaittu.

Naisen muotokuva, jossa tunnistus on tunnistanut myös verhon kuviota kasvoiksi
Kuva: Helsingin kaupunginmuseo
Kuvaaja: Väinö Kannisto

Facenet

Jo aivan ensimmäiset kokeilut osoittivat Facenetin toimivan hyvin kaikentyyppisille kuville. Malli löysi kasvot hyvin muun muassa hyvin haljusta 1850 -luvun dagerrotyypistä (kts. kuva alla).

dagerrotyyppi, oikea tunnistus
Kuva: Helsingin kaupunginmuseo. Testikuvan resoluutio oli 616 × 768 pikseliä. 

Facenet tunnisti myös sivuprofiilit suhteellisen luotettavasti oletusasetuksilla. Haar Cascade-testissä käyttämäni malli puolestaan oli koulutettu tunnistamaan kasvoja vain suoraan edestä ja profiilien tunnistamiseen täytyi käyttää eri mallia.

profiilikuva
Kuva: Helsingin kaupunginmuseo
Kuvaaja: Sakari Kiuru

Koneelliseen kohteiden havaitsemisen laatuun vaikuttavat käytetty menetelmä, koulutusdatan laatu ja määrä sekä kohteena olevien kuvien resoluutio. Kuvan resoluution vaikutusta testasin muutamalla erityyppisellä esimerkillä. Ryhmäkuvissa resoluution nosto paransi tarkkuutta huomattavasti. Pieniresoluutioisesta (768x510) ryhmäkuvasta löytyi vain jokunen kasvo:

Ryhmäkuva, epätäydellinen tunnistus

Kun kohteeksi otettiin alkuperäinen kuva (3572x2374), kasvoja alkoi löytymään huomattavasti paremmin.

Suurempi ryhmäkuva, parempi tunnistus

Vastaavasti kokeilu vanhan dagerrotyypin suurempiresoluutioisella versiolla tuotti yllätyksen: kasvoja alkoi löytymään (algoritmin mielestä) myös kuvan kehyksestä.

dagerrotyyppi, väärä tunnistus

Kuvan resoluution kasvattaminen ei siis yksiselitteisesti paranna tulosta. Jos suurempia resoluutioita käytetään, on ehkä syytä tehdä suodatus, jossa pienimmät tunnistukset jätetään huomioimatta. Tämä on helposti toteutettavissa, koska tunnistamisen tuloksena on kasvoja kehystävän suorakaiteen koordinaatit ja tämän suorakaiteen kokoa voidaan verrata kuvan kokoon.

Miksi?

Mitä hyötyä kasvojen tunnistamisesta on museo- tai kirjastokokoelmatyölle? Yksi käyttökohde on automaattinen kategorisointi. Kuvat voidaan luokitella ryhmäkuviin ja muotokuviin sen perusteella, kuinka monta kasvoa ja minkä kokoisia suhteessa kuvaan ne ovat. Kone on väsymätön luokittelija, jonka avulla voidaan käydä läpi satoja tuhansia kuvia. Tehtävä, jota ei ihmisvoimin kannata tehdä.

Samoilla menetelmillä voidaan prosessoida myös videomateriaalia. Videoon voidaan merkitä "joukkokohtauksia" ja "puhuvia päitä" niiden selailun helpottamiseksi. Videon käsittely ruutu ruudulta vie luonnollisesti paljon aikaa, mutta prosessia voidaan nopeuttaa tunnistamalla videosta epäjatkuvuuksia (ts. kohtauksia), jonka jälkeen voidaan tehdä kasvojen havaitsemista/tunnistamista vain muutamasta ruudusta per kohtaus.

Jatkoa

Kohteiden tunnistamisen ei tietenkään tarvitse rajoittua pelkästään kasvojen tunnistamiseen. Samat periaatteet ja pääosin samat ohjelmistot toimivat muillekin objekteille. Vanhojen aineistojen kohdalla ongelma on sopivien (hyödyllisten) mallien löytämisessä. Jos esimerkiksi haluaisimme löytää autot 1900-luvun alkupuolen kuvista, niin voi olla hankala löytää mallia, joka tunnistaisi T-fordin vuodelta 1920.

Mallin voi tietysti myös kouluttaa itse. Tällöin aineistoa vaan pitää olla suhteellisen paljon, mikä voi aiheuttaa ongelmia vanhempien museoaineistojen kohdalla aineistojen vähäisyyden tai kirjavuuden takia. Kouluttaminen vaatii myös aika paljon puhdasta käsityötä eli haluttujen kohteiden merkitsemistä kuvaa (supervised  learning).

Seuraavaksi täytyykin kokeilla geneerisempää objektien tunnistamista esim YOLO-mallin avulla. Tämä voisi auttaa museoaineistojen alata kasvavien kuvamäärien automaattisessa tai semi-automaattisessa kuvailussa. Loppujen lopuksihan emme ole kovin kiinnostuneita siitä, näkyykö kuvassa kasvot vaan siitä, onko kuvassa ihmisiä, hamstereita, polkupyöriä vai Reino-tohveleita.

Kuva-aineistona on käytetty Helsingin kaupungimuseon CC-BY -lisenssoituja kuvia: