Sanomalehtikuvitusten luokittelusta

Tiivistelmä: TensorFlow:lla voi pienten alkusvalmistelujen jälkeen luokitella myös sanoma- ja aikakauslehtien kuvia. Taustaa

Kuvitusten luokittelua – miksi?

Digitalia-projektissa tavoitteena on myös tutkia hiukan kuinka sanoma- ja aikakauslehtien erilaisia osakohteita, kuten kuvituksia voisi käsitellä ja tehdä helpommaksi löytää. Aiemmin digiin on tehty mahdollisuuksia hakea kuvituksia aineistoihin vuoteen 1920 asti, ja viime vuoden lopulla tätä jatkettiin 1929 asti ja osin pidemmällekin. Kuvitusten haku pohjautuu nyt jälkikäsittelyn työhön, joka viedään tietokantaan ja lisätään hakuindeksiin. Nyt suunnitteilla on löytää keinoja kuinka kuvituksia voisi tehdä paremmin löydettäväksi. Yksi tapa tähän on takastella itse kuva-aluetta tarkemmin ja selvittää kuvan sisältöä, esimerkiksi mikä olisi kuvan pääsisältö. Tätä varten nyt kuva-alueita on poimittu erilleen, jotta olisi mahdollista tehdä kokeiluja kuvien luokittelussa. Ongelma on osittain eri kuin modernien kuvien tai vaikka valokuvien luokittelussa, koska sanomalehti- tai aikakauslehtiaineisto tuo uutta pohdittavaa esimerkiksi kuvan koon, mahdollisen käytettävän kuvan puskurin tai harmaasävytaustan takia. Alun perin pohdimme, että olisi hyvä jos kuvassa olisi pieni ylimääräinen puskuri, joka antaisi hiukan kontekstia kuvaan, mutta näytti, että jotkin palvelut, jotka tekisivät kuvien luokittelua puskuri voi hämätä esimerkiksi aiheuttamalla kaikkiin kuviin aina avainsanan ‘paperi’ tai ‘teksti’.

TensorFlow

Kuvitusten käsittelyyn yksi mahdollinen koneoppimisratkaisu on Googlen kehittämä TensorFlow-alusta, jota päätimme kokeilla sanomalehtiaineistojen kanssa. Loimme opetusaineiston joistakin tyypillisimmistä kuviluokista, joita sanomalehdistä löytyy kuten ihmiset, rakennukset, kulkuvälineet, ja poimimme jokaiseen luokkaan siihen sopivia sanomalehtikuvia eri lehdistä.

Tensorflow analysoi kuvat omalla ohjelmallaan, joka luo sille kyvykkyyden tunnistaa kuvia joita sille on kerrottu:

python retrain.py --bottleneck_dir=./retrain/bottlenecks \
 -model_dir=./retrain --output_graph=retrained_graph.pb \
 --output_labels=./retrain/reretrain_labels.txt \ 
--image_dir ./opetuskuvat --how_many_training_steps=500  \
--summaries_dir=tf_files/training_summaries/"${ARCHITECTURE}

Prosessoinnissa menee hetki, mutta lopputuloksena syntyy tekstitiedosto opetetuista luokista ja ‘verkko’ opetetun aineiston piirteistä. Tensorboard-työkalun avulla voi myös monitoroida kuinka hyvin opetusaineisto voi olettaa toimivan.

Tämän jälkeen voikin jo kokeilla kuinka TensorFlow luokittelusta selviää kohdeaineiston kanssa. Kohdeaineisto valittiin toisesta lehdestä kuin itse opetusaineisto, jotta näkee hiukan mallin yleispätevyyttä.

python classify_image2.py --model= > luokitusdemo.log &

Saat yhden version ym. skriptistä TensorFlown tutoriaaleista  . Oma versiomme tekee hiukan nimeämismuutoksa ja siirtää kuvan halutun luokan mukaiseen alikansioon, josta on helpompi tarkistaa onko luokittelu osunut oikeaan. Opetuskuvien määrän, laadun ja kohdeaineistosta riippuu kuinka hyvin luokittelu onnistuu. Selkeät opetuskuvat, jossa kohde löytyisi eri näkökulmista voi olla yksi tapa jolla lopputuloksesta tulee paras mahdollinen. Kannattaa ehkä ajatella että koneoppiminen on hiukan kuin likinäköinen ihminen – suuret selkeät linjat erottuvat parhaiten, mutta tarkemmat yksityiskohdat vaativat hieman siristelyä – useampia opetuskierroksia tai lisää opetusdataa.

Muistathan rekisteröityä DHN18-konferenssiin konferenssin kotisivulla  ja jos esimerkiksi tällainen  ylläoleva kokeilu kiinnostaa, niin ilmoittaudu tiistain 6.3. Miniature histories -työpajaan, jossa lehtiaineistoja pohdimme. Kiinnostavaa olisi tietää mitkä kuvitusten pääluokat olisi kiinnostavia? Mistä löytyisi hyvää opetusaineistoa jotta voisimme sanoma- ja aikakauslehtien kuvitusten hakuun tehdä uusia mahdollisuuksia? Soveltuisivatko sanomalehtien kuvat joihinkin tutkimuskäyttöihin?  Löydät TensorFlow:n perusasetukseen, joka oman esimerkkimme taustalla myös toimii ohjeita sekä Linuxille että Windowsille, jota voit kokeilla jo etukäteen.

TensorFlow setup for image classification example in Windows

This post aims to setup environment for  ‘TensorFlow for Poets’ case but with slight adaptations for Windows (7) environment. You can find the linux version here.

Tensorflow for Windows

https://www.tensorflow.org/install/install_windows

Anaconda distribution includes data science modules but a minimum of the modules is installed with the miniconda version, which is is used below: https://conda.io/miniconda.html  .

Environment creation within conda

conda create -n tensor2 python=3.6

activate tensor2

pip install tensorflow

Grab the test images

wget http://download.tensorflow.org/example_images/flower_photos.tgz   

tar xfz flower_photos.tgz -C tf_files\

 

Setup the environment for training

set IMAGE_SIZE=224

set ARCHITECTURE="mobilenet_0.50_%IMAGE_SIZE%"

python -m scripts.retrain -h

python -m scripts.retrain   --bottleneck_dir=tf_files/bottlenecks \
  --how_many_training_steps=500   --model_dir=tf_files/models/   \
--summaries_dir=tf_files/training_summaries/"%ARCHITECTURE%" \
  --output_graph=tf_files/retrained_graph.pb  \
 --output_labels=tf_files/retrained_labels.txt  \
 --architecture="%ARCHITECTURE%"   --image_dir=tf_files/flower_photos

Label the test image or image of your own.

python -m  scripts.label_image -h

python -m scripts.label_image     --graph=tf_files/retrained_graph.pb \
      --image=915045_p30.png 


and the results are

Evaluation time (1-image): 0.464s

tulips 0.9960024
dandelion 0.002221214
sunflowers 0.0017093202
roses 5.8004178e-05
daisy 9.087755e-06

So it can be seen that at least with this model water-lilys are not in the suggested options, the style of the image makes TensorFlow to mix them to tulips…

 

Remember to register to the DHN18  , and pick “Miniature histories – Digitized newspapers and cultural heritage assets as source for the local history” as your workshop!

TensorFlow setup for image classification for Linux

“TensorFlow for poets” command line setup  in linux

https://codelabs.developers.google.com/codelabs/tensorflow-for-poets/#0

This setup has been tested e.g. with the University of Helsinki’s virtual environment, from which you can find more here.

 

Create virtual environment

Virtual environment is especially useful if you use virtual desktop – e.g. the tensorboard tries to install itself to common environment, which will not succeed.

virtualenv tepoet

Activate the virtual environment . Note this changes e.g. path so it uses the one under the tepoet/bin -directory

source tepoet/bin/activate

 

TensorFlow details:

(Skipped tensorboard due to above mentioned environment issue, but within virtualenv using tensorboard should be fine).

Install tensorflow and get the scripts from the tensorflow github.

pip install --upgrade tensorflow

git clone https://github.com/googlecodelabs/tensorflow-for-poets-2

cd tensorflow-for-poets-2/

curl http://download.tensorflow.org/example_images/flower_photos.tgz \
    | tar xz -C tf_files

ls tf_files/flower_photos/

Next thing is to to create the model and run the actual classifier to a image used in this post.

export IMAGE_SIZE=224

export ARCHITECTURE="mobilenet_0.50_${IMAGE_SIZE}"

python -m scripts.retrain -h

python -m scripts.retrain   --bottleneck_dir=tf_files/bottlenecks   \
--how_many_training_steps=500   --model_dir=tf_files/models/  \
 --summaries_dir=tf_files/training_summaries/"${ARCHITECTURE}" \
  --output_graph=tf_files/retrained_graph.pb  \
 --output_labels=tf_files/retrained_labels.txt   \
--architecture="${ARCHITECTURE}"   --image_dir=tf_files/flower_photos

python -m  scripts.label_image -h

python -m scripts.label_image     --graph=tf_files/retrained_graph.pb \
     --image=tf_files/flower_photos/daisy/21652746_cc379e0eea_m.jpg

python -m scripts.label_image     --graph=tf_files/retrained_graph.pb\
      --image=tf_files/flower_photos/roses/2414954629_3708a1a04d.jpg

And finally run the classifier against your own image

python -m scripts.label_image     --graph=tf_files/retrained_graph.pb \
      --image=995706_kukka_1905.png

The results should be :

Evaluation time (1-image): 0.501s

roses 0.4427891
dandelion 0.36607185
sunflowers 0.1426634
tulips 0.0484466
daisy 2.9001703e-05

 

Remember to register to the DHN18  , and pick “Miniature histories – Digitized newspapers and cultural heritage assets as source for the local history” as your workshop!

 

Kielipankki

Erilaisten tekstiaineistojen käyttöön tiedoksi Kielipankin Korp-palvelu, jossa voi hakea sisällöistä tietyillä sanoilla ja nähdä sanamuotojen esiintymät ja paikan aineistoissa. Yksinkertaisimmillaan voi valita haluamansa korpukset, jonka jälkeen hakusana ja konkordanssi-näkymään tulee tietoa sanan esiintymisestä.

 

Löydetystä sanasta näkee lehden tiedot josta sana löytyi, tiedot digitointiajankohdasta ja linkki digin puolelle, jos aineisto on käytettävissä.

Jos joissakin hakutuloksissa on eroa suhteessa https://digi.kansalliskirjasto.fi – palveluun, niin syinä voi olla pienet erot aineistoissa – digiin on saatettu tehdä lisäyksiä, poistoja tai  korjauksia joita Korp-palvelusta puuttuu. Lisäksi aineiston käsittelyssä ja hakutoimintojen sisäisessä toteutuksessa on eroa, joten ei tarvitse hämmästyä.

Aineistojen tutkinnassa kannattaa myös tutkia millaisia asioita hakutuloksiin tarttuu. Hakutulos ei välttämättä osu uutiseen vaan se voi osua myös esimerkiksi mainokseen tai ilmoitukseen, joka onkin voinut osua useisiin lehtiin päivä päivältä.

Olemme saaneet jo muutamia kehitysideoita kaavionäkymään, joten jos mielessäsi on jotakin, niin lähetäthän palautetta digin palaute-toiminnon avulla.

 

1918-1929 Finnish newspapers readable for 2018

National Library of Finland has come to agreement with the copyright organization Kopiosto about opening the newspapers and journals, which National Library has digitized, for use for the duration of the year 2018. Read more from the announcement(in Finnish).

Bundle of lion cubs / Source: Joulukukka : lasten joululehti, 01.12.1924, p. 17 https://digi.kansalliskirjasto.fi/aikakausi/binding/1354292?page=17

A hint of the using of the search also with newer materials. If you seek for specific newspaper from specific date, utilize their own search fields:

Free text search is not optimum for a specific newspaper can lead to typos and errors in dates

Instead utilize the separate search fields if you want to target to certain specific newspaper and you even know the date. You can use one or several search options within one search. More options can be found behind the yellow ?-mark in the search page of digi.
Pick date and newspaper if want to target that specific one. Free text search and all of its options are useful if you have specific search idea, but want to see across newspapers (or journals) what is found from it.

So have fun, and share information about the opening to anyone who would like to read about the news, weather, sports, politics or any other topics that the newspapers might have covered back in the date. There might be surprises ahead as things have changed from back then.

+Edit. The news item of Kopiosto with statements from both parties is also now online .