23 December 2019

ObsIdentify (NIA) (5) Hoe zeker is 100%? Soorten met 100% zekerheid herkennen in random pixel plaatjes

Vraagstelling

ObsIdentify-NIA (O) is software voor PC en smartphone die planten en dieren op soortnaam kan brengen aan de hand van foto's. Bij het identificeren van soorten geeft O altijd aan hoe zeker de identificatie is met percentages tussen 0 en 100%. Een percentage tussen 0 en 40% betekent onzeker (rode gebied), tussen 40% en 90% betekent redelijk zeker (blauw); groter dan 90% is vrijwel zeker (groen) en 100% is helemaal zeker. 100% is per definitie zeker, geen twijfel mogelijk. Klopt dat wel? Hoe zeker is 100%? De ultieme vraag is: is de identificatie altijd correct bij 100%? Dat is een belangrijke, maar niet eenvoudig te beantwoorden vraag. 

 
Uit eerder onderzoek bleek dat O nooit 100% zekerheid gaf met egaal gekleurde vlakken en 1-pixel plaatjes. Het maximum was 95.5%. De verklaring kan zijn dat O nooit 100% zekerheid geeft omdat het simpelweg nep plaatjes zijn. Maar misschien zijn er niet genoeg verschillende nep plaatjes aangeboden. Het aantal beschikbare kleuren is 16.777.216 (16 miljoen). Deze kunnen nooit allemaal handmatig getest worden. Een alternatieve manier is de computer random gekleurde pixels laten genereren en deze door O laten beoordelen. Het genereren van random plaatjes is een makkelijke manier om een eindeloze hoeveelheid kleurschakeringen en patronen beschikbaar te hebben. Veel meer dan handmatig mogelijk is. Omdat er zo'n 16.000 soorten in de database van O zitten, zal er wellicht eentje bij zitten die herkend wordt. Het gaat er niet om bij een van te voren gekozen soort een score van 100% te bereiken, maar of er überhaupt soorten herkend worden met 100% zekerheid.


Resultaten!

Bosvleermuis 100%
200x200 R=25 G=10 B=95

Vale vleermuis 100%
115x110 R=25 G=10 B=99

sterk uitvergroot detail van plaatje hierboven.
1 vierkantje is 1 pixel

Alle random pixel plaatjes geproduceerd met RGB-noise worden door O geïdentificeerd als vogels, vissen, vleermuizen, vlinders, planten en paddenstoelen met verschillende percentages zekerheid. Bijna alle blijven ruim onder de 90% en de meeste onder de 40%. Meer specifiek, alle plaatjes geproduceerd met RGB-noise R=25; G=10; B=99 worden door O geïdentificeerd als Vale Vleermuis (Myotis myotis) met zekerheid percentages tussen de 50% en 100%. De meerderheid van de percentages ligt zelfs boven de 90% en 12 plaatjes hebben 99.9%. De laagste is 54,6%. Tot nu toe zijn er 4 plaatjes met 100% zekerheid Vale Vleermuis (zie screenshot hieronder) gevonden. Ook de Bosvleermuis is in een random pixel plaatje met 100% zekerheid geïdentificeerd. Ze zijn hier te downloaden om zelf te testen.

ObsIdentify voorspelt Vale Vleermuis met zekerheid 100.0%
testfile: 115x110RGBnoise-025-010-99.jpg

 

Een andere serie plaatjes met RGB noise waardes R=30; G=10; B=100 geeft consistent hogere waardes boven 90% waaronder ook 100%. De succesvolle RGB waardes liggen dichtbij bij elkaar in het RGB kleurenuniversum. De plaatjes voor de Vale vleermuis zien er overwegend geel-groen uit. De Vale Vleermuis kan met meerdere RGB parameters geproduceerd worden.

Een andere soort die hoog scoort met random pixel plaatjes is de Veldleeuwerik (Alauda arvensis) die 90.3% heeft gehaald. En de Witwangstern (Chlidonias hybrida) heeft met  R=37; G=26; B=60 een zekerheid van 96.2% gehaald [5]. In die serie zijn er 19 plaatjes met zekerheden boven de 90% gevonden. In totaal zijn er door O tot nu toe met alle geteste RGB waardes 69 soorten gevonden, waarvan 53 met zekerheden hoger dan 90.0%. Percentages  boven de 90% zijn voor O zeker in die zin dat de vermelding "ObsIdentify is helaas niet zeker" achterwege blijft en er een groene achtergrondkleur verschijnt.
Een enkele soort (Killdeerplevier) bereikt spontaan het blauwe gebied (tussen 40% en 90%).
Verder is geconstateerd dat van de 69 geteste perfecte foto's in waarneming.nl, die opgenomen zijn als illustratie bij de officiële soortbeschrijving, maar 27 foto's 100% opleveren en dat er zelfs 7 soorten fout geïdentificeerd worden. Zie hier voor de tabel met alle soorten.


Conclusie

Hierboven is bewezen dat met random pixel plaatjes een 100% zekere identificatie verkregen kan worden van Vale vleermuis en Bosvleermuis. De stelling dat 100% zekerheid altijd correct is, is gefalsifieerd. Een zekerheid van 100% kan fout zijn. Daarnaast zijn er series random plaatjes die zekerheden boven de 90.0% geven. Op moment van schrijven zijn er in totaal 70 soorten door O geïdentificeerd in random pixel plaatjes. Tegelijkertijd zijn er foto's in waarneming.nl die door de redactie zijn uitgekozen als perfecte illustratie van hoe een soort eruit ziet, die géén 100% zekerheid opleveren in ObsIdentify.

Discussie

Deze resultaten zijn voor zover mij bekend nieuw. In de literatuur [1],[2] worden percentages genoemd van 99.12%, 95,5%, 99.6% en 99.99%. Dus geen 100%. Deze resultaten zijn nogal subversief. Foto's in waarneming.nl die met 100% zekerheid zijn geaccepteerd zijn dus niet meer 100% zeker. De logica van hoe hoger het percentage, hoe betrouwbaarder, wordt hier op zijn kop gezet. Nep plaatjes met een lage zekerheid zou je nog acceptabel kunnen noemen, maar met 100% zekerheid zijn ze een serieus probleem. Nep plaatjes zouden 0% op moeten leveren. Wat mij ook verontrust is het relatieve gemak waarmee ik de 100% nep plaatjes op een handmatige manier heb kunnen vinden. Misschien heb ik geluk gehad. Mijn inschatting is dat er met een geautomatiseerd systeem en toegang tot een interface met O er in korte tijd duizenden false positives met hoge zekerheid inclusief 100% gevonden zouden kunnen worden.

Zijn de vier soorten met hoge scores uitzonderingen? Zelfs als het bij deze vier blijft is de claim dat 100% zeker, ook écht 100% zeker is, definitief gefalsifieerd. Immers, je hoeft maar één zwarte zwaan te zien om de stelling 'alle zwanen zijn wit' definitief te weerleggen. Dit onderzoek heeft betrekking op hoe de software werkt, de onderliggende techniek, en die geldt voor alle soorten. Dat kan niet anders want er is geen aparte software voor vogels en vlinders, etc. Het lijkt dat deze tekortkoming inherent is aan de software. Een alternatieve verklaring kan zijn dat het aan de trainingsplaatjes ligt.

Dat er in random plaatjes tot nu toe slechts drie soorten gevonden zijn met een score hoger dan 90% komt vooral omdat de testen steekproeven zijn. Soms wat uitgebreidere, maar het blijven steekproeven. Het is een kwestie van tijd om er meer te vinden. Er zijn in totaal 61 soorten gevonden met lagere percentages (zie tabel hier). Deze kunnen hogere percentages opleveren door met kleine stapjes de RGB waardes te variëren.

Een bezwaar tegen mijn conclusie kan zijn dat de conclusie niet opgaat voor échte foto's van échte planten en dieren. De resultaten zouden in de dagelijkse praktijk van waarneming.nl niet van belang zijn. Natuurlijk worden er in de praktijk geen nepplaatjes aangeboden. Maar mijn resultaten zeggen wel degelijk iets over de software. Dit onderzoek raakt aan wat er onder de motorkap gebeurd. Mogelijk kan dit onderzoek licht werpen op tekortkomingen van de software en aanleiding zijn voor verbeteringen. Als er bij nep plaatjes 100% gescoord kan worden, dan zouden foto's van slechte kwaliteit ook wel eens 100% score kunnen opleveren. En dat is een serieus probleem in de dagelijkse praktijk van waarneming.nl waar duizenden nieuwe waarnemingen per dag worden ingevoerd.


Een andere vraag is waarom juist deze drie soorten, en in mindere mate 61 andere soorten, boven komen drijven. Een afdoende verklaring heb ik niet. Mogelijk zijn soorten als Vale vleermuis, Bosvleermuis, Witwangstern en Veldleeuwerik 'moeilijke soorten' die O niet goed kent en daardoor misschien hoog scoren in random plaatjes. Als je een blik werpt op het soort foto's die er in Observation.org aanwezig is van de Vale vleermuis, dan is het geen wonder dat O daar grote moeite mee heeft. Als er geen strenge selectie heeft plaatsgevonden bij de foto's voor de trainings-set lijkt het een hopeloze opgave om een Vale vleermuis te identificeren. In feite mis-identificeert O een uitstekende foto van de Vale Vleermuis als Gewone Grootoorvleermuis Plecotus auritus (74.7%). Dat is de foto waarmee ik dit blog opende en die als illustratie dient van de soort beschrijving op waarneming.nl.
ObsIdentify:
Rode poon Trigla lucerna (47.5%)
Een close-up foto van de Vale vleermuis identificeert O zelfs als Rode poon Trigla lucerna (47.5%)! Dat is een vis! Dus O herkent de Vale vleermuis niet en dat kan verklaren waarom O zich zo makkelijk laat misleiden door nep plaatjes? Deze verklaring impliceert echter dat O geen weet heeft van haar eigen zwakheden. Mensen zouden zeggen: ik ben niet zo goed in vleermuizen. En zouden in dat geval zeker geen claims met 100% zekerheid doen. Ik ben slecht in paddenstoelen, en ik twijfel dan ook als O een paddenstoel identificeert. Maar O zou zich juist met 'moeilijke' soorten moeten onthouden van ieder oordeel [4], zeker van 100% zekerheid. Het probleem is de combinatie van de slechte kennis van deze vleermuis en de hoge zekerheid bij een nep plaatje. Dat mag niet gebeuren. Als een
Witwangstern (Waarneming.nl)
O geeft terecht 100% zekerheid
placebo plaatje het beter doet dan het echte beest dan is er toch wel iets aan de hand.
Als een placebo al 100% oplevert, dan kan een échte foto daar niet bovenuit komen. Moeilijke soort of niet, de software heeft de soort kennelijk in zijn database, en dan moeten er passende onzekerheden gegeven worden.

In het geval van de Witwangstern betreft het weliswaar een zeldzame soort, maar er zijn 6.000 foto's en O kan de soort terecht met 100% zekerheid identificeren. Aan de andere kant: laat je alleen de kop zien, dan maakt O er een Blauwe Reiger (12.5%) van! Niet te begrijpen.
In het geval van de Veldleeuwerik komt O met een perfecte foto (die uitgekozen is door de redactie van waarneming.nl) niet verder dan 73,5%. Dit zou bijna per definitie 100% moeten zijn [3].

O: Veldleeuwerik 73,5%...
Het is zeer problematisch dat O perfecte foto's niet, en random plaatjes wel met 100% zekerheid identificeert. Sommige soorten lijken echt een random vlekken patroon te hebben, zoals de Veelhuizige populierenroest, de (Amerikaanse) wintertaling of Klein koolwitje. Maar die heb ik nog niet gevonden in random plaatjes. Samenvattend: het is niet duidelijk waarom bepaalde soorten boven komen drijven in tests met random plaatjes. Misschien kan de maker van O een tipje van de sluier oplichten?

Op zich is het niet relevant dat de software op een totaal andere manier (pixel statistieken!) soorten herkent dan de mens. Het gaat immers om de resultaten. Als de resultaten goed zijn, dan is de techniek geen probleem. Maar als de resultaten fout zijn, begint de onderliggende techniek wel relevant te worden.
Wintertaling
random patroon?
Klein koolwitje
random onderkant vleugel?

Dit onderzoek heeft niet als bedoeling om ObsIdentify als onbetrouwbaar weg te zetten. Het is zonder meer een aanwinst voor waarneming.nl. Het bevordert interesse in het leren identificeren van soorten bij een groter publiek en kan als wetenschappelijk instrument ingezet worden. Mijn onderzoek is ontstaan uit nieuwsgierigheid. Het sluit aan bij internationaal onderzoek naar Artificial Intelligence [1], [2]. De resultaten geven aanleiding tot verder onderzoek. Misschien kunnen deze resultaten aanzetten tot het verbeteren van het algoritme.


Methode

RGB instellingen Vale Vleermuis 100.0%
Om plaatjes te genereren en te bewerken gebruik ik GIMP image editor 2.8 (Ubuntu 16.04 LTS). Om de random plaatjes te genereren heb ik in het Filters menu: Noise: RGB noise gekozen met instellingen: Independent RGB; non-correlated RGB; Resolution: X:72; Y:72 pixels/inch tegen een witte achtergrond. Alle plaatjes zijn van het type jpg 100% quality (dus zonder compressie). De afmetingen van de plaatjes zijn 115x110 pixel (12.650 pixels totaal), tenzij anders aangegeven. De gegenereerde files worden hier beschikbaar gesteld.
Het vinden van plaatjes die door O met een hoge zekerheid als een soort worden geïdentificeerd is een trial-and-error proces: 1) met grote stappen verschillende combinaties van Red, Green en Blue uitproberen totdat de percentages die O geeft boven de 40% uitkomen. 2) met kleinere stappen rondom de succesvolle RGB waardes net zolang variëren tot de percentages van O blijven stijgen. Een pixel bestaat uit een R, G en B component. De R,G,B parameters in het RGB noise algoritme bepalen (waarschijnlijk) hoe vaak een kleurcomponent gebruikt wordt bij de aanmaak van de kleur van een pixel. Als R,G,B op maximaal staan, worden er altijd 3 kleurencomponenten gebruikt bij de aanmaak van een pixel. Staat een RGB parameter op nul, dan wordt die kleurcomponent niet gebruikt. Ieder plaatje dat gegenereerd wordt is uniek omdat op een random manier gekozen wordt hoeveel van iedere RGB component gebruikt wordt binnen de parameters die door de gebruiker gekozen zijn (zie afbeelding). Bijvoorbeeld de instelling R=0.25 G=0.10 B=0.99 zal bij iedere generatie een ander plaatje opleveren. Je kunt er eindeloos plaatjes mee produceren. Wordt hetzelfde plaatje meerdere malen aan O aangeboden, dan is het resultaat steeds hetzelfde.
ObsIdentify (O) in Firefox 71.0 (Ubuntu 16.04 LTS) via het invoerscherm van waarneming.nl


Updates

26 Dec 2019: Inmiddels is een random pixel plaatje gevonden die een Bosvleermuis met 100% zekerheid oplevert. zie: Data

11 Jan 2020: Witwangstern is opgelopen tot 99,4%. Zekerheidspercentages van referentie foto's in waarneming.nl zijn toegevoegd aan de tabel. Zie: data.


Data



Noten

  1. It is alarmingly easy to trick image recognition systems. Slate.
  2. Deep neural networks are easily fooled: High confidence predictions for unrecognizable images, Evolving Artificial Intelligence Laboratory.
  3. Is er een maatstaf voor een 'moeilijke soort' onafhankelijk van een laag percentage? Het aantal trainings-foto's? Ik heb O nooit betrapt op de uitspraak: "kan foto niet beoordelen'. Wel 'foto bijsnijden', maar dan heeft O al een voorspelling gedaan. Om altijd maar een voorspelling toe doen lijkt me niet goed. Een voorspelling met 1,9% zekerheid is niet zinnig. In de app heb ik zelfs een voorspelling met 0% gezien (in het rijtje alternatieven)! De redactie van waarneming.nl heeft de soortengroep tjiftjaf-fitis in de Disclaimer aangemerkt als moeilijk. Toch gaat O er vrolijk mee in de fout. Een door de redactie uitgezochte perfecte foto van de tjiftjaf krijgt: "ObsIdentify voorspelt Siberische Tjiftjaf Phylloscopus collybita tristis met zekerheid 98.5%". Fout dus. Geef dan geen oordeel.
  4. Goede uitzonderingen zijn uitslagen als: 'Dwergvleermuis onbekend' en 'Vleermuis onbekend'.
  5. Ondertussen is het O percentage Witwangstern opgelopen tot 99,4% met handmatig pixels toevoegen aan random pixel plaatjes. Zie: Data. 11 jan 2020.

 

Alle ObsIdentify blogs

  1. 30 September 2019 Test van ObsIdentify algoritme voor automatische identificatie van dieren en planten deel 1
  2. 21 Oktober 2019 ObsIdentify software gekraakt! Vlinders identificeren zonder te weten wat een vlinder is... deel 2
  3. 19 November 2019 ObsIdentify (3) Who is afraid of red, yellow and blue? De Vlinder Turing test voor mens en AI deel 3
  4.  4 December 2019 ObsIdentify herkent Kuifeend, Kikker, Kiekendief en vele andere soorten in plaatjes van 1 pixel deel 4
  5. 23 December 2019 Hoe zeker is 100%? Soorten met 100% zekerheid herkennen in random pixels. deel 5
  6.  4 Februari 2020 Hacken voor dummies en gevorderden. Beeldherkenningssoftware ObsIdentify is makkelijk te misleiden. deel 6
  7. 18 maart 2020 ObsIdentify geeft ALTIJD foute antwoorden buiten zijn eigen domein. Ook met hoge zekerheden. deel 7 
  8. Voor alle volgende blogs over ObsIdentify klik op label ObsIdentify

 

Klik voor alle ObsIdentify blogs op label ObsIdentify.

04 December 2019

ObsIdentify (NIA) herkent Kuifeend, Kikker, Kiekendief en vele andere soorten in plaatjes van 1 pixel. (deel 4)

ObsIdentify (NIA) (hierna kortweg O) is een succesvol beeldherkennings algoritme dat dieren en planten herkent aan de hand van foto's. Het programma is standaard aanwezig in waarneming.nl. Het helpt gebruikers met het identificeren van soorten. In vorige blogs heb ik O flink aan de tand gevoeld. Ik gebruikte gemanipuleerde foto's, maar ik had nog geen controle experimenten uitgevoerd. 

Controles uitvoeren is vervelend, oninteressant en noodzakelijk in wetenschappelijk onderzoek. Controles zijn een soort placebo's, in dit geval een afbeelding waarin helemaal niets in zit. Een egaal grijs, groen, geel, rood, blauw vlak. De controles die ik deed met O bleken vele malen interessanter dan de echte experimenten. O zag dingen die er niet zijn. Ik werd nieuwsgierig naar de omvang van het effect. Ik heb het systematisch uitgezocht.

Ik heb egale vlakken (afmeting 115x110) van de 8 hoofdkleuren zwart, wit, rood, geel, paars, cyaan, blauw, en groen, alsmede 15 tinten van alle 8 kleuren getest. Ik laat de primaire kleuren en de voorspelling van O hier zien:

kleurVoorspelling ObsIdentify:
foto
#ff0000
Mopsvleermuis Barbastella barbastellus (14.5%).

- zeer zeldzaam

©wikpedia
#ffff00
Kuifeend Aythya fuligula (7.3%)

- algemeen
#ff00ff
Muizenoor Hieracium pilosella (22.6%)

- algemene soort
#00ffff
Grote glimworm Lampyris noctiluca (7.1%)

- algemeen, kever.
#0000ff
Meerkikker Pelophylax ridibundus (69.3%)

-vrij algemeen, niet veel foto's
#00ff00
Bosbeekjuffer Calopteryx virgo (7.2%)

-zeldzame soort

foto: Rick van der Weijde
#000000
Gevlekte winteruil Conistra rubiginea (17.3%)

- vrij algemene soort
#ffffff
Grote weerschijnvlinder Apatura iris (2.6%)

- zeldzame soort
Zie hier voor de resultaten van alle kleuren.

NB: dit zijn allemaal egale vlakken zonder enige toevoegingen. In ieder 'plaatje' ziet O een veermuis, vogel, plant, kever, amphibie, libelle, vinder. De meerderheid van de controles hebben weliswaar lage zekerheden, maar dat O überhaupt iets ziet in een leeg vlak is voor mij totaal onverwacht. Een uitschieter is de Meerkikker met 69,3% zekerheid [1]. Eigenlijk kan ik het hele verschijnsel niet verklaren. Behalve de kleur bevatten deze vlakken nl. geen enkele informatie en toch tovert O de ene na de andere soort uit de hoge hoed. Niet met hoge zekerheid, maar wel 100% reproduceerbaar.

Nadat ik tientallen egaal gekleurde vlakken had uitgeprobeerd met soortgelijke resultaten, heb ik uit pure nieuwsgierigheid willekeurige witte pixels toegevoegd. De grote verrassing -de game-changer- kwam met het volgende plaatje:


Computer says: Stellers Zeearend Haliaeetus pelagicus (79.9%)
[ 150x110. 2 witte pixels. kleur: #003333 (cyaan). jpg: 0% compressie,
afbeelding 2x ware grootte]

O identificeert dit blauw-groene vlak met 2 witte pixels met grote stelligheid als Stellers Zeearend 79,9%! Deze grote zekerheid is opmerkelijk, maar is nog verder op te voeren met slechts 2 extra gekleurde stippen:

Computer says: Stellers Zeearend Haliaeetus pelagicus (93.3%)
[kleur: #003336 met 4 stippen]

In een egaal blauw-groen vlak met 4 stippen ziet O een Stellers Zeearend met een zekerheid van 93,3%. Dit slaat werkelijk alles. Ik stel de plaatjes hier beschikbaar voor download, dan kunt U het zelf controleren, anders gelooft U mij niet. De achtergrondkleur en het aantal, de kleur en exacte positie van de stippen zijn zeer kritisch. Ook de absolute grootte van het 'plaatje' maakt uit. Verander je ook maar iets dan daalt de zekerheid, of wordt het zelfs een Grote glimworm, Lichte korstmosuil, Witvlakvlinder of Bultrug.


ObsIdentify is helaas niet zeker: de eerste voorspelling:
Scholekster Haematopus ostralegus (67.7%)
 
O: Scholekster 100%
zeer algemene broedvogel
in de Wadden

Bovenstaande foto (links) van de Stellers Zeearend wordt door O geïdentificeerd als Scholekster (67.7%)! Dat is niet zo maar 'een beetje fout'. Ik kende de Stellers ook niet, maar je ziet onmiddellijk dat het een soort zeearend is. Maar dan een zeearend met een bijna komisch aandoende oranje snavel en poten, en zeer opvallende witte vlekken op de vleugels en pootveren. O maakt hier een categorie fout. Scholeksters zijn steltlopers en de Stellers is een roofvogel. Zelfs een beginneling zal dit verschil intuïtief inzien. Waarom ziet O dit niet? Ja, de overeenkomsten zijn de witte en zwarte kleuren van het verenkleed en de oranje-gele poten en snavel. En misschien de achtergrond? Dat zijn erg oppervlakkige overeenkomsten. Toch kent O alle in Nederland voorkomende roofvogels, en de scholekster kent hij natuurlijk ook. Dat helpt kennelijk niet. Gek genoeg kan O de foto van de Stellers Zeearend uit wikipedia wèl correct identificeren als Stellers Zeearend, maar met een matige zekerheid van 55.6%. Kennelijk 'denkt' O uitsluitend in soorten, niet in genus en familie zoals wij gewend zijn te doen.
Misschien komt dit omdat de Stellars Zeearend alleen in Japan, Rusland en China voorkomt en hij is ooit in 2009 in Nederland waargenomen, maar dat was een ontsnapt exemplaar. O heeft hem misschien ook maar 1 keer gezien. Dat roept vervolgens de vraag op: kent O dan de scholekster wel goed?
Terug naar de 'nutteloze' controles. Wat dacht U van deze 'random' dots: dit lijkt nergens op.

Computer says: Amerikaanse ribkwal 99,9%
(115x110. kleur: #999999. 15 witte pixels
afbeelding plm. 2x ware grootte)
Computer says: Amerikaanse ribkwal Mnemiopsis leidyi 98.8%
(afbeelding uit waarneming.nl)

 

Ik ben begonnen met een egaal grijs vlak: Wespendief (2.1%) ; toen +1 witte stip ging het omhoog naar de Smalle waterpest (13.5%); tenslotte een grijs vlak met 15 witte pixels dat de Amerikaanse ribkwal 99,9% oplevert [2]. Dat is het absolute record dat ik behaald heb met een zelf geconstrueerd grijs vlak met witte pixels. O is vrijwel 100% zeker dat die 15 stippen een ribkwal voorstellen.

1 pixel plaatjes!

Ik dacht dat ik de meest extreme tests had uitgevoerd die er denkbaar zijn. Maar het kan kan nog extremer. nl. een 'plaatje van 1 pixel':

1 pixel kleur #009900
groen zonder border
Donkergroene korstmosuil 15,1%
1 pixel kleur #009900
groen met border=2

 

De groene pixel (links) staat boven de letter u in het onderschrift. Om de pixel hier zichtbaar te maken hebben ik hem een zwarte rand van 2 pixel gegeven (rechts). Die rand hoort niet bij het plaatje. Ter vergelijking: een punt aan het einde van een zin bestaat uit ongeveer 5 pixels. Een pixel is de kleinste eenheid van een beeld en kan iedere kleur aannemen. De kleinste verschillen in kleurtinten zijn met het blote oog niet te zien. Je moet ze een factor 10x vergroten om de kleur te kunnen zien. Dit is een krankzinnige test. O accepteert het 1-pixel-plaatje en herkent de 'Donkergroene korstmosuil' Cryphia algae met een zekerheid van 15.1%. NB: dat is exact hetzelfde resultaat als een plaatje van 115x100 pixels van dezelfde kleur [3]. En dat geldt met onwaarschijnlijke precisie voor alle 15 groentinten.  Het maakt dus niet uit hoe groot het plaatje is, als het maar dezelfde kleur heeft.

kleur #1f00ff
(20x vergroot)
Meerkikker
95,5%

Een plaatje van 8 miljoen pixels geeft hetzelfde resultaat als een plaatje van 1 pixel.
Denk nu niet dat O alleen soorten herkent in 1pixel plaatjes met een zeer lage zekerheid: de recordhouder (tot nu toe) is de Meerkikker die O met 95,5% zekerheid herkent in een 1-pixel plaatje met de kleur #1f00ff (violet). Kan het nog extremer dan dit? Nog een paar goed gekozen pixels erbij en je hebt 100% zekerheid.
Natuurlijk komen deze 'plaatjes' nooit in de praktijk voor. Maar feit is dat O er soorten in herkent en de plaatjes niet weigert.


 

Discussie

O maakt hier twee type fouten: de ene soort voor de andere aanzien (een natuurgetrouwe Stellers Zeearend aanzien voor een Scholekster) en een soort zien in een leeg plaatje (false positive). Betekent dit alles dat O een slecht programma is? Nee, in de praktijk met normale foto's zal het programma goed presteren (dit is een andere test die ik nog niet heb uitgevoerd). De bizarre fouten komen hoofdzakelijk van zeer kunstmatige voorbeelden. O gaat vooral de fout in bij zeldzame soorten die hij niet vaak gezien heeft. Zo lijkt het. Dat is geen inherent probleem van de software en kan vermoedelijk simpel opgelost worden door haar te trainen met meer foto's.

De reproduceerbaarheid van de (on)zekerheden bij kunstmatige plaatjes is steeds 100%. Dat heeft me verbaasd. Dit is in tegenstelling tot experimenten in de biologie waar je altijd variatie rondom een gemiddelde verwacht. Maar die is hier niet. Waarschijnlijkheden worden kennelijk door een deterministisch proces berekend: dezelfde input geeft dezelfde output. Als je bijvoorbeeld  kijkt naar de resultaten van de egaal gekleurde vlakken en 1-pixel kleurenplaatjes, dan valt op dat O consistent soorten aan kleuren koppelt, en bovendien consistent steeds hetzelfde percentage (on)zekerheid geeft. Maar het is totaal onduidelijk waarom deze soort en waarom dit percentage en waarom deze kleur. Een resultaat dat volkomen willekeurig lijkt maar toch op een consequente reproduceerbare manier werkt.
Wat zeker opvallend on-biologisch is dat de alternatieven voor de eerste voorspelling dwars door systematische grenzen heen gaan: vogels, planten, insecten, paddenstoelen als alternatieve voorspellingen voor 1 foto.

Wat is de logica achter deze false positives? Ik heb er nog geen systeem in kunnen ontdekken. Het zijn brute facts. Sommige soorten zijn zeldzaam en hebben weinig foto's in waarneming.nl, dus hebben een kleine trainingsset en dat geeft onzekerheid [4]. Maar er zitten genoeg soorten bij met een paar duizend foto's (Zeearend, Slechtvalk, Sperwer, Bruine kiekendief, etc.). Sommige soorten komen bij meerdere kleuren voor, andere maar bij 1 kleur. Kleurenvoorkeur is meestal onbegrijpelijk. De redenering zou kunnen zijn: kleur 1 komt met de hoogste frequentie voor bij soort A, daarom gok ik op soort A. Worden er daarbij nog patronen ontdekt dan stijgt de waarschijnlijkheid.
De soorten komen uit het hele planten en dierenrijk: vleermuizen, vogels, amfibieën, vissen, vlinders, kevers, vliegen, libellen, paddenstoelen, planten. Dus alle mogelijke soorten worden meegenomen in de analyse. Dat moet ook wel, want je weet van te voren helemaal niets.
O is supergevoelig voor (letterlijk) de kleinst mogelijke kleurverschillen. Bijvoorbeeld de voor het menselijk oog niet te onderscheiden kleuren #2f00ff (47.4%) en #1f00ff (95.5%) geven een factor 2 verschil in zekerheid van de Meerkikker. Betekent dit dat de kleur #1f00ff in 95,5% van de plaatjes voorkomt? En in alle andere plaatjes in lagere frequentie? Bij die zekerheid hoef je nog maar heel weinig toe te voegen om de 100% te halen.

Wat dit alles ons nogmaals leert is dat O totaal anders werkt dan mensen. Het is verleidelijk te denken dat O snapt wat hij ziet als hij een soort goed identificeert. De duizenden soorten die O goed identificeert scheppen de illusie dat de software een menselijk vermogen heeft. Omdat soorten herkennen zo lijkt op wat mensen kunnen. Misschien maakt het O menselijker dat ze aangeeft hoe zeker of onzeker ze is. Wij zijn ook niet altijd zeker van onszelf. Maar O snapt niets van vogels, vlinders, vliegen en vleermuizen. Dat blijkt overduidelijk uit de kunstmatige voorbeelden hierboven. Daarom zijn die kunstmatige voorbeelden ook zo verhelderend maar tegelijk ontnuchterend. Je leert O pas echt kennen door de kunstmatige voorbeelden. O heeft een 'onmenselijk' (niet-menselijk) vermogen. Daarom een variatie op een boek van Frans de Waal: Zijn wij slim genoeg om te weten hoe slim O is? Ik vind het nog steeds een grote uitdaging om het gedrag van O te voorspellen. Neem een nieuwe kleur en je krijgt vast een nieuwe soort.

Het meest raadselachtige van O is de grote tegenstelling tussen de succesvolle identificatie van duizenden soorten en de totale onkunde die blijkt bij kunstmatige voorbeelden. Dat effect wordt versterkt doordat O altijd antwoorden geeft. Nooit zegt O dat ze het niet weet.

Het soort false positives die ik in dit blog heb onderzocht zouden misschien vermeden kunnen worden door in de trainingsset controles op te nemen. Het programma moet geleerd worden te zeggen: O kan geen soort identificeren. Dat is helemaal geen schande. Eén kleur in een plaatje kan per definitie niet voldoende zijn om een soort te herkennen. Gezien de resultaten in dit blog betekent een zekerheid van minder dan 10% of zelfs 20% dat O het in feite niet weet. Een alternatief is een foto weigeren als het beneden de 10% of 20% zekerheid zou uit komen.
Het ziet er naar uit dat er geen controles in de trainings set hebben gezeten. Die controles zouden 0% zekerheid moeten definiëren. Dus: de software ijken met behulp van lege plaatjes (blanco's). Alles wat daar boven uit komt is een realistisch zekerheidspercentage. Welk percentage zou dat moeten zijn? Bij de Meerkikker zou dat betekenen dat alleen percentages boven de 69,3% meetellen. Het probleem is dat je niet van te voren weet met welke soort je te maken hebt en die percentages verschillen juist per soort. Hetzelfde geldt waarschijnlijk als je de kleur zelf gebruikt als ijkpunt. Een andere benadering is dat je soorten pas voorspelt als je er tenminste 100 gezien hebt. Dan mis je dus de zeldzame soorten. Nog een andere aanpak: weiger te kleine plaatjes. Maar je kunt een foto van standaard formaat hebben, terwijl het bedoelde object klein is (omdat het ver weg is). De beste aanpak is waarschijnlijk als O beneden de 10% of 20% zekerheid zit melden: ObsIdentify is niet zeker en kan geen soort voorspellen.*)


Als O een hoge waarschijnlijkheid aangeeft wil dat nog niet zeggen dat deze waarneming automatisch in de database van waarneming.nl terecht komt. Altijd moet een mens op de accepteer knop drukken. Bovendien zijn er nog de moderators. Geeft O een lage zekerheid dan verschijnt er geen groene accepteer knop, maar moet je kiezen uit de onzekere voorspellingen die bij wijze van waarschuwing voorzien zijn van kleinere rode accepteer knoppen. Dus de database van waarneming.nl is niet gevuld met onzin. Kanttekening: nep plaatjes zoals het een 1-pixel plaatje met de kleur #1f00ff krijgt de voorspelling 'Meerkikker (95,5%)' en automatisch de groene accepteer knop. Dat geldt ook voor de fake 'Amerikaanse ribkwal (99,9%)' en de fake 'Stellers Zeearend. (93.3%)'. Al die fake plaatjes zou je zonder meer kunnen accepteren en geen moderator zal gealarmeerd worden. Denk ik. [5]


 

Bronnen


Verder lezen

Samuel G. Finlayso, et al (2019) Adversarial attacks on medical machine learning, Science 22 Mar 2019.


Noten

  1. Aan de hand van foto's is de soort meestal niet vast te stellen.
  2. Deze invasieve soort die sinds 2006 ook, soms massaal, in de Nederlandse kustwateren voorkomt. In het water levert het fraaie foto's op, maar aangespoeld is de soort lastig te herkennen? 
  3. Ik vond 1 uitzondering. Bij nader onderzoek bleek dat ik een fout in de aanmaak van het plaatje had gemaakt (de kleur was niet juist). Met het blote oog zijn die kleurverschillen niet te zien. O herkende dit feilloos. O is beter in het herkennen van zeer subtiele kleurverschillen van 1 pixel dan het menselijk oog en geeft dit weer als een andere soort. Ik kon mijn fout dus corrigeren dankzij het scherpe waarnemingsvermogen van O!
  4. Tenminste als O getraind is met de Nederlandse waarnemingen, want er is ook nog een internationale versie: https://observation.org/ voor landen buiten Nederland + België.
  5. Bij iedere waarneming staat een icoon. Er is een icon A: 'goedgekeurd (automatische validatie)'. Dus deze waarnemingen zijn altijd te herkennen. Zie deze pagina met iconen

 

Alle ObsIdentify blogs

  1. 30 September 2019 Test van ObsIdentify algoritme voor automatische identificatie van dieren en planten deel 1
  2. 21 Oktober 2019 ObsIdentify software gekraakt! Vlinders identificeren zonder te weten wat een vlinder is... deel 2
  3. 19 November 2019 ObsIdentify (3) Who is afraid of red, yellow and blue? De Vlinder Turing test voor mens en AI deel 3
  4.  4 December 2019 ObsIdentify herkent Kuifeend, Kikker, Kiekendief en vele andere soorten in plaatjes van 1 pixel deel 4
  5. 23 december 2019 Hoe zeker is 100%? Soorten met 100% zekerheid herkennen in random pixels. deel 5
  6.  4 Feb 2020 Hacken voor dummies en gevorderden. Beeldherkenningssoftware ObsIdentify is makkelijk te misleiden. deel 6
  7. 18 maart 2020 ObsIdentify geeft ALTIJD foute antwoorden buiten zijn eigen domein. Ook met hoge zekerheden. deel 7 
  8. Voor alle volgende blogs over ObsIdentify klik op label ObsIdentify

19 November 2019

ObsIdentify (NIA) (3) Who is afraid of red, yellow and blue? De Vlinder Turing test voor mens en AI

In mijn vorige blog liet ik zien dat de achtergrond een onverwacht grote invloed heeft op het resultaat dat het OsIdentify (NIA) (O) programma geeft. De Atalanta die ik daarvoor gebruikte was een foto van een kleurentekening uit een vlindergids. Niks mis mee zou je zeggen. Zo leren mensen vlinders herkennen. Maar toen ik een echte foto gebruikte voor dezelfde experimenten waren de resultaten totaal anders. 

Als uitgangsfoto deze Kleine Vos met een wit gemaakte achtergrond. O determineert deze met 100% zekerheid. Dat is goed.

Foto Kleine Vos met witte achtergrond. 1280x960 pixels
gebaseerd op wikipedia

 

De kunstmatig witte achtergrond is dus totaal geen probleem. Zelfs teksten in de achtergrond en door de vlinder heen en ander geklieder maken O niets uit:

Computer says: Kleine Vos 100% !
Computer says: Kleine Vos 100% !
update: met nog meer takjes maakt niet uit!

 

Hoe kan dat? Ook egaal gekleurde achtergronden brengen O niet aan het twijfelen. Zelfs zeer felle onnatuurlijke kleuren brengen O niet van stuk. Waarom niet? Ik denk dat dit komt omdat O met echte foto's van echte vlinders is getraind. Niet met plaatjes uit een vlindergids. Wij mensen vinden dat geen groot verschil. Sterker nog: het valt ons niet eens op. Ik kreeg geen protesten dat ik een plaatje uit een vlindergids gebruikte. Maar voor O was dit wel een punt. Dit lijkt mij op zich een belangrijke constatering. Daar kom ik op terug.
Ten tweede: bij een echte foto is O 100% zeker van zijn zaak en daardoor laat hij zich niet in de war brengen door wat gerommel in de achtergrond.

Atalanta  (vlindergids) O: 61,3%
750 x 556 (zie vorig blog)
Ik denk dat die lage zekerheid 61,3% van de Atalanta met witte achtergrond uit de vlindergids niet zo maar een onschuldig voorbeeld is. Het zou wel eens kunnen verklaren waarom O gevoelig is voor achtergronden.
Ik stel me dat zo voor: stel dat wij in het donker op een afstand een persoon zien, dan kunnen we ons makkelijk vergissen wie het is. Zelfs als het een bekende is. Misschien denken we: ik kan zijn/haar gezicht niet goed zien, maar waarschijnlijk is het Jan, want die loopt meestal in een rode jas. Dus: irrelevante gegevens gaan de doorslag geven.

Who is afraid of red, yellow and blue?

Om deze hypothese te testen heb ik de echte foto van de Kleine vos van hierboven met een factor 6,4 verkleind tot 200x147. Dan zie je de eerste aanwijzingen dat sommige kleuren van de achtergrond een negatieve invloed gaan hebben. Ga je nog verder verkleinen, met 8,5x tot 150x110 dan wordt O nog onzekerder:

 [150x110] Kleine vos 100%
   Kleine vos 100%
   Kleine vos 99,9%
    Kleine vos 99,8%
   Kleine vos 70,9%
   Kleine vos 66,5%

Het effect van de achtergrond is overduidelijk. Afhankelijk van de kleur zakt de zekerheid. Bij groen zelfs tot 66,5%! Waarom? Waarom is het effect van kleuren zo verschillend? What's wrong with red, yellow and blue? NB: al deze achtergrondkleuren hebben geen enkel effect wanneer ze worden toegepast op groot formaat 1280x960 pixels. Hoe dan ook, O maakt er géén andere soort van. 
Echter, ga je het O nog moeilijker maken door ook nog onscherpte toe te voegen, dan wordt het een andere soort:


 klein+onscherp:
 Kleine vos 32,9% 
 [150x110]
 +groen:
 Oostelijke vos 74,2%
 [150x110]
 +rotzooi:
 Oostelijke vos 98,9%
 [150x110]

Door een combinatie van klein formaat 150x110 en onscherpte daalt de zekerheid van Kleine vos naar 32,9%. Voeg je daar nog een groene achtergrond aan toe, dan ziet O plotseling een Oostelijke vos. Dat is een evolutionair verwante soort die in Nederland zeldzaam is maar algemeen is in Rusland. Het drietal Kleine vos, Grote vos, Oostelijke vos is voor een leek moeilijk te onderscheiden (uitleg). Voeg je nog wat rotzooi in de groene achtergrond toe, dan loopt de zekerheid op tot de foute soort Oostelijke vos 98,9%. Deze voorbeelden tonen overtuigend aan dat de achtergrond een foute soort op kan leveren wanneer O om te beginnen al onzeker is (gemaakt). O is terecht onzeker want de foto is behoorlijk onscherp en ook nog eens klein. Onder deze omstandigheden komt het achtergrond effect tevoorschijn. Wij zouden ook enigszins onzeker zijn, maar zouden ons oordeel toch nooit door de achtergrond laten bepalen? Dat is het verschil tussen mens en machine.

Neveneffect van grote onzekerheid


Onzekere voorspellingen bij Kleine vos 32,9%
Aziatisch lieveheersbeestje (25.7%)


Het neveneffect van grote onzekerheid is dat er onzinnige alternatieven opduiken: Bastaardkikker, Kleine watersalamander.  Dat valt buiten de categorie vlinders, zelfs buiten de categorie insecten. 
Ga je nog een stapje verder met onscherpte dan komt O met Aziatisch lieveheersbeestje (25.7%).


Lezersvraag: hoever zou een machine moeten gaan om te kunnen zeggen dat die weet wat een vlinder is? Mijn voorstel: (1) blijf binnen de categorie vlinders als je het niet zeker weet. Het liefst binnen de familie of genus. Voor ons is het evident dat bovenstaande afbeelding geen lieveheersbeestje is. De gids Dagvlinders van Europa van Tristan Lafranchis is gebaseerd op sleutelkenmerken en daalt af via families, onderfamilies, geslacht tot de soort. Of die methode voor een computer geschikt is weet ik niet. Het proberen waard? (2) achtergrond mag geen invloed hebben op het resultaat. (3) het algoritme moet een vlinder uit alle richtingen herkennen. Hij moet dus 'weten' dat het een 3D object is, dat een vlinder zijn vleugels schuin kan houden, dat een vlinder heel of half in beeld is, met de kop beneden of boven, dat hij ver weg is, etc. (4) het algoritme moet zowel een goede tekening als een foto van een vlinder kunnen herkennen. (5) toekomstmuziek: in een video een vliegende vlinder herkennen als vlinder. Niet de soort, want dat kan bijna niemand. Maar wel: vlinder, hommel, wesp, vlieg, mus. En misschien ook nog dit: als het de soort niet kan identificeren, dan zou de indeling in genus of familie wel aardig zijn.

Lezersvraag: Weten mensen eigenlijk wel wat een vlinder is of leggen we de lat bij mensen minder hoog dan bij machines? Geen enkele Nederlander heeft de soortenkennis van ObsIdentify! Als je bedenkt dat ObsIdentify niet alleen vlinders herkent, maar ook andere insecten, vogels, etc. (14.000 soorten) dan zijn er niet veel mensen die dat evenaren. De vogelspotter Arjan Dwarshuis haalde binnen 1 jaar 6.833 vogelsoorten (wereldrecord). 

Het zou interessant zijn om een Turing test of een competitie te organiseren van mens en ObsIdentify. Dat geeft een objectieve vergelijking van de prestaties van mens en machine! Categorie (I) Algemeen: alle soorten dieren en planten; categorie (II): alle Nederlandse/Europese insecten; categorie (III): alle Nederlandse/Europese/Wereld vogels. Wie meldt zich?


Met dank aan Bert Morrien voor de lezersvraag.


Alle ObsIdentify blogs

  1. 30 September 2019 Test van ObsIdentify algoritme voor automatische identificatie van dieren en planten deel 1
  2. 21 Oktober 2019 ObsIdentify software gekraakt! Vlinders identificeren zonder te weten wat een vlinder is... deel 2
  3. 19 November 2019 ObsIdentify (3) Who is afraid of red, yellow and blue? De Vlinder Turing test voor mens en AI deel 3
  4.  4 December 2019 ObsIdentify herkent Kuifeend, Kikker, Kiekendief en vele andere soorten in plaatjes van 1 pixel deel 4
  5. 23 december 2019 Hoe zeker is 100%? Soorten met 100% zekerheid herkennen in random pixels. deel 5
  6.  4 Feb 2020 Hacken voor dummies en gevorderden. Beeldherkenningssoftware ObsIdentify is makkelijk te misleiden. deel 6.
  7. 18 maart 2020 ObsIdentify geeft ALTIJD foute antwoorden buiten zijn eigen domein. Ook met hoge zekerheden. deel 7 
  8. Voor alle volgende blogs over ObsIdentify klik op label ObsIdentify.