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

1 comment:

  1. O wordt gevoed met echte foto's, met een achtergrond dus. Egale achtergronden (afgezien van blauwe lucht of witte sneeuw) snapt O al gauw niet.
    O geeft altijd een suggestie, onder een percentage van zeg 90 % leze men altijd 'bagger'.
    O kent alleen soorten, geen genera, families of wat dan ook.
    In sommige soortgroepen scoort het programma hoog, wantsen en nachtvlinders bijvoorbeeld. Maar lieveheersbeestjes scoren laag. Libellen ook niet zo hoog.

    ReplyDelete

Comments to posts >30 days old are being moderated.
Safari causes problems, please use Firefox or Chrome for adding comments.