04 February 2020

Hacken voor dummies en gevorderden. Beeldherkenningssoftware ObsIdentify (NIA) is makkelijk te misleiden (deel 6)

Hacken voor dummies


Zo hack je ObsIdentify-NIA (O ) in 2 stappen: 
  1. creëer een png file van 200 x 200 pixels met witte achtergrond
  2. zet 1 zwarte pixel op coördinaten x=98; y=97 (nulpunt is linkerbovenhoek)

volgens ObsIdentify is dit een gierzwaluw
met 66,0% zekerheid. (200x200 pixels)

Upload dit plaatje naar ObsIdentify (waarneming.nl) en U zult zien dat U een gierzwaluw met 66,0% zekerheid heeft gecreëerd! Gefeliciteerd met Uw eerste hack! Zo simpel kan het zijn om O te hacken: 1 pixel op de juiste plaats.


Met nog twee simpele stappen kunt U het percentage nog verder opvoeren:
  1. geef de pixel de kleur #1a1014
  2. geef de achtergrond de kleur #bfcaff
en upload deze weer naar waarneming.nl

volgens O: gierzwaluw met zekerheid 89,3%
200x200. 591 bytes

U zult zien dat U een gierzwaluw met 89,3% zekerheid heeft gecreëerd! Gefeliciteerd!

NB: de precieze positie van het pixel in het 200x200 plaatje is van belang. Zet U de pixel in het eerste voorbeeld per ongeluk op positie [98,98] dan krijgt U 53.6% in plaats van 66,0%. Dat scheelt toch maar eventjes 12,4%! Alle directe buren scoren lager. Is de afmeting niet precies 200x200 dan is het resultaat duidelijk slechter [6]. En een willekeurige positie in het plaatje is helemaal kansloos. Dat kunt U vergeten. De achtergrondkleur is zeer belangrijk. De juiste achtergrondkleur kan het percentage met zo'n 20% verhogen. Verder geeft de kleur van het ene pixel een bijdrage van plm. +1%. In dit voorbeeld is de kleur van het pixel met het blote oog niet te onderscheiden van zwart. Het is belangrijk dat U Uw plaatje saved als .png file. Het file type .jpg is hiervoor niet geschikt, zelfs als U Quality=100% kiest (kan aan GIMP liggen). Volgens O is de essentie van een gierzwaluw dus:

200x200; [98,97]; #1a1014; #bfcaff
Ik raad U aan om in ieder geval mijn plaatje te uploaden omdat U het anders niet zult geloven. Immers, het is toch absurd dat 1 pixel voldoende is voor 89,3%? [2]. Vogelaars doen er jaren over om een paar honderd soorten te kennen. Zo ziet een gierzwaluw er in het echt uit:
gierzwaluw ©waarneming.nl (O = 99.2%) [ 800x535]                                

Deze foto is gekozen door waarneming.nl als dé standaard gierzwaluw.

Een voorbeeld van een veel voorkomende foto illustreert de moeilijkheidsgraad:

O: gierzwaluw 80,7% (©waarneming.nl)

ObsIdentify hacken voor gevorderden

Zeker voor een plaatje met 1 pixel is 89,3% een extreem hoge score. Maar onze hack kan nog veel beter. Met 4 pixels haalt U 96,6% en met 27 pixels haalt U zelfs 99,9% zekerheid gierzwaluw:

gierzwaluw 96,6%
4 pixels: gierzwaluw 96,6% ©GK
200x200. 559 bytes.
gierzwaluw 99,9%
27 pixels: gierzwaluw 99,9% ©GK
200x200. 639 bytes

In bovenstaande plaatjes heb ik alle niet noodzakelijke pixels weggelaten. Je houdt zo alleen de noodzakelijke pixels over (maximaal 27 voor de gierzwaluw 99,9%). Met meer pixels haal je geen beter resultaat. Dat komt omdat er neutrale pixels bestaan die niet noodzakelijk zijn voor herkenning, maar wel hetzelfde percentage geven. Zo krijg je het kleinst aantal pixels dat het hoogste resultaat geeft. Dat onthult de minimum hoeveelheid data die O  echt nodig heeft voor herkenning met 99,9% zekerheid. Toch zijn de files tussen de 600 en 700 bytes groot. Dat komt omdat png files verliesloze datacompressie hebben en een file bevat sowieso noodzakelijke overhead data (zoals een comment, etc).

waarneming.nl
perfecte gierzwaluw foto (O geeft maar 60,1%)
©waarneming.nl
de beste gierzwaluw foto geeft 80,9% waarneming.nl
haarscherp, goed belicht, alle details te zien.

 

Discussie

Waarom leveren perfecte gierzwaluw foto's geen 100%? Waarom produceert een fake plaatje een gierzwaluw met 99,9% zekerheid? Waarom produceert zo'n fake plaatje nu specifiek een gierzwaluw en geen andere soort? Ik heb werkelijk geen idee. De gierzwaluwen kwamen spontaan opduiken in experimenten met willekeurige pixels in een wit vierkant. Toen ik zag dat je het percentage kon opvoeren tot 99,9%, ben ik eens gaan kijken naar foto's van echte gierzwaluwen in waarneming.nl om te kijken of daar een verklaring ligt. Ik heb 30 goedgekeurde gierzwaluw foto's (met groen vinkje ) op waarneming.nl getest. Er werden maar liefst 11 door O als Vale gierzwaluw geïdentificeerd (een in Nederland zeldzame soort) met percentages oplopend tot 99,9% (zie: data) (heb ik aan waarneming.nl doorgegeven). De plaatjes die correct als gierzwaluw werden geïdentificeerd, waren meestal minder 100%. In één goedgekeurde gierzwaluw ziet O zelfs een Roodpootvalk! Daarnaast heb je nog de zeldzame dwaalgast Siberische gierzwaluw die door O wordt geïdentificeerd als Vale Gierzwaluw. De Alpengierzwaluw wordt met 100% zekerheid herkent. De ondersoort (subspecies) gierzwaluw apus wordt met 100% zekerheid herkent als de gewone gierzwaluw. Dit had ik niet verwacht van goedgekeurde foto's. Tijdgebrek van de redactie? Het is waar dat de gierzwaluw extreem moeilijk te fotograferen is. Hij vliegt continu met hoge snelheden en doorgaans vrij hoog. Je kunt hem bijna niet zittend fotograferen. Zou dit alles kunnen verklaren waarom O zo makkelijk te hacken is? Aan de andere kant zijn er perfecte foto's zoals bovenstaande (60,1%). Bovendien zijn er 10.905 gierzwaluw foto's aanwezig. Dat moet meer dan voldoende zijn voor een goede trainings-set. Effecten van trainingsmethode, de software zelf en moeilijkheidsgraad van de soorten zullen tegelijk een rol spelen.

Uiteindelijk kan ik niet verklaren waarom O zo sterk reageert op een 200x200 plaatje met 1 pixel. Het is wel duidelijk dat O aan sterke informatie reductie moet toepassen. Maar het is uitgesloten dat 1 gekleurde pixel op 1 positie op een gekleurd 200x200 vierkant typerend zou zijn voor een gierzwaluw. Wat is er zo uniek aan dat pixel? Een pixel op die positie kan van iedere soort zijn! En een gierzwaluw en iedere andere soort heeft nooit een vaste positie ten opzichte van de rand van de foto. Hij kan in het midden, links, rechts, onder en boven zitten. Er zijn oneindig veel mogelijke manieren waarop een dier gefotografeerd kan worden [1]. Het kan niet zo zijn dat 1 pixel doorslaggevend is. Het is een false positive in extreme mate. Maar false positives sluiten overduidelijk geen true positives uit. Kennelijk is het een balans tussen beide. Is het algoritme zo gevoelig afgesteld om zoveel mogelijk true positives te krijgen? met als onvermijdelijk gevolg bizarre false positives? Of is het gewoon een bug of een neveneffect van de techniek? Ik weet het niet.

De enige manier om verder te komen is dat ik O zelf kan trainen met fake plaatjes als controle, waar bij O moet antwoorden 'kan ik niet identificeren' of 'plaatje bevat te weinig details'. Ik ben zeer benieuwd of O daarna beter presteert op echte soorten. 



Veelbelovende methode

De gierzwaluw hack heeft me veel trial-and-error experimenten gekost om uiteindelijk tot die ene pixel te komen die hoog scoort. Maar je kunt ook geluk hebben. De Grote Zilverreiger heb ik in 5 minuten van 77% naar 98,9% opgevoerd. Gewoon wat kliederen en klooien met wit en nog wat kleurtjes. O helpt je daarbij door steeds aanwijzingen te geven: dat is hetzelfde (%); of: dat is beter (%); of: dat is slechter (%).

 

Grote zilverreiger 98,9%
Grote zilverreiger 100% (©waarneming.nl)















Op die manier heb ik ook de mij volstrekt onbekende alg Staurastrum pileolatum gevonden met 97,8% zekerheid beginnend met een kindertekening:

ObsIdentify voorspelt Staurastrum pileolatum
met zekerheid 97.8%

In beide gevallen gaat het snel in het begin en dan loop je tegen het glazen plafond aan. Je ziet het niet aankomen, maar je merkt het wel. En dan is vooruitgang extreem moeilijk.
wilde zwaan ©waarneming.nl

Wilde zwaan 99,1% ©GK
115x110 (jpg)















Dit plaatje ziet er uit als een kindertekening of -zo U wilt- een echte Picasso. Ziet U welke vogel het is? O ziet een Wilde zwaan met 99,1% zekerheid.

Parallelspletige brokkelspoorzwam 99,4%
is een paddenstoel
RGB 200x200 png
©GK
Vale gier 99,9%
RBG 200x200 png
©GK















Vale gier ©waarneming.nl


De Vale gier (hierboven) is een voorbeeld van een kindertekening (van een gezicht) die je in 5 min van plm. 30% (rode gebied) met grote stappen tot 60% (blauwe gebied) brengt, en daarna heb je nog minstens een uur nodig om hem met vele kleine stapjes tot 99,9% (groene gebied) te brengen. Het lijkt er op dat kliederen met streepjes en pixels de meest veelbelovende techniek is om redelijk snel resultaat te behalen. O is zo vriendelijk je steeds de goede richting op te sturen. Niet door te zeggen wat de volgende stap moet zijn, maar of je goed gegokt hebt en hoe ver je er naast zit.


De Nachtzwaluw is een bewijs dat je met een handmatige methode 100% zekerheid kan halen:

 

Nachtzwaluw 100%
200x200 RGB png ©GK
Nachtzwaluw 97,2%
standaard nachtzwaluw van ©waarneming.nl 800x533

 

De gehackte gierzwaluw wordt volledig gespecificeerd door 26 pixels en een file van 265 bytes [7]. Dat is vrijwel niets in vergelijking met normale foto's die 10 miljoen bytes groot kunnen zijn. Voor een echte Nachtzwaluw geeft O maar 97,2%. Bizar is weer de vereiste precisie van de locatie van de pixels.



Londense politie gebruikt voortaan gezichtsherkenning

Het is leuk, leerzaam en verslavend om O te hacken. Maar er zitten ook serieuze kanten aan. In waarneming.nl komen duizenden nieuwe foto's per dag binnen. Die moeten allemaal beoordeeld worden wil dit alles wetenschappelijk nut hebben. Automatische identificatie van foto's is daarbij een onmisbaar hulpmiddel geworden. Alle percentages boven de 90% krijgen automatisch het kenmerk 'zeker' en daaronder 'onzeker' [3]. We hebben hier boven gezien hoe makkelijk je boven de 90% komt met fake plaatjes. Daarom is aandacht voor software fouten zo belangrijk. Dat geldt helemaal voor een verwante tak van sport: gezichtsherkenning. De Londense politie ziet zich voor dezelfde taak gesteld: uit de duizenden voorbijgangers de gezochte crimineel herkennen. Wired wijst erop dat een onafhankelijke analyse van de University of Essex tot de conclusie kwam dat het systeem in 81% van de gevallen onterecht tot een match van gezichten kwam [4],[5]. Beeldherkenningssoftware moet niet alleen op juiste uitkomsten getest worden, maar ook hoe makkelijk de software te hacken is.


Data


Noten

  1. Duizenden verschillende foto's van een soort: denk aan: belichting (zon,bewolkt, richting van de zon, tegenlicht), vooraanzicht, zijaanzicht, kop naar links/rechts, vliegend, staand, zittend, afstand (dus klein/groot), gedeelte bedekt door takken, bladeren. Dit is alleen fototechnisch, daarnaast: jong/volwassene, man/vrouw, zomer/winterkleed; ondersoort, etc. NB: foto is altijd 2D! O herkent nu 14.000+ soorten.
  2. Ik heb eerder 1 pixel plaatjes [1x1] onderzocht maar die kwamen nooit tot dit soort hoge percentages zekerheid.
  3. zie: Disclaimer ObsIdentify: "De beeldherkenning zet de waarneming automatisch op onzeker als je een soortsuggestie van ObsIdentify accepteert en het resultaat onder de 90% herkenning zit."
  4. Londense politie gaat camera's met realtime gezichtsherkenning gebruiken, tweakers, 24 jan 2020
  5. The Met Police will start using live facial recognition across London,  Wired, 24 Jan 2020
  6. Voeg je aan hetzelfde plaatje witte randen van 1 pixel toe (afmeting 202x202 gecentreerd) dan zegt O: gierzwaluw 61.5% in plaats van 66,6%. De relatieve positie van het ene pixel is hetzelfde, maar de absolute grootte van het plaatje is groter geworden. Bij 210x210 daalt het perc. zelfs tot 58,3%. Waarom heeft dat invloed? De positie van het beest op de foto mag toch niet uitmaken? [ 9 feb 2020 ]
  7. De kleinste png file krijg je door alle opties die mogelijk opslagruimte kosten uit te vinken: Interlacing; background color; gamma, layer offset; resolution; creation time; comment. Als je die file saved als een jpg file met 100% quality levert dat een file op van 2,5 kB en O geeft: Nachtzwaluw 55,5%! Hetzelfde plaatje! [ 10 feb 2020 ]

Alle blogs over ObsIdentify

  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