Kategoriat
Yleinen

Azure avuksi opetukseen

Nykymaailma muuttuu valtavalla vauhdilla ja uusia opetusmenetelmiä tarvitaan jatkuvasti. Ennen riitti, että työntekijä osasi syöttää Exceliin numeroita ja painaa enteriä, mutta nykyään sillä ei pitkälle pääse. Teknologia kehittyy ja sen myötä tulee uusia ohjelmia, joita työntekijän on osattava käyttää ja hyödyntää. Meidän tapauksessamme tämä ohjelma oli Microsoft Azure. Azure on julkinen pilvipalvelu, jota voidaan käyttää virtuaalipalvelinten alustana. Lisäksi Azure voi toimia kehitysalustana. Azurella pystytään hallitsemaan mobiililaitteita, suojaamaan dokumentteja, analysoimaan suuria datamassoja ja luomaan esimerkiksi koneoppimista.

Mistä kaikki alkoi?

Kaikki alkoi data-analytiikan koulutuksen viidennellä lukukaudella toteutettavasta data-analytiikan tutkimus- ja kehitysprojektista. Saimme Xamkin DataLABilta tehtäväksi SQL-serverin luomisen ja käyttöoton Microsoft Azuressa. Projekti oli myös osa DataLABissa suoritettavaa syventävää harjoittelua. Tavoitteena oli saada aikaiseksi Azure-serveri, jota voidaan käyttää apuna opetuksessa sekä tehdä lyhyitä oppaita serverin luomisesta ja käytöstä.

Projektin eteneminen

Projekti alkoi hitaasti ja rauhallisesti, sillä jouduimme ensin odottelemaan, että saamme oikeudet Xamkin Azuren Resource groupiin. Loimme sinne aluksi oman SQL-serverin, johon myöhemmin avattiin SQL database. Databasen synnyttyä selvitimme, miten sinne saa ladattua dataa, ja kuinka database käytännössä toimii. Seuraavaksi haasteeksi osoittautui datan saaminen. Meillä ei ollut mitään ladattavaksi sopivaa dataa, joten pyysimme apua toiselta projektiryhmältä. Toiselta ryhmältä saimme ns. testidataa, jolla pystyimme varmistamaan serverin toimivuuden. Onnistuneen datan siirtämisen jälkeen serveri oli valmis seuraavaan projektiin.

Kaikki vaiheet dokumentoitiin ja niistä koottiin lyhyitä oppaita opiskelijoita varten. Oppaita löytyy esim. Azure-serverin luomisesta, siirtämisestä, tiedon tuomisesta ja datan avaamisesta.

Vaadittavat ohjelmat

Serverin oikeanlainen toimiminen vaatii sen, että käyttäjältä löytyy tiettyjä ohjelmia. Meidän tilanteessamme ei vaadita monia ohjelmia, mutta niiden käyttö on pakollista. Parhaaksi ohjelmaksi datan lataamiseen ja muokkaamiseen serverille osoittautui Microsoftin SQL Server Management Studio, eli SSMS. Kyseisen ohjelman avulla pystyy vaivattomasti tarkastelemaan databasen sisältöä ja muokkaamaan sitä. Lisäksi ohjelma mahdollistaa sisällön lataamisen omaan databaseen.

Jotta datan avaaminen ja tarkastelu onnistuu, on parasta käyttää joko Microsoft Excel tai PowerBI -ohjelmia. Näiden ohjelmien avulla käyttäjä pystyy avaamaan koneellensa serverillä olevat datat ja muokkaamaan niitä. Ohjelmien avulla datan analysointi on myös mielestämme helpointa ja monipuolisinta.

Mitä jatkossa?

Tällä hetkellä meillä on toimiva pilvipalvelu, eli SQL-database. Pilvipalvelua voidaan hyödyntää opetuksessa ja erilaisissa projekteissa. Jatkossa tavoitteenamme on ladata srverille jatkuvasti päivittyvää, eli ns. livedataa. Dataa kerätään Raspberry Pi:n avulla. Kerätty data analysoidaan ja visualisoidaan PowerBI ohjelmalla. Olemmekin jo onnistuneesti testanneet sitä Raspberry Pi -simulaattorin avulla.

Kategoriat
Yleinen

Instagram-kuvien analysointi Azuren konenäöllä

Kuten sadoissa muissa organisaatioissa, Kaakkois-Suomen ammattikorkeakoulussa käytetään Microsoftin ohjelmistoja ja palveluita. Teamsien ja powerpointtien lisäksi Data-analytiikka on ottanut käyttöönsä Microsoftin pilvipalvelualusta Azuren, josta löytyy monenlaista palvelua SQL-palvelimesta koneoppimismallien luomiseen.

Yksi palvelutyyppi on nk. kognitiiviset palvelut johon kuvien analysointi eli konenäkö kuuluu. Päätelmien tekeminen suuresta määrästä digitaalisia valokuvia niitä näkemättä tuntui mielenkiintoiselta ajatukselta. Azuren konenäössä on monenlaisia ominaisuuksia: on kasvojentunnistusta, kuvassa olevan tekstin tunnistusta, kuvien kategorisointia jne. Päätin lopulta kokeilla automaattista kuvatekstien ja tagien luomista valokuville jotta syntyisi jonkinlainen käsitys siitä miten se kuvia lajittelee.

Esimerkki automaattisesti generoidusta kuvatekstistä ja tageista. Tekstille ja jokaiselle tagille on myös konenäön tekemä ”confidence score”.

Testiaineistoksi valikoitui oppilaitoksemme Xamkin virallinen Instagram-tili ja sieltä 2000 valokuvaa.

Miten se toimii?

Konenäkö on API, eli ohjelmointirajapinta (Application Programming Interface). Yksinkertaisimmillaan sinne syötetään kuva ja kone palauttaa kuvalle pyydetyn datan (esim. tunnistetut kasvot, kuvauksen jne.) Tässä harjoituksessa käytin rajapintaa python-ohjelmointikielen avulla, jolle Microsoft tarjoaa kehitysalustan. Käytännössä Azureen perustetaan resurssi josta saa tarvittavan salasanan. Koodikirjastot tuodaan pythonin import-komennolla ja client autentikoidaan salasanalla, minkä jälkeen rajapintaan voi alkaa heitellä kuvia. Rajapinnasta on kattava ja johdonmukainen dokumentaatio.

Python-ohjelmointikielen tarvittavien koodikirjastojen tuonti ja clientin autentikointi konenäölle ja kasvojentunnistukselle.

Päätin hakea kuvatekstit ja tagit 2000 kuvalle ja liittää saadut tulokset osaksi Instagram-aineiston metadataa. Kahden tuhannen kuvan läpikäynti kestää koneelta jonkin aikaa, joten kerkesin käydä välillä lounaalla ja palata sitten katsomaan mitä tuloksista mahdollisesti voi saada irti.

Ja toden totta, tekoäly oli keksinyt kuville englanninkieliset kuvatekstit ja tagit. Azuressa olisi mahdollista myös kääntää tekstit automaagisesti suomeksi mutta tämä vaatisi lisää API-kutsuja, joten päätin pärjätä kolmannella kotimaisella. Analyysissä käytin pythonin pandas-kirjastoa jossa data on taulukkona (dataframe) ja sen filtteröintiin ja muokkaamiseen on paljon tehokkaita työkaluja.

Polkupyöräkuvien etsiminen – with confidence

Tagien avulla suuresta kuvamassasta voi hakea tiettyjä elementtejä sisältäviä kuvia. Kokeilin hakea 2000 kuvan joukosta ne, joissa on tägi ”polkupyörä” (eli siis bicycle). Tuloksista selvisi, että Bill Gatesin robottisilmälasit ovat nähneet yhteensä 27 kuvaa joissa on polkupyörä.

kuvat['pyörät']=kuvat['tagit'].str.contains('bicycle')

Suodatin polkupyöräkuvat tykkäysten mukaan alenevaan järjestykseen ja katsoin mitä kone on oikein nähnyt. Aluksi kaikki vaikuttaa hyvältä. Esimerkiksi 157 tykkäystä saaneessa, Vappua juhlistavassa kuvassa on selkeästi polkupyörä ja kone antaa ’bicycle’ -tagille confidence scoren 0.9501 mikä on todella kova.

Koneen mielestä tässä kuvassa on polkupyörä yli 95 % luottamustasolla.

Seuraavassa kuvassa ei kuitenkaan ole polkupyörää. Siinä on polkupyörä-tägi ja mies hymyilemässä jonkinlaisen osittain näkyvän metalliputkihässäkän luona mikä aivan ilmeisesti ei ole polkupyörä. Kuvan bicycle-tag onkin saanut confidence scoren 0.31. Luokittelua varten päätin rajata pisteytyksen 0.9 ja sitä suurempiin lukuihin. Tätä varten pandasilla on helppo luoda uusi taulukko kuvista, joissa on mukana vain tagit joiden luotettavuusarvo ylittää 0.9. Polkupyörien kohdalla tämä toimii mainiosti ja lopulta onnistun etsimään kaikista kuvista vain sellaisia, joissa oikeasti on pyörä. Lisäksi on tuntematon määrä kuvia joissa on pyörä mutta jotka eivät saa polkupyörä-tagia.

Julkiset naamat

Lievänä yllätyksenä tuli, että kuvatekstitoiminto tunnistaa julkkisten naamoja. Azuressa on erikseen kasvojentunnistin, jolla kasvoille voi generoida tunnisteen. Tunnisteen avulla samanlaisia kasvoja voi etsiä kuva-aineistoista. Kuvateksti-toiminto kuitenkin löytää suvereenisti suomalaisia julkkiksia. Koska Xamk on vahvasti mukana Emma-gaalassa, päätin katsoa onko gaalakuviin tallentunut julkisia naamoja. Etsinnässä auttaa myös tässä yhteydessä käytetty hashtag ”xamkgoesemma”. Keinosilmät ovat nähneet mm. 3 Anna Puuta, Reino Nordinin, Juha Tapion, Sanni Kurkisuon ja Erkki Liikasen (joista viimeinen ei ehkä Emma-gaalasta).

Kuvassa Pyhimys puvussa. Tekoälyn mielestä kyseessä on 0.563 todennäköisyydellä ’gentleman’.

Yksi hämmentävä ilmiö ovat julkkisten kaksoisolennot. Kone löysi Xamkin Instagramista useita ulkomaisia julkkiksia, jotka lähemmässä tarkastelussa osoittautuivat tavallisiksi tallaajiksi jotka vain sattuvat näyttämään julkkiksilta.

Scoreissa on eroja

Luottamuspisteytykset jotka kone ilmoittaa kuvateksteille ja tageille poikkeavat ratkaisevasti toisistaan. Kuvateksti joka saa pisteytyksen 0.5 on usein ”oikein” ja jopa hyödyllinen, kun taas jos haluaa luokitella kuvia tagien avulla niin 0.5 tasoa ei välttämättä kannata ottaa mukaan.

Ero käy ilmi myös luottamustasojen jakaumasta. Tarkastelin kuvatekstien ja tagien saamia pisteitä tekemällä niistä box-plotit pandasissa:

kuvat['caption_confidence'].plot(kind='box', vert=False, figsize=(10,5), title = 'caption_confidence')

Datassa on 2000 koneen generoimaa otsikkoa. Mediaani on alle 0.5:ssä. Silläkin tasolla otsikot ovat kuitenkin usein ”oikein”.
Kahdessatuhannessa kuvassa on hieman alle 18000 tagia (n.9kpl/kuva) 25. ja 75. persentiilit asettuvat välille 0.7-0.94 mediaanin ollessa 0.869.

Konenäön tekemän luokittelun luotettavuuden arvioinnissa koneen ilmoittamat pisteytykset ovat hyvä apuväline. Erityisen mielenkiintoista on etsiä tageja joista kone on omasta mielestään lähes varma, mutta jotka kuitenkin ovat päin honkia.

Seuraavia harjoitteita

Kuvatekstigeneraattorin kyvystä tunnistaa julkisuuden henkilöitä syntyi ajatus syöttää konenäölle julkisuuden henkilöitä. Suunnitelmissa on käyttää kotimaisten digitaalisten viihdeuutisten kuvastoa ja analysoida keitä se tunnistaa ja keitä ei. Jatkuu seuraavassa numerossa.